diff options
Diffstat (limited to 'src/main/java/gregtech/api')
6 files changed, 270 insertions, 26 deletions
diff --git a/src/main/java/gregtech/api/interfaces/ITemporaryTE.java b/src/main/java/gregtech/api/interfaces/ITemporaryTE.java new file mode 100644 index 0000000000..581137ca60 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/ITemporaryTE.java @@ -0,0 +1,4 @@ +package gregtech.api.interfaces; + +public interface ITemporaryTE { +} diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 0ef1d196e9..d2d9f429b7 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -32,12 +32,14 @@ import gregtech.api.enums.Textures; import gregtech.api.graphs.Lock; import gregtech.api.graphs.Node; import gregtech.api.graphs.paths.NodePath; +import gregtech.api.interfaces.ITemporaryTE; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IConnectable; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; +import gregtech.api.net.GTPacketCreateTE; import gregtech.api.net.GTPacketTileEntity; import gregtech.api.objects.GTItemStack; import gregtech.api.util.CoverBehaviorBase; @@ -294,30 +296,56 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity private void sendClientData() { if (mSendClientData) { - NW.sendPacketToAllPlayersInRange( - worldObj, - new GTPacketTileEntity( + if (mMetaTileEntity instanceof ITemporaryTE) { + NW.sendPacketToAllPlayersInRange( + worldObj, + new GTPacketCreateTE( + xCoord, + (short) yCoord, + zCoord, + mID, + getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), + getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), + getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), + getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), + oTextureData = mConnections, + oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, + oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) + | ((mSidedRedstone[2] > 0) ? 4 : 0) + | ((mSidedRedstone[3] > 0) ? 8 : 0) + | ((mSidedRedstone[4] > 0) ? 16 : 0) + | ((mSidedRedstone[5] > 0) ? 32 : 0)), + oColor = mColor), xCoord, - (short) yCoord, - zCoord, - mID, - getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), - getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), - getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), - getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), - getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), - getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), - oTextureData = mConnections, - oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, - oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) - | ((mSidedRedstone[2] > 0) ? 4 : 0) - | ((mSidedRedstone[3] > 0) ? 8 : 0) - | ((mSidedRedstone[4] > 0) ? 16 : 0) - | ((mSidedRedstone[5] > 0) ? 32 : 0)), - oColor = mColor), - xCoord, - zCoord); - mSendClientData = false; + zCoord); + } else { + NW.sendPacketToAllPlayersInRange( + worldObj, + new GTPacketTileEntity( + xCoord, + (short) yCoord, + zCoord, + mID, + getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(), + getCoverInfoAtSide(ForgeDirection.UP).getCoverID(), + getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(), + getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(), + getCoverInfoAtSide(ForgeDirection.EAST).getCoverID(), + oTextureData = mConnections, + oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, + oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) + | ((mSidedRedstone[2] > 0) ? 4 : 0) + | ((mSidedRedstone[3] > 0) ? 8 : 0) + | ((mSidedRedstone[4] > 0) ? 16 : 0) + | ((mSidedRedstone[5] > 0) ? 32 : 0)), + oColor = mColor), + xCoord, + zCoord); + mSendClientData = false; + } } sendCoverDataIfNeeded(); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java index ec000b6e9c..483d8573b8 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java @@ -7,6 +7,7 @@ import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.enums.Dyes; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITemporaryTE; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -14,7 +15,7 @@ import gregtech.api.metatileentity.MetaPipeEntity; import gregtech.api.render.TextureFactory; import gregtech.api.util.GTLanguageManager; -public class MTEFrame extends MetaPipeEntity { +public class MTEFrame extends MetaPipeEntity implements ITemporaryTE { private static final String localizedDescFormat = GTLanguageManager .addStringLocalization("gt.blockmachines.gt_frame.desc.format", "Just something you can put covers on."); diff --git a/src/main/java/gregtech/api/net/GTPacketCreateTE.java b/src/main/java/gregtech/api/net/GTPacketCreateTE.java new file mode 100644 index 0000000000..c0b1c26e18 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketCreateTE.java @@ -0,0 +1,212 @@ +package gregtech.api.net; + +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.GTMod; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import io.netty.buffer.ByteBuf; + +public class GTPacketCreateTE extends GTPacket { + + private int mX, mZ, mC0, mC1, mC2, mC3, mC4, mC5; + private short mY, mID, mRID; + private byte mTexture, mTexturePage, mUpdate, mRedstone, mColor; + + public GTPacketCreateTE() { + super(); + } + + public GTPacketCreateTE(int aX, short aY, int aZ, short aRID, short aID, int aC0, int aC1, int aC2, int aC3, + int aC4, int aC5, byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { + super(); + mX = aX; + mY = aY; + mZ = aZ; + mC0 = aC0; + mC1 = aC1; + mC2 = aC2; + mC3 = aC3; + mC4 = aC4; + mC5 = aC5; + mRID = aRID; + mID = aID; + mTexture = aTexture; + mTexturePage = aTexturePage; + mUpdate = aUpdate; + mRedstone = aRedstone; + mColor = aColor; + } + + public GTPacketCreateTE(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, int aC5, + byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { + this( + aX, + aY, + aZ, + (short) 0, + aID, + aC0, + aC1, + aC2, + aC3, + aC4, + aC5, + aTexture, + aTexturePage, + aUpdate, + aRedstone, + aColor); + } + + public GTPacketCreateTE(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, int aC5, + byte aTexture, byte aUpdate, byte aRedstone, byte aColor) { + this(aX, aY, aZ, (short) 0, aID, aC0, aC1, aC2, aC3, aC4, aC5, aTexture, (byte) 0, aUpdate, aRedstone, aColor); + } + + @Override + public byte getPacketID() { + return GTPacketTypes.CREATE_TILE_ENTITY.id; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeShort(mRID); + aOut.writeShort(mID); + + aOut.writeInt(mC0); + aOut.writeInt(mC1); + aOut.writeInt(mC2); + aOut.writeInt(mC3); + aOut.writeInt(mC4); + aOut.writeInt(mC5); + + aOut.writeByte(mTexture); + aOut.writeByte(mTexturePage); + aOut.writeByte(mUpdate); + aOut.writeByte(mRedstone); + aOut.writeByte(mColor); + } + + @Override + public GTPacket decode(ByteArrayDataInput aData) { + return new GTPacketCreateTE( + // Coords + aData.readInt(), + aData.readShort(), + aData.readInt(), + // Registry & ID + aData.readShort(), + aData.readShort(), + // Covers + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + // Everything else + aData.readByte(), + aData.readByte(), + aData.readByte(), + aData.readByte(), + aData.readByte()); + } + + @Override + public void process(IBlockAccess world) { + if (world == null) return; + if (world instanceof WorldClient) { + final TileEntity tileEntity = world.getTileEntity(mX, mY, mZ); + if (tileEntity == null) { + try { + if (mTexturePage != 0) // It's a MetaTileEntity + { + BaseMetaTileEntity newTileEntity = getBaseMetaTileEntity(); + ((WorldClient) world).setTileEntity(mX, mY, mZ, newTileEntity); + } else // Otherwise it's a MetaPipeEntity + { + BaseMetaPipeEntity newTileEntity = getBaseMetaPipeEntity(); + ((WorldClient) world).setTileEntity(mX, mY, mZ, newTileEntity); + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error("Exception creating Tile Entity at ({}, {}, {})", mX, mY, mZ); + } + } else { + try { + if (tileEntity instanceof BaseMetaTileEntity) + ((BaseMetaTileEntity) tileEntity).receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mTexturePage, + mUpdate, + mRedstone, + mColor); + else if (tileEntity instanceof BaseMetaPipeEntity) + ((BaseMetaPipeEntity) tileEntity).receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mUpdate, + mRedstone, + mColor); + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error( + "Exception setting tile entity data for tile entity {} at ({}, {}, {})", + tileEntity, + mX, + mY, + mZ); + } + } + } + } + + @NotNull + private BaseMetaPipeEntity getBaseMetaPipeEntity() { + BaseMetaPipeEntity newTileEntity = new BaseMetaPipeEntity(); + newTileEntity + .receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor); + return newTileEntity; + } + + @NotNull + private BaseMetaTileEntity getBaseMetaTileEntity() { + BaseMetaTileEntity newTileEntity = new BaseMetaTileEntity(); + newTileEntity.receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mTexturePage, + mUpdate, + mRedstone, + mColor); + return newTileEntity; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketTileEntity.java b/src/main/java/gregtech/api/net/GTPacketTileEntity.java index e996f32ced..15819cb9ed 100644 --- a/src/main/java/gregtech/api/net/GTPacketTileEntity.java +++ b/src/main/java/gregtech/api/net/GTPacketTileEntity.java @@ -1,6 +1,5 @@ package gregtech.api.net; -import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -124,7 +123,6 @@ public class GTPacketTileEntity extends GTPacket { if (aWorld == null) return; final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); try { - final Block tBlock; if (tTileEntity instanceof BaseMetaTileEntity) ((BaseMetaTileEntity) tTileEntity).receiveMetaTileEntityData( mID, mC0, diff --git a/src/main/java/gregtech/api/net/GTPacketTypes.java b/src/main/java/gregtech/api/net/GTPacketTypes.java index ed43274434..915d03b88e 100644 --- a/src/main/java/gregtech/api/net/GTPacketTypes.java +++ b/src/main/java/gregtech/api/net/GTPacketTypes.java @@ -35,6 +35,7 @@ public enum GTPacketTypes { ORE_DICT_CACHE(25, new PacketOreDictCache()), SERVER_JOINED(26, new PacketServerJoined()), EIC(27, new PacketEIC()), + CREATE_TILE_ENTITY(28, new GTPacketCreateTE()), // merge conflict prevention comment, keep a trailing comma above ; |