aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authorRyan Nasers <42074409+Cardinalstars@users.noreply.github.com>2024-11-30 23:42:47 +0100
committerGitHub <noreply@github.com>2024-11-30 23:42:47 +0100
commitd415a2c816f27fbacaa6a2bcfc297f7dfd892a12 (patch)
tree0cf3dc0703b9b51263757209637c5b2477d261b9 /src/main/java/gregtech/api
parenteae2657d2e32ef182ecae21a8018a2f866e4841c (diff)
downloadGT5-Unofficial-d415a2c816f27fbacaa6a2bcfc297f7dfd892a12.tar.gz
GT5-Unofficial-d415a2c816f27fbacaa6a2bcfc297f7dfd892a12.tar.bz2
GT5-Unofficial-d415a2c816f27fbacaa6a2bcfc297f7dfd892a12.zip
Frame fix (NEEDS TESTING) (#3578)
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com> Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/interfaces/ITemporaryTE.java4
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java74
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java3
-rw-r--r--src/main/java/gregtech/api/net/GTPacketCreateTE.java212
-rw-r--r--src/main/java/gregtech/api/net/GTPacketTileEntity.java2
-rw-r--r--src/main/java/gregtech/api/net/GTPacketTypes.java1
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
;