diff --git a/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java b/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java index a2ac3451e..3d4fd5143 100644 --- a/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java +++ b/src/main/java/dan200/computercraft/shared/network/NetworkHandler.java @@ -43,17 +43,17 @@ public static void setup() .simpleChannel(); // Server messages - registerMainThread( 0, NetworkDirection.PLAY_TO_SERVER, ComputerActionServerMessage::new ); - registerMainThread( 1, NetworkDirection.PLAY_TO_SERVER, QueueEventServerMessage::new ); - registerMainThread( 2, NetworkDirection.PLAY_TO_SERVER, RequestComputerMessage::new ); - registerMainThread( 3, NetworkDirection.PLAY_TO_SERVER, KeyEventServerMessage::new ); - registerMainThread( 4, NetworkDirection.PLAY_TO_SERVER, MouseEventServerMessage::new ); + registerMainThread( 0, NetworkDirection.PLAY_TO_SERVER, ComputerActionServerMessage.class, ComputerActionServerMessage::new ); + registerMainThread( 1, NetworkDirection.PLAY_TO_SERVER, QueueEventServerMessage.class, QueueEventServerMessage::new ); + registerMainThread( 2, NetworkDirection.PLAY_TO_SERVER, RequestComputerMessage.class, RequestComputerMessage::new ); + registerMainThread( 3, NetworkDirection.PLAY_TO_SERVER, KeyEventServerMessage.class, KeyEventServerMessage::new ); + registerMainThread( 4, NetworkDirection.PLAY_TO_SERVER, MouseEventServerMessage.class, MouseEventServerMessage::new ); // Client messages - registerMainThread( 10, NetworkDirection.PLAY_TO_CLIENT, ChatTableClientMessage::new ); - registerMainThread( 11, NetworkDirection.PLAY_TO_CLIENT, ComputerDataClientMessage::new ); - registerMainThread( 12, NetworkDirection.PLAY_TO_CLIENT, ComputerDeletedClientMessage::new ); - registerMainThread( 13, NetworkDirection.PLAY_TO_CLIENT, ComputerTerminalClientMessage::new ); + registerMainThread( 10, NetworkDirection.PLAY_TO_CLIENT, ChatTableClientMessage.class, ChatTableClientMessage::new ); + registerMainThread( 11, NetworkDirection.PLAY_TO_CLIENT, ComputerDataClientMessage.class, ComputerDataClientMessage::new ); + registerMainThread( 12, NetworkDirection.PLAY_TO_CLIENT, ComputerDeletedClientMessage.class, ComputerDeletedClientMessage::new ); + registerMainThread( 13, NetworkDirection.PLAY_TO_CLIENT, ComputerTerminalClientMessage.class, ComputerTerminalClientMessage::new ); registerMainThread( 14, NetworkDirection.PLAY_TO_CLIENT, PlayRecordClientMessage.class, PlayRecordClientMessage::new ); registerMainThread( 15, NetworkDirection.PLAY_TO_CLIENT, MonitorClientMessage.class, MonitorClientMessage::new ); registerMainThread( 16, NetworkDirection.PLAY_TO_CLIENT, SpeakerPlayClientMessage.class, SpeakerPlayClientMessage::new ); @@ -90,24 +90,6 @@ public static void sendToAllTracking( NetworkMessage packet, Chunk chunk ) network.send( PacketDistributor.TRACKING_CHUNK.with( () -> chunk ), packet ); } - /** - * /** - * Register packet, and a thread-unsafe handler for it. - * - * @param The type of the packet to send. - * @param id The identifier for this packet type. - * @param direction A network direction which will be asserted before any processing of this message occurs. - * @param factory The factory for this type of packet. - */ - private static void registerMainThread( int id, NetworkDirection direction, Supplier factory ) - { - registerMainThread( id, direction, getType( factory ), buf -> { - T instance = factory.get(); - instance.fromBytes( buf ); - return instance; - } ); - } - /** * /** * Register packet, and a thread-unsafe handler for it. diff --git a/src/main/java/dan200/computercraft/shared/network/NetworkMessage.java b/src/main/java/dan200/computercraft/shared/network/NetworkMessage.java index da49d0aa7..629223232 100644 --- a/src/main/java/dan200/computercraft/shared/network/NetworkMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/NetworkMessage.java @@ -27,18 +27,6 @@ public interface NetworkMessage */ void toBytes( @Nonnull PacketBuffer buf ); - /** - * Read this packet from a buffer. - * - * This may be called on any thread, so this should be a pure operation. - * - * @param buf The buffer to read data from. - */ - default void fromBytes( @Nonnull PacketBuffer buf ) - { - throw new IllegalStateException( "Should have been registered using a \"from bytes\" method" ); - } - /** * Handle this {@link NetworkMessage}. * diff --git a/src/main/java/dan200/computercraft/shared/network/client/ChatTableClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/ChatTableClientMessage.java index b3baff2c6..1fb1a974f 100644 --- a/src/main/java/dan200/computercraft/shared/network/client/ChatTableClientMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/client/ChatTableClientMessage.java @@ -16,7 +16,7 @@ public class ChatTableClientMessage implements NetworkMessage { - private TableBuilder table; + private final TableBuilder table; public ChatTableClientMessage( TableBuilder table ) { @@ -24,32 +24,7 @@ public ChatTableClientMessage( TableBuilder table ) this.table = table; } - public ChatTableClientMessage() - { - } - - @Override - public void toBytes( @Nonnull PacketBuffer buf ) - { - buf.writeVarInt( table.getId() ); - buf.writeVarInt( table.getColumns() ); - buf.writeBoolean( table.getHeaders() != null ); - if( table.getHeaders() != null ) - { - for( ITextComponent header : table.getHeaders() ) buf.writeComponent( header ); - } - - buf.writeVarInt( table.getRows().size() ); - for( ITextComponent[] row : table.getRows() ) - { - for( ITextComponent column : row ) buf.writeComponent( column ); - } - - buf.writeVarInt( table.getAdditional() ); - } - - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) + public ChatTableClientMessage( @Nonnull PacketBuffer buf ) { int id = buf.readVarInt(); int columns = buf.readVarInt(); @@ -77,6 +52,26 @@ public void fromBytes( @Nonnull PacketBuffer buf ) this.table = table; } + @Override + public void toBytes( @Nonnull PacketBuffer buf ) + { + buf.writeVarInt( table.getId() ); + buf.writeVarInt( table.getColumns() ); + buf.writeBoolean( table.getHeaders() != null ); + if( table.getHeaders() != null ) + { + for( ITextComponent header : table.getHeaders() ) buf.writeComponent( header ); + } + + buf.writeVarInt( table.getRows().size() ); + for( ITextComponent[] row : table.getRows() ) + { + for( ITextComponent column : row ) buf.writeComponent( column ); + } + + buf.writeVarInt( table.getAdditional() ); + } + @Override public void handle( NetworkEvent.Context context ) { diff --git a/src/main/java/dan200/computercraft/shared/network/client/ComputerClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/ComputerClientMessage.java index ebdf2cc87..9623622b5 100644 --- a/src/main/java/dan200/computercraft/shared/network/client/ComputerClientMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/client/ComputerClientMessage.java @@ -17,15 +17,16 @@ */ public abstract class ComputerClientMessage implements NetworkMessage { - private int instanceId; + private final int instanceId; public ComputerClientMessage( int instanceId ) { this.instanceId = instanceId; } - public ComputerClientMessage() + public ComputerClientMessage( @Nonnull PacketBuffer buf ) { + instanceId = buf.readVarInt(); } public int getInstanceId() @@ -39,12 +40,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeVarInt( instanceId ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - instanceId = buf.readVarInt(); - } - public ClientComputer getComputer() { ClientComputer computer = ComputerCraft.clientComputerRegistry.get( instanceId ); diff --git a/src/main/java/dan200/computercraft/shared/network/client/ComputerDataClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/ComputerDataClientMessage.java index d2ec44e87..d13be3198 100644 --- a/src/main/java/dan200/computercraft/shared/network/client/ComputerDataClientMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/client/ComputerDataClientMessage.java @@ -18,8 +18,8 @@ */ public class ComputerDataClientMessage extends ComputerClientMessage { - private ComputerState state; - private CompoundNBT userData; + private final ComputerState state; + private final CompoundNBT userData; public ComputerDataClientMessage( ServerComputer computer ) { @@ -28,8 +28,11 @@ public ComputerDataClientMessage( ServerComputer computer ) userData = computer.getUserData(); } - public ComputerDataClientMessage() + public ComputerDataClientMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + state = buf.readEnum( ComputerState.class ); + userData = buf.readNbt(); } @Override @@ -40,14 +43,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeNbt( userData ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - state = buf.readEnum( ComputerState.class ); - userData = buf.readNbt(); - } - @Override public void handle( NetworkEvent.Context context ) { diff --git a/src/main/java/dan200/computercraft/shared/network/client/ComputerDeletedClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/ComputerDeletedClientMessage.java index 033e8f19a..22e6069d6 100644 --- a/src/main/java/dan200/computercraft/shared/network/client/ComputerDeletedClientMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/client/ComputerDeletedClientMessage.java @@ -6,6 +6,7 @@ package dan200.computercraft.shared.network.client; import dan200.computercraft.ComputerCraft; +import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; public class ComputerDeletedClientMessage extends ComputerClientMessage @@ -15,8 +16,9 @@ public ComputerDeletedClientMessage( int instanceId ) super( instanceId ); } - public ComputerDeletedClientMessage() + public ComputerDeletedClientMessage( PacketBuffer buffer ) { + super( buffer ); } @Override diff --git a/src/main/java/dan200/computercraft/shared/network/client/ComputerTerminalClientMessage.java b/src/main/java/dan200/computercraft/shared/network/client/ComputerTerminalClientMessage.java index 29eea30ee..824f007e6 100644 --- a/src/main/java/dan200/computercraft/shared/network/client/ComputerTerminalClientMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/client/ComputerTerminalClientMessage.java @@ -12,7 +12,7 @@ public class ComputerTerminalClientMessage extends ComputerClientMessage { - private TerminalState state; + private final TerminalState state; public ComputerTerminalClientMessage( int instanceId, TerminalState state ) { @@ -20,8 +20,10 @@ public ComputerTerminalClientMessage( int instanceId, TerminalState state ) this.state = state; } - public ComputerTerminalClientMessage() + public ComputerTerminalClientMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + state = new TerminalState( buf ); } @Override @@ -31,13 +33,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) state.write( buf ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - state = new TerminalState( buf ); - } - @Override public void handle( NetworkEvent.Context context ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/ComputerActionServerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/ComputerActionServerMessage.java index 2590e33b7..f65559bba 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/ComputerActionServerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/ComputerActionServerMessage.java @@ -13,7 +13,7 @@ public class ComputerActionServerMessage extends ComputerServerMessage { - private Action action; + private final Action action; public ComputerActionServerMessage( int instanceId, Action action ) { @@ -21,8 +21,10 @@ public ComputerActionServerMessage( int instanceId, Action action ) this.action = action; } - public ComputerActionServerMessage() + public ComputerActionServerMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + action = buf.readEnum( Action.class ); } @Override @@ -32,13 +34,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeEnum( action ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - action = buf.readEnum( Action.class ); - } - @Override protected void handle( @Nonnull ServerComputer computer, @Nonnull IContainerComputer container ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/ComputerServerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/ComputerServerMessage.java index 637494dfd..27c071416 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/ComputerServerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/ComputerServerMessage.java @@ -22,15 +22,16 @@ */ public abstract class ComputerServerMessage implements NetworkMessage { - private int instanceId; + private final int instanceId; public ComputerServerMessage( int instanceId ) { this.instanceId = instanceId; } - public ComputerServerMessage() + public ComputerServerMessage( @Nonnull PacketBuffer buf ) { + instanceId = buf.readVarInt(); } @Override @@ -39,12 +40,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeVarInt( instanceId ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - instanceId = buf.readVarInt(); - } - @Override public void handle( NetworkEvent.Context context ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/KeyEventServerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/KeyEventServerMessage.java index 35a156916..506127bb5 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/KeyEventServerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/KeyEventServerMessage.java @@ -18,8 +18,8 @@ public class KeyEventServerMessage extends ComputerServerMessage public static final int TYPE_REPEAT = 1; public static final int TYPE_UP = 2; - private int type; - private int key; + private final int type; + private final int key; public KeyEventServerMessage( int instanceId, int type, int key ) { @@ -28,8 +28,11 @@ public KeyEventServerMessage( int instanceId, int type, int key ) this.key = key; } - public KeyEventServerMessage() + public KeyEventServerMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + type = buf.readByte(); + key = buf.readVarInt(); } @Override @@ -40,14 +43,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeVarInt( key ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - type = buf.readByte(); - key = buf.readVarInt(); - } - @Override protected void handle( @Nonnull ServerComputer computer, @Nonnull IContainerComputer container ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/MouseEventServerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/MouseEventServerMessage.java index bad6556a8..2fa73fb63 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/MouseEventServerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/MouseEventServerMessage.java @@ -19,10 +19,10 @@ public class MouseEventServerMessage extends ComputerServerMessage public static final int TYPE_UP = 2; public static final int TYPE_SCROLL = 3; - private int type; - private int x; - private int y; - private int arg; + private final int type; + private final int x; + private final int y; + private final int arg; public MouseEventServerMessage( int instanceId, int type, int arg, int x, int y ) { @@ -33,8 +33,13 @@ public MouseEventServerMessage( int instanceId, int type, int arg, int x, int y this.y = y; } - public MouseEventServerMessage() + public MouseEventServerMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + type = buf.readByte(); + arg = buf.readVarInt(); + x = buf.readVarInt(); + y = buf.readVarInt(); } @Override @@ -47,16 +52,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeVarInt( y ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - type = buf.readByte(); - arg = buf.readVarInt(); - x = buf.readVarInt(); - y = buf.readVarInt(); - } - @Override protected void handle( @Nonnull ServerComputer computer, @Nonnull IContainerComputer container ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/QueueEventServerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/QueueEventServerMessage.java index a0ca4c06e..e6e45f6dd 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/QueueEventServerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/QueueEventServerMessage.java @@ -22,8 +22,8 @@ */ public class QueueEventServerMessage extends ComputerServerMessage { - private String event; - private Object[] args; + private final String event; + private final Object[] args; public QueueEventServerMessage( int instanceId, @Nonnull String event, @Nullable Object[] args ) { @@ -32,8 +32,13 @@ public QueueEventServerMessage( int instanceId, @Nonnull String event, @Nullable this.args = args; } - public QueueEventServerMessage() + public QueueEventServerMessage( @Nonnull PacketBuffer buf ) { + super( buf ); + event = buf.readUtf( Short.MAX_VALUE ); + + CompoundNBT args = buf.readNbt(); + this.args = args == null ? null : NBTUtil.decodeObjects( args ); } @Override @@ -44,16 +49,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeNbt( args == null ? null : NBTUtil.encodeObjects( args ) ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - super.fromBytes( buf ); - event = buf.readUtf( Short.MAX_VALUE ); - - CompoundNBT args = buf.readNbt(); - this.args = args == null ? null : NBTUtil.decodeObjects( args ); - } - @Override protected void handle( @Nonnull ServerComputer computer, @Nonnull IContainerComputer container ) { diff --git a/src/main/java/dan200/computercraft/shared/network/server/RequestComputerMessage.java b/src/main/java/dan200/computercraft/shared/network/server/RequestComputerMessage.java index 91014401c..f1a57b8d1 100644 --- a/src/main/java/dan200/computercraft/shared/network/server/RequestComputerMessage.java +++ b/src/main/java/dan200/computercraft/shared/network/server/RequestComputerMessage.java @@ -15,15 +15,16 @@ public class RequestComputerMessage implements NetworkMessage { - private int instance; + private final int instance; public RequestComputerMessage( int instance ) { this.instance = instance; } - public RequestComputerMessage() + public RequestComputerMessage( @Nonnull PacketBuffer buf ) { + instance = buf.readVarInt(); } @Override @@ -32,12 +33,6 @@ public void toBytes( @Nonnull PacketBuffer buf ) buf.writeVarInt( instance ); } - @Override - public void fromBytes( @Nonnull PacketBuffer buf ) - { - instance = buf.readVarInt(); - } - @Override public void handle( NetworkEvent.Context context ) {