S2C (Network) - MeAlam1/BlueLib GitHub Wiki

Getting Started with Server to Client (S2C) Packets

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.


Packet Class Structure

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.

Example Packet

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;
    }
}

Packet Handler Structure

Each S2C packet must be paired with a handler that:

  • Implements ClientNetworkPacketHandler<T>.
  • Processes the packet on the client side using Minecraft.

Example Handler

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));
    }
}

Registering the Packet

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()));

Summary

  • 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

⚠️ **GitHub.com Fallback** ⚠️