| 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 == |