// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode
package net.minecraft.src;
import java.io.*;
import java.util.*;
// Referenced classes of package net.minecraft.src:
// WatchableObject, Packet, ItemStack, Item,
// ChunkCoordinates
public class DataWatcher
{
public DataWatcher()
{
}
public void addObject(int i, Object obj)
{
Integer integer = (Integer)dataTypes.get(obj.getClass());
if(integer == null)
{
throw new IllegalArgumentException((new StringBuilder()).append("Unknown data type: ").append(obj.getClass()).toString());
}
if(i > 31)
{
throw new IllegalArgumentException((new StringBuilder()).append("Data value id is too big with ").append(i).append("! (Max is ").append(31).append(")").toString());
}
if(watchedObjects.containsKey(Integer.valueOf(i)))
{
throw new IllegalArgumentException((new StringBuilder()).append("Duplicate id value for ").append(i).append("!").toString());
} else
{
WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, obj);
watchedObjects.put(Integer.valueOf(i), watchableobject);
return;
}
}
public byte getWatchableObjectByte(int i)
{
return ((Byte)((WatchableObject)watchedObjects.get(Integer.valueOf(i))).getObject()).byteValue();
}
public int getWatchableObjectInt(int i)
{
return ((Integer)((WatchableObject)watchedObjects.get(Integer.valueOf(i))).getObject()).intValue();
}
public String getWatchableObjectString(int i)
{
return (String)((WatchableObject)watchedObjects.get(Integer.valueOf(i))).getObject();
}
public void updateObject(int i, Object obj)
{
WatchableObject watchableobject = (WatchableObject)watchedObjects.get(Integer.valueOf(i));
if(!obj.equals(watchableobject.getObject()))
{
watchableobject.setObject(obj);
watchableobject.setWatching(true);
objectChanged = true;
}
}
public static void writeObjectsInListToStream(List list, DataOutputStream dataoutputstream)
throws IOException
{
if(list != null)
{
WatchableObject watchableobject;
for(Iterator iterator = list.iterator(); iterator.hasNext(); writeWatchableObject(dataoutputstream, watchableobject))
{
watchableobject = (WatchableObject)iterator.next();
}
}
dataoutputstream.writeByte(127);
}
public void writeWatchableObjects(DataOutputStream dataoutputstream)
throws IOException
{
WatchableObject watchableobject;
for(Iterator iterator = watchedObjects.values().iterator(); iterator.hasNext(); writeWatchableObject(dataoutputstream, watchableobject))
{
watchableobject = (WatchableObject)iterator.next();
}
dataoutputstream.writeByte(127);
}
private static void writeWatchableObject(DataOutputStream dataoutputstream, WatchableObject watchableobject)
throws IOException
{
int i = (watchableobject.getObjectType() << 5 | watchableobject.getDataValueId() & 0x1f) & 0xff;
dataoutputstream.writeByte(i);
switch(watchableobject.getObjectType())
{
case 0: // '\0'
dataoutputstream.writeByte(((Byte)watchableobject.getObject()).byteValue());
break;
case 1: // '\001'
dataoutputstream.writeShort(((Short)watchableobject.getObject()).shortValue());
break;
case 2: // '\002'
dataoutputstream.writeInt(((Integer)watchableobject.getObject()).intValue());
break;
case 3: // '\003'
dataoutputstream.writeFloat(((Float)watchableobject.getObject()).floatValue());
break;
case 4: // '\004'
Packet.writeString((String)watchableobject.getObject(), dataoutputstream);
break;
case 5: // '\005'
ItemStack itemstack = (ItemStack)watchableobject.getObject();
dataoutputstream.writeShort(itemstack.getItem().shiftedIndex);
dataoutputstream.writeByte(itemstack.stackSize);
dataoutputstream.writeShort(itemstack.getItemDamage());
break;
case 6: // '\006'
ChunkCoordinates chunkcoordinates = (ChunkCoordinates)watchableobject.getObject();
dataoutputstream.writeInt(chunkcoordinates.x);
dataoutputstream.writeInt(chunkcoordinates.y);
dataoutputstream.writeInt(chunkcoordinates.z);
break;
}
}
public static List readWatchableObjects(DataInputStream datainputstream)
throws IOException
{
ArrayList arraylist = null;
for(byte byte0 = datainputstream.readByte(); byte0 != 127; byte0 = datainputstream.readByte())
{
if(arraylist == null)
{
arraylist = new ArrayList();
}
int i = (byte0 & 0xe0) >> 5;
int j = byte0 & 0x1f;
WatchableObject watchableobject = null;
switch(i)
{
case 0: // '\0'
watchableobject = new WatchableObject(i, j, Byte.valueOf(datainputstream.readByte()));
break;
case 1: // '\001'
watchableobject = new WatchableObject(i, j, Short.valueOf(datainputstream.readShort()));
break;
case 2: // '\002'
watchableobject = new WatchableObject(i, j, Integer.valueOf(datainputstream.readInt()));
break;
case 3: // '\003'
watchableobject = new WatchableObject(i, j, Float.valueOf(datainputstream.readFloat()));
break;
case 4: // '\004'
watchableobject = new WatchableObject(i, j, Packet.readString(datainputstream, 64));
break;
case 5: // '\005'
short word0 = datainputstream.readShort();
byte byte1 = datainputstream.readByte();
short word1 = datainputstream.readShort();
watchableobject = new WatchableObject(i, j, new ItemStack(word0, byte1, word1));
break;
case 6: // '\006'
int k = datainputstream.readInt();
int l = datainputstream.readInt();
int i1 = datainputstream.readInt();
watchableobject = new WatchableObject(i, j, new ChunkCoordinates(k, l, i1));
break;
}
arraylist.add(watchableobject);
}
return arraylist;
}
public void updateWatchedObjectsFromList(List list)
{
Iterator iterator = list.iterator();
do
{
if(!iterator.hasNext())
{
break;
}
WatchableObject watchableobject = (WatchableObject)iterator.next();
WatchableObject watchableobject1 = (WatchableObject)watchedObjects.get(Integer.valueOf(watchableobject.getDataValueId()));
if(watchableobject1 != null)
{
watchableobject1.setObject(watchableobject.getObject());
}
} while(true);
}
static Class _mthclass$(String s)
{
try
{
return Class.forName(s);
}
catch(ClassNotFoundException classnotfoundexception)
{
throw new NoClassDefFoundError(classnotfoundexception.getMessage());
}
}
private static final HashMap dataTypes;
private final Map watchedObjects = new HashMap();
private boolean objectChanged;
static
{
dataTypes = new HashMap();
dataTypes.put(java.lang.Byte.class, Integer.valueOf(0));
dataTypes.put(java.lang.Short.class, Integer.valueOf(1));
dataTypes.put(java.lang.Integer.class, Integer.valueOf(2));
dataTypes.put(java.lang.Float.class, Integer.valueOf(3));
dataTypes.put(java.lang.String.class, Integer.valueOf(4));
dataTypes.put(net.minecraft.src.ItemStack.class, Integer.valueOf(5));
dataTypes.put(net.minecraft.src.ChunkCoordinates.class, Integer.valueOf(6));
}
}