S2C (Network) - MeAlam1/BlueLib GitHub Wiki
This guide explains how to implement Server to Client (S2C) packets using BlueLib's networking system. These packets are sent from the server to the Minecraft client and are used to update the client with server-side data or events.
Each S2C packet must:
- Implement
NetworkPacket<T>
. - Have a unique
ResourceLocation ID
. - Encode and decode its data using
RegistryFriendlyByteBuf
. - Be handled by a corresponding class in the
client.net
package.
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import software.bluelib.api.net.NetworkPacket;
/**
* Handler: TestPacketHandler
*/
public class TestPacket implements NetworkPacket<TestPacket> {
public final boolean value;
public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath(MODID, "test_packet");
public TestPacket(boolean value) {
this.value = value;
}
@Override
public void encode(RegistryFriendlyByteBuf buffer) {
buffer.writeBoolean(value);
}
public static TestPacket decode(RegistryFriendlyByteBuf buffer) {
return new TestPacket(buffer.readBoolean());
}
@Override
public ResourceLocation getId() {
return ID;
}
}
Each S2C packet must be paired with a handler that:
- Implements
ClientNetworkPacketHandler<T>
. - Processes the packet on the client side using
Minecraft
.
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;
import software.bluelib.api.net.ClientNetworkPacketHandler;
import software.bluelib.api.utils.logging.BaseLogLevel;
import software.bluelib.api.utils.logging.BaseLogger;
import software.bluelib.net.messages.client.TestPacket;
public class TestPacketHandler implements ClientNetworkPacketHandler<TestPacket> {
@Override
public void handle(TestPacket pPacket, Minecraft pClient) {
BaseLogger.log(BaseLogLevel.ERROR, Component.literal("Received TestPacket: " + pPacket.value));
}
}
Once your packet and handler are created, register them in your own implementation of NetworkRegistry.getS2CPacketInfoList()
:
list.add(new PacketRegisterInfo<>(TestPacket.ID, TestPacket::decode, new TestPacketHandler()));
- Create your packet in
net.messages.client
. - Write a handler in
client.net
that matches the packet type. - Register the packet in your
getS2CPacketInfoList()
method.
This setup ensures your packet will be properly sent from the server and handled on the client, For further information, refer to the official Discord