public static List readWatchableObjects(DataInputStream par0DataInputStream) throws IOException
    {
        ArrayList arraylist = null;

        for (byte byte0 = par0DataInputStream.readByte(); byte0 != 127; byte0 = par0DataInputStream.readByte())
        {
            if (arraylist == null)
            {
                arraylist = new ArrayList();
            }

            int i = (byte0 & 0xe0) >> 5;
            int j = byte0 & 0x1f;
            WatchableObject watchableobject = null;

            switch (i)
            {
                case 0:
                    watchableobject = new WatchableObject(i, j, Byte.valueOf(par0DataInputStream.readByte()));
                    break;

                case 1:
                    watchableobject = new WatchableObject(i, j, Short.valueOf(par0DataInputStream.readShort()));
                    break;

                case 2:
                    watchableobject = new WatchableObject(i, j, Integer.valueOf(par0DataInputStream.readInt()));
                    break;

                case 3:
                    watchableobject = new WatchableObject(i, j, Float.valueOf(par0DataInputStream.readFloat()));
                    break;

                case 4:
                    watchableobject = new WatchableObject(i, j, Packet.readString(par0DataInputStream, 64));
                    break;

                case 5:
                    short word0 = par0DataInputStream.readShort();
                    byte byte1 = par0DataInputStream.readByte();
                    short word1 = par0DataInputStream.readShort();
                    watchableobject = new WatchableObject(i, j, new ItemStack(word0, byte1, word1));
                    break;

                case 6:
                    int k = par0DataInputStream.readInt();
                    int l = par0DataInputStream.readInt();
                    int i1 = par0DataInputStream.readInt();
                    watchableobject = new WatchableObject(i, j, new ChunkCoordinates(k, l, i1));
                    break;
            }

            arraylist.add(watchableobject);
        }

        return arraylist;
    }