Skip to content

Paper Integration

RazorPlay01 edited this page May 14, 2025 · 2 revisions

Paper Integration

This guide explains how to integrate the Minecraft Networking API with Paper servers.

Setup

Add the API as a dependency via JitPack (see Setup). For Maven:

<dependency>
    <groupId>com.github.RazorPlay01</groupId>
    <artifactId>PacketHandler</artifactId>
    <version>1.1.0</version>
</dependency>

Sending Packets

Use Bukkit’s plugin messaging system to send packets to clients.

Example:

import com.github.razorplay.packet_handler.network.IPacket;
import com.github.razorplay.packet_handler.network.PacketTCP;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class PacketSender {
    private static final String CHANNEL = "my_mod:packets_channel";

    public static void sendPacketToClient(Player player, IPacket packet) {
        try {
            player.sendPluginMessage(JavaPlugin.getPlugin(MyPlugin.class), CHANNEL, PacketTCP.write(packet));
        } catch (PacketSerializationException e) {
            JavaPlugin.getPlugin(MyPlugin.class).getLogger().warning("Error sending packet: " + e.getMessage());
        }
    }
}

Receiving Packets

Implement PluginMessageListener to handle incoming packets.

Example:

import com.github.razorplay.packet_handler.network.IPacket;
import com.github.razorplay.packet_handler.network.PacketTCP;
import com.google.common.io.ByteStreams;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;

public class PacketListener implements PluginMessageListener {
    private static final String CHANNEL = "my_mod:packets_channel";

    @Override
    public void onPluginMessageReceived(String channel, Player player, byte[] message) {
        if (channel.equals(CHANNEL)) {
            try {
                IPacket packet = PacketTCP.read(ByteStreams.newDataInput(message));
                if (packet instanceof MyPacket myPacket) {
                    // Handle packet
                    player.sendMessage("Received: " + myPacket.getMessage());
                }
            } catch (Exception e) {
                JavaPlugin.getPlugin(MyPlugin.class).getLogger().warning("Error processing packet: " + e.getMessage());
            }
        }
    }
}

Register the listener in your plugin:

public class MyPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        PacketTCP.registerPackets(MyPacket.class);
        getServer().getMessenger().registerOutgoingPluginChannel(this, "my_mod:packets_channel");
        getServer().getMessenger().registerIncomingPluginChannel(this, "my_mod:packets_channel", new PacketListener());
    }
}

Clone this wiki locally