Changes

1,078 bytes added ,  21:21, 28 August 2023
m
Line 36: Line 36:     
The last three parameters can be method references to either static or instance methods in Java. Remember that an instance method <code><nowiki>MSG.encode(FriendlyByteBuf)</nowiki></code> still satisfies <code><nowiki>BiConsumer<MSG, FriendlyByteBuf></nowiki></code>, the <code><nowiki>MSG</nowiki></code> simply becomes the implicit first argument.
 
The last three parameters can be method references to either static or instance methods in Java. Remember that an instance method <code><nowiki>MSG.encode(FriendlyByteBuf)</nowiki></code> still satisfies <code><nowiki>BiConsumer<MSG, FriendlyByteBuf></nowiki></code>, the <code><nowiki>MSG</nowiki></code> simply becomes the implicit first argument.
 +
 +
<syntaxhighlight lang="java">
 +
class MessagePacket {
 +
  public void encoder(FriendlyByteBuf buffer) {
 +
      // Write to buffer
 +
  }
 +
 +
  public static MessagePacket decoder(FriendlyByteBuf buffer) {
 +
      // Create packet from buffer data
 +
  }
 +
 +
  public void messageConsumer(Supplier<NetworkEvent.Context> ctx) {
 +
      // Handle message
 +
  }
 +
}
 +
 +
// Original direct registration syntax
 +
INSTANCE.registerMessage(id, MessagePacket.class,
 +
  MessagePacket::encoder,
 +
  MessagePacket::decoder,
 +
  MessagePacket::messageConsumer);
 +
  // Consumer here must use enqueueWork and setPacketHandled
 +
 +
// New builder-based definition
 +
INSTANCE.messageBuilder(MessagePacket.class, id)
 +
  .encoder(MessagePacket::encoder)
 +
  .decoder(MessagePacket::decoder)
 +
  .consumerMainThread(MessagePacket::messageConsumer)
 +
  .add();
 +
// You can use consumerMainThread or consumerNetworkThread.
 +
// If you use consumerMainThread, the builder will take care of the enqueueWork and setPacketHandled.
 +
// With consumerNetworkThread, you can return a value instead of calling setPacketHandled.
 +
</syntaxhighlight>
    
== Handling Packets ==
 
== Handling Packets ==
25

edits