Skip to content

CloudburstMC/Protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

efa4177 · Dec 23, 2021
Dec 23, 2021
Dec 23, 2021
Nov 26, 2018
Oct 9, 2021
Feb 29, 2020
Dec 23, 2021
Dec 23, 2021

Repository files navigation

Protocol

License Build Status Discord

Introduction

A protocol library for Minecraft that supports multiple versions. (Currently Bedrock Edition only)

Links

Usage

Client

Creating a client
// This is the local address to bind to, not the remote one.
// If bound to 127.0.0.1 any incoming packets from outside your computer will not be received.
InetSocketAddress bindAddress = new InetSocketAddress("0.0.0.0", 12345);
BedrockClient client = new BedrockClient(bindAddress);

// Bind the port
client.bind().join();
Pinging a Remote Server

This can be done whilst the client is connected to a server however it cannot be to the connected server.

InetSocketAddress addressToPing = new InetSocketAddress("play.nukkitx.com", 19132);
client.ping(addressToPing).whenComplete((pong, throwable) -> {
    if (throwable != null) {
        // Error occurred or timeout
        return;
    }
    // Pong received.
}).join(); // Join if you do not want this to be handled asynchronously.
Connecting to a Remote Server

A BedrockClient can only have one session per instance. If you need more, create extra instances.

InetSocketAddress addressToConnect = new InetSocketAddress("play.nukkitx.com", 19132);
client.connect(addressToConnect).whenComplete((session, throwable) -> {
    if (throwable != null) {
        // Unable to establish connection
        return;
    }
    // Connection established
    // Make sure to set the packet codec version you wish to use before sending out packets
    session.setPacketCodec(Bedrock_v389.V389_CODEC);
    // Add disconnect handler
    session.addDisconnectHandler((reason) -> System.out.println("Disconnected"));
    // Remember to set a packet handler so you receive incoming packets
    session.setPacketHandler(new FooBarPacketHandler());
    // Now send packets...
}).join(); // Join if you do not want this to be handled asynchronously.

Server

Creating a Server
InetSocketAddress bindAddress = new InetSocketAddress("0.0.0.0", 19132);
BedrockServer server = new BedrockServer(bindAddress);

BedrockPong pong = new BedrockPong();
pong.setEdition("MCPE");
pong.setMotd("My Server");
pong.setPlayerCount(0);
pong.setMaximumPlayerCount(20);
pong.setGameType("Survival");
pong.setProtocolVersion(Bedrock_v389.V389_CODEC.getProtocolVersion());

server.setHandler(new BedrockServerEventHandler() {
    @Override
    public boolean onConnectionRequest(InetSocketAddress address) {
        return true; // Connection will be accepted
    }
    
    @Override
    public BedrockPong onQuery(InetSocketAddress address) {
        return pong;
    }
    
    @Override
    public void onSessionCreation(BedrockServerSession serverSession) {
        // Connection established
        // Add disconnect handler
        session.addDisconnectHandler((reason) -> System.out.println("Disconnected"));
        // Remember to set a packet handler so you receive incoming packets
        session.setPacketHandler(new FooBarPacketHandler());
        // By default, the server will use a compatible codec that will read any LoginPacket.
        // After receiving the LoginPacket, you need to set the correct packet codec for the client and continue. 
    }
});

// Start server up
server.bind().join();

Maven

Protocol Versions:
Dependency Minecraft Version
bedrock-v291 1.7.0
bedrock-v313 1.8.0
bedrock-v332 1.9.0
bedrock-v340 1.10.0
bedrock-v354 1.11.0
bedrock-v361 1.12.0
bedrock-v388 1.13.0
bedrock-v389 1.14.0 - 1.14.50
bedrock-v390 1.14.60
bedrock-v407 1.16.0 - 1.16.10
bedrock-v408 1.16.20
bedrock-v419 1.16.100
bedrock-v422 1.16.200 - 1.16.201
bedrock-v428 1.16.210
bedrock-v431 1.16.220
bedrock-v440 1.17.0
bedrock-v448 1.17.10 - 1.17.11
bedrock-v465 1.17.30 - 1.17.34
bedrock-v471 1.17.40 - 1.17.41
Repository:
    <repositories>
        <repository>
            <id>nukkitx-repo-release</id>
            <url>https://repo.nukkitx.com/maven-releases/</url>
        </repository>
        <repository>
            <id>nukkitx-repo-snapshot</id>
            <url>https://repo.nukkitx.com/maven-snapshots/</url>
        </repository>
    </repositories>
Dependencies:
    <dependencies>
        <dependency>
            <groupId>com.nukkitx.protocol</groupId>
            <artifactId>bedrock-v(VERSION)</artifactId>
            <version>2.9.4</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

Projects Using This Library

If you would like to add your project here, please create a pull request.