Line 38: |
Line 38: |
| | | |
| <syntaxhighlight lang="java"> | | <syntaxhighlight lang="java"> |
− | // A class MessagePacket
| + | class MessagePacket { |
− | public void encoder(FriendlyByteBuf buffer) { | + | public void encoder(FriendlyByteBuf buffer) { |
− | // Write to buffer
| + | // Write to buffer |
− | } | + | } |
| + | |
| + | public static MessagePacket decoder(FriendlyByteBuf buffer) { |
| + | // Create packet from buffer data |
| + | } |
| | | |
− | public static MessagePacket decoder(FriendlyByteBuf buffer) { | + | public void messageConsumer(Supplier<NetworkEvent.Context> ctx) { |
− | // Create packet from buffer data
| + | // Handle message |
| + | } |
| } | | } |
| | | |
− | public void messageConsumer(Supplier<NetworkEvent.Context>> ctx) {
| + | // Original direct registration syntax |
− | // Handle message
| + | INSTANCE.registerMessage(id, MessagePacket.class, |
− | }
| + | MessagePacket::encoder, |
| + | MessagePacket::decoder, |
| + | MessagePacket::messageConsumer); |
| + | // Consumer here must use enqueueWork and setPacketHandled |
| | | |
− | // For some SimpleChannel channel | + | // New builder-based definition |
− | channel.registerMessage(id, MessagePacket::encoder, MessagePacket::decoder, MessagePacket::messageConsumer);
| + | INSTANCE.messageBuilder(MessagePacket.class, id) |
| + | .encoder(MessagePacket::encoder) |
| + | .decoder(MessagePacket::decoder) |
| + | .consumerMainThread(MessagePacket::messageConsumer); |
| + | // 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> | | </syntaxhighlight> |
| | | |