From 0bb36cbb957053d4d91053d152ebddd6f0ed1009 Mon Sep 17 00:00:00 2001 From: Glease <4586901+Glease@users.noreply.github.com> Date: Sun, 23 Jan 2022 21:28:13 +0800 Subject: AE2 Cable facade as cover (#887) * initial work on facade covers * fix colorMultiplier also removed derp * Clean up drop cover texture reset code What was I thinking actually? Send a packet to reset client states? * Fix cover display stack --- .../api/net/GT_Packet_RequestCoverData.java | 102 +++++++++++++++++++++ .../gregtech/api/net/GT_Packet_SendCoverData.java | 90 ++++++++++++++++++ 2 files changed, 192 insertions(+) create mode 100644 src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java create mode 100644 src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java (limited to 'src/main/java/gregtech/api/net') diff --git a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java new file mode 100644 index 0000000000..93bc5eba72 --- /dev/null +++ b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java @@ -0,0 +1,102 @@ +package gregtech.api.net; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +/** + * Client -> Server : ask for cover data + */ +public class GT_Packet_RequestCoverData extends GT_Packet_New { + protected int mX; + protected short mY; + protected int mZ; + + protected byte side; + protected int coverID; + + protected EntityPlayerMP mPlayer; + + public GT_Packet_RequestCoverData() { + super(true); + } + + public GT_Packet_RequestCoverData(int mX, short mY, int mZ, byte coverSide, int coverID) { + super(false); + this.mX = mX; + this.mY = mY; + this.mZ = mZ; + + this.side = coverSide; + this.coverID = coverID; + } + public GT_Packet_RequestCoverData(byte coverSide, int coverID, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = coverSide; + this.coverID = coverID; + } + + @Override + public byte getPacketID() { + return 17; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeByte(side); + aOut.writeInt(coverID); + } + + @Override + public GT_Packet_New decode(ByteArrayDataInput aData) { + return new GT_Packet_RequestCoverData( + aData.readInt(), + aData.readShort(), + aData.readInt(), + + aData.readByte(), + aData.readInt() + ); + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; + } + } + + @Override + public void process(IBlockAccess aWorld) { + if (mPlayer == null) // impossible, but who knows + return; + World world = DimensionManager.getWorld(mPlayer.dimension); + if (world != null) { + TileEntity tile = world.getTileEntity(mX, mY, mZ); + if (tile instanceof IGregTechTileEntity) { + IGregTechTileEntity te = (IGregTechTileEntity) tile; + if (!te.isDead() && te.getCoverIDAtSide(side) == coverID) { + te.issueCoverUpdate(side); + } + } + } + } +} diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java new file mode 100644 index 0000000000..3e1abac4e7 --- /dev/null +++ b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java @@ -0,0 +1,90 @@ +package gregtech.api.net; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +/** + * Server -> Client : Update cover data + */ +public class GT_Packet_SendCoverData extends GT_Packet_New { + protected int mX; + protected short mY; + protected int mZ; + + protected byte side; + protected int coverID; + protected ISerializableObject coverData; + + public GT_Packet_SendCoverData() { + super(true); + } + + public GT_Packet_SendCoverData(int mX, short mY, int mZ, byte coverSide, int coverID, ISerializableObject coverData) { + super(false); + this.mX = mX; + this.mY = mY; + this.mZ = mZ; + + this.side = coverSide; + this.coverID = coverID; + this.coverData = coverData; + } + public GT_Packet_SendCoverData(byte coverSide, int coverID, ISerializableObject coverData, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = coverSide; + this.coverID = coverID; + this.coverData = coverData; + } + + @Override + public byte getPacketID() { + return 16; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeByte(side); + aOut.writeInt(coverID); + coverData.writeToByteBuf(aOut); + } + + @Override + public GT_Packet_New decode(ByteArrayDataInput aData) { + int coverId; + return new GT_Packet_SendCoverData( + aData.readInt(), + aData.readShort(), + aData.readInt(), + + aData.readByte(), + coverId = aData.readInt(), + GregTech_API.getCoverBehaviorNew(coverId).createDataObject().readFromPacket(aData, null) + ); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld != null) { + TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); + if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { + ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, coverData, null); + } + } + } +} -- cgit