Skip to content

Repository files navigation

Java CI with GradleGradle Publish

PacketLib - Type-safe Minecraft protocol packets for Kotlin

Type-safe, auto-generated Minecraft protocol packets in Kotlin — for every release version from 1.7 to 1.21.11 (55 versions, 43 distinct protocol definitions, ~7200 packet classes).

The packets are generated with KotlinPoet from PrismarineJS/minecraft-data. Most packets are fully typed data classes with generated serializers; packets that use protocol constructs that cannot be expressed in a typed way (entity metadata, particles, registry holders, ...) fall back to a raw: ByteArray payload so every packet of every version still round-trips correctly.

Usage

Every version has a codec in MinecraftCodecs:

val codec =MinecraftCodecs.V1_20_1// or dynamically:val codec =MinecraftCodecs.fromProtocolVersion(ProtocolVersion.fromProtocolNumber(763)!!)
val codecPacket = codec.getCodecPacket(PacketDirection.SERVERBOUND, PacketState.HANDSHAKING, 0x00)

Packets are plain data classes with a companion PacketSerializer:

importio.layercraft.packetlib.packets.v1_20.handshaking.serverbound.SetProtocolPacketval packet =SetProtocolPacket(763, "localhost", 25565u, 1)
SetProtocolPacket.serialize(output, packet)
val decoded =SetProtocolPacket.deserialize(input)

input/output are your implementations of MCProtocolDeserializer / MCProtocolSerializer (see the example implementations: https://gist.github.com/Newspicel/54184b844dee00a4f351e58de033e071).

Regenerating the packets

The :generator module downloads the protocol definitions from minecraft-data (cached in generator/.cache) and regenerates all packet classes, codecs and the ProtocolVersion enum:

./gradlew :generator:run # all release versions
./gradlew :generator:run -PmcVersions=1.20.1 # only specific versions

Repo

Jitpack:

Gradle Kotlin
repositories {
maven { url = uri("https://jitpack.io") }
}
dependencies {
implementation("com.github.layercraft:packetlib:<version>")
}
Gradle Groovy
repositories {
maven { url ='https://jitpack.io' }
}
dependencies {
implementation 'com.github.layercraft:packetlib:<version>'
}
Maven
<project>
...
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
...
<dependencies>
<dependency>
<groupId>com.github.layercraft</groupId>
<artifactId>packetlib</artifactId>
<version>&lt;version&gt;</version>
</dependency>
</dependencies>
...
</project>

Github Packages:

Gradle Kotlin
repositories {
maven {
url = uri("https://maven.pkg.github.com/Layercraft/PacketLib")
credentials {
username = project.findProperty("gpr.user") asString??:System.getenv("USERNAME")
password = project.findProperty("gpr.key") asString??:System.getenv("TOKEN")
}
}
}
dependencies {
implementation("io.layercraft.connector:packetlib:<version>")
}

Thanks

About

A library for serializing Minecraft Packets typesafe in Kotlin

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages