diff options
Diffstat (limited to 'src/main/java/gregtech/api/net/data')
7 files changed, 306 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/net/data/CasingData.java b/src/main/java/gregtech/api/net/data/CasingData.java new file mode 100644 index 0000000000..627c1eacf2 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/CasingData.java @@ -0,0 +1,53 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import net.minecraft.util.ChunkCoordinates; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +public class CasingData extends PacketData<MultiTileEntityProcess> { + + public static final int CASING_DATA_ID = 4; + + private int currentMode; + private int allowedModes; + private ChunkCoordinates controllerCoords; + + public CasingData() {} + + public CasingData(int currentMode, int allowedModes, ChunkCoordinates controllerCoords) { + this.currentMode = currentMode; + this.allowedModes = allowedModes; + this.controllerCoords = controllerCoords; + } + + @Override + public void decode(@Nonnull ByteArrayDataInput in) { + currentMode = in.readInt(); + allowedModes = in.readInt(); + controllerCoords = new ChunkCoordinates(in.readInt(), in.readInt(), in.readInt()); + } + + @Override + public void encode(@Nonnull ByteBuf out) { + out.writeInt(currentMode); + out.writeInt(allowedModes); + out.writeInt(controllerCoords.posX); + out.writeInt(controllerCoords.posY); + out.writeInt(controllerCoords.posZ); + } + + @Override + public int getId() { + return CASING_DATA_ID; + } + + @Override + public void process(MultiTileEntityProcess processData) { + + } + +} diff --git a/src/main/java/gregtech/api/net/data/CommonData.java b/src/main/java/gregtech/api/net/data/CommonData.java new file mode 100644 index 0000000000..294cca134b --- /dev/null +++ b/src/main/java/gregtech/api/net/data/CommonData.java @@ -0,0 +1,50 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +public class CommonData extends PacketData<MultiTileEntityProcess> { + + public static final int COMMON_DATA_ID = 2; + + private byte redstone; + private byte color; + private byte commonData; + + public CommonData() {} + + public CommonData(byte redstone, byte color, byte commonData) { + this.redstone = redstone; + this.color = color; + this.commonData = commonData; + } + + @Override + public void decode(@Nonnull ByteArrayDataInput in) { + redstone = in.readByte(); + color = in.readByte(); + commonData = in.readByte(); + } + + @Override + public void encode(@Nonnull ByteBuf out) { + out.writeByte(redstone); + out.writeByte(color); + out.writeByte(commonData); + } + + @Override + public int getId() { + return COMMON_DATA_ID; + } + + @Override + public void process(MultiTileEntityProcess processData) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/gregtech/api/net/data/CoordinateData.java b/src/main/java/gregtech/api/net/data/CoordinateData.java new file mode 100644 index 0000000000..ad8ebbd210 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/CoordinateData.java @@ -0,0 +1,50 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import net.minecraft.util.ChunkCoordinates; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +public class CoordinateData extends PacketData<MultiTileEntityProcess> { + + public final static int COORDINATE_DATA_ID = 0; + + private ChunkCoordinates coords; + + public CoordinateData(ChunkCoordinates coords) { + this.coords = coords; + } + + public CoordinateData(int x, int y, int z) { + this(new ChunkCoordinates(x, y, z)); + } + + public CoordinateData() {} + + @Override + public int getId() { + return COORDINATE_DATA_ID; + } + + @Override + public void encode(@Nonnull ByteBuf out) { + out.writeInt(coords.posX); + out.writeInt(coords.posY); + out.writeInt(coords.posZ); + } + + @Override + public void decode(@Nonnull ByteArrayDataInput in) { + coords = new ChunkCoordinates(in.readInt(), in.readInt(), in.readInt()); + } + + @Override + public void process(MultiTileEntityProcess processData) { + if (coords == null) return; + processData.giveCoordinates(coords); + } + +} diff --git a/src/main/java/gregtech/api/net/data/MultiTileEntityData.java b/src/main/java/gregtech/api/net/data/MultiTileEntityData.java new file mode 100644 index 0000000000..2bdbf4acc9 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/MultiTileEntityData.java @@ -0,0 +1,45 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +public class MultiTileEntityData extends PacketData<MultiTileEntityProcess> { + + public static final int MULTI_TILE_ENTITY_DATA_ID = 1; + + private int registryId; + private int metaId; + + public MultiTileEntityData() {} + + public MultiTileEntityData(int registryId, int metaId) { + this.registryId = registryId; + this.metaId = metaId; + } + + @Override + public int getId() { + return MULTI_TILE_ENTITY_DATA_ID; + } + + @Override + public void encode(@Nonnull ByteBuf out) { + out.writeInt(registryId); + out.writeInt(metaId); + } + + @Override + public void decode(@Nonnull ByteArrayDataInput in) { + registryId = in.readInt(); + metaId = in.readInt(); + } + + @Override + public void process(MultiTileEntityProcess processData) { + processData.giveMultiTileEntityData(registryId, metaId); + } + +} diff --git a/src/main/java/gregtech/api/net/data/MultiTileEntityProcess.java b/src/main/java/gregtech/api/net/data/MultiTileEntityProcess.java new file mode 100644 index 0000000000..02e04981c0 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/MultiTileEntityProcess.java @@ -0,0 +1,54 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.IBlockAccess; + +import gregtech.api.multitileentity.MultiTileEntityBlock; +import gregtech.api.multitileentity.interfaces.IMultiTileEntity; + +public class MultiTileEntityProcess extends Process { + + @Nonnull + private final IBlockAccess world; + private ChunkCoordinates coords; + private int registryId; + private int metaId; + private byte redstone; + private byte color; + private byte commonData; + + public MultiTileEntityProcess(@Nonnull IBlockAccess world) { + this.world = world; + } + + @Override + public void process() { + if (coords == null) return; + Block block = world.getBlock(coords.posX, coords.posY, coords.posZ); + if (!(block instanceof MultiTileEntityBlock muteBlock)) { + return; + } + IMultiTileEntity mute = muteBlock + .receiveMultiTileEntityData(world, coords.posX, coords.posY, coords.posZ, registryId, metaId); + if (mute == null) return; + mute.setColorization(color); + } + + public void giveCoordinates(@Nonnull ChunkCoordinates coords) { + this.coords = coords; + } + + public void giveMultiTileEntityData(int registryId, int metaId) { + this.registryId = registryId; + this.metaId = metaId; + } + + public void giveCommonData(byte redstone, byte color, byte commonData) { + this.redstone = redstone; + this.color = color; + this.commonData = commonData; + } +} diff --git a/src/main/java/gregtech/api/net/data/PacketData.java b/src/main/java/gregtech/api/net/data/PacketData.java new file mode 100644 index 0000000000..bde2b9fb76 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/PacketData.java @@ -0,0 +1,48 @@ +package gregtech.api.net.data; + +import javax.annotation.Nonnull; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +public abstract class PacketData<T extends Process> implements Comparable<PacketData<T>> { + + /** + * This should return the Id of the packet. The Id is is used to bit-shift to be added a header for the packet its + * used in + */ + public abstract int getId(); + + /** + * Called by the packet it is held by to store the data it needs + */ + public abstract void encode(@Nonnull ByteBuf out); + + /** + * Called by the packet it is held by to decode the data to later be used in {@link #process()} + */ + public abstract void decode(@Nonnull ByteArrayDataInput in); + + /** + * Called by the packet it is held by to process the data it decoded. + */ + public abstract void process(T processData); + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof PacketData otherData)) return false; + return this.getId() == otherData.getId(); + } + + @Override + public int hashCode() { + return getId(); + } + + @Override + public int compareTo(PacketData<T> other) { + return Integer.compare(this.getId(), other.getId()); + } +} diff --git a/src/main/java/gregtech/api/net/data/Process.java b/src/main/java/gregtech/api/net/data/Process.java new file mode 100644 index 0000000000..d5bc1317b7 --- /dev/null +++ b/src/main/java/gregtech/api/net/data/Process.java @@ -0,0 +1,6 @@ +package gregtech.api.net.data; + +public abstract class Process { + + public abstract void process(); +} |