Rename package name of libmc-common

This commit is contained in:
2026-09-07 08:06:18 +08:00
parent 641df674e4
commit d7300451f8
290 files changed
+1071 -1074

No files matched your search

@@ -1,10 +0,0 @@
/*
* Copyright © 2026 RTAkland
* Author: RTAkland
* Date: 2026/9/4
*/
package cn.rtast.libmc.common.packet
public interface MinecraftPacket : PacketEvent
@@ -1,10 +0,0 @@
/*
* Copyright © 2026 RTAkland
* Author: RTAkland
* Date: 2026/9/5
*/
package cn.rtast.libmc.common.packet
public interface PacketEvent
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common
package cn.rtast.libmc
/**
* An object class used to pass some parameters
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.crypto
package cn.rtast.libmc.crypto
public fun interface AuthenticationProvider {
public suspend fun joinServer(url: String, accessToken: String, uuid: String, serverIdHash: String)
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.crypto
package cn.rtast.libmc.crypto
public interface NetworkCipher {
public suspend fun encrypt(buffer: ByteArray, offset: Int, length: Int)
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.crypto
package cn.rtast.libmc.crypto
public data class ProtocolContext(
val rsaEncryptor: RSA1024Encryptor,
@@ -20,7 +20,8 @@ public class ProtocolContextBuilder(private val onlineMode: Boolean) {
public lateinit var cipherFactory: (sharedKey: ByteArray) -> NetworkCipher
public lateinit var authProvider: AuthenticationProvider
public fun build(): ProtocolContext = ProtocolContext(
public fun build(): ProtocolContext =
ProtocolContext(
rsaEncryptor = if (::rsaEncryptor.isInitialized) rsaEncryptor else error("rsaEncryptor is required"),
sha1Hasher = if (::sha1Hasher.isInitialized) sha1Hasher else error("sha1Hasher is required"),
cipherFactory = if (::cipherFactory.isInitialized) cipherFactory else error("cipherFactory is required"),
@@ -5,17 +5,17 @@
*/
package cn.rtast.libmc.common.packet
package cn.rtast.libmc.packet
/**
* reserved packet
*/
public data class UnknownPacket(val packetId: Int, val data: ByteArray) : MinecraftPacket {
public data class ClientboundUnknownPacket(val packetId: Int, val data: ByteArray) : MinecraftPacket {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || this::class != other::class) return false
other as UnknownPacket
other as ClientboundUnknownPacket
if (packetId != other.packetId) return false
if (!data.contentEquals(other.data)) return false
@@ -0,0 +1,10 @@
/*
* Copyright © 2026 RTAkland
* Author: RTAkland
* Date: 2026/9/4
*/
package cn.rtast.libmc.packet
public interface MinecraftPacket
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.packet
package cn.rtast.libmc.packet
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public interface Encoder<in T> {
public suspend fun encode(buffer: BytesBuffer, value: T)
@@ -5,10 +5,10 @@
*/
package cn.rtast.libmc.common.packet
package cn.rtast.libmc.packet
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import kotlin.reflect.KClass
public class PacketRegistry {
@@ -29,7 +29,7 @@ public class PacketRegistry {
}
public suspend fun decodePacket(packetId: Int, buffer: BytesBuffer): MinecraftPacket =
idToCodec[packetId]?.decode(buffer) ?: UnknownPacket(packetId, buffer.readBytes(buffer.remaining.toInt()))
idToCodec[packetId]?.decode(buffer) ?: ClientboundUnknownPacket(packetId, buffer.readRemainingBytes())
public suspend fun <T : MinecraftPacket> encodePacket(buffer: BytesBuffer, packet: T) {
@Suppress("UNCHECKED_CAST")
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public suspend fun BytesBuffer.readBitSet(): LongArray {
val count = this.readVarInt()
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public sealed interface IdOrX<out T> {
public data class Inline<T>(val value: T) : IdOrX<T>
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public sealed interface IdSet {
public data class Tag(val tagName: String) : IdSet
@@ -5,10 +5,10 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
public object McStringCodec : PacketCodec<String> {
override suspend fun encode(buffer: BytesBuffer, value: String) {
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public suspend inline fun <T> BytesBuffer.readOptional(block: BytesBuffer.() -> T): T? {
val hasData = this.readBoolean()
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
public suspend fun BytesBuffer.readPrefixedByteArray(): ByteArray {
@@ -5,9 +5,9 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.BytesBuffer
import kotlin.uuid.Uuid
public suspend fun BytesBuffer.writeUuid(uuid: Uuid): Unit = uuid.toLongs { mostSignificantBits, leastSignificantBits ->
@@ -5,10 +5,10 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
public object VarIntCodec : PacketCodec<Int> {
override suspend fun encode(buffer: BytesBuffer, value: Int) {
@@ -5,10 +5,10 @@
*/
package cn.rtast.libmc.common.primitives
package cn.rtast.libmc.primitives
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
public object VarLongCodec : PacketCodec<Long> {
override suspend fun encode(buffer: BytesBuffer, value: Long) {
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
public expect class BytesBuffer {
public constructor()
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
public enum class ByteOrder {
BIG_ENDIAN, LITTLE_ENDIAN
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
public expect open class ReadChannel() {
public open suspend fun readByte(): Byte
@@ -5,9 +5,10 @@
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import cn.rtast.libmc.LibMCContext
import cn.rtast.libmc.common.LibMCContext
public expect class Socket public constructor(host: String, port: Int, context: LibMCContext) {
public fun openReadChannel(): ReadChannel
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common
package cn.rtast.libmc
public expect fun ByteArray.zlibDecompress(): ByteArray
@@ -7,8 +7,8 @@
package test
import cn.rtast.libmc.common.zlibCompress
import cn.rtast.libmc.common.zlibDecompress
import cn.rtast.libmc.zlibCompress
import cn.rtast.libmc.zlibDecompress
import kotlin.test.Test
import kotlin.test.assertContentEquals
import kotlin.test.assertEquals
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common
package cn.rtast.libmc
/**
* No Context for jvm targets
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import java.io.EOFException
import java.io.InputStream
@@ -5,7 +5,7 @@
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
internal fun ByteArray.toShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short {
val b1 = this[0].toInt() and 0xFF
@@ -4,9 +4,9 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.LibMCContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.net.DatagramPacket
@@ -4,7 +4,7 @@
* Date: 2026/9/4
*/
package cn.rtast.libmc.common
package cn.rtast.libmc
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
@@ -6,7 +6,7 @@
@file:Suppress("PropertyName")
package cn.rtast.libmc.common
package cn.rtast.libmc
import io.ktor.network.selector.*
import kotlinx.coroutines.Dispatchers
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import io.ktor.utils.io.core.*
import kotlinx.io.*
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import io.ktor.utils.io.*
import io.ktor.utils.io.bits.*
@@ -4,7 +4,7 @@
* Date: 2026/9/3
*/
package cn.rtast.libmc.common.stream
package cn.rtast.libmc.stream
import cn.rtast.libmc.common.LibMCContext
import io.ktor.network.sockets.*
@@ -6,7 +6,7 @@
@file:OptIn(ExperimentalForeignApi::class)
package cn.rtast.libmc.common
package cn.rtast.libmc
import kotlinx.cinterop.*
import platform.zlib.*
@@ -7,8 +7,8 @@
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import kotlin.random.Random
private val RAKNET_MAGIC = byteArrayOf(
@@ -7,9 +7,9 @@
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.stream.UdpSocket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.stream.UdpSocket
internal suspend fun <T : MinecraftBedrockPacket> UdpSocket.sendPacket(packet: T, codec: PacketCodec<T>): ByteArray {
@@ -8,8 +8,8 @@
package cn.rtast.libmc.mcping.bedrock
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common.stream.UdpSocket
import cn.rtast.libmc.common.stream.wrap
import cn.rtast.libmc.stream.UdpSocket
import cn.rtast.libmc.stream.wrap
import cn.rtast.libmc.mcping.PingResponse
import kotlin.time.Clock
@@ -7,11 +7,11 @@
package cn.rtast.libmc.mcping.java
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.primitives.McStringCodec
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.VarIntCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.primitives.McStringCodec
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.VarIntCodec
import cn.rtast.libmc.packet.MinecraftPacket
// ref https://minecraft.wiki/w/Java_Edition_protocol/Packets#Handshake
internal data class HandshakePacket(
@@ -8,10 +8,10 @@
package cn.rtast.libmc.mcping.java
import cn.rtast.libmc.common.*
import cn.rtast.libmc.common.primitives.McStringCodec
import cn.rtast.libmc.common.primitives.VarIntCodec
import cn.rtast.libmc.common.stream.Socket
import cn.rtast.libmc.common.stream.readPacketFrame
import cn.rtast.libmc.primitives.McStringCodec
import cn.rtast.libmc.primitives.VarIntCodec
import cn.rtast.libmc.stream.Socket
import cn.rtast.libmc.stream.readPacketFrame
import cn.rtast.libmc.mcping.PingResponse
import cn.rtast.libmc.mcping.sendPacket
import kotlin.time.Clock
@@ -7,12 +7,12 @@
package cn.rtast.libmc.mcping
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.primitives.VarIntCodec
import cn.rtast.libmc.common.stream.WriteChannel
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.writeBuffer
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.primitives.VarIntCodec
import cn.rtast.libmc.stream.WriteChannel
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.writeBuffer
public suspend fun <T : MinecraftPacket> WriteChannel.sendPacket(packet: T, packetId: Int, codec: PacketCodec<T>) {
val bodyBuffer = BytesBuffer()
@@ -7,8 +7,8 @@
package cn.rtast.libmc.nbt
import cn.rtast.libmc.common.stream.ByteOrder
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.ByteOrder
import cn.rtast.libmc.stream.BytesBuffer
public class BytesBufferNBTInput(override val order: ByteOrder, private val buffer: BytesBuffer) : NBTInput {
override suspend fun readByte(): Byte = buffer.readByte()
@@ -7,8 +7,9 @@
package cn.rtast.libmc.nbt
import cn.rtast.libmc.common.stream.ByteOrder
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.stream.ByteOrder
import cn.rtast.libmc.stream.BytesBuffer
public class BytesBufferNBTOutput(
override val order: ByteOrder,
@@ -7,7 +7,7 @@
package cn.rtast.libmc.nbt
import cn.rtast.libmc.common.stream.ByteOrder
import cn.rtast.libmc.stream.ByteOrder
public interface NBTInput {
public val order: ByteOrder
@@ -7,7 +7,7 @@
package cn.rtast.libmc.nbt
import cn.rtast.libmc.common.stream.ByteOrder
import cn.rtast.libmc.stream.ByteOrder
public interface NBTOutput {
public val order: ByteOrder
@@ -7,10 +7,10 @@
package cn.rtast.libmc.nbt
import cn.rtast.libmc.common.gzipCompress
import cn.rtast.libmc.common.gzipDecompress
import cn.rtast.libmc.common.zlibCompress
import cn.rtast.libmc.common.zlibDecompress
import cn.rtast.libmc.gzipCompress
import cn.rtast.libmc.gzipDecompress
import cn.rtast.libmc.zlibCompress
import cn.rtast.libmc.zlibDecompress
public sealed interface NbtCompressor {
public fun compress(input: ByteArray): ByteArray
@@ -7,7 +7,7 @@
package test
import cn.rtast.libmc.common.stream.wrap
import cn.rtast.libmc.stream.wrap
import cn.rtast.libmc.nbt.NbtReader
import org.junit.Test
import java.io.File
+2 -2
View File
@@ -1,6 +1,6 @@
# libmc-protocol-encrypt
This module implemented `ProtocolCryptoContext` and provided a `DefaultProtocolCryptoContext`.
This module implemented `ProtocolContext` and provided a `DefaultProtocolContext`.
## Get started
@@ -15,7 +15,7 @@ This module implemented `ProtocolCryptoContext` and provided a `DefaultProtocolC
fun main() {
val cli = createMinecraftClient(
// ... other paramater
crypto = DefaultProtocolCryptoContext
crypto = DefaultProtocolContext
)
}
```
@@ -9,7 +9,7 @@
package cn.rtast.libmc.protocol.crypto
import cn.rtast.libmc.common.crypto.NetworkCipher
import cn.rtast.libmc.crypto.NetworkCipher
import dev.whyoleg.cryptography.DelicateCryptographyApi
import dev.whyoleg.cryptography.algorithms.AES
@@ -7,17 +7,17 @@
package cn.rtast.libmc.protocol.crypto
import cn.rtast.libmc.common.crypto.AuthenticationProvider
import cn.rtast.libmc.common.crypto.ProtocolContextBuilder
import cn.rtast.libmc.common.crypto.RSA1024Encryptor
import cn.rtast.libmc.common.crypto.Sha1Hasher
import cn.rtast.libmc.crypto.AuthenticationProvider
import cn.rtast.libmc.crypto.ProtocolContextBuilder
import cn.rtast.libmc.crypto.RSA1024Encryptor
import cn.rtast.libmc.crypto.Sha1Hasher
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.http.*
private val httpClient = HttpClient()
public val DefaultProtocolCryptoContext: ProtocolContextBuilder.() -> Unit = {
public val DefaultProtocolContext: ProtocolContextBuilder.() -> Unit = {
rsaEncryptor = RSA1024Encryptor { key, data -> rsaEncrypt(key, data) }
sha1Hasher = Sha1Hasher { serverId, secretKey, publicKey -> minecraftServerIdHash(serverId, secretKey, publicKey) }
cipherFactory = { key -> AesCFB8Cipher(key) }
@@ -6,10 +6,9 @@
package test
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.protocol.client.createMinecraftClient
import cn.rtast.libmc.protocol.crypto.DefaultProtocolCryptoContext
import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundLoginSuccessPacket
import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundSystemChatMessagePacket
import cn.rtast.libmc.protocol.crypto.DefaultProtocolContext
import kotlinx.coroutines.launch
import org.junit.Test
import java.io.File
@@ -30,10 +29,11 @@ class TestJvmClient {
Uuid.parse("bb033844-e68e-4909-a636-1a5d1821ddc4"),
// null,
accessToken,
crypto = DefaultProtocolCryptoContext
crypto = DefaultProtocolContext
)
cli.on<ClientboundSystemChatMessagePacket> { println(it) }
cli.on<ClientboundLoginSuccessPacket> { println(it) }
// cli.on<ClientboundSystemChatMessagePacket> { println(it) }
// cli.on<ClientboundLoginSuccessPacket> { println(it) }
cli.on<MinecraftPacket> { println(it) }
cli.launch { cli.connect() }
while (true) {
}
@@ -6,9 +6,9 @@
package cn.rtast.libmc.protocol.client
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common.crypto.ProtocolContext
import cn.rtast.libmc.common.crypto.ProtocolContextBuilder
import cn.rtast.libmc.LibMCContext
import cn.rtast.libmc.crypto.ProtocolContext
import cn.rtast.libmc.crypto.ProtocolContextBuilder
import cn.rtast.libmc.protocol.event.InternalPacketDispatcher
import cn.rtast.libmc.protocol.event.PacketEventDispatcher
import cn.rtast.libmc.protocol.network.NetworkChannel
@@ -38,7 +38,7 @@ public class MinecraftClient internal constructor(
internal val authProvider = cryptoContext.authProvider
internal val stateMachine = ClientStateMachine()
internal val networkChannel = NetworkChannel(
public val networkChannel: NetworkChannel = NetworkChannel(
host = host,
port = port,
context = context,
@@ -46,15 +46,12 @@ public class MinecraftClient internal constructor(
cipherProvider = cryptoContext.cipherFactory
)
internal val session get() = networkChannel.session
private val internalPacketDispatcher = InternalPacketDispatcher(this, authProvider)
private val clientJob = SupervisorJob(parentJob)
private var listenJob: Job? = null
public val isOnlineMode: Boolean get() = accessToken != null
public val transactionManager: TransactionIdManager = TransactionIdManager()
override val coroutineContext: CoroutineContext
get() = clientJob + ioDispatcher + CoroutineName("LibMC-MinecraftClient-$username")
public suspend fun connect(protocolVersion: Int = 776) {
networkChannel.connect()
@@ -67,13 +64,10 @@ public class MinecraftClient internal constructor(
}
public fun setCompression(threshold: Int): Unit = networkChannel.setCompression(threshold)
private fun startListening() {
listenJob = launch {
try {
while (isActive) {
internalPacketDispatcher.handleIncomingPackets(networkChannel.readNextPacket())
}
while (isActive) internalPacketDispatcher.handleIncomingPackets(networkChannel.readNextPacket())
} catch (e: Exception) {
if (e is CancellationException) throw e
if (isActive) {
@@ -89,6 +83,9 @@ public class MinecraftClient internal constructor(
networkChannel.close()
clientJob.cancel()
}
public override val coroutineContext: CoroutineContext
get() = clientJob + ioDispatcher + CoroutineName("LibMC-MinecraftClient-$username")
}
public fun createMinecraftClient(
@@ -7,19 +7,25 @@
package cn.rtast.libmc.protocol.event
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.crypto.AuthenticationProvider
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.protocol.client.MinecraftClient
import cn.rtast.libmc.protocol.packet.configuration.clientbound.*
import cn.rtast.libmc.protocol.packet.configuration.serverbound.*
import cn.rtast.libmc.protocol.packet.login.clientbound.*
import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundDisconnectLoginPacket
import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundHelloPacket
import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundLoginSuccessPacket
import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundSetCompressionPacket
import cn.rtast.libmc.protocol.packet.login.serverbound.ServerboundKeyPacket
import cn.rtast.libmc.protocol.packet.login.serverbound.ServerboundLoginAcknowledgedPacket
import cn.rtast.libmc.protocol.packet.play.clientbound.*
import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundDisconnectPlayPacket
import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundKeepAlivePlayPacket
import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundPingPacket
import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundStartConfigurationPacket
import cn.rtast.libmc.protocol.packet.play.serverbound.ServerboundConfigurationAcknowledgedPacket
import cn.rtast.libmc.protocol.packet.play.serverbound.ServerboundKeepAlivePlayPacket
import cn.rtast.libmc.protocol.packet.play.serverbound.ServerboundPongPlayPacket
import cn.rtast.libmc.protocol.protocol.state.ProtocolState
import cn.rtast.libmc.common.crypto.AuthenticationProvider
import cn.rtast.libmc.protocol.util.generateRandom16Bytes
public class InternalPacketDispatcher(
@@ -27,7 +33,6 @@ public class InternalPacketDispatcher(
private val authProvider: AuthenticationProvider,
) {
private suspend fun dispatchEvent(packet: MinecraftPacket) = client.dispatch(packet)
public suspend fun handleIncomingPackets(packet: MinecraftPacket) {
this.dispatchEvent(packet)
when (packet) {
@@ -53,7 +58,7 @@ public class InternalPacketDispatcher(
val encryptedSecret = client.rsa1024Encryptor.encrypt(packet.publicKey, sharedSecret)
val encryptedVerifyToken = client.rsa1024Encryptor.encrypt(packet.publicKey, packet.verifyToken)
client.networkChannel.sendPacket(ServerboundKeyPacket(encryptedSecret, encryptedVerifyToken))
client.session.enableEncryption(sharedSecret)
client.networkChannel.session.enableEncryption(sharedSecret)
}
// configuration
@@ -83,6 +88,7 @@ public class InternalPacketDispatcher(
client.networkChannel.sendPacket(ServerboundConfigurationAcknowledgedPacket)
client.stateMachine.transitionTo(ProtocolState.CONFIGURATION)
}
else -> {}
}
}
@@ -7,19 +7,19 @@
package cn.rtast.libmc.protocol.event
import cn.rtast.libmc.common.packet.PacketEvent
import cn.rtast.libmc.packet.MinecraftPacket
import kotlin.reflect.KClass
public open class PacketEventDispatcher {
@PublishedApi
internal val eventHandlers: MutableMap<KClass<out PacketEvent>, MutableList<suspend (PacketEvent) -> Unit>> =
internal val eventHandlers: MutableMap<KClass<out MinecraftPacket>, MutableList<suspend (MinecraftPacket) -> Unit>> =
mutableMapOf()
internal suspend fun dispatch(event: PacketEvent) {
internal suspend fun dispatch(event: MinecraftPacket) {
eventHandlers[event::class]?.forEach { it.invoke(event) }
}
public inline fun <reified T : PacketEvent> on(crossinline block: suspend (T) -> Unit) {
public inline fun <reified T : MinecraftPacket> on(crossinline block: suspend (T) -> Unit) {
val handlers = eventHandlers.getOrPut(T::class) { mutableListOf() }
handlers.add { event -> block(event as T) }
}
@@ -7,13 +7,13 @@
package cn.rtast.libmc.protocol.network
import cn.rtast.libmc.common.stream.ReadChannel
import cn.rtast.libmc.common.stream.WriteChannel
import cn.rtast.libmc.common.crypto.NetworkCipher
import cn.rtast.libmc.crypto.NetworkCipher
import cn.rtast.libmc.stream.ReadChannel
import cn.rtast.libmc.stream.WriteChannel
internal class CipherReadChannel(
private val delegate: ReadChannel,
private val crypto: NetworkCipher
private val crypto: NetworkCipher,
) : ReadChannel() {
override suspend fun readFully(out: ByteArray, start: Int, end: Int) {
delegate.readFully(out, start, end)
@@ -36,7 +36,7 @@ internal class CipherReadChannel(
internal class CipherWriteChannel(
private val delegate: WriteChannel,
private val crypto: NetworkCipher
private val crypto: NetworkCipher,
) : WriteChannel() {
override suspend fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int) {
val length = endIndex - startIndex
@@ -45,6 +45,7 @@ internal class CipherWriteChannel(
crypto.encrypt(encrypted, 0, length)
delegate.writeFully(encrypted, 0, length)
}
override suspend fun flush() {
delegate.flush()
}
@@ -6,39 +6,36 @@
package cn.rtast.libmc.protocol.network
import cn.rtast.libmc.common.*
import cn.rtast.libmc.common.crypto.NetworkCipher
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.writeBuffer
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.stream.wrap
import cn.rtast.libmc.LibMCContext
import cn.rtast.libmc.crypto.NetworkCipher
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.writeBuffer
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.protocol.client.ClientStateMachine
import cn.rtast.libmc.protocol.protocol.GameProtocols
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.stream.wrap
import cn.rtast.libmc.zlibCompress
import cn.rtast.libmc.zlibDecompress
import kotlin.concurrent.Volatile
internal class NetworkChannel(
public class NetworkChannel internal constructor(
host: String,
port: Int,
context: LibMCContext,
private val stateMachine: ClientStateMachine,
cipherProvider: (ByteArray) -> NetworkCipher,
) {
val session: NetworkSession = NetworkSession(host, port, context, cipherProvider)
internal val session: NetworkSession = NetworkSession(host, port, context, cipherProvider)
@Volatile
private var threshold = -1
fun connect() {
session.connect()
}
public fun connect(): Unit = session.connect()
public fun setCompression(threshold: Int): Unit = run { this.threshold = threshold }
fun setCompression(threshold: Int) {
this.threshold = threshold
}
suspend fun readNextPacket(): MinecraftPacket {
public suspend fun readNextPacket(): MinecraftPacket {
val packetLength = session.readVarInt()
val rawFrameBytes = session.readBytes(packetLength)
val frameBuf = rawFrameBytes.wrap()
@@ -54,7 +51,7 @@ internal class NetworkChannel(
.decodePacket(packetId, payloadBuf)
}
suspend fun sendPacket(packet: MinecraftPacket) {
public suspend fun sendPacket(packet: MinecraftPacket) {
val uncompressedBodyBuf = BytesBuffer()
GameProtocols.serverboundGameProtocols
.getRegistry(stateMachine.currentState)
@@ -80,7 +77,5 @@ internal class NetworkChannel(
session.writeFully(frameBuffer.toByteArray())
}
fun close() {
session.close()
}
public fun close(): Unit = session.close()
}
@@ -6,13 +6,13 @@
package cn.rtast.libmc.protocol.network
import cn.rtast.libmc.common.LibMCContext
import cn.rtast.libmc.common.stream.ReadChannel
import cn.rtast.libmc.common.stream.Socket
import cn.rtast.libmc.common.stream.WriteChannel
import cn.rtast.libmc.common.crypto.NetworkCipher
import cn.rtast.libmc.LibMCContext
import cn.rtast.libmc.crypto.NetworkCipher
import cn.rtast.libmc.stream.ReadChannel
import cn.rtast.libmc.stream.Socket
import cn.rtast.libmc.stream.WriteChannel
internal class NetworkSession(
public class NetworkSession internal constructor(
private val host: String,
private val port: Int,
private val context: LibMCContext,
@@ -20,20 +20,20 @@ internal class NetworkSession(
) {
private var socket: Socket? = null
var readChannel: ReadChannel? = null
public var readChannel: ReadChannel? = null
private set
var writeChannel: WriteChannel? = null
public var writeChannel: WriteChannel? = null
private set
fun connect() {
public fun connect() {
val sk = Socket(host, port, context)
this.socket = sk
this.readChannel = sk.openReadChannel()
this.writeChannel = sk.openWriteChannel()
}
fun enableEncryption(sharedKey: ByteArray) {
public fun enableEncryption(sharedKey: ByteArray) {
val currentRead = requireNotNull(readChannel) { "ReadChannel not connected" }
val currentWrite = requireNotNull(writeChannel) { "WriteChannel not connected" }
val cipher = cipherProvider(sharedKey)
@@ -41,17 +41,17 @@ internal class NetworkSession(
this.writeChannel = CipherWriteChannel(currentWrite, cipher)
}
suspend fun readByte(): Byte {
internal suspend fun readByte(): Byte {
val channel = requireNotNull(readChannel) { "ReadChannel not connected" }
return channel.readByte()
}
suspend fun readBytes(length: Int): ByteArray {
internal suspend fun readBytes(length: Int): ByteArray {
val channel = requireNotNull(readChannel) { "ReadChannel not connected" }
return channel.readBytes(length)
}
suspend fun readVarInt(): Int {
internal suspend fun readVarInt(): Int {
var numRead = 0
var result = 0
var read: Byte
@@ -65,13 +65,13 @@ internal class NetworkSession(
return result
}
suspend fun writeFully(data: ByteArray) {
internal suspend fun writeFully(data: ByteArray) {
val channel = requireNotNull(writeChannel) { "WriteChannel not connected" }
channel.writeFully(data, 0, data.size)
channel.flush()
}
fun close() {
internal fun close() {
socket?.close()
}
}
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.common.primitives.writeMcString
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
import cn.rtast.libmc.primitives.writeMcString
import cn.rtast.libmc.stream.BytesBuffer
public data class KnownPacks(val namespace: String, val id: String, val version: String) {
internal companion object Codec : PacketCodec<KnownPacks> {
@@ -7,12 +7,12 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.common.primitives.readUuid
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
import cn.rtast.libmc.primitives.readUuid
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.nbt.NBTCompound
import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound
import kotlin.uuid.Uuid
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data object ClientboundClearDialogPacket : MinecraftPacket,
PacketCodec<ClientboundClearDialogPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
public data class ClientboundCodeOfConductPacket(val codeOfConduct: String) : MinecraftPacket {
internal companion object Codec : PacketCodec<ClientboundCodeOfConductPacket> {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.nbt.NBTCompound
import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
@@ -7,12 +7,12 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.common.primitives.writeMcString
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.primitives.writeMcString
public data class ClientboundCustomReportDetailsPacket(val details: List<ReportDetail>) : MinecraftPacket {
public data class ReportDetail(val title: String, val description: String) {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.nbt.NBTCompound
import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data object ClientboundFinishConfigurationPacket : MinecraftPacket,
PacketCodec<ClientboundFinishConfigurationPacket> {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data class ClientboundKeepAliveConfigurationPacket(val id: Long) : MinecraftPacket {
internal companion object Codec : PacketCodec<ClientboundKeepAliveConfigurationPacket> {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data class ClientboundPingConfigurationPacket(val id: Int) : MinecraftPacket {
internal companion object Codec : PacketCodec<ClientboundPingConfigurationPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
import cn.rtast.libmc.protocol.protocol.game.registry.RegistryEntry
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readUuid
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readUuid
import kotlin.uuid.Uuid
public data class ClientboundRemoveResourcePackPacket(val uuid: Uuid) : MinecraftPacket {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data object ClientboundResetChatPacket : MinecraftPacket,
PacketCodec<ClientboundResetChatPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.packet.configuration.KnownPacks
public data class ClientboundSelectKnownPacksPacket(val knownPacks: List<KnownPacks>) : MinecraftPacket {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.registry.report.ServerLink
public data class ClientboundServerLinksPacket(val links: List<ServerLink>) : MinecraftPacket {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readPrefixedByteArray
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readPrefixedByteArray
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
import cn.rtast.libmc.primitives.readVarInt
public data class ClientboundTransferPacket(val host: String, val port: Int) : MinecraftPacket {
internal companion object Codec : PacketCodec<ClientboundTransferPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.configuration.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
import cn.rtast.libmc.protocol.protocol.game.writeIdentifier
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
public data object ServerboundAcceptCodeOfConductPacket : MinecraftPacket,
PacketCodec<ServerboundAcceptCodeOfConductPacket> {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
public data object ServerboundAckFinishConfigurationPacket : MinecraftPacket,
PacketCodec<ServerboundAckFinishConfigurationPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.writeIdentifier
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
public data class ServerboundKeepAliveConfigurationPacket(val id: Long) : MinecraftPacket {
internal companion object Codec : PacketCodec<ServerboundKeepAliveConfigurationPacket> {
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
public data class ServerboundPongConfigurationPacket(val id: Int) : MinecraftPacket {
internal companion object Codec : PacketCodec<ServerboundPongConfigurationPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.configuration.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.protocol.packet.configuration.KnownPacks
public data class ServerboundSelectKnownPacksPacket(val knownPacks: List<KnownPacks>) : MinecraftPacket {
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.handshake
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.primitives.writeMcString
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.primitives.writeMcString
import cn.rtast.libmc.primitives.writeVarInt
import cn.rtast.libmc.protocol.protocol.state.HandshakeIntent
public data class ServerboundHandshakePacket(
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.login.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.Identifier
import cn.rtast.libmc.protocol.protocol.game.readIdentifier
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.login.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.nbt.NBTCompound
import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.login.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readMcString
import cn.rtast.libmc.common.primitives.readPrefixedByteArray
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readMcString
import cn.rtast.libmc.primitives.readPrefixedByteArray
/**
* ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Encryption_Request
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.login.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readUuid
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readUuid
import cn.rtast.libmc.protocol.session.GameProfile
import kotlin.uuid.Uuid
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.login.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.primitives.writeVarInt
public data class ClientboundSetCompressionPacket(val threshold: Int) : MinecraftPacket {
internal companion object Codec : PacketCodec<ClientboundSetCompressionPacket> {
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.login.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.primitives.writeOptionalPrefixedByteArray
import cn.rtast.libmc.common.primitives.writeVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.primitives.writeOptionalPrefixedByteArray
import cn.rtast.libmc.primitives.writeVarInt
public data class ServerboundCustomQueryAnswerPacket(val messageId: Int, val data: ByteArray?) : MinecraftPacket {
internal companion object Codec : PacketCodec<ServerboundCustomQueryAnswerPacket> {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.login.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.primitives.writePrefixedByteArray
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.primitives.writePrefixedByteArray
/**
* ref: https://minecraft.wiki/w/Java_Edition_protocol/Encryption
@@ -7,9 +7,9 @@
package cn.rtast.libmc.protocol.packet.login.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
public data object ServerboundLoginAcknowledgedPacket : MinecraftPacket,
PacketCodec<ServerboundLoginAcknowledgedPacket> {
@@ -7,11 +7,11 @@
package cn.rtast.libmc.protocol.packet.login.serverbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.writeMcString
import cn.rtast.libmc.common.primitives.writeUuid
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.writeMcString
import cn.rtast.libmc.primitives.writeUuid
import kotlin.uuid.Uuid
public data class ServerboundLoginStartPacket(val username: String, val playerUuid: Uuid) : MinecraftPacket {
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.play.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
/**
* ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Acknowledge_Block_Change
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.play.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.StatisticsEntry
/**
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.play.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.block.BlockDestroyStage
import cn.rtast.libmc.protocol.protocol.game.block.BlockPos
import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.play.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.nbt.NBTCompound
import cn.rtast.libmc.protocol.protocol.game.block.BlockPos
import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos
@@ -7,10 +7,10 @@
package cn.rtast.libmc.protocol.packet.play.clientbound
import cn.rtast.libmc.common.stream.BytesBuffer
import cn.rtast.libmc.common.packet.MinecraftPacket
import cn.rtast.libmc.common.packet.PacketCodec
import cn.rtast.libmc.common.primitives.readVarInt
import cn.rtast.libmc.stream.BytesBuffer
import cn.rtast.libmc.packet.MinecraftPacket
import cn.rtast.libmc.packet.PacketCodec
import cn.rtast.libmc.primitives.readVarInt
import cn.rtast.libmc.protocol.protocol.game.block.BlockPos
import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos
Loaded 100 of 290 files, more files were not shown because too many files have changed in this diff. Show more