From 36f45528f2025e9e7f52fc806626034c45e3712d Mon Sep 17 00:00:00 2001 From: Dimach Date: Sun, 9 Dec 2018 18:39:06 +0300 Subject: cherry pick 0beea9037cd8ff7a899c14c53d6b9a381c22f42c Add volumetric flask. (#1500) --- .../common/net/MessageSetFlaskCapacity.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java (limited to 'src/main/java/gregtech/common/net') diff --git a/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java new file mode 100644 index 0000000000..c20b4002c3 --- /dev/null +++ b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java @@ -0,0 +1,42 @@ +package gregtech.common.net; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import gregtech.common.items.GT_VolumetricFlask; +import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public final class MessageSetFlaskCapacity implements IMessage { + private int capacity; + + public MessageSetFlaskCapacity() { + } + + public MessageSetFlaskCapacity(int capacity) { + this.capacity = capacity; + } + + + public void fromBytes(ByteBuf buf) { + this.capacity = buf.readInt(); + } + + public void toBytes(ByteBuf buf) { + buf.writeInt(this.capacity); + } + + public static final class Handler + implements IMessageHandler { + public IMessage onMessage(MessageSetFlaskCapacity message, MessageContext ctx) { + ItemStack stack = ctx.getServerHandler().playerEntity.getHeldItem(); + if ((stack != null) && (stack.stackSize > 0)) { + Item item = stack.getItem(); + if ((item instanceof GT_VolumetricFlask)) + ((GT_VolumetricFlask) item).setCapacity(stack, message.capacity); + } + return null; + } + } +} \ No newline at end of file -- cgit From bc9a97f83766bd364f0a72a36bea3f0ce8c114d9 Mon Sep 17 00:00:00 2001 From: Dimach Date: Thu, 13 Dec 2018 12:22:51 +0200 Subject: Fix flask crash on server --- .../common/net/MessageSetFlaskCapacity.java | 59 +++++++++++++++------- 1 file changed, 42 insertions(+), 17 deletions(-) (limited to 'src/main/java/gregtech/common/net') diff --git a/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java index c20b4002c3..ee869a2bd0 100644 --- a/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java +++ b/src/main/java/gregtech/common/net/MessageSetFlaskCapacity.java @@ -1,42 +1,67 @@ package gregtech.common.net; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import gregtech.api.net.GT_Packet; import gregtech.common.items.GT_VolumetricFlask; -import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; -public final class MessageSetFlaskCapacity implements IMessage { - private int capacity; +public final class MessageSetFlaskCapacity extends GT_Packet { + private int capacity, dimID, playerID; public MessageSetFlaskCapacity() { + super(true); } - public MessageSetFlaskCapacity(int capacity) { + public MessageSetFlaskCapacity(int capacity, int dimID, int playerID) { + super(false); this.capacity = capacity; + this.dimID = dimID; + this.playerID = playerID; } + public MessageSetFlaskCapacity(int capacity, EntityPlayer p) { + super(false); + this.capacity = capacity; + this.dimID = p.worldObj.provider.dimensionId; + this.playerID = p.getEntityId(); + } + + @Override + public byte getPacketID() { + return 5; + } - public void fromBytes(ByteBuf buf) { - this.capacity = buf.readInt(); + @Override + public byte[] encode() { + ByteArrayDataOutput tOut = ByteStreams.newDataOutput(10); + tOut.writeInt(capacity); + tOut.writeInt(dimID); + tOut.writeInt(playerID); + return tOut.toByteArray(); } - public void toBytes(ByteBuf buf) { - buf.writeInt(this.capacity); + @Override + public GT_Packet decode(ByteArrayDataInput aData) { + return new MessageSetFlaskCapacity(aData.readInt(), aData.readInt(), aData.readInt()); } - public static final class Handler - implements IMessageHandler { - public IMessage onMessage(MessageSetFlaskCapacity message, MessageContext ctx) { - ItemStack stack = ctx.getServerHandler().playerEntity.getHeldItem(); + @Override + public void process(IBlockAccess aWorld) { + World w = DimensionManager.getWorld(dimID); + if (w != null && w.getEntityByID(playerID) instanceof EntityPlayer) { + ItemStack stack = ((EntityPlayer) w.getEntityByID(playerID)).getHeldItem(); if ((stack != null) && (stack.stackSize > 0)) { Item item = stack.getItem(); if ((item instanceof GT_VolumetricFlask)) - ((GT_VolumetricFlask) item).setCapacity(stack, message.capacity); + ((GT_VolumetricFlask) item).setCapacity(stack, capacity); } - return null; } } } \ No newline at end of file -- cgit