aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/net/GTPacketUpdateItem.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/net/GTPacketUpdateItem.java')
-rw-r--r--src/main/java/gregtech/api/net/GTPacketUpdateItem.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/net/GTPacketUpdateItem.java b/src/main/java/gregtech/api/net/GTPacketUpdateItem.java
new file mode 100644
index 0000000000..54846cdcc9
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GTPacketUpdateItem.java
@@ -0,0 +1,64 @@
+package gregtech.api.net;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.network.INetHandler;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.world.IBlockAccess;
+
+import com.google.common.io.ByteArrayDataInput;
+
+import cpw.mods.fml.common.network.ByteBufUtils;
+import gregtech.api.interfaces.INetworkUpdatableItem;
+import gregtech.api.util.ISerializableObject;
+import io.netty.buffer.ByteBuf;
+
+/**
+ * Client -> Server: send arbitrary data to server and update the currently held item.
+ */
+public class GTPacketUpdateItem extends GTPacketNew {
+
+ private NBTTagCompound tag;
+ private EntityPlayerMP mPlayer;
+
+ public GTPacketUpdateItem() {
+ super(true);
+ }
+
+ public GTPacketUpdateItem(NBTTagCompound tag) {
+ super(false);
+ this.tag = tag;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return GTPacketTypes.UPDATE_ITEM.id;
+ }
+
+ @Override
+ public void setINetHandler(INetHandler aHandler) {
+ if (aHandler instanceof NetHandlerPlayServer) {
+ mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity;
+ }
+ }
+
+ @Override
+ public void encode(ByteBuf aOut) {
+ ByteBufUtils.writeTag(aOut, tag);
+ }
+
+ @Override
+ public GTPacketNew decode(ByteArrayDataInput aData) {
+ return new GTPacketUpdateItem(ISerializableObject.readCompoundTagFromGreggyByteBuf(aData));
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (mPlayer == null) return;
+ ItemStack stack = mPlayer.inventory.getCurrentItem();
+ if (stack != null && stack.getItem() instanceof INetworkUpdatableItem) {
+ ((INetworkUpdatableItem) stack.getItem()).receive(stack, mPlayer, tag);
+ }
+ }
+}