From b75b4106fbb31a25cf76f35a70d7381b6f05b3f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 28 Jul 2021 01:45:46 +0200 Subject: [PATCH] Add message base class to make registration a lot less boiler-platey. --- .../cil/oc2/common/network/MessageUtils.java | 25 ++- .../li/cil/oc2/common/network/Network.java | 172 ++++-------------- .../network/message/AbstractMessage.java | 44 +++++ .../message/AbstractTerminalBlockMessage.java | 12 +- .../AbstractTerminalEntityMessage.java | 12 +- .../message/BusCableFacadeMessage.java | 30 +-- .../message/BusInterfaceNameMessage.java | 52 +++--- .../ClientCanceledImportFileMessage.java | 26 +-- .../message/ComputerBootErrorMessage.java | 28 +-- .../message/ComputerBusStateMessage.java | 28 +-- .../network/message/ComputerPowerMessage.java | 44 +++-- .../message/ComputerRunStateMessage.java | 28 +-- .../message/ComputerTerminalInputMessage.java | 9 +- .../ComputerTerminalOutputMessage.java | 9 +- .../message/DiskDriveFloppyMessage.java | 28 +-- .../network/message/ExportedFileMessage.java | 41 +++-- .../network/message/ImportedFileMessage.java | 30 +-- .../NetworkConnectorConnectionsMessage.java | 29 +-- .../message/RequestImportedFileMessage.java | 40 ++-- .../message/RobotBootErrorMessage.java | 28 +-- .../network/message/RobotBusStateMessage.java | 28 +-- .../message/RobotInitializationMessage.java | 44 ++--- .../RobotInitializationRequestMessage.java | 26 +-- .../network/message/RobotPowerMessage.java | 44 +++-- .../network/message/RobotRunStateMessage.java | 28 +-- .../message/RobotTerminalInputMessage.java | 9 +- .../message/RobotTerminalOutputMessage.java | 9 +- .../ServerCanceledImportFileMessage.java | 26 +-- 28 files changed, 457 insertions(+), 472 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/network/message/AbstractMessage.java diff --git a/src/main/java/li/cil/oc2/common/network/MessageUtils.java b/src/main/java/li/cil/oc2/common/network/MessageUtils.java index 31870579..590a1117 100644 --- a/src/main/java/li/cil/oc2/common/network/MessageUtils.java +++ b/src/main/java/li/cil/oc2/common/network/MessageUtils.java @@ -11,13 +11,12 @@ import net.minecraft.world.server.ServerWorld; import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Consumer; -import java.util.function.Supplier; public final class MessageUtils { @SuppressWarnings("unchecked") - public static void withServerTileEntityAt(final Supplier context, final BlockPos pos, final Class type, final Consumer callback) { - final ServerPlayerEntity player = context.get().getSender(); - if (player == null) { + public static void withNearbyServerTileEntityAt(final NetworkEvent.Context context, final BlockPos pos, final Class type, final Consumer callback) { + final ServerPlayerEntity player = context.getSender(); + if (player == null || !pos.closerThan(player.position(), 8)) { return; } @@ -29,8 +28,8 @@ public final class MessageUtils { } @SuppressWarnings("unchecked") - public static void withServerEntity(final Supplier context, final int id, final Class type, final Consumer callback) { - final ServerPlayerEntity player = context.get().getSender(); + public static void withServerEntity(final NetworkEvent.Context context, final int id, final Class type, final Consumer callback) { + final ServerPlayerEntity player = context.getSender(); if (player == null) { return; } @@ -42,6 +41,20 @@ public final class MessageUtils { } } + @SuppressWarnings("unchecked") + public static void withNearbyServerEntity(final NetworkEvent.Context context, final int id, final Class type, final Consumer callback) { + final ServerPlayerEntity player = context.getSender(); + if (player == null) { + return; + } + + final ServerWorld world = player.getLevel(); + final Entity entity = world.getEntity(id); + if (type.isInstance(entity) && entity.closerThan(player, 8)) { + callback.accept((T) entity); + } + } + @SuppressWarnings("unchecked") public static void withClientTileEntityAt(final BlockPos pos, final Class type, final Consumer callback) { final ClientWorld world = Minecraft.getInstance().level; diff --git a/src/main/java/li/cil/oc2/common/network/Network.java b/src/main/java/li/cil/oc2/common/network/Network.java index 7e5e7d64..01020481 100644 --- a/src/main/java/li/cil/oc2/common/network/Network.java +++ b/src/main/java/li/cil/oc2/common/network/Network.java @@ -3,6 +3,7 @@ package li.cil.oc2.common.network; import li.cil.oc2.api.API; import li.cil.oc2.common.network.message.*; import net.minecraft.entity.Entity; +import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.minecraft.world.chunk.Chunk; @@ -11,6 +12,8 @@ import net.minecraftforge.fml.network.NetworkRegistry; import net.minecraftforge.fml.network.PacketDistributor; import net.minecraftforge.fml.network.simple.SimpleChannel; +import java.util.function.Function; + public final class Network { private static final String PROTOCOL_VERSION = "1"; @@ -28,149 +31,36 @@ public final class Network { /////////////////////////////////////////////////////////////////// public static void initialize() { - INSTANCE.messageBuilder(ComputerTerminalOutputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ComputerTerminalOutputMessage::toBytes) - .decoder(ComputerTerminalOutputMessage::new) - .consumer(ComputerTerminalOutputMessage::handleMessage) - .add(); + registerMessage(ComputerTerminalOutputMessage.class, ComputerTerminalOutputMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ComputerTerminalInputMessage.class, ComputerTerminalInputMessage::new, NetworkDirection.PLAY_TO_SERVER); + registerMessage(ComputerRunStateMessage.class, ComputerRunStateMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ComputerBusStateMessage.class, ComputerBusStateMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ComputerBootErrorMessage.class, ComputerBootErrorMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ComputerPowerMessage.class, ComputerPowerMessage::new, NetworkDirection.PLAY_TO_SERVER); - INSTANCE.messageBuilder(ComputerTerminalInputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(ComputerTerminalInputMessage::toBytes) - .decoder(ComputerTerminalInputMessage::new) - .consumer(ComputerTerminalInputMessage::handleMessage) - .add(); + registerMessage(NetworkConnectorConnectionsMessage.class, NetworkConnectorConnectionsMessage::new, NetworkDirection.PLAY_TO_CLIENT); - INSTANCE.messageBuilder(ComputerRunStateMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ComputerRunStateMessage::toBytes) - .decoder(ComputerRunStateMessage::new) - .consumer(ComputerRunStateMessage::handleMessage) - .add(); + registerMessage(RobotTerminalOutputMessage.class, RobotTerminalOutputMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(RobotTerminalInputMessage.class, RobotTerminalInputMessage::new, NetworkDirection.PLAY_TO_SERVER); + registerMessage(RobotRunStateMessage.class, RobotRunStateMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(RobotBusStateMessage.class, RobotBusStateMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(RobotBootErrorMessage.class, RobotBootErrorMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(RobotPowerMessage.class, RobotPowerMessage::new, NetworkDirection.PLAY_TO_SERVER); + registerMessage(RobotInitializationRequestMessage.class, RobotInitializationRequestMessage::new, NetworkDirection.PLAY_TO_SERVER); + registerMessage(RobotInitializationMessage.class, RobotInitializationMessage::new, NetworkDirection.PLAY_TO_CLIENT); - INSTANCE.messageBuilder(ComputerBusStateMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ComputerBusStateMessage::toBytes) - .decoder(ComputerBusStateMessage::new) - .consumer(ComputerBusStateMessage::handleMessage) - .add(); + registerMessage(DiskDriveFloppyMessage.class, DiskDriveFloppyMessage::new, NetworkDirection.PLAY_TO_CLIENT); - INSTANCE.messageBuilder(ComputerBootErrorMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ComputerBootErrorMessage::toBytes) - .decoder(ComputerBootErrorMessage::new) - .consumer(ComputerBootErrorMessage::handleMessage) - .add(); + registerMessage(BusInterfaceNameMessage.ToClient.class, BusInterfaceNameMessage.ToClient::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(BusInterfaceNameMessage.ToServer.class, BusInterfaceNameMessage.ToServer::new, NetworkDirection.PLAY_TO_SERVER); - INSTANCE.messageBuilder(ComputerPowerMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(ComputerPowerMessage::toBytes) - .decoder(ComputerPowerMessage::new) - .consumer(ComputerPowerMessage::handleMessage) - .add(); + registerMessage(ExportedFileMessage.class, ExportedFileMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(RequestImportedFileMessage.class, RequestImportedFileMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ImportedFileMessage.class, ImportedFileMessage::new, NetworkDirection.PLAY_TO_SERVER); + registerMessage(ServerCanceledImportFileMessage.class, ServerCanceledImportFileMessage::new, NetworkDirection.PLAY_TO_CLIENT); + registerMessage(ClientCanceledImportFileMessage.class, ClientCanceledImportFileMessage::new, NetworkDirection.PLAY_TO_SERVER); - INSTANCE.messageBuilder(NetworkConnectorConnectionsMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(NetworkConnectorConnectionsMessage::toBytes) - .decoder(NetworkConnectorConnectionsMessage::new) - .consumer(NetworkConnectorConnectionsMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotTerminalOutputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RobotTerminalOutputMessage::toBytes) - .decoder(RobotTerminalOutputMessage::new) - .consumer(RobotTerminalOutputMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotTerminalInputMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(RobotTerminalInputMessage::toBytes) - .decoder(RobotTerminalInputMessage::new) - .consumer(RobotTerminalInputMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotRunStateMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RobotRunStateMessage::toBytes) - .decoder(RobotRunStateMessage::new) - .consumer(RobotRunStateMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotBusStateMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RobotBusStateMessage::toBytes) - .decoder(RobotBusStateMessage::new) - .consumer(RobotBusStateMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotBootErrorMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RobotBootErrorMessage::toBytes) - .decoder(RobotBootErrorMessage::new) - .consumer(RobotBootErrorMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotPowerMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(RobotPowerMessage::toBytes) - .decoder(RobotPowerMessage::new) - .consumer(RobotPowerMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotInitializationRequestMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(RobotInitializationRequestMessage::toBytes) - .decoder(RobotInitializationRequestMessage::new) - .consumer(RobotInitializationRequestMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RobotInitializationMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RobotInitializationMessage::toBytes) - .decoder(RobotInitializationMessage::new) - .consumer(RobotInitializationMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(DiskDriveFloppyMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(DiskDriveFloppyMessage::toBytes) - .decoder(DiskDriveFloppyMessage::new) - .consumer(DiskDriveFloppyMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(BusInterfaceNameMessage.ToClient.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(BusInterfaceNameMessage::toBytes) - .decoder(BusInterfaceNameMessage.ToClient::new) - .consumer(BusInterfaceNameMessage::handleMessageClient) - .add(); - - INSTANCE.messageBuilder(BusInterfaceNameMessage.ToServer.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(BusInterfaceNameMessage::toBytes) - .decoder(BusInterfaceNameMessage.ToServer::new) - .consumer(BusInterfaceNameMessage::handleMessageServer) - .add(); - - INSTANCE.messageBuilder(ExportedFileMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ExportedFileMessage::toBytes) - .decoder(ExportedFileMessage::new) - .consumer(ExportedFileMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(RequestImportedFileMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(RequestImportedFileMessage::toBytes) - .decoder(RequestImportedFileMessage::new) - .consumer(RequestImportedFileMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(ImportedFileMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(ImportedFileMessage::toBytes) - .decoder(ImportedFileMessage::new) - .consumer(ImportedFileMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(ServerCanceledImportFileMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(ServerCanceledImportFileMessage::toBytes) - .decoder(ServerCanceledImportFileMessage::new) - .consumer(ServerCanceledImportFileMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(ClientCanceledImportFileMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_SERVER) - .encoder(ClientCanceledImportFileMessage::toBytes) - .decoder(ClientCanceledImportFileMessage::new) - .consumer(ClientCanceledImportFileMessage::handleMessage) - .add(); - - INSTANCE.messageBuilder(BusCableFacadeMessage.class, getNextPacketId(), NetworkDirection.PLAY_TO_CLIENT) - .encoder(BusCableFacadeMessage::toBytes) - .decoder(BusCableFacadeMessage::new) - .consumer(BusCableFacadeMessage::handleMessage) - .add(); + registerMessage(BusCableFacadeMessage.class, BusCableFacadeMessage::new, NetworkDirection.PLAY_TO_CLIENT); } public static void sendToClientsTrackingChunk(final T message, final Chunk chunk) { @@ -188,6 +78,14 @@ public final class Network { /////////////////////////////////////////////////////////////////// + private static void registerMessage(final Class type, final Function decoder, final NetworkDirection direction) { + INSTANCE.messageBuilder(type, getNextPacketId(), direction) + .encoder(AbstractMessage::toBytes) + .decoder(decoder) + .consumer(AbstractMessage::handleMessage) + .add(); + } + private static int getNextPacketId() { return nextPacketId++; } diff --git a/src/main/java/li/cil/oc2/common/network/message/AbstractMessage.java b/src/main/java/li/cil/oc2/common/network/message/AbstractMessage.java new file mode 100644 index 00000000..74e7a269 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/network/message/AbstractMessage.java @@ -0,0 +1,44 @@ +package li.cil.oc2.common.network.message; + +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; +import org.apache.commons.lang3.NotImplementedException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.function.Supplier; + +public abstract class AbstractMessage { + protected static final Logger LOGGER = LogManager.getLogger(); + + /////////////////////////////////////////////////////////////////// + + protected AbstractMessage() { + } + + protected AbstractMessage(final PacketBuffer buffer) { + fromBytes(buffer); + } + + /////////////////////////////////////////////////////////////////// + + public static boolean handleMessage(final AbstractMessage message, final Supplier contextSupplier) { + message.handleMessage(contextSupplier); + return true; + } + + public abstract void fromBytes(final PacketBuffer buffer); + + public abstract void toBytes(final PacketBuffer buffer); + + /////////////////////////////////////////////////////////////////// + + protected void handleMessage(final Supplier contextSupplier) { + final NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> handleMessage(context)); + } + + protected void handleMessage(final NetworkEvent.Context context) { + throw new NotImplementedException("Message implements neither asynchronous nor synchronous handleMessage() method."); + } +} diff --git a/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalBlockMessage.java b/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalBlockMessage.java index b3f7badf..2e6c4036 100644 --- a/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalBlockMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalBlockMessage.java @@ -6,7 +6,7 @@ import net.minecraft.util.math.BlockPos; import java.nio.ByteBuffer; -public abstract class AbstractTerminalBlockMessage { +public abstract class AbstractTerminalBlockMessage extends AbstractMessage { protected BlockPos pos; protected byte[] data; @@ -18,18 +18,20 @@ public abstract class AbstractTerminalBlockMessage { } protected AbstractTerminalBlockMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); data = buffer.readByteArray(); } - public static void toBytes(final AbstractTerminalBlockMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeByteArray(message.data); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeByteArray(data); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalEntityMessage.java b/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalEntityMessage.java index 3e986266..5a1b4c73 100644 --- a/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalEntityMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/AbstractTerminalEntityMessage.java @@ -5,7 +5,7 @@ import net.minecraft.network.PacketBuffer; import java.nio.ByteBuffer; -public abstract class AbstractTerminalEntityMessage { +public abstract class AbstractTerminalEntityMessage extends AbstractMessage { protected int entityId; protected byte[] data; @@ -17,18 +17,20 @@ public abstract class AbstractTerminalEntityMessage { } protected AbstractTerminalEntityMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); data = buffer.readByteArray(); } - public static void toBytes(final AbstractTerminalEntityMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeByteArray(message.data); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeByteArray(data); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/BusCableFacadeMessage.java b/src/main/java/li/cil/oc2/common/network/message/BusCableFacadeMessage.java index 0b2babcc..76a0daa6 100644 --- a/src/main/java/li/cil/oc2/common/network/message/BusCableFacadeMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/BusCableFacadeMessage.java @@ -7,36 +7,40 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class BusCableFacadeMessage { +public final class BusCableFacadeMessage extends AbstractMessage { private BlockPos pos; private ItemStack stack; + /////////////////////////////////////////////////////////////////// + public BusCableFacadeMessage(final BlockPos pos, final ItemStack stack) { this.pos = pos; this.stack = stack; } public BusCableFacadeMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final BusCableFacadeMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, BusCableTileEntity.class, - (tileEntity) -> tileEntity.setFacade(message.stack))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); stack = buffer.readItem(); } - public static void toBytes(final BusCableFacadeMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeItem(message.stack); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeItem(stack); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, BusCableTileEntity.class, + (tileEntity) -> tileEntity.setFacade(stack)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/BusInterfaceNameMessage.java b/src/main/java/li/cil/oc2/common/network/message/BusInterfaceNameMessage.java index 5679a012..7f11b34f 100644 --- a/src/main/java/li/cil/oc2/common/network/message/BusInterfaceNameMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/BusInterfaceNameMessage.java @@ -5,15 +5,12 @@ import li.cil.oc2.common.tileentity.BusCableTileEntity; import net.minecraft.network.PacketBuffer; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public abstract class BusInterfaceNameMessage { - private BlockPos pos; - private Direction side; - private String value; +public abstract class BusInterfaceNameMessage extends AbstractMessage { + protected BlockPos pos; + protected Direction side; + protected String value; /////////////////////////////////////////////////////////////////// @@ -24,38 +21,23 @@ public abstract class BusInterfaceNameMessage { } protected BusInterfaceNameMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessageClient(final BusInterfaceNameMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, BusCableTileEntity.class, - (tileEntity) -> tileEntity.setInterfaceName(message.side, message.value))); - return true; - } - - public static boolean handleMessageServer(final BusInterfaceNameMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerTileEntityAt(context, message.pos, BusCableTileEntity.class, - (tileEntity) -> { - final Vector3d busCableCenter = Vector3d.atCenterOf(tileEntity.getBlockPos()); - if (context.get().getSender().distanceToSqr(busCableCenter) <= 8 * 8) { - tileEntity.setInterfaceName(message.side, message.value); - } - })); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); side = buffer.readEnum(Direction.class); value = buffer.readUtf(32); } - public static void toBytes(final BusInterfaceNameMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeEnum(message.side); - buffer.writeUtf(message.value, 32); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeEnum(side); + buffer.writeUtf(value, 32); } /////////////////////////////////////////////////////////////////// @@ -68,6 +50,12 @@ public abstract class BusInterfaceNameMessage { public ToClient(final PacketBuffer buffer) { super(buffer); } + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, BusCableTileEntity.class, + (tileEntity) -> tileEntity.setInterfaceName(side, value)); + } } public static final class ToServer extends BusInterfaceNameMessage { @@ -78,5 +66,11 @@ public abstract class BusInterfaceNameMessage { public ToServer(final PacketBuffer buffer) { super(buffer); } + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withNearbyServerTileEntityAt(context, pos, BusCableTileEntity.class, + (tileEntity) -> tileEntity.setInterfaceName(side, value)); + } } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ClientCanceledImportFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/ClientCanceledImportFileMessage.java index 90ec24b8..984c23e1 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ClientCanceledImportFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ClientCanceledImportFileMessage.java @@ -6,7 +6,7 @@ import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Supplier; -public final class ClientCanceledImportFileMessage { +public final class ClientCanceledImportFileMessage extends AbstractMessage { private int id; /////////////////////////////////////////////////////////////////// @@ -16,21 +16,25 @@ public final class ClientCanceledImportFileMessage { } public ClientCanceledImportFileMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ClientCanceledImportFileMessage message, final Supplier context) { - FileImportExportCardItemDevice.cancelImport(context.get().getSender(), message.id); - return true; - } - - public static void toBytes(final ClientCanceledImportFileMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.id); - } - + @Override public void fromBytes(final PacketBuffer buffer) { id = buffer.readVarInt(); } + + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(id); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final Supplier context) { + FileImportExportCardItemDevice.cancelImport(context.get().getSender(), id); + } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerBootErrorMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerBootErrorMessage.java index 8680d764..623fc2df 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerBootErrorMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerBootErrorMessage.java @@ -7,9 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class ComputerBootErrorMessage { +public final class ComputerBootErrorMessage extends AbstractMessage { private BlockPos pos; private ITextComponent value; @@ -21,24 +19,28 @@ public final class ComputerBootErrorMessage { } public ComputerBootErrorMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ComputerBootErrorMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, ComputerTileEntity.class, - (tileEntity) -> tileEntity.getVirtualMachine().setBootErrorClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); value = buffer.readComponent(); } - public static void toBytes(final ComputerBootErrorMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeComponent(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeComponent(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, ComputerTileEntity.class, + (tileEntity) -> tileEntity.getVirtualMachine().setBootErrorClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerBusStateMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerBusStateMessage.java index 062045b4..b6aa1bb3 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerBusStateMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerBusStateMessage.java @@ -7,9 +7,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class ComputerBusStateMessage { +public final class ComputerBusStateMessage extends AbstractMessage { private BlockPos pos; private CommonDeviceBusController.BusState value; @@ -21,24 +19,28 @@ public final class ComputerBusStateMessage { } public ComputerBusStateMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ComputerBusStateMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, ComputerTileEntity.class, - (tileEntity) -> tileEntity.getVirtualMachine().setBusStateClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); value = buffer.readEnum(CommonDeviceBusController.BusState.class); } - public static void toBytes(final ComputerBusStateMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeEnum(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeEnum(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, ComputerTileEntity.class, + (tileEntity) -> tileEntity.getVirtualMachine().setBusStateClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerPowerMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerPowerMessage.java index bc3f8e6c..8fb978c9 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerPowerMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerPowerMessage.java @@ -2,14 +2,11 @@ package li.cil.oc2.common.network.message; import li.cil.oc2.common.network.MessageUtils; import li.cil.oc2.common.tileentity.ComputerTileEntity; -import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class ComputerPowerMessage { +public final class ComputerPowerMessage extends AbstractMessage { private BlockPos pos; private boolean power; @@ -21,33 +18,34 @@ public final class ComputerPowerMessage { } public ComputerPowerMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ComputerPowerMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerTileEntityAt(context, message.pos, ComputerTileEntity.class, - (computer) -> { - final ServerPlayerEntity player = context.get().getSender(); - if (player != null && computer.getBlockPos().closerThan(player.position(), 8)) { - if (message.power) { - computer.start(); - } else { - computer.stop(); - } - } - })); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); power = buffer.readBoolean(); } - public static void toBytes(final ComputerPowerMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeBoolean(message.power); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeBoolean(power); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withNearbyServerTileEntityAt(context, pos, ComputerTileEntity.class, + (computer) -> { + if (power) { + computer.start(); + } else { + computer.stop(); + } + }); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerRunStateMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerRunStateMessage.java index abb20e02..745dd3cc 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerRunStateMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerRunStateMessage.java @@ -7,9 +7,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class ComputerRunStateMessage { +public final class ComputerRunStateMessage extends AbstractMessage { private BlockPos pos; private VMRunState value; @@ -21,24 +19,28 @@ public final class ComputerRunStateMessage { } public ComputerRunStateMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ComputerRunStateMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, ComputerTileEntity.class, - (tileEntity) -> tileEntity.getVirtualMachine().setRunStateClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); value = buffer.readEnum(VMRunState.class); } - public static void toBytes(final ComputerRunStateMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeEnum(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeEnum(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, ComputerTileEntity.class, + (tileEntity) -> tileEntity.getVirtualMachine().setRunStateClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalInputMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalInputMessage.java index 90d82538..ac4907d9 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalInputMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalInputMessage.java @@ -6,7 +6,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; import java.nio.ByteBuffer; -import java.util.function.Supplier; public final class ComputerTerminalInputMessage extends AbstractTerminalBlockMessage { public ComputerTerminalInputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { @@ -19,9 +18,9 @@ public final class ComputerTerminalInputMessage extends AbstractTerminalBlockMes /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final AbstractTerminalBlockMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerTileEntityAt(context, message.pos, ComputerTileEntity.class, - (tileEntity) -> tileEntity.getTerminal().putInput(ByteBuffer.wrap(message.data)))); - return true; + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withNearbyServerTileEntityAt(context, pos, ComputerTileEntity.class, + (tileEntity) -> tileEntity.getTerminal().putInput(ByteBuffer.wrap(data))); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalOutputMessage.java b/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalOutputMessage.java index 4acaa6d7..e04246f3 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalOutputMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ComputerTerminalOutputMessage.java @@ -6,7 +6,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; import java.nio.ByteBuffer; -import java.util.function.Supplier; public final class ComputerTerminalOutputMessage extends AbstractTerminalBlockMessage { public ComputerTerminalOutputMessage(final ComputerTileEntity tileEntity, final ByteBuffer data) { @@ -19,9 +18,9 @@ public final class ComputerTerminalOutputMessage extends AbstractTerminalBlockMe /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final AbstractTerminalBlockMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, ComputerTileEntity.class, - tileEntity -> tileEntity.getTerminal().putOutput(ByteBuffer.wrap(message.data)))); - return true; + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, ComputerTileEntity.class, + tileEntity -> tileEntity.getTerminal().putOutput(ByteBuffer.wrap(data))); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/DiskDriveFloppyMessage.java b/src/main/java/li/cil/oc2/common/network/message/DiskDriveFloppyMessage.java index a8caed78..b7454104 100644 --- a/src/main/java/li/cil/oc2/common/network/message/DiskDriveFloppyMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/DiskDriveFloppyMessage.java @@ -8,9 +8,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class DiskDriveFloppyMessage { +public final class DiskDriveFloppyMessage extends AbstractMessage { private BlockPos pos; private CompoundNBT data; @@ -22,24 +20,28 @@ public final class DiskDriveFloppyMessage { } public DiskDriveFloppyMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final DiskDriveFloppyMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, DiskDriveTileEntity.class, - (diskDrive) -> diskDrive.setFloppyClient(ItemStack.of(message.data)))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); data = buffer.readNbt(); } - public static void toBytes(final DiskDriveFloppyMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeNbt(message.data); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeNbt(data); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, DiskDriveTileEntity.class, + (diskDrive) -> diskDrive.setFloppyClient(ItemStack.of(data))); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ExportedFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/ExportedFileMessage.java index 7a7cda98..34082605 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ExportedFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ExportedFileMessage.java @@ -8,9 +8,8 @@ import org.apache.logging.log4j.Logger; import java.io.IOException; import java.nio.file.Files; -import java.util.function.Supplier; -public final class ExportedFileMessage { +public final class ExportedFileMessage extends AbstractMessage { private static final Logger LOGGER = LogManager.getLogger(); /////////////////////////////////////////////////////////////////// @@ -26,30 +25,32 @@ public final class ExportedFileMessage { } public ExportedFileMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ExportedFileMessage message, final Supplier context) { - context.get().enqueueWork(() -> FileChooserScreen.openFileChooserForSave(message.name, path -> { - try { - Files.write(path, message.data); - } catch (final IOException e) { - LOGGER.error(e); - } - })); - - return true; - } - - public static void toBytes(final ExportedFileMessage message, final PacketBuffer buffer) { - buffer.writeUtf(message.name); - buffer.writeByteArray(message.data); - } - + @Override public void fromBytes(final PacketBuffer buffer) { name = buffer.readUtf(); data = buffer.readByteArray(); } + + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeUtf(name); + buffer.writeByteArray(data); + } + + /////////////////////////////////////////////////////////////////// + + protected void handleMessage(final NetworkEvent.Context context) { + FileChooserScreen.openFileChooserForSave(name, path -> { + try { + Files.write(path, data); + } catch (final IOException e) { + LOGGER.error(e); + } + }); + } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ImportedFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/ImportedFileMessage.java index f77ccf58..850af006 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ImportedFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ImportedFileMessage.java @@ -6,7 +6,7 @@ import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Supplier; -public final class ImportedFileMessage { +public final class ImportedFileMessage extends AbstractMessage { private static final int MAX_NAME_LENGTH = 256; /////////////////////////////////////////////////////////////////// @@ -24,25 +24,29 @@ public final class ImportedFileMessage { } public ImportedFileMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ImportedFileMessage message, final Supplier context) { - FileImportExportCardItemDevice.setImportedFile(message.id, message.name, message.data); - return true; - } - - public static void toBytes(final ImportedFileMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.id); - buffer.writeUtf(message.name, MAX_NAME_LENGTH); - buffer.writeByteArray(message.data); - } - + @Override public void fromBytes(final PacketBuffer buffer) { id = buffer.readVarInt(); name = buffer.readUtf(MAX_NAME_LENGTH); data = buffer.readByteArray(); } + + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(id); + buffer.writeUtf(name, MAX_NAME_LENGTH); + buffer.writeByteArray(data); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final Supplier context) { + FileImportExportCardItemDevice.setImportedFile(id, name, data); + } } diff --git a/src/main/java/li/cil/oc2/common/network/message/NetworkConnectorConnectionsMessage.java b/src/main/java/li/cil/oc2/common/network/message/NetworkConnectorConnectionsMessage.java index c8fcfbbd..6cc06aba 100644 --- a/src/main/java/li/cil/oc2/common/network/message/NetworkConnectorConnectionsMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/NetworkConnectorConnectionsMessage.java @@ -7,9 +7,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.network.NetworkEvent; import java.util.ArrayList; -import java.util.function.Supplier; -public final class NetworkConnectorConnectionsMessage { +public final class NetworkConnectorConnectionsMessage extends AbstractMessage { private BlockPos pos; private ArrayList connectedPositions; @@ -21,17 +20,12 @@ public final class NetworkConnectorConnectionsMessage { } public NetworkConnectorConnectionsMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final NetworkConnectorConnectionsMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientTileEntityAt(message.pos, NetworkConnectorTileEntity.class, - (tileEntity) -> tileEntity.setConnectedPositionsClient(message.connectedPositions))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { pos = buffer.readBlockPos(); connectedPositions = new ArrayList<>(); @@ -42,11 +36,20 @@ public final class NetworkConnectorConnectionsMessage { } } - public static void toBytes(final NetworkConnectorConnectionsMessage message, final PacketBuffer buffer) { - buffer.writeBlockPos(message.pos); - buffer.writeVarInt(message.connectedPositions.size()); - for (final BlockPos pos : message.connectedPositions) { + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeBlockPos(pos); + buffer.writeVarInt(connectedPositions.size()); + for (final BlockPos pos : connectedPositions) { buffer.writeBlockPos(pos); } } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientTileEntityAt(pos, NetworkConnectorTileEntity.class, + (tileEntity) -> tileEntity.setConnectedPositionsClient(connectedPositions)); + } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java index 6d7239fd..34bdcf3d 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RequestImportedFileMessage.java @@ -14,11 +14,10 @@ import org.apache.logging.log4j.Logger; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.function.Supplier; import static li.cil.oc2.common.util.TranslationUtils.text; -public final class RequestImportedFileMessage { +public final class RequestImportedFileMessage extends AbstractMessage { private static final Logger LOGGER = LogManager.getLogger(); private static final TranslationTextComponent FILE_TOO_LARGE_TEXT = text("message.{mod}.import_file.file_too_large"); @@ -33,24 +32,37 @@ public final class RequestImportedFileMessage { } public RequestImportedFileMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RequestImportedFileMessage message, final Supplier context) { - context.get().enqueueWork(() -> FileChooserScreen.openFileChooserForLoad(new FileChooserScreen.FileChooserCallback() { + @Override + public void fromBytes(final PacketBuffer buffer) { + id = buffer.readVarInt(); + } + + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(id); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + FileChooserScreen.openFileChooserForLoad(new FileChooserScreen.FileChooserCallback() { @Override public void onFileSelected(final Path path) { try { final String fileName = path.getFileName().toString(); final byte[] data = Files.readAllBytes(path); if (data.length > FileImportExportCardItemDevice.MAX_TRANSFERRED_FILE_SIZE) { - Network.INSTANCE.sendToServer(new ClientCanceledImportFileMessage(message.id)); + Network.INSTANCE.sendToServer(new ClientCanceledImportFileMessage(id)); Minecraft.getInstance().player.displayClientMessage(FILE_TOO_LARGE_TEXT .withStyle(s -> s.withColor(Color.fromRgb(0xFFA0A0))), false); } else { - Network.INSTANCE.sendToServer(new ImportedFileMessage(message.id, fileName, data)); + Network.INSTANCE.sendToServer(new ImportedFileMessage(id, fileName, data)); } } catch (final IOException e) { LOGGER.error(e); @@ -59,18 +71,8 @@ public final class RequestImportedFileMessage { @Override public void onCanceled() { - Network.INSTANCE.sendToServer(new ClientCanceledImportFileMessage(message.id)); + Network.INSTANCE.sendToServer(new ClientCanceledImportFileMessage(id)); } - })); - - return true; - } - - public static void toBytes(final RequestImportedFileMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.id); - } - - public void fromBytes(final PacketBuffer buffer) { - id = buffer.readVarInt(); + }); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotBootErrorMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotBootErrorMessage.java index 5f607ce0..86713828 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotBootErrorMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotBootErrorMessage.java @@ -6,9 +6,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotBootErrorMessage { +public final class RobotBootErrorMessage extends AbstractMessage { private int entityId; private ITextComponent value; @@ -20,24 +18,28 @@ public final class RobotBootErrorMessage { } public RobotBootErrorMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotBootErrorMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientEntity(message.entityId, RobotEntity.class, - (robot) -> robot.getVirtualMachine().setBootErrorClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); value = buffer.readComponent(); } - public static void toBytes(final RobotBootErrorMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeComponent(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeComponent(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientEntity(entityId, RobotEntity.class, + (robot) -> robot.getVirtualMachine().setBootErrorClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotBusStateMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotBusStateMessage.java index f8632203..df16ce25 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotBusStateMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotBusStateMessage.java @@ -6,9 +6,7 @@ import li.cil.oc2.common.network.MessageUtils; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotBusStateMessage { +public final class RobotBusStateMessage extends AbstractMessage { private int entityId; private CommonDeviceBusController.BusState value; @@ -20,24 +18,28 @@ public final class RobotBusStateMessage { } public RobotBusStateMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotBusStateMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientEntity(message.entityId, RobotEntity.class, - (robot) -> robot.getVirtualMachine().setBusStateClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); value = buffer.readEnum(CommonDeviceBusController.BusState.class); } - public static void toBytes(final RobotBusStateMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeEnum(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeEnum(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientEntity(entityId, RobotEntity.class, + (robot) -> robot.getVirtualMachine().setBusStateClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotInitializationMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotInitializationMessage.java index 4ec89cc5..0962d638 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotInitializationMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotInitializationMessage.java @@ -10,9 +10,7 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotInitializationMessage { +public final class RobotInitializationMessage extends AbstractMessage { private int entityId; private CommonDeviceBusController.BusState busState; private VMRunState runState; @@ -30,22 +28,12 @@ public final class RobotInitializationMessage { } public RobotInitializationMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotInitializationMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientEntity(message.entityId, RobotEntity.class, - (robot) -> { - robot.getVirtualMachine().setBusStateClient(message.busState); - robot.getVirtualMachine().setRunStateClient(message.runState); - robot.getVirtualMachine().setBootErrorClient(message.bootError); - NBTSerialization.deserialize(message.terminal, robot.getTerminal()); - })); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); busState = buffer.readEnum(CommonDeviceBusController.BusState.class); @@ -54,11 +42,25 @@ public final class RobotInitializationMessage { terminal = buffer.readNbt(); } - public static void toBytes(final RobotInitializationMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeEnum(message.busState); - buffer.writeEnum(message.runState); - buffer.writeComponent(message.bootError); - buffer.writeNbt(message.terminal); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeEnum(busState); + buffer.writeEnum(runState); + buffer.writeComponent(bootError); + buffer.writeNbt(terminal); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientEntity(entityId, RobotEntity.class, + (robot) -> { + robot.getVirtualMachine().setBusStateClient(busState); + robot.getVirtualMachine().setRunStateClient(runState); + robot.getVirtualMachine().setBootErrorClient(bootError); + NBTSerialization.deserialize(terminal, robot.getTerminal()); + }); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotInitializationRequestMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotInitializationRequestMessage.java index a16ab68e..5fc3fe7e 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotInitializationRequestMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotInitializationRequestMessage.java @@ -6,9 +6,7 @@ import li.cil.oc2.common.network.Network; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotInitializationRequestMessage { +public final class RobotInitializationRequestMessage extends AbstractMessage { private int entityId; /////////////////////////////////////////////////////////////////// @@ -18,22 +16,26 @@ public final class RobotInitializationRequestMessage { } public RobotInitializationRequestMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotInitializationRequestMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerEntity(context, message.entityId, RobotEntity.class, - (robot) -> Network.INSTANCE.reply(new RobotInitializationMessage(robot), context.get()))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); } - public static void toBytes(final RobotInitializationRequestMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withServerEntity(context, entityId, RobotEntity.class, + (robot) -> Network.INSTANCE.reply(new RobotInitializationMessage(robot), context)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotPowerMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotPowerMessage.java index 7d5ad07c..eb142d09 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotPowerMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotPowerMessage.java @@ -2,13 +2,10 @@ package li.cil.oc2.common.network.message; import li.cil.oc2.common.entity.RobotEntity; import li.cil.oc2.common.network.MessageUtils; -import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotPowerMessage { +public final class RobotPowerMessage extends AbstractMessage { private int entityId; private boolean power; @@ -20,33 +17,34 @@ public final class RobotPowerMessage { } public RobotPowerMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotPowerMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerEntity(context, message.entityId, RobotEntity.class, - (robot) -> { - final ServerPlayerEntity player = context.get().getSender(); - if (player != null && robot.closerThan(player, 8)) { - if (message.power) { - robot.start(); - } else { - robot.stop(); - } - } - })); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); power = buffer.readBoolean(); } - public static void toBytes(final RobotPowerMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeBoolean(message.power); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeBoolean(power); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withNearbyServerEntity(context, entityId, RobotEntity.class, + (robot) -> { + if (power) { + robot.start(); + } else { + robot.stop(); + } + }); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotRunStateMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotRunStateMessage.java index 7d0973e0..0ef3d473 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotRunStateMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotRunStateMessage.java @@ -6,9 +6,7 @@ import li.cil.oc2.common.vm.VMRunState; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.function.Supplier; - -public final class RobotRunStateMessage { +public final class RobotRunStateMessage extends AbstractMessage { private int entityId; private VMRunState value; @@ -20,24 +18,28 @@ public final class RobotRunStateMessage { } public RobotRunStateMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final RobotRunStateMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientEntity(message.entityId, RobotEntity.class, - (robot) -> robot.getVirtualMachine().setRunStateClient(message.value))); - return true; - } - + @Override public void fromBytes(final PacketBuffer buffer) { entityId = buffer.readVarInt(); value = buffer.readEnum(VMRunState.class); } - public static void toBytes(final RobotRunStateMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.entityId); - buffer.writeEnum(message.value); + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(entityId); + buffer.writeEnum(value); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientEntity(entityId, RobotEntity.class, + (robot) -> robot.getVirtualMachine().setRunStateClient(value)); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotTerminalInputMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotTerminalInputMessage.java index 52578804..84e5146f 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotTerminalInputMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotTerminalInputMessage.java @@ -6,7 +6,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; import java.nio.ByteBuffer; -import java.util.function.Supplier; public final class RobotTerminalInputMessage extends AbstractTerminalEntityMessage { public RobotTerminalInputMessage(final RobotEntity robot, final ByteBuffer data) { @@ -19,9 +18,9 @@ public final class RobotTerminalInputMessage extends AbstractTerminalEntityMessa /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final AbstractTerminalEntityMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withServerEntity(context, message.entityId, RobotEntity.class, - (tileEntity) -> tileEntity.getTerminal().putInput(ByteBuffer.wrap(message.data)))); - return true; + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withNearbyServerEntity(context, entityId, RobotEntity.class, + (tileEntity) -> tileEntity.getTerminal().putInput(ByteBuffer.wrap(data))); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/RobotTerminalOutputMessage.java b/src/main/java/li/cil/oc2/common/network/message/RobotTerminalOutputMessage.java index 69cecb78..30e4dd99 100644 --- a/src/main/java/li/cil/oc2/common/network/message/RobotTerminalOutputMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/RobotTerminalOutputMessage.java @@ -6,7 +6,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; import java.nio.ByteBuffer; -import java.util.function.Supplier; public final class RobotTerminalOutputMessage extends AbstractTerminalEntityMessage { public RobotTerminalOutputMessage(final RobotEntity robot, final ByteBuffer data) { @@ -19,9 +18,9 @@ public final class RobotTerminalOutputMessage extends AbstractTerminalEntityMess /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final AbstractTerminalEntityMessage message, final Supplier context) { - context.get().enqueueWork(() -> MessageUtils.withClientEntity(message.entityId, RobotEntity.class, - robot -> robot.getTerminal().putOutput(ByteBuffer.wrap(message.data)))); - return true; + @Override + protected void handleMessage(final NetworkEvent.Context context) { + MessageUtils.withClientEntity(entityId, RobotEntity.class, + robot -> robot.getTerminal().putOutput(ByteBuffer.wrap(data))); } } diff --git a/src/main/java/li/cil/oc2/common/network/message/ServerCanceledImportFileMessage.java b/src/main/java/li/cil/oc2/common/network/message/ServerCanceledImportFileMessage.java index c99243d0..2080507d 100644 --- a/src/main/java/li/cil/oc2/common/network/message/ServerCanceledImportFileMessage.java +++ b/src/main/java/li/cil/oc2/common/network/message/ServerCanceledImportFileMessage.java @@ -6,7 +6,7 @@ import net.minecraftforge.fml.network.NetworkEvent; import java.util.function.Supplier; -public final class ServerCanceledImportFileMessage { +public final class ServerCanceledImportFileMessage extends AbstractMessage { private int id; /////////////////////////////////////////////////////////////////// @@ -16,21 +16,25 @@ public final class ServerCanceledImportFileMessage { } public ServerCanceledImportFileMessage(final PacketBuffer buffer) { - fromBytes(buffer); + super(buffer); } /////////////////////////////////////////////////////////////////// - public static boolean handleMessage(final ServerCanceledImportFileMessage message, final Supplier context) { - FileImportExportCardItemDevice.cancelImport(context.get().getSender(), message.id); - return true; - } - - public static void toBytes(final ServerCanceledImportFileMessage message, final PacketBuffer buffer) { - buffer.writeVarInt(message.id); - } - + @Override public void fromBytes(final PacketBuffer buffer) { id = buffer.readVarInt(); } + + @Override + public void toBytes(final PacketBuffer buffer) { + buffer.writeVarInt(id); + } + + /////////////////////////////////////////////////////////////////// + + @Override + protected void handleMessage(final Supplier context) { + FileImportExportCardItemDevice.cancelImport(context.get().getSender(), id); + } }