diff options
Diffstat (limited to 'src/main/java/gregtech/api/net')
8 files changed, 271 insertions, 48 deletions
diff --git a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java index dd7657e95d..ebc69cd540 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java +++ b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java @@ -44,7 +44,7 @@ public class GT_Packet_Block_Event extends GT_Packet_New { @Override public void process(IBlockAccess aWorld) { if (aWorld != null) { - TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); + final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); if (tTileEntity != null) tTileEntity.receiveClientEvent(mID, mValue); } } diff --git a/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java b/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java index 62ff6bd7e9..e2df15cb33 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java +++ b/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java @@ -3,7 +3,8 @@ package gregtech.api.net; import com.google.common.io.ByteArrayDataInput; import gregtech.api.enums.GT_Values; import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.common.GT_Proxy; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; @@ -82,32 +83,36 @@ public class GT_Packet_GtTileEntityGuiRequest extends GT_Packet_New { @Override public void process(IBlockAccess aWorld) { - World world = DimensionManager.getWorld(this.dimId); + final World world = DimensionManager.getWorld(this.dimId); if (world == null) return; - TileEntity tile = world.getTileEntity(this.mX, this.mY, this.mZ); - if (!(tile instanceof IGregTechTileEntity) || ((IGregTechTileEntity) tile).isDead()) return; + final TileEntity tile = world.getTileEntity(this.mX, this.mY, this.mZ); + if (!(tile instanceof BaseTileEntity) || ((BaseTileEntity) tile).isDead()) return; - IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile); - EntityPlayerMP player = (EntityPlayerMP) world.getEntityByID(playerId); + final BaseTileEntity baseTile = ((BaseTileEntity) tile); + final EntityPlayerMP player = (EntityPlayerMP) world.getEntityByID(playerId); + final CoverableTileEntity coverableTile = + (baseTile instanceof CoverableTileEntity) ? (CoverableTileEntity) baseTile : null; // If the requested Gui ID corresponds to a cover, send the cover data to the client so they can open it. - if (GT_Proxy.GUI_ID_COVER_SIDE_BASE <= guiId && guiId < GT_Proxy.GUI_ID_COVER_SIDE_BASE + 6) { - byte coverSide = (byte) (guiId - GT_Proxy.GUI_ID_COVER_SIDE_BASE); - GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI( + if (GT_Proxy.GUI_ID_COVER_SIDE_BASE <= guiId + && guiId < GT_Proxy.GUI_ID_COVER_SIDE_BASE + 6 + && coverableTile != null) { + final byte coverSide = (byte) (guiId - GT_Proxy.GUI_ID_COVER_SIDE_BASE); + final GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI( this.mX, this.mY, this.mZ, coverSide, - gtTile.getCoverIDAtSide(coverSide), - gtTile.getComplexCoverDataAtSide(coverSide), + coverableTile.getCoverIDAtSide(coverSide), + coverableTile.getComplexCoverDataAtSide(coverSide), this.dimId, this.playerId, parentGuiId); GT_Values.NW.sendToPlayer(packet, player); } else if (guiId == 0) { - if (gtTile.getMetaTileEntity() != null && gtTile.getMetaTileEntity().useModularUI()) { - GT_UIInfos.openGTTileEntityUI(gtTile, player); + if (baseTile.useModularUI()) { + GT_UIInfos.openGTTileEntityUI(baseTile, player); } else { - gtTile.openGUI(player); + baseTile.openGUI(player); } } } diff --git a/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java new file mode 100644 index 0000000000..5263549264 --- /dev/null +++ b/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java @@ -0,0 +1,200 @@ +package gregtech.api.net; + +import static gregtech.api.enums.GT_Values.B; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.GT_Mod; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.multitileentity.MultiTileEntityBlock; +import gregtech.api.multitileentity.interfaces.IMultiBlockPart; +import gregtech.api.multitileentity.interfaces.IMultiTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.IBlockAccess; + +public class GT_Packet_MultiTileEntity extends GT_Packet_New { + public static final int COVERS = B[0], REDSTONE = B[1], MODES = B[2], CONTROLLER = B[3]; + + private int features = 0; + + private int mX, mZ; + private int mC0 = 0, mC1 = 0, mC2 = 0, mC3 = 0, mC4 = 0, mC5 = 0; + private short mY, mID, mRID; + private byte mCommonData, mTexturePage, mUpdate, mRedstone, mColor; + private ChunkCoordinates mTargetPos = null; + + // MultiBlockPart + private byte mMode; + private int mAllowedModes; + + public GT_Packet_MultiTileEntity() { + super(true); + } + + // For multi tiles + public GT_Packet_MultiTileEntity( + int aFeatures, int aX, short aY, int aZ, short aRID, short aID, byte aCommonData, byte aColor) { + super(false); + features = aFeatures; + + mX = aX; + mY = aY; + mZ = aZ; + mRID = aRID; + mID = aID; + mCommonData = aCommonData; + mColor = aColor; + } + + public void setCoverData(int aC0, int aC1, int aC2, int aC3, int aC4, int aC5) { + features |= COVERS; + + mC0 = aC0; + mC1 = aC1; + mC2 = aC2; + mC3 = aC3; + mC4 = aC4; + mC5 = aC5; + } + + public void setRedstoneData(byte aRedstoneData) { + features |= REDSTONE; + + mRedstone = aRedstoneData; + } + + public void setModes(byte aMode, int aAllowedModes) { + features |= MODES; + mMode = aMode; + mAllowedModes = aAllowedModes; + } + + public void setTargetPos(int aX, short aY, int aZ) { + features |= CONTROLLER; + mTargetPos = new ChunkCoordinates(aX, aY, aZ); + } + + @Override + public void encode(ByteBuf aOut) { + // Features + aOut.writeInt(features); + + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeShort(mRID); + aOut.writeShort(mID); + aOut.writeByte(mCommonData); + aOut.writeByte(mColor); + + if ((features & COVERS) == COVERS) { + aOut.writeInt(mC0); + aOut.writeInt(mC1); + aOut.writeInt(mC2); + aOut.writeInt(mC3); + aOut.writeInt(mC4); + aOut.writeInt(mC5); + } + if ((features & REDSTONE) == REDSTONE) { + aOut.writeByte(mRedstone); + } + if ((features & MODES) == MODES) { + aOut.writeByte(mMode); + aOut.writeInt(mAllowedModes); + } + if ((features & CONTROLLER) == CONTROLLER) { + aOut.writeInt(mTargetPos.posX); + aOut.writeShort(mTargetPos.posY); + aOut.writeInt(mTargetPos.posZ); + } + + if (false) { + aOut.writeByte(mTexturePage); + aOut.writeByte(mUpdate); + aOut.writeByte(mColor); + } + } + + @Override + public GT_Packet_New decode(ByteArrayDataInput aData) { + final int packetFeatures = aData.readInt(); + + final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity( + packetFeatures, + // Coords + aData.readInt(), + aData.readShort(), + aData.readInt(), + // Registry & ID + aData.readShort(), + aData.readShort(), + // Common Data + aData.readByte(), + aData.readByte()); + if ((packetFeatures & COVERS) == COVERS) { + packet.setCoverData( + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt()); + } + if ((packetFeatures & REDSTONE) == REDSTONE) { + packet.setRedstoneData(aData.readByte()); + } + if ((packetFeatures & MODES) == MODES) { + packet.setModes(aData.readByte(), aData.readInt()); + } + if ((packetFeatures & CONTROLLER) == CONTROLLER) { + packet.setTargetPos(aData.readInt(), aData.readShort(), aData.readInt()); + } + + return packet; + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld == null) return; + final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); + try { + final Block tBlock = aWorld.getBlock(mX, mY, mZ); + if (tBlock instanceof MultiTileEntityBlock) { + final MultiTileEntityBlock mteBlock = (MultiTileEntityBlock) tBlock; + final IMultiTileEntity mte = mteBlock.receiveMultiTileEntityData(aWorld, mX, mY, mZ, mRID, mID); + if (mte == null) return; + mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, mCommonData); + mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, mColor); + + if ((features & COVERS) == COVERS) { + mteBlock.receiveCoverData(mte, mC0, mC1, mC2, mC3, mC4, mC5); + } + if ((features & REDSTONE) == REDSTONE) { + mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, mRedstone); + } + + if ((features & MODES) == MODES && mte instanceof IMultiTileEntity.IMTE_HasModes) { + final IMultiTileEntity.IMTE_HasModes mteModes = (IMultiTileEntity.IMTE_HasModes) mte; + mteModes.setMode(mMode); + mteModes.setAllowedModes(mAllowedModes); + } + + if ((features & CONTROLLER) == CONTROLLER && mte instanceof IMultiBlockPart) { + final IMultiBlockPart mtePart = (IMultiBlockPart) mte; + mtePart.setTargetPos(mTargetPos); + } + } + } catch (Exception e) { + GT_Mod.GT_FML_LOGGER.error( + "Exception setting tile entity data for tile entity {} at ({}, {}, {})", tTileEntity, mX, mY, mZ); + } + } + + @Override + public byte getPacketID() { + return 18; + } +} diff --git a/src/main/java/gregtech/api/net/GT_Packet_New.java b/src/main/java/gregtech/api/net/GT_Packet_New.java index f4e6f2a0e2..f987ebe24b 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_New.java +++ b/src/main/java/gregtech/api/net/GT_Packet_New.java @@ -13,9 +13,9 @@ public abstract class GT_Packet_New extends GT_Packet { @Override @Deprecated public final byte[] encode() { - ByteBuf tOut = Unpooled.buffer(); + final ByteBuf tOut = Unpooled.buffer(); encode(tOut); - byte[] bytes = new byte[tOut.readableBytes()]; + final byte[] bytes = new byte[tOut.readableBytes()]; tOut.readBytes(bytes); return bytes; } diff --git a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java index 8084a772bb..c330514144 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java +++ b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java @@ -3,6 +3,7 @@ package gregtech.api.net; import com.google.common.io.ByteArrayDataInput; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.common.covers.CoverInfo; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.INetHandler; @@ -29,6 +30,16 @@ public class GT_Packet_RequestCoverData extends GT_Packet_New { super(true); } + public GT_Packet_RequestCoverData(CoverInfo info, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = info.getSide(); + this.coverID = info.getCoverID(); + } + public GT_Packet_RequestCoverData(int mX, short mY, int mZ, byte coverSide, int coverID) { super(false); this.mX = mX; @@ -79,9 +90,9 @@ public class GT_Packet_RequestCoverData extends GT_Packet_New { @Override public void process(IBlockAccess aWorld) { - if (mPlayer == null) // impossible, but who knows - return; - World world = DimensionManager.getWorld(mPlayer.dimension); + // impossible, but who knows + if (mPlayer == null) return; + final World world = DimensionManager.getWorld(mPlayer.dimension); if (world != null) { final TileEntity tile = world.getTileEntity(mX, mY, mZ); if (tile instanceof CoverableTileEntity) { diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java index ab8b230077..86ecb8b468 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java +++ b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java @@ -5,6 +5,7 @@ import gregtech.api.GregTech_API; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverInfo; import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -37,6 +38,17 @@ public class GT_Packet_SendCoverData extends GT_Packet_New { this.coverData = coverData; } + public GT_Packet_SendCoverData(CoverInfo info, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = info.getSide(); + this.coverID = info.getCoverID(); + this.coverData = info.getCoverData(); + } + public GT_Packet_SendCoverData(byte coverSide, int coverID, ISerializableObject coverData, ICoverable tile) { super(false); this.mX = tile.getXCoord(); @@ -66,7 +78,7 @@ public class GT_Packet_SendCoverData extends GT_Packet_New { @Override public GT_Packet_New decode(ByteArrayDataInput aData) { - int coverId; + final int coverId; return new GT_Packet_SendCoverData( aData.readInt(), aData.readShort(), @@ -79,7 +91,7 @@ public class GT_Packet_SendCoverData extends GT_Packet_New { @Override public void process(IBlockAccess aWorld) { if (aWorld != null) { - TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); + final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); if (tile instanceof CoverableTileEntity && !((CoverableTileEntity) tile).isDead()) { ((CoverableTileEntity) tile).receiveCoverData(side, coverID, coverData, null); } diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java index b7aa229530..3f1425272a 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java +++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java @@ -4,7 +4,6 @@ import com.google.common.io.ByteArrayDataInput; import gregtech.GT_Mod; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.multitileentity.MultiTileEntityBlock; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; @@ -173,27 +172,6 @@ public class GT_Packet_TileEntity extends GT_Packet_New { ((BaseMetaPipeEntity) tTileEntity) .receiveMetaTileEntityData( mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor); - else if ((tBlock = aWorld.getBlock(mX, mY, mZ)) instanceof MultiTileEntityBlock) { - ((MultiTileEntityBlock) tBlock) - .receiveMultiTileEntityData( - aWorld, - mX, - mY, - mZ, - mRID, - mID, - mC0, - mC1, - mC2, - mC3, - mC4, - mC5, - mTexture, - mTexturePage, - mUpdate, - mRedstone, - mColor); - } } catch (Exception e) { GT_Mod.GT_FML_LOGGER.error( "Exception setting tile entity data for tile entity {} at ({}, {}, {})", tTileEntity, mX, mY, mZ); diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java index 65194a7390..6fbaf81b53 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java +++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java @@ -7,6 +7,7 @@ import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverInfo; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -72,6 +73,22 @@ public class GT_Packet_TileEntityCoverGUI extends GT_Packet_New { this.parentGuiId = -1; } + public GT_Packet_TileEntityCoverGUI(CoverInfo coverInfo, int dimID, int playerID, int parentGuiId) { + super(false); + final ICoverable tile = coverInfo.getTile(); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = coverInfo.getSide(); + this.coverID = coverInfo.getCoverID(); + this.coverData = coverInfo.getCoverData(); + + this.dimID = dimID; + this.playerID = playerID; + this.parentGuiId = parentGuiId; + } + public GT_Packet_TileEntityCoverGUI( int mX, short mY, @@ -182,15 +199,15 @@ public class GT_Packet_TileEntityCoverGUI extends GT_Packet_New { public void process(IBlockAccess aWorld) { if (aWorld instanceof World) { // Using EntityPlayer instead of EntityClientPlayerMP so both client and server can load this - EntityPlayer thePlayer = ((EntityPlayer) ((World) aWorld).getEntityByID(playerID)); - TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); + final EntityPlayer thePlayer = ((EntityPlayer) ((World) aWorld).getEntityByID(playerID)); + final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { - IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile); + final IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile); gtTile.setCoverDataAtSide(side, coverData); // Set it client side to read later. GT_CoverBehaviorBase<?> cover = gtTile.getCoverBehaviorAtSideNew(side); if (cover.hasCoverGUI()) { - GuiScreen gui = (GuiScreen) cover.getClientGUI( + final GuiScreen gui = (GuiScreen) cover.getClientGUI( side, gtTile.getCoverIDAtSide(side), gtTile.getComplexCoverDataAtSide(side), |