aboutsummaryrefslogtreecommitdiff
path: root/src/Java/binnie/core/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/binnie/core/network')
-rw-r--r--src/Java/binnie/core/network/BinnieCorePacketID.java77
-rw-r--r--src/Java/binnie/core/network/BinniePacketHandler.java43
-rw-r--r--src/Java/binnie/core/network/INetworkedEntity.java10
-rw-r--r--src/Java/binnie/core/network/IOrdinaled.java6
-rw-r--r--src/Java/binnie/core/network/IPacketID.java10
-rw-r--r--src/Java/binnie/core/network/IPacketProvider.java8
-rw-r--r--src/Java/binnie/core/network/packet/IPacket.java8
-rw-r--r--src/Java/binnie/core/network/packet/IPacketLocation.java15
-rw-r--r--src/Java/binnie/core/network/packet/IndexInPayload.java15
-rw-r--r--src/Java/binnie/core/network/packet/MachinePayload.java77
-rw-r--r--src/Java/binnie/core/network/packet/MessageBase.java69
-rw-r--r--src/Java/binnie/core/network/packet/MessageBinnie.java40
-rw-r--r--src/Java/binnie/core/network/packet/MessageContainerUpdate.java17
-rw-r--r--src/Java/binnie/core/network/packet/MessageCoordinates.java59
-rw-r--r--src/Java/binnie/core/network/packet/MessageCraftGUI.java18
-rw-r--r--src/Java/binnie/core/network/packet/MessageMetadata.java36
-rw-r--r--src/Java/binnie/core/network/packet/MessageNBT.java49
-rw-r--r--src/Java/binnie/core/network/packet/MessageTileNBT.java82
-rw-r--r--src/Java/binnie/core/network/packet/MessageUpdate.java92
-rw-r--r--src/Java/binnie/core/network/packet/PacketPayload.java70
20 files changed, 801 insertions, 0 deletions
diff --git a/src/Java/binnie/core/network/BinnieCorePacketID.java b/src/Java/binnie/core/network/BinnieCorePacketID.java
new file mode 100644
index 0000000000..669065ca45
--- /dev/null
+++ b/src/Java/binnie/core/network/BinnieCorePacketID.java
@@ -0,0 +1,77 @@
+package binnie.core.network;
+
+import binnie.core.BinnieCore;
+import binnie.core.block.TileEntityMetadata;
+import binnie.core.machines.IMachine;
+import binnie.core.machines.Machine;
+import binnie.core.machines.network.INetwork.TilePacketSync;
+import binnie.core.network.packet.MessageBinnie;
+import binnie.core.network.packet.MessageCraftGUI;
+import binnie.core.network.packet.MessageMetadata;
+import binnie.core.network.packet.MessageTileNBT;
+import binnie.core.network.packet.MessageUpdate;
+import binnie.core.proxy.BinnieProxy;
+import binnie.craftgui.minecraft.ContainerCraftGUI;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import cpw.mods.fml.relauncher.Side;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.tileentity.TileEntity;
+
+public enum BinnieCorePacketID
+ implements IPacketID
+{
+ NetworkEntityUpdate, TileMetadata, CraftGUIAction, TileDescriptionSync;
+
+ private BinnieCorePacketID() {}
+
+ public void onMessage(MessageBinnie message, MessageContext context)
+ {
+ if (this == NetworkEntityUpdate)
+ {
+ MessageUpdate packet = new MessageUpdate(message);
+ TileEntity tile = packet.getTileEntity(BinnieCore.proxy.getWorld());
+ if ((tile instanceof INetworkedEntity)) {
+ ((INetworkedEntity)tile).readFromPacket(packet.payload);
+ }
+ }
+ else if (this == TileMetadata)
+ {
+ MessageMetadata packet = new MessageMetadata(message);
+ TileEntity tile = packet.getTileEntity(BinnieCore.proxy.getWorld());
+ if ((tile instanceof TileEntityMetadata)) {
+ ((TileEntityMetadata)tile).setTileMetadata(packet.meta, true);
+ }
+ }
+ else if ((this == CraftGUIAction) && (context.side == Side.CLIENT))
+ {
+ MessageCraftGUI packet = new MessageCraftGUI(message);
+
+ EntityPlayer player = BinnieCore.proxy.getPlayer();
+ if (((player.openContainer instanceof ContainerCraftGUI)) && (packet.getTagCompound() != null)) {
+ ((ContainerCraftGUI)player.openContainer).recieveNBT(Side.CLIENT, player, packet.getTagCompound());
+ }
+ }
+ else if ((this == CraftGUIAction) && (context.side == Side.SERVER) && ((context.netHandler instanceof NetHandlerPlayServer)))
+ {
+ MessageCraftGUI packet = new MessageCraftGUI(message);
+
+ EntityPlayer player = ((NetHandlerPlayServer)context.netHandler).playerEntity;
+ if (((player.openContainer instanceof ContainerCraftGUI)) && (packet.getTagCompound() != null)) {
+ ((ContainerCraftGUI)player.openContainer).recieveNBT(Side.SERVER, player, packet.getTagCompound());
+ }
+ }
+ else if ((this == TileDescriptionSync) && (context.side == Side.CLIENT))
+ {
+ MessageTileNBT packet = new MessageTileNBT(message);
+ TileEntity tile = packet.getTarget(BinnieCore.proxy.getWorld());
+ if ((tile != null) && (packet.getTagCompound() != null))
+ {
+ IMachine machine = Machine.getMachine(tile);
+ if ((machine != null) && ((machine instanceof INetwork.TilePacketSync))) {
+ ((INetwork.TilePacketSync)machine).syncFromNBT(packet.getTagCompound());
+ }
+ }
+ }
+ }
+}
diff --git a/src/Java/binnie/core/network/BinniePacketHandler.java b/src/Java/binnie/core/network/BinniePacketHandler.java
new file mode 100644
index 0000000000..c7ad54c120
--- /dev/null
+++ b/src/Java/binnie/core/network/BinniePacketHandler.java
@@ -0,0 +1,43 @@
+package binnie.core.network;
+
+import binnie.core.AbstractMod;
+import binnie.core.network.packet.MessageBinnie;
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+
+public abstract class BinniePacketHandler
+ implements IMessageHandler<MessageBinnie, IMessage>
+{
+ private IPacketProvider provider;
+
+ public BinniePacketHandler(AbstractMod mod)
+ {
+ setProvider(mod);
+ }
+
+ public void setProvider(IPacketProvider provider)
+ {
+ this.provider = provider;
+ }
+
+ public IMessage onMessage(MessageBinnie message, MessageContext ctx)
+ {
+ try
+ {
+ int packetId = message.id;
+ for (IPacketID id : this.provider.getPacketIDs()) {
+ if (id.ordinal() == packetId)
+ {
+ id.onMessage(message, ctx);
+ return null;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new RuntimeException(ex);
+ }
+ return null;
+ }
+}
diff --git a/src/Java/binnie/core/network/INetworkedEntity.java b/src/Java/binnie/core/network/INetworkedEntity.java
new file mode 100644
index 0000000000..e126a4559b
--- /dev/null
+++ b/src/Java/binnie/core/network/INetworkedEntity.java
@@ -0,0 +1,10 @@
+package binnie.core.network;
+
+import binnie.core.network.packet.PacketPayload;
+
+public abstract interface INetworkedEntity
+{
+ public abstract void writeToPacket(PacketPayload paramPacketPayload);
+
+ public abstract void readFromPacket(PacketPayload paramPacketPayload);
+}
diff --git a/src/Java/binnie/core/network/IOrdinaled.java b/src/Java/binnie/core/network/IOrdinaled.java
new file mode 100644
index 0000000000..2022f04820
--- /dev/null
+++ b/src/Java/binnie/core/network/IOrdinaled.java
@@ -0,0 +1,6 @@
+package binnie.core.network;
+
+public abstract interface IOrdinaled
+{
+ public abstract int ordinal();
+}
diff --git a/src/Java/binnie/core/network/IPacketID.java b/src/Java/binnie/core/network/IPacketID.java
new file mode 100644
index 0000000000..193fbba617
--- /dev/null
+++ b/src/Java/binnie/core/network/IPacketID.java
@@ -0,0 +1,10 @@
+package binnie.core.network;
+
+import binnie.core.network.packet.MessageBinnie;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+
+public abstract interface IPacketID
+ extends IOrdinaled
+{
+ public abstract void onMessage(MessageBinnie paramMessageBinnie, MessageContext paramMessageContext);
+}
diff --git a/src/Java/binnie/core/network/IPacketProvider.java b/src/Java/binnie/core/network/IPacketProvider.java
new file mode 100644
index 0000000000..98f48f69b3
--- /dev/null
+++ b/src/Java/binnie/core/network/IPacketProvider.java
@@ -0,0 +1,8 @@
+package binnie.core.network;
+
+public abstract interface IPacketProvider
+{
+ public abstract String getChannel();
+
+ public abstract IPacketID[] getPacketIDs();
+}
diff --git a/src/Java/binnie/core/network/packet/IPacket.java b/src/Java/binnie/core/network/packet/IPacket.java
new file mode 100644
index 0000000000..b86516ea41
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/IPacket.java
@@ -0,0 +1,8 @@
+package binnie.core.network.packet;
+
+import net.minecraft.network.Packet;
+
+public abstract interface IPacket
+{
+ public abstract Packet getPacket();
+}
diff --git a/src/Java/binnie/core/network/packet/IPacketLocation.java b/src/Java/binnie/core/network/packet/IPacketLocation.java
new file mode 100644
index 0000000000..d9d46cce70
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/IPacketLocation.java
@@ -0,0 +1,15 @@
+package binnie.core.network.packet;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+abstract interface IPacketLocation
+{
+ public abstract TileEntity getTarget(World paramWorld);
+
+ public abstract int getX();
+
+ public abstract int getY();
+
+ public abstract int getZ();
+}
diff --git a/src/Java/binnie/core/network/packet/IndexInPayload.java b/src/Java/binnie/core/network/packet/IndexInPayload.java
new file mode 100644
index 0000000000..ff59a0783f
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/IndexInPayload.java
@@ -0,0 +1,15 @@
+package binnie.core.network.packet;
+
+public class IndexInPayload
+{
+ public IndexInPayload(int intIndex, int floatIndex, int stringIndex)
+ {
+ this.intIndex = intIndex;
+ this.floatIndex = floatIndex;
+ this.stringIndex = stringIndex;
+ }
+
+ public int intIndex = 0;
+ public int floatIndex = 0;
+ public int stringIndex = 0;
+}
diff --git a/src/Java/binnie/core/network/packet/MachinePayload.java b/src/Java/binnie/core/network/packet/MachinePayload.java
new file mode 100644
index 0000000000..11eb8b62b9
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MachinePayload.java
@@ -0,0 +1,77 @@
+package binnie.core.network.packet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MachinePayload
+{
+ private List<Integer> intPayload = new ArrayList();
+ private List<Float> floatPayload = new ArrayList();
+ private List<String> stringPayload = new ArrayList();
+ private int id = 0;
+
+ public MachinePayload(int id)
+ {
+ this.id = id;
+ this.intPayload.clear();
+ this.floatPayload.clear();
+ this.stringPayload.clear();
+ }
+
+ public MachinePayload() {}
+
+ public void addInteger(int a)
+ {
+ this.intPayload.add(Integer.valueOf(a));
+ }
+
+ public void addFloat(float a)
+ {
+ this.floatPayload.add(Float.valueOf(a));
+ }
+
+ public void addString(String a)
+ {
+ this.stringPayload.add(a);
+ }
+
+ public int getInteger()
+ {
+ return ((Integer)this.intPayload.remove(0)).intValue();
+ }
+
+ public float getFloat()
+ {
+ return ((Float)this.floatPayload.remove(0)).floatValue();
+ }
+
+ public String getString()
+ {
+ return (String)this.stringPayload.remove(0);
+ }
+
+ public void append(MachinePayload other)
+ {
+ if (other == null) {
+ return;
+ }
+ this.intPayload.addAll(other.intPayload);
+ this.floatPayload.addAll(other.floatPayload);
+ this.stringPayload.addAll(other.stringPayload);
+ }
+
+ public boolean isEmpty()
+ {
+ return (this.intPayload.isEmpty()) && (this.floatPayload.isEmpty()) && (this.stringPayload.isEmpty());
+ }
+
+ public int getID()
+ {
+ return this.id;
+ }
+
+ public void setID(int readInt)
+ {
+ this.id = readInt;
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageBase.java b/src/Java/binnie/core/network/packet/MessageBase.java
new file mode 100644
index 0000000000..e18da968ef
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageBase.java
@@ -0,0 +1,69 @@
+package binnie.core.network.packet;
+
+import io.netty.buffer.ByteBuf;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import net.minecraft.nbt.CompressedStreamTools;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class MessageBase
+{
+ private int id;
+
+ public MessageBase(int id)
+ {
+ this.id = id;
+ }
+
+ public MessageBase(MessageBinnie message)
+ {
+ try
+ {
+ readData(message.data);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public MessageBinnie GetMessage()
+ {
+ return new MessageBinnie(this.id, this);
+ }
+
+ protected NBTTagCompound readNBTTagCompound(ByteBuf data)
+ throws IOException
+ {
+ short length = data.readShort();
+ if (length < 0) {
+ return null;
+ }
+ byte[] compressed = new byte[length];
+ data.readBytes(compressed);
+ return CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressed));
+ }
+
+ protected void writeNBTTagCompound(NBTTagCompound nbttagcompound, ByteBuf data)
+ throws IOException
+ {
+ if (nbttagcompound == null)
+ {
+ data.writeShort(-1);
+ }
+ else
+ {
+ byte[] compressed = CompressedStreamTools.compress(nbttagcompound);
+ data.writeShort((short)compressed.length);
+ data.writeBytes(compressed);
+ }
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {}
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {}
+}
diff --git a/src/Java/binnie/core/network/packet/MessageBinnie.java b/src/Java/binnie/core/network/packet/MessageBinnie.java
new file mode 100644
index 0000000000..0559a07e30
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageBinnie.java
@@ -0,0 +1,40 @@
+package binnie.core.network.packet;
+
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+
+public final class MessageBinnie
+ implements IMessage
+{
+ public int id;
+ private MessageBase message;
+ ByteBuf data;
+
+ public MessageBinnie() {}
+
+ public MessageBinnie(int id, MessageBase base)
+ {
+ this.id = id;
+ this.message = base;
+ }
+
+ public void toBytes(ByteBuf buf)
+ {
+ buf.writeByte(this.id);
+ try
+ {
+ this.message.writeData(buf);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public void fromBytes(ByteBuf buf)
+ {
+ this.id = buf.readByte();
+ this.data = buf;
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageContainerUpdate.java b/src/Java/binnie/core/network/packet/MessageContainerUpdate.java
new file mode 100644
index 0000000000..98e64b0d1f
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageContainerUpdate.java
@@ -0,0 +1,17 @@
+package binnie.core.network.packet;
+
+import net.minecraft.nbt.NBTTagCompound;
+
+public class MessageContainerUpdate
+ extends MessageCraftGUI
+{
+ public MessageContainerUpdate(NBTTagCompound nbt)
+ {
+ super(nbt);
+ }
+
+ public MessageContainerUpdate(MessageBinnie message)
+ {
+ super(message);
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageCoordinates.java b/src/Java/binnie/core/network/packet/MessageCoordinates.java
new file mode 100644
index 0000000000..928ed59d05
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageCoordinates.java
@@ -0,0 +1,59 @@
+package binnie.core.network.packet;
+
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.World;
+
+public class MessageCoordinates
+ extends MessageBase
+{
+ public int posX;
+ public int posY;
+ public int posZ;
+
+ public MessageCoordinates(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public MessageCoordinates(int id, ChunkCoordinates coordinates)
+ {
+ this(id, coordinates.posX, coordinates.posY, coordinates.posZ);
+ }
+
+ public MessageCoordinates(int id, int posX, int posY, int posZ)
+ {
+ super(id);
+ this.posX = posX;
+ this.posY = posY;
+ this.posZ = posZ;
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {
+ data.writeInt(this.posX);
+ data.writeInt(this.posY);
+ data.writeInt(this.posZ);
+ }
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {
+ this.posX = data.readInt();
+ this.posY = data.readInt();
+ this.posZ = data.readInt();
+ }
+
+ public ChunkCoordinates getCoordinates()
+ {
+ return new ChunkCoordinates(this.posX, this.posY, this.posZ);
+ }
+
+ public TileEntity getTileEntity(World world)
+ {
+ return world.getTileEntity(this.posX, this.posY, this.posZ);
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageCraftGUI.java b/src/Java/binnie/core/network/packet/MessageCraftGUI.java
new file mode 100644
index 0000000000..805c4a651b
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageCraftGUI.java
@@ -0,0 +1,18 @@
+package binnie.core.network.packet;
+
+import binnie.core.network.BinnieCorePacketID;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class MessageCraftGUI
+ extends MessageNBT
+{
+ public MessageCraftGUI(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public MessageCraftGUI(NBTTagCompound action)
+ {
+ super(BinnieCorePacketID.CraftGUIAction.ordinal(), action);
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageMetadata.java b/src/Java/binnie/core/network/packet/MessageMetadata.java
new file mode 100644
index 0000000000..c8ce46dedb
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageMetadata.java
@@ -0,0 +1,36 @@
+package binnie.core.network.packet;
+
+import binnie.core.network.BinnieCorePacketID;
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+
+public class MessageMetadata
+ extends MessageCoordinates
+{
+ public int meta;
+
+ public MessageMetadata(int posX, int posY, int posZ, int meta)
+ {
+ super(BinnieCorePacketID.TileMetadata.ordinal(), posX, posY, posZ);
+ this.meta = meta;
+ }
+
+ public MessageMetadata(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {
+ super.writeData(data);
+ data.writeInt(this.meta);
+ }
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {
+ super.readData(data);
+ this.meta = data.readInt();
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageNBT.java b/src/Java/binnie/core/network/packet/MessageNBT.java
new file mode 100644
index 0000000000..c1c5345987
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageNBT.java
@@ -0,0 +1,49 @@
+package binnie.core.network.packet;
+
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class MessageNBT
+ extends MessageBase
+{
+ NBTTagCompound nbt;
+
+ public NBTTagCompound getTagCompound()
+ {
+ return this.nbt;
+ }
+
+ void setTagCompound(NBTTagCompound nbt)
+ {
+ this.nbt = nbt;
+ }
+
+ public MessageNBT(int id)
+ {
+ super(id);
+ }
+
+ public MessageNBT(int id, NBTTagCompound nbt)
+ {
+ this(id);
+ setTagCompound(nbt);
+ }
+
+ public MessageNBT(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {
+ writeNBTTagCompound(this.nbt, data);
+ }
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {
+ this.nbt = readNBTTagCompound(data);
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageTileNBT.java b/src/Java/binnie/core/network/packet/MessageTileNBT.java
new file mode 100644
index 0000000000..7ba41b8d09
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageTileNBT.java
@@ -0,0 +1,82 @@
+package binnie.core.network.packet;
+
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class MessageTileNBT
+ extends MessageNBT
+ implements IPacketLocation
+{
+ private int posX;
+ private int posY;
+ private int posZ;
+
+ public MessageTileNBT(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public MessageTileNBT(int id, TileEntity tile, NBTTagCompound nbt)
+ {
+ super(id);
+
+ this.posX = tile.xCoord;
+ this.posY = tile.yCoord;
+ this.posZ = tile.zCoord;
+
+ this.nbt = nbt;
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {
+ data.writeInt(this.posX);
+ data.writeInt(this.posY);
+ data.writeInt(this.posZ);
+
+ super.writeData(data);
+ }
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {
+ this.posX = data.readInt();
+ this.posY = data.readInt();
+ this.posZ = data.readInt();
+
+ super.readData(data);
+ }
+
+ public TileEntity getTarget(World world)
+ {
+ return world.getTileEntity(this.posX, this.posY, this.posZ);
+ }
+
+ public int getX()
+ {
+ return this.posX;
+ }
+
+ public int getY()
+ {
+ return this.posY;
+ }
+
+ public int getZ()
+ {
+ return this.posZ;
+ }
+
+ public NBTTagCompound getTagCompound()
+ {
+ return this.nbt;
+ }
+
+ void setTagCompound(NBTTagCompound nbt)
+ {
+ this.nbt = nbt;
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/MessageUpdate.java b/src/Java/binnie/core/network/packet/MessageUpdate.java
new file mode 100644
index 0000000000..053246b318
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/MessageUpdate.java
@@ -0,0 +1,92 @@
+package binnie.core.network.packet;
+
+import binnie.core.network.INetworkedEntity;
+import io.netty.buffer.ByteBuf;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class MessageUpdate
+ extends MessageCoordinates
+{
+ public PacketPayload payload;
+
+ public MessageUpdate(MessageBinnie message)
+ {
+ super(message);
+ }
+
+ public MessageUpdate(int id, INetworkedEntity tile)
+ {
+ super(id, ((TileEntity)tile).xCoord, ((TileEntity)tile).yCoord, ((TileEntity)tile).zCoord);
+ this.payload = new PacketPayload();
+ tile.writeToPacket(this.payload);
+ }
+
+ public void writeData(ByteBuf data)
+ throws IOException
+ {
+ super.writeData(data);
+ if (this.payload == null)
+ {
+ data.writeInt(0);
+ data.writeInt(0);
+ data.writeInt(0);
+ return;
+ }
+ data.writeInt(this.payload.intPayload.size());
+ data.writeInt(this.payload.floatPayload.size());
+ data.writeInt(this.payload.stringPayload.size());
+ for (Iterator i$ = this.payload.intPayload.iterator(); i$.hasNext();)
+ {
+ int intData = ((Integer)i$.next()).intValue();
+ data.writeInt(intData);
+ }
+ for (Iterator i$ = this.payload.floatPayload.iterator(); i$.hasNext();)
+ {
+ float floatData = ((Float)i$.next()).floatValue();
+ data.writeFloat(floatData);
+ }
+ for (String stringData : this.payload.stringPayload)
+ {
+ byte[] bytes = stringData.getBytes("UTF-8");
+ data.writeShort(bytes.length);
+ data.writeBytes(bytes);
+ }
+ }
+
+ public void readData(ByteBuf data)
+ throws IOException
+ {
+ super.readData(data);
+
+ this.payload = new PacketPayload();
+
+ int intLength = data.readInt();
+ int floatLength = data.readInt();
+ int stringLength = data.readInt();
+
+ this.payload.intPayload.clear();
+ this.payload.floatPayload.clear();
+ this.payload.stringPayload.clear();
+ for (int i = 0; i < intLength; i++) {
+ this.payload.addInteger(data.readInt());
+ }
+ for (int i = 0; i < floatLength; i++) {
+ this.payload.addFloat(data.readFloat());
+ }
+ for (int i = 0; i < stringLength; i++)
+ {
+ int length = data.readShort();
+ byte[] string = data.readBytes(length).array();
+ this.payload.addString(new String(string, "UTF-8"));
+ }
+ }
+
+ public TileEntity getTarget(World world)
+ {
+ return world.getTileEntity(this.posX, this.posY, this.posZ);
+ }
+}
diff --git a/src/Java/binnie/core/network/packet/PacketPayload.java b/src/Java/binnie/core/network/packet/PacketPayload.java
new file mode 100644
index 0000000000..57d1a13759
--- /dev/null
+++ b/src/Java/binnie/core/network/packet/PacketPayload.java
@@ -0,0 +1,70 @@
+package binnie.core.network.packet;
+
+import binnie.core.network.INetworkedEntity;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PacketPayload
+{
+ public List<Integer> intPayload = new ArrayList();
+ public List<Float> floatPayload = new ArrayList();
+ public List<String> stringPayload = new ArrayList();
+
+ public PacketPayload()
+ {
+ this.intPayload.clear();
+ this.floatPayload.clear();
+ this.stringPayload.clear();
+ }
+
+ public PacketPayload(INetworkedEntity tile)
+ {
+ this();
+ tile.writeToPacket(this);
+ }
+
+ public void addInteger(int a)
+ {
+ this.intPayload.add(Integer.valueOf(a));
+ }
+
+ public void addFloat(float a)
+ {
+ this.floatPayload.add(Float.valueOf(a));
+ }
+
+ public void addString(String a)
+ {
+ this.stringPayload.add(a);
+ }
+
+ public int getInteger()
+ {
+ return ((Integer)this.intPayload.remove(0)).intValue();
+ }
+
+ public float getFloat()
+ {
+ return ((Float)this.floatPayload.remove(0)).floatValue();
+ }
+
+ public String getString()
+ {
+ return (String)this.stringPayload.remove(0);
+ }
+
+ public void append(PacketPayload other)
+ {
+ if (other == null) {
+ return;
+ }
+ this.intPayload.addAll(other.intPayload);
+ this.floatPayload.addAll(other.floatPayload);
+ this.stringPayload.addAll(other.stringPayload);
+ }
+
+ public boolean isEmpty()
+ {
+ return (this.intPayload.isEmpty()) && (this.floatPayload.isEmpty()) && (this.stringPayload.isEmpty());
+ }
+}