A library for communication with a Minecraft client/server.
Find a file
Alex f8460356db
Some checks failed
Java CI with Gradle / build (push) Has been cancelled
Deploy / build (push) Has been cancelled
Split incoming/outgoing packet registry, transition protocol states correctly (#841)
* Initial code changes

* Make it compile

* Small inlining

* Make less detectable by anticheats and fix keepalive during configuration

* Fix keepalive edge case

* Properly switch inbound protocol in server listener

* Add flow control

* Make toggling automatic keepalive work in another way

* Remove ping pong packets again

* Address review

* Handle keepalive in configuration

* Only spawn keepalive after login is acknowledged

* Prevent very unlikely race conditions with keepalive being switched during a task

* Add debug log for packet serialization and state switching

* Add one more debug print

* Update protocol/src/main/java/org/geysermc/mcprotocollib/network/Session.java

Co-authored-by: chris <github@onechris.mozmail.com>

* Update protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java

Co-authored-by: chris <github@onechris.mozmail.com>

* Update protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java

Co-authored-by: chris <github@onechris.mozmail.com>

* Mark packet as nonnull

* Fix outbound writing race conditions

* Ensure packets are always sent on the event loop

This replicates the same approach Mojang uses in their networking code.

* Reduce log verbosity

* Put errors into debug

* Update protocol/src/main/java/org/geysermc/mcprotocollib/network/tcp/TcpClientSession.java

Co-authored-by: chris <github@onechris.mozmail.com>

* Add comment to always running in event loop

* Handle auto read earlier to prevent race conditions

* Make instance dynamic

* Revert "Make instance dynamic"

This reverts commit 7f8affbdc5.

* Make flush packet priority

* Do not hide original line that is the cause of the exception

* Cancel packet using exception rather than return

* Properly iterate through parents

* Set log level to debug for unit tests

* Revert "Properly iterate through parents"

This reverts commit 4e2b64d983.

* Revert "Cancel packet using exception rather than return"

This reverts commit 6507e77bbe.

* Add write length filter

* Reuse bytebuf for fake flush to avoid unnecessary allocations

* Make tests happy

* Remake dropping packets

* Update protocol/src/main/java/org/geysermc/mcprotocollib/network/tcp/TcpServer.java

Co-authored-by: chris <github@onechris.mozmail.com>

* Fix space

* Rename to flush packet

* Add mojmap reference

* Share keepalive code

* Fix compilation

* Revert a tiny bit closer to vanilla

* Inline lambda

* Inherit annotation

* Inherit annotation 2

* Use checkerframework annotation

* Fixup grammar slightly

* Add reset states method

* Add log marker for packet logging

---------

Co-authored-by: chris <github@onechris.mozmail.com>
2024-10-08 21:45:26 +08:00
.github/workflows Move package/license to GeyserMC, gradle conventions and submodules (#782) 2024-01-11 12:21:23 -05:00
buildSrc Disable code signing for Jitpack (#813) 2024-06-02 01:16:19 -07:00
example Split incoming/outgoing packet registry, transition protocol states correctly (#841) 2024-10-08 21:45:26 +08:00
gradle Replace MCAuth with RK_01 MinecraftAuth (#795) 2024-06-17 13:23:42 -07:00
protocol Split incoming/outgoing packet registry, transition protocol states correctly (#841) 2024-10-08 21:45:26 +08:00
.editorconfig Add .editorconfig (#801) 2024-05-08 14:44:49 +01:00
.gitignore Migrate to gradle, fix examples (#769) 2023-12-19 13:01:53 -05:00
build.gradle.kts Move package/license to GeyserMC, gradle conventions and submodules (#782) 2024-01-11 12:21:23 -05:00
gradlew Migrate to gradle, fix examples (#769) 2023-12-19 13:01:53 -05:00
gradlew.bat Migrate to gradle, fix examples (#769) 2023-12-19 13:01:53 -05:00
Jenkinsfile Fix Javadocs 2024-05-13 22:29:24 -04:00
jitpack.yml Create jitpack.yml (#778) 2023-12-22 19:32:29 -08:00
LICENSE.txt Move package/license to GeyserMC, gradle conventions and submodules (#782) 2024-01-11 12:21:23 -05:00
lombok.config Remove unused exceptions, use java 9+ features and checkerframework, other cleanup (#780) 2024-01-04 13:04:25 -05:00
README.md Update README.md (#844) 2024-08-20 12:00:28 +02:00
settings.gradle.kts Replace MCAuth with RK_01 MinecraftAuth (#795) 2024-06-17 13:23:42 -07:00

MCProtocolLib

MCProtocolLib is a simple library for communicating with Minecraft clients and servers. It allows developers to build custom bots, clients, or servers for Minecraft with ease.

Example Code

See the example folder for sample usage.

Adding as a Dependency

MCProtocolLib builds are published to the Open Collaboration repository. Follow the below steps to add MCProtocolLib as a dependency to your project.

Maven

Add the Repository

<repositories>
    <repository>
        <id>opencollab</id>
        <url>https://repo.opencollab.dev/main/</url>
    </repository>
</repositories>

Add the Dependency

<dependency>
    <groupId>org.geysermc.mcprotocollib</groupId>
    <artifactId>protocol</artifactId>
    <version>(version here)</version>
</dependency>

Gradle (Groovy DSL)

Add the Repository

repositories {
    maven { 
        name 'opencollab'
        url 'https://repo.opencollab.dev/main/'
    }
}

Add the Dependency

dependencies {
    implementation 'org.geysermc.mcprotocollib:protocol:(version here)'
}

Gradle (Kotlin DSL)

Add the Repository

repositories {
    maven("https://repo.opencollab.dev/main/") {
        name = "opencollab"
    }
}

Add the Dependency

dependencies {
    implementation("org.geysermc.mcprotocollib:protocol:(version here)")
}

Snapshots

To use snapshot builds, switch the URL to https://repo.opencollab.dev/maven-snapshots/.

Javadocs

You can find the Javadocs for MCProtocolLib on opencollab.

Building the Source

MCProtocolLib uses Gradle to manage dependencies. To build the source code, run ./gradlew clean build in the project root directory.

Support and Development

Please join the GeyserMC Discord server and visit the #mcprotocollib channel for discussion and support for this project.

License

MCProtocolLib is licensed under the MIT license.