aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/multitileentity
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2024-02-03 21:55:06 +0200
committerGitHub <noreply@github.com>2024-02-03 13:55:06 -0600
commit0361000b1d4e4276277a805dd1d2dc60aad0ae99 (patch)
tree075be0871b9437db8a48b6bd7e29615504591df3 /src/main/java/gregtech/api/multitileentity
parent7874a016f950b11da80f1680c40a17e7e33c6e51 (diff)
downloadGT5-Unofficial-0361000b1d4e4276277a805dd1d2dc60aad0ae99.tar.gz
GT5-Unofficial-0361000b1d4e4276277a805dd1d2dc60aad0ae99.tar.bz2
GT5-Unofficial-0361000b1d4e4276277a805dd1d2dc60aad0ae99.zip
Refactor Packet Handling for MuTEs (#2485)
* create base framework of packets for MuTEs * spotless
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity')
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java12
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java74
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java63
-rw-r--r--src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java11
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java13
5 files changed, 120 insertions, 53 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
index 5ea1069193..6ee760553e 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
@@ -12,6 +12,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
@@ -605,14 +608,15 @@ public class MultiTileEntityBlock extends Block implements IDebugableBlock, ITil
return aTileEntity instanceof IMultiTileEntity mte ? mte.getPickBlock(aTarget) : null;
}
- public final IMultiTileEntity receiveMultiTileEntityData(IBlockAccess aWorld, int aX, short aY, int aZ, short aRID,
- short aID) {
+ @Nullable
+ public final IMultiTileEntity receiveMultiTileEntityData(@Nonnull IBlockAccess aWorld, int aX, int aY, int aZ,
+ int registryId, int aID) {
if (!(aWorld instanceof World)) return null;
TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
- if (!(aTileEntity instanceof IMultiTileEntity mte) || mte.getMultiTileEntityRegistryID() != aRID
+ if (!(aTileEntity instanceof IMultiTileEntity mte) || mte.getMultiTileEntityRegistryID() != registryId
|| mte.getMultiTileEntityID() != aID) {
- final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry.getRegistry(aRID);
+ final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry.getRegistry(registryId);
if (tRegistry == null) return null;
aTileEntity = tRegistry.getNewTileEntity((World) aWorld, aX, aY, aZ, aID);
diff --git a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
index 3d98663e6d..84ec63c26a 100644
--- a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java
@@ -51,8 +51,12 @@ import gregtech.api.multitileentity.MultiTileEntityBlockInternal;
import gregtech.api.multitileentity.MultiTileEntityClassContainer;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
+import gregtech.api.multitileentity.interfaces.SyncedMultiTileEntity;
import gregtech.api.net.GT_Packet_MultiTileEntity;
import gregtech.api.net.GT_Packet_New;
+import gregtech.api.net.data.CommonData;
+import gregtech.api.net.data.CoordinateData;
+import gregtech.api.net.data.MultiTileEntityData;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.XSTR;
import gregtech.api.render.TextureFactory;
@@ -65,7 +69,7 @@ import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
public abstract class MultiTileEntity extends CoverableTileEntity
- implements IMultiTileEntity.IMTE_BreakBlock, MultiTileBasicRender {
+ implements IMultiTileEntity.IMTE_BreakBlock, MultiTileBasicRender, SyncedMultiTileEntity {
private ITexture baseTexture = null;
private ITexture topOverlayTexture = null;
@@ -101,6 +105,10 @@ public abstract class MultiTileEntity extends CoverableTileEntity
private UUID ownerUUID = GT_Utility.defaultUuid;
private boolean lockUpgrade = false;
+ private final GT_Packet_MultiTileEntity fullPacket = new GT_Packet_MultiTileEntity(false);
+ private final GT_Packet_MultiTileEntity timedPacket = new GT_Packet_MultiTileEntity(false);
+ private final GT_Packet_MultiTileEntity graphicPacket = new GT_Packet_MultiTileEntity(false);
+
public MultiTileEntity(boolean isTicking) {
this.isTicking = isTicking;
}
@@ -1028,30 +1036,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity
*/
public GT_Packet_MultiTileEntity getClientDataPacket() {
- final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(
- 0,
- xCoord,
- (short) yCoord,
- zCoord,
- getMultiTileEntityRegistryID(),
- getMultiTileEntityID(),
- (byte) ((facing.ordinal() & 7) | (mRedstone ? 16 : 0)),
- color);
-
- packet.setCoverData(
- getCoverInfoAtSide(ForgeDirection.DOWN).getCoverID(),
- getCoverInfoAtSide(ForgeDirection.UP).getCoverID(),
- getCoverInfoAtSide(ForgeDirection.NORTH).getCoverID(),
- getCoverInfoAtSide(ForgeDirection.SOUTH).getCoverID(),
- getCoverInfoAtSide(ForgeDirection.WEST).getCoverID(),
- getCoverInfoAtSide(ForgeDirection.EAST).getCoverID());
-
- packet.setRedstoneData(
- (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)));
+ final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(false);
return packet;
}
@@ -1353,4 +1338,43 @@ public abstract class MultiTileEntity extends CoverableTileEntity
return hasGlow;
}
}
+
+ @Override
+ public void getFullPacketData(GT_Packet_MultiTileEntity packet) {
+ packet.addData(new CoordinateData(getCoords()));
+ packet.addData(new CommonData(mStrongRedstone, color, (byte) 0));
+ packet.addData(new MultiTileEntityData(mteRegistry, blockMetadata));
+ }
+
+ @Override
+ public void getGraphicPacketData(GT_Packet_MultiTileEntity packet) {
+ packet.addData(new CoordinateData(getCoords()));
+ }
+
+ @Override
+ public void getTimedPacketData(GT_Packet_MultiTileEntity packet) {
+ packet.addData(new CoordinateData(getCoords()));
+ packet.addData(new MultiTileEntityData(mteRegistry, blockMetadata));
+ }
+
+ @Override
+ public void sendFullPacket(@Nonnull EntityPlayerMP player) {
+ fullPacket.clearData();
+ getFullPacketData(fullPacket);
+ GT_Values.NW.sendToPlayer(fullPacket, player);
+ }
+
+ @Override
+ public void sendGraphicPacket() {
+ graphicPacket.clearData();
+ getGraphicPacketData(graphicPacket);
+ GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, graphicPacket, getXCoord(), getZCoord());
+ }
+
+ @Override
+ public void sendTimedPacket() {
+ timedPacket.clearData();
+ getTimedPacketData(timedPacket);
+ GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, timedPacket, getXCoord(), getZCoord());
+ }
}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java
new file mode 100644
index 0000000000..2045f28d67
--- /dev/null
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java
@@ -0,0 +1,63 @@
+package gregtech.api.multitileentity.interfaces;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+
+import gregtech.api.net.GT_Packet_MultiTileEntity;
+
+public interface SyncedMultiTileEntity {
+
+ public static final int DEFAULT_TIMED_PACKET_PERIOD = 20;
+
+ /**
+ * Will send a packet to the client when they open the controller or access a casing.
+ * Should only be sent to one player!
+ */
+ void sendFullPacket(@Nonnull EntityPlayerMP player);
+
+ /**
+ * Should always collect all the data that the controller or casing has and should send
+ * Called by {@link #sendFullPacket()}
+ *
+ * @param packet The packet which will be sent
+ */
+ void getFullPacketData(GT_Packet_MultiTileEntity packet);
+
+ /**
+ * Will send a packet at a certain period of time, defined by {@link #getTimedPacketPeriod()}, to all players around
+ * the controller or casing to send important information.
+ * Redstone state, color, ect. It shouldn't send data about the internals like inventory and processing time
+ */
+ void sendTimedPacket();
+
+ /**
+ * Collects all the data that should be sent out at a certain period of time defined by
+ * {@link #getTimedPacketPeriod()}
+ * Called by {@link #sendTimedPacket()}
+ *
+ * @param packet The packet which will be sent
+ */
+ void getTimedPacketData(GT_Packet_MultiTileEntity packet);
+
+ /**
+ * Defines the period of time at which a timed packet should be sent out. Default 20 ticks
+ */
+ default int getTimedPacketPeriod() {
+ return DEFAULT_TIMED_PACKET_PERIOD;
+ }
+
+ /**
+ * Will send a packet, which should only contain data about how the TileEntity should be rendered.
+ * !!! Warning !!! This is sent every single tick! Do not put a lot of data here!
+ */
+ void sendGraphicPacket();
+
+ /**
+ * Collects all the data that is needed to be send every single tick
+ * Called by {@link #sendGraphicPacket()}
+ *
+ * @param packet The packet which will be sent
+ */
+ void getGraphicPacketData(GT_Packet_MultiTileEntity packet);
+}
diff --git a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
index 19c052b96a..4b348c2fec 100644
--- a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
+++ b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
@@ -53,7 +53,6 @@ import gregtech.api.metatileentity.GregTechTileClientEvents;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.multitileentity.base.TickableMultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiTileMachine;
-import gregtech.api.net.GT_Packet_MultiTileEntity;
import gregtech.api.render.TextureFactory;
import gregtech.api.task.tasks.ProcessingTask;
import gregtech.api.util.GT_Utility;
@@ -271,16 +270,6 @@ public abstract class MultiTileBasicMachine<P extends MuTEProcessingLogic<P>> ex
return TextureFactory.of(texture, getCoverTexture(side));
}
-
- @Override
- public GT_Packet_MultiTileEntity getClientDataPacket() {
- final GT_Packet_MultiTileEntity packet = super.getClientDataPacket();
- int booleans = getBooleans();
- packet.setBooleans(booleans);
- packet.setSoundEvent(soundEvent, soundEventValue);
- return packet;
- }
-
/*
* Fluids
*/
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
index 223edc0761..5331d1477d 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
@@ -54,7 +54,6 @@ import gregtech.api.multitileentity.interfaces.IMultiBlockController;
import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_HasModes;
-import gregtech.api.net.GT_Packet_MultiTileEntity;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Utility;
import gregtech.common.covers.CoverInfo;
@@ -277,18 +276,6 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity
}
@Override
- public GT_Packet_MultiTileEntity getClientDataPacket() {
- final GT_Packet_MultiTileEntity packet = super.getClientDataPacket();
- packet.setModes(getMode(), getAllowedModes());
- if (getTargetPos() != null) {
- final ChunkCoordinates aTarget = getTargetPos();
- packet.setTargetPos(aTarget.posX, (short) aTarget.posY, aTarget.posZ);
- }
- packet.setInventoryIndex(getLockedInventoryIndex());
- return packet;
- }
-
- @Override
public void setLockedInventoryIndex(int aIndex) {
mLockedInventoryIndex = aIndex;
}