aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/net')
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_Block_Event.java2
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java33
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java200
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_New.java4
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java17
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java16
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntity.java22
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java25
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),