diff --git a/.github/workflows/gradle-publish.yml b/.github/workflows/gradle-publish.yml index 9ef682d..08656d5 100644 --- a/.github/workflows/gradle-publish.yml +++ b/.github/workflows/gradle-publish.yml @@ -41,6 +41,8 @@ jobs: uses: mikepenz/release-changelog-builder-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + commitMode: true # remove later when the translation api is finished - name: Upload a Build Artifact uses: softprops/action-gh-release@v1 diff --git a/src/main/kotlin/io/layercraft/translator/TranslatorAPI.kt b/src/main/kotlin/io/layercraft/translator/TranslatorAPI.kt index 78e1899..756f907 100644 --- a/src/main/kotlin/io/layercraft/translator/TranslatorAPI.kt +++ b/src/main/kotlin/io/layercraft/translator/TranslatorAPI.kt @@ -6,26 +6,27 @@ import io.layercraft.translator.packets.Packet import io.layercraft.translator.packets.PacketDirection import io.layercraft.translator.packets.PacketSerializer import io.layercraft.translator.packets.PacketState +import io.layercraft.translator.utils.minecraft object TranslatorAPI{ fun decodeFromByteArray(bytes: ByteArray, serializer: PacketSerializer): T { val packetRead = ByteReadPacket(bytes) - return serializer.serialize(packetRead as Input) + return serializer.serialize(packetRead.minecraft) } fun encodeToByteArray(value: T, serializer: PacketSerializer): ByteArray { val packetWrite = BytePacketBuilder() - serializer.deserialize(packetWrite as Output, value) + serializer.deserialize(packetWrite.minecraft, value) return packetWrite.build().readBytes() } fun decodeFromInputWithCodec(input: Input, codec: MinecraftCodec, packetDirection: PacketDirection, packetState: PacketState, packetId: Int): Packet? { - return codec.getCodecPacket(packetDirection, packetState, packetId)?.packetSerializer?.serialize(input) + return codec.getCodecPacket(packetDirection, packetState, packetId)?.packetSerializer?.serialize(input.minecraft) } fun encodeToOutputWithCodec(value: Packet, codec: MinecraftCodec, output: Output) { - codec.getCodecPacketFromPacket(value)?.packetSerializer!!.deserialize(output, value) + codec.getCodecPacketFromPacket(value)?.packetSerializer!!.deserialize(output.minecraft, value) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/PacketInterface.kt b/src/main/kotlin/io/layercraft/translator/packets/PacketInterface.kt index 1ec710e..ea288d2 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/PacketInterface.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/PacketInterface.kt @@ -1,6 +1,10 @@ package io.layercraft.translator.packets import io.ktor.utils.io.core.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.MinecraftByteInput +import io.layercraft.translator.utils.MinecraftByteOutput interface Packet{ @@ -17,10 +21,10 @@ interface ClientBoundPacket: Packet { } -interface PacketSerializer where T: Packet { - fun serialize(input: Input): T +interface PacketSerializer where T:Packet { + fun serialize(input: MinecraftProtocolDeserializeInterface<*>): T - fun deserialize(output: Output, value: T) + fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: T) } @Target(AnnotationTarget.CLASS) diff --git a/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/Handshake.kt b/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/Handshake.kt index d02cd98..1795e0e 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/Handshake.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/Handshake.kt @@ -6,7 +6,9 @@ import io.ktor.utils.io.core.* import io.layercraft.translator.data.ProtocolVersion import io.layercraft.translator.packets.* import io.layercraft.translator.packets.handshake.data.HandshakeNextState -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** @@ -27,21 +29,21 @@ data class Handshake( ) : ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): Handshake { - val version = input.mc.readVarInt() - val address = input.mc.readString(255) - val port = input.mc.readUShort() - val nextState = HandshakeNextState.values()[input.mc.readVarInt() - 1] + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): Handshake { + val version = input.readVarInt() + val address = input.readString(255) + val port = input.readUShort() + val nextState = HandshakeNextState.values()[input.readVarInt() - 1] return Handshake(ProtocolVersion.fromProtocolNumber(version), address, port, nextState) } - override fun deserialize(output: Output, value: Handshake) { - output.mc.writeVarInt(value.protocolVersion.protocolNumber) - output.mc.writeString(value.address, 255) - output.mc.writeUShort(value.port) - output.mc.writeVarInt(value.nextState.ordinal + 1) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: Handshake) { + output.writeVarInt(value.protocolVersion.protocolNumber) + output.writeString(value.address, 255) + output.writeUShort(value.port) + output.writeVarInt(value.nextState.ordinal + 1) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/LegacyServerListPing.kt b/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/LegacyServerListPing.kt index 5608fa0..fb7dfb9 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/LegacyServerListPing.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/handshake/serverbound/LegacyServerListPing.kt @@ -3,6 +3,8 @@ package io.layercraft.translator.packets.handshake.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.data.ProtocolVersion import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface @MinecraftPacket(packetId = 0xFE, state = PacketState.HANDSHAKE, direction = PacketDirection.SERVERBOUND) data class LegacyServerListPing( @@ -12,11 +14,11 @@ data class LegacyServerListPing( ): ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): LegacyServerListPing { + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): LegacyServerListPing { TODO("Not yet implemented") } - override fun deserialize(output: Output, value: LegacyServerListPing) { + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: LegacyServerListPing) { TODO("Not yet implemented") } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/Disconnect.kt b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/Disconnect.kt index 8c9f32b..495e3d9 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/Disconnect.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/Disconnect.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** @@ -17,14 +19,14 @@ data class Disconnect( ): ClientBoundPacket { companion object : PacketSerializer{ - override fun serialize(input: Input): Disconnect { - val reason = input.mc.readChat() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): Disconnect { + val reason = input.readChat() return Disconnect(reason) } - override fun deserialize(output: Output, value: Disconnect) { - output.mc.writeChat(value.reason) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: Disconnect) { + output.writeChat(value.reason) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/EncryptionRequest.kt b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/EncryptionRequest.kt index 8745dac..c58d851 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/EncryptionRequest.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/EncryptionRequest.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Encryption request | 0x01 | login | client-bound @@ -21,18 +23,18 @@ data class EncryptionRequest( ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): EncryptionRequest { - val serverId = input.mc.readString(20) - val publicKey = input.mc.readVarIntByteArray() - val verifyToken = input.mc.readVarIntByteArray() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): EncryptionRequest { + val serverId = input.readString(20) + val publicKey = input.readVarIntByteArray() + val verifyToken = input.readVarIntByteArray() return EncryptionRequest(serverId, publicKey, verifyToken) } - override fun deserialize(output: Output, value: EncryptionRequest) { - output.mc.writeString(value.serverId, 20) - output.mc.writeVarIntByteArray(value.publicKey) - output.mc.writeVarIntByteArray(value.verifyToken) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: EncryptionRequest) { + output.writeString(value.serverId, 20) + output.writeVarIntByteArray(value.publicKey) + output.writeVarIntByteArray(value.verifyToken) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginPluginRequest.kt b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginPluginRequest.kt index 7623bb3..af54653 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginPluginRequest.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginPluginRequest.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Login plugin request | 0x04 | login | client-bound @@ -20,18 +22,18 @@ data class LoginPluginRequest( ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): LoginPluginRequest { - val messageId = input.mc.readVarInt() - val channel = input.mc.readIdentifier() - val data = input.mc.readRemainingByteArray() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): LoginPluginRequest { + val messageId = input.readVarInt() + val channel = input.readIdentifier() + val data = input.readRemainingByteArray() return LoginPluginRequest(messageId, channel, data) } - override fun deserialize(output: Output, value: LoginPluginRequest) { - output.mc.writeVarInt(value.messageId) - output.mc.writeIdentifier(value.channel) - output.mc.writeRemainingByteArray(value.data) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: LoginPluginRequest) { + output.writeVarInt(value.messageId) + output.writeIdentifier(value.channel) + output.writeRemainingByteArray(value.data) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginSuccess.kt b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginSuccess.kt index f0c0cef..8f29f4b 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginSuccess.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/LoginSuccess.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft import java.util.* /** @@ -20,27 +22,27 @@ data class LoginSuccess( val properties: List, //varint array of login properties ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): LoginSuccess { - val uuid = input.mc.readUUID() - val username = input.mc.readString(16) - val properties = input.mc.readVarIntArray { - val name = it.mc.readString(32767) - val value = it.mc.readString(32767) - val isSigned = it.mc.readBoolean() - val signature = if (isSigned) it.mc.readString(32767) else null + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): LoginSuccess { + val uuid = input.readUUID() + val username = input.readString(16) + val properties = input.readVarIntArray { + val name = it.readString(32767) + val value = it.readString(32767) + val isSigned = it.readBoolean() + val signature = if (isSigned) it.readString(32767) else null LoginProperty(name, value, signature) } return LoginSuccess(uuid, username, properties) } - override fun deserialize(output: Output, value: LoginSuccess) { - output.mc.writeUUID(value.uuid) - output.mc.writeString(value.username, 16) - output.mc.writeVarIntArray(value.properties) { arrayValue, arrayOutput -> - arrayOutput.mc.writeString(arrayValue.name, 32767) - arrayOutput.mc.writeString(arrayValue.value, 32767) - arrayOutput.mc.writeBoolean(arrayValue.signed) - if (arrayValue.signed) arrayOutput.mc.writeString(arrayValue.signature!!, 32767) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: LoginSuccess) { + output.writeUUID(value.uuid) + output.writeString(value.username, 16) + output.writeVarIntArray(value.properties) { arrayValue, arrayOutput -> + arrayOutput.writeString(arrayValue.name, 32767) + arrayOutput.writeString(arrayValue.value, 32767) + arrayOutput.writeBoolean(arrayValue.signed) + if (arrayValue.signed) arrayOutput.writeString(arrayValue.signature!!, 32767) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/SetCompression.kt b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/SetCompression.kt index aada79e..2f795ed 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/SetCompression.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/clientbound/SetCompression.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * (Optional) Set compression | 0x03 | login | client-bound @@ -17,14 +19,14 @@ data class SetCompression( companion object: PacketSerializer { - override fun serialize(input: Input): SetCompression { - val threshold = input.mc.readVarInt() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): SetCompression { + val threshold = input.readVarInt() return SetCompression(threshold) } - override fun deserialize(output: Output, value: SetCompression) { - output.mc.writeVarInt(value.threshold) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: SetCompression) { + output.writeVarInt(value.threshold) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/EncryptionResponse.kt b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/EncryptionResponse.kt index a55fd25..095e504 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/EncryptionResponse.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/EncryptionResponse.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** @@ -26,28 +28,28 @@ data class EncryptionResponse( ) : ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): EncryptionResponse { - val sharedSecret = input.mc.readVarIntByteArray() - val hasVerifyToken = input.mc.readBoolean() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): EncryptionResponse { + val sharedSecret = input.readVarIntByteArray() + val hasVerifyToken = input.readBoolean() return if (hasVerifyToken) { - val verifyToken = input.mc.readVarIntByteArray() + val verifyToken = input.readVarIntByteArray() EncryptionResponse(sharedSecret, true, verifyToken, null, null) } else { - val salt = input.mc.readLong() - val messageSignature = input.mc.readVarIntByteArray() + val salt = input.readLong() + val messageSignature = input.readVarIntByteArray() EncryptionResponse(sharedSecret, false, null, salt, messageSignature) } } - override fun deserialize(output: Output, value: EncryptionResponse) { - output.mc.writeVarIntByteArray(value.sharedSecret) - output.mc.writeBoolean(value.hasVerifyToken) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: EncryptionResponse) { + output.writeVarIntByteArray(value.sharedSecret) + output.writeBoolean(value.hasVerifyToken) if (value.hasVerifyToken) { - output.mc.writeVarIntByteArray(value.verifyToken!!) + output.writeVarIntByteArray(value.verifyToken!!) } if (!value.hasVerifyToken) { - output.mc.writeLong(value.salt!!) - output.mc.writeVarIntByteArray(value.messageSignature!!) + output.writeLong(value.salt!!) + output.writeVarIntByteArray(value.messageSignature!!) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginPluginResponse.kt b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginPluginResponse.kt index 08d28c1..7823a64 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginPluginResponse.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginPluginResponse.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Login plugin response | 0x02 | login | server-bound @@ -20,18 +22,18 @@ data class LoginPluginResponse( ): ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): LoginPluginResponse { - val messageId = input.mc.readVarInt() - val successful = input.mc.readBoolean() - val data = input.mc.readRemainingByteArray() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): LoginPluginResponse { + val messageId = input.readVarInt() + val successful = input.readBoolean() + val data = input.readRemainingByteArray() return LoginPluginResponse(messageId, successful, data) } - override fun deserialize(output: Output, value: LoginPluginResponse) { - output.mc.writeVarInt(value.messageId) - output.mc.writeBoolean(value.successful) - output.mc.writeRemainingByteArray(value.data) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: LoginPluginResponse) { + output.writeVarInt(value.messageId) + output.writeBoolean(value.successful) + output.writeRemainingByteArray(value.data) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginStart.kt b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginStart.kt index df641ea..f18d6be 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginStart.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/login/serverbound/LoginStart.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.login.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft import java.util.* /** @@ -33,30 +35,30 @@ data class LoginStart( get() = playerUUID != null companion object: PacketSerializer { - override fun serialize(input: Input): LoginStart { - val name = input.mc.readString(16) - val hasSigData = input.mc.readBoolean() - val timestamp = if (hasSigData) input.mc.readLong() else null - val publicKey = if (hasSigData) input.mc.readVarIntByteArray() else null - val signature = if (hasSigData) input.mc.readVarIntByteArray() else null - val hasPlayerUUID = input.mc.readBoolean() - val playerUUID = if (hasPlayerUUID) input.mc.readUUID() else null + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): LoginStart { + val name = input.readString(16) + val hasSigData = input.readBoolean() + val timestamp = if (hasSigData) input.readLong() else null + val publicKey = if (hasSigData) input.readVarIntByteArray() else null + val signature = if (hasSigData) input.readVarIntByteArray() else null + val hasPlayerUUID = input.readBoolean() + val playerUUID = if (hasPlayerUUID) input.readUUID() else null return LoginStart(name, timestamp, publicKey, signature, playerUUID) } - override fun deserialize(output: Output, value: LoginStart) { - output.mc.writeString(value.name, 16) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: LoginStart) { + output.writeString(value.name, 16) val hasSigData = value.timestamp != null && value.publicKey != null && value.signature != null - output.mc.writeBoolean(hasSigData) + output.writeBoolean(hasSigData) if (hasSigData) { - output.mc.writeLong(value.timestamp!!) - output.mc.writeVarIntByteArray(value.publicKey!!) - output.mc.writeVarIntByteArray(value.signature!!) + output.writeLong(value.timestamp!!) + output.writeVarIntByteArray(value.publicKey!!) + output.writeVarIntByteArray(value.signature!!) } val hasPlayerUUID = value.playerUUID != null - output.mc.writeBoolean(hasPlayerUUID) - if (hasPlayerUUID) output.mc.writeUUID(value.playerUUID!!) + output.writeBoolean(hasPlayerUUID) + if (hasPlayerUUID) output.writeUUID(value.playerUUID!!) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AcknowledgeBlockChange.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AcknowledgeBlockChange.kt index c7c6ee3..8481d0f 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AcknowledgeBlockChange.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AcknowledgeBlockChange.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Acknowledge block change | 0x05 | play | client-bound @@ -15,14 +17,14 @@ data class AcknowledgeBlockChange( val sequenceId: Int, //varint ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): AcknowledgeBlockChange { - val sequenceId = input.mc.readVarInt() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): AcknowledgeBlockChange { + val sequenceId = input.readVarInt() return AcknowledgeBlockChange(sequenceId) } - override fun deserialize(output: Output, value: AcknowledgeBlockChange) { - output.mc.writeVarInt(value.sequenceId) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: AcknowledgeBlockChange) { + output.writeVarInt(value.sequenceId) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AwardStatistics.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AwardStatistics.kt index 9299918..a58abaf 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AwardStatistics.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/AwardStatistics.kt @@ -4,7 +4,9 @@ import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* import io.layercraft.translator.packets.play.data.statistic.AwardStatistic import io.layercraft.translator.packets.play.data.statistic.StatisticCategories -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Award statistics | 0x04 | play | client-bound @@ -19,17 +21,17 @@ data class AwardStatistics( val statistics: List, ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): AwardStatistics { - val statistics = input.mc.readVarIntArray { AwardStatistic(StatisticCategories.fromId(it.mc.readVarInt()), it.mc.readVarInt(), it.mc.readVarInt()) } + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): AwardStatistics { + val statistics = input.readVarIntArray { AwardStatistic(StatisticCategories.fromId(it.readVarInt()), it.readVarInt(), it.readVarInt()) } return AwardStatistics(statistics) } - override fun deserialize(output: Output, value: AwardStatistics) { - output.mc.writeVarIntArray(value.statistics) { it, arrayOutput -> - arrayOutput.mc.writeVarInt(it.categoryId.id) - arrayOutput.mc.writeVarInt(it.statisticId) - arrayOutput.mc.writeVarInt(it.value) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: AwardStatistics) { + output.writeVarIntArray(value.statistics) { it, arrayOutput -> + arrayOutput.writeVarInt(it.categoryId.id) + arrayOutput.writeVarInt(it.statisticId) + arrayOutput.writeVarInt(it.value) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockAction.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockAction.kt index 696cbb2..39356c0 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockAction.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockAction.kt @@ -2,8 +2,10 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface import io.layercraft.translator.types.Position -import io.layercraft.translator.utils.mc +import io.layercraft.translator.utils.minecraft /** * Block action | 0x08 | play | client-bound @@ -24,20 +26,20 @@ data class BlockAction( ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): BlockAction { - val location = input.mc.readPosition() - val actionId = input.mc.readUByte() - val actionParameter = input.mc.readUByte() - val blockType = input.mc.readVarInt() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): BlockAction { + val location = input.readPosition() + val actionId = input.readUByte() + val actionParameter = input.readUByte() + val blockType = input.readVarInt() return BlockAction(location, actionId, actionParameter, blockType) } - override fun deserialize(output: Output, value: BlockAction) { - output.mc.writePosition(value.location) - output.mc.writeUByte(value.actionId) - output.mc.writeUByte(value.actionParameter) - output.mc.writeVarInt(value.blockType) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: BlockAction) { + output.writePosition(value.location) + output.writeUByte(value.actionId) + output.writeUByte(value.actionParameter) + output.writeVarInt(value.blockType) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockEntityData.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockEntityData.kt index b30ed1a..8aa8f2c 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockEntityData.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BlockEntityData.kt @@ -2,8 +2,10 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface import io.layercraft.translator.types.Position -import io.layercraft.translator.utils.mc +import io.layercraft.translator.utils.minecraft /** * Block entity data | 0x07 | play | client-bound @@ -22,18 +24,18 @@ data class BlockEntityData( val nbtData: ByteArray ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): BlockEntityData { - val location = input.mc.readPosition() - val type = input.mc.readVarInt() - val nbt = input.mc.readRemainingByteArray() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): BlockEntityData { + val location = input.readPosition() + val type = input.readVarInt() + val nbt = input.readRemainingByteArray() return BlockEntityData(location, type, nbt) } - override fun deserialize(output: Output, value: BlockEntityData) { - output.mc.writePosition(value.location) - output.mc.writeVarInt(value.type) - output.mc.writeRemainingByteArray(value.nbtData) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: BlockEntityData) { + output.writePosition(value.location) + output.writeVarInt(value.type) + output.writeRemainingByteArray(value.nbtData) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BossBar.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BossBar.kt index 312ee13..f3978be 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BossBar.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/BossBar.kt @@ -2,14 +2,14 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.packets.handshake.data.HandshakeNextState import io.layercraft.translator.packets.play.data.bossbar.BossBarAction import io.layercraft.translator.packets.play.data.bossbar.BossBarAction.* import io.layercraft.translator.packets.play.data.bossbar.BossBarColor import io.layercraft.translator.packets.play.data.bossbar.BossBarDivision import io.layercraft.translator.packets.play.data.bossbar.BossBarFlag -import io.layercraft.translator.types.Position -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft import java.util.UUID /** @@ -32,16 +32,16 @@ data class BossBar( ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): BossBar { - val uuid = input.mc.readUUID() - val action = BossBarAction.fromActionId(input.mc.readVarInt()) + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): BossBar { + val uuid = input.readUUID() + val action = BossBarAction.fromActionId(input.readVarInt()) when (action) { ADD -> { - val title = input.mc.readString() - val health = input.mc.readFloat() - val color = BossBarColor.fromColorId(input.mc.readVarInt()) - val division = BossBarDivision.fromDivisionId(input.mc.readVarInt()) + val title = input.readString() + val health = input.readFloat() + val color = BossBarColor.fromColorId(input.readVarInt()) + val division = BossBarDivision.fromDivisionId(input.readVarInt()) } @@ -56,7 +56,7 @@ data class BossBar( throw UnsupportedOperationException("Boss bar action $action is not supported yet.") } - override fun deserialize(output: Output, value: BossBar) { + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: BossBar) { } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/EntityAnimation.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/EntityAnimation.kt index 4b5f199..1556dbf 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/EntityAnimation.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/EntityAnimation.kt @@ -3,7 +3,9 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.data.entity.EntityAnimationType import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** @@ -20,16 +22,16 @@ data class EntityAnimation( val animation: EntityAnimationType, //unsigned byte ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): EntityAnimation { - val entityId = input.mc.readVarInt() - val animation = EntityAnimationType.values()[input.mc.readUByte().toInt()] + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): EntityAnimation { + val entityId = input.readVarInt() + val animation = EntityAnimationType.values()[input.readUByte().toInt()] return EntityAnimation(entityId, animation) } - override fun deserialize(output: Output, value: EntityAnimation) { - output.mc.writeVarInt(value.entityId) - output.mc.writeUByte(value.animation.id.toUByte()) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: EntityAnimation) { + output.writeVarInt(value.entityId) + output.writeUByte(value.animation.id.toUByte()) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/Login.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/Login.kt index e5ea68c..1c88ae6 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/Login.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/Login.kt @@ -2,16 +2,15 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.Input import io.ktor.utils.io.core.Output -import io.ktor.utils.io.core.readDouble -import io.ktor.utils.io.core.readLong -import io.ktor.utils.io.core.readUByte import io.layercraft.translator.packets.ClientBoundPacket import io.layercraft.translator.packets.MinecraftPacket import io.layercraft.translator.packets.PacketDirection import io.layercraft.translator.packets.PacketSerializer import io.layercraft.translator.packets.PacketState +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface import io.layercraft.translator.types.Position -import io.layercraft.translator.utils.mc +import io.layercraft.translator.utils.minecraft /** @@ -61,26 +60,26 @@ data class Login( val deathPosition: Position?, //optional ): ClientBoundPacket { companion object: PacketSerializer{ - override fun serialize(input: Input): Login { - val entityId = input.mc.readVarInt() - val isHardcore = input.mc.readBoolean() - val gameMode = input.mc.readUByte() - val previousGameMode = input.mc.readUByte() - val dimensionNames = input.mc.readVarIntArray { input.mc.readIdentifier() } - val registryCodec = input.mc.readVarIntByteArray() - val dimensionType = input.mc.readIdentifier() - val dimensionName = input.mc.readIdentifier() - val hashedSeed = input.mc.readLong() - val maxPlayers = input.mc.readVarInt() - val viewDistance = input.mc.readVarInt() - val simulationDistance = input.mc.readVarInt() - val reducedDebugInfo = input.mc.readBoolean() - val enableRespawnScreen = input.mc.readBoolean() - val isDebug = input.mc.readBoolean() - val isFlat = input.mc.readBoolean() - val hasDeathLocation = input.mc.readBoolean() - val deathDimensionName = if (hasDeathLocation) input.mc.readIdentifier() else null - val deathPosition = if (hasDeathLocation) input.mc.readPosition() else null + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): Login { + val entityId = input.readVarInt() + val isHardcore = input.readBoolean() + val gameMode = input.readUByte() + val previousGameMode = input.readUByte() + val dimensionNames = input.readVarIntArray { input.readIdentifier() } + val registryCodec = input.readVarIntByteArray() + val dimensionType = input.readIdentifier() + val dimensionName = input.readIdentifier() + val hashedSeed = input.readLong() + val maxPlayers = input.readVarInt() + val viewDistance = input.readVarInt() + val simulationDistance = input.readVarInt() + val reducedDebugInfo = input.readBoolean() + val enableRespawnScreen = input.readBoolean() + val isDebug = input.readBoolean() + val isFlat = input.readBoolean() + val hasDeathLocation = input.readBoolean() + val deathDimensionName = if (hasDeathLocation) input.readIdentifier() else null + val deathPosition = if (hasDeathLocation) input.readPosition() else null return Login( entityId = entityId, @@ -106,27 +105,27 @@ data class Login( } - override fun deserialize(output: Output, value: Login) { - output.mc.writeVarInt(value.entityId) - output.mc.writeBoolean(value.isHardcore) - output.mc.writeUByte(value.gameMode) - output.mc.writeUByte(value.previousGameMode) - output.mc.writeVarIntArray(value.dimensionNames) { str, outputArray -> outputArray.mc.writeIdentifier(str) } - output.mc.writeVarIntByteArray(value.registryCodec) - output.mc.writeIdentifier(value.dimensionType) - output.mc.writeIdentifier(value.dimensionName) - output.mc.writeLong(value.hashedSeed) - output.mc.writeVarInt(value.maxPlayers) - output.mc.writeVarInt(value.viewDistance) - output.mc.writeVarInt(value.simulationDistance) - output.mc.writeBoolean(value.reducedDebugInfo) - output.mc.writeBoolean(value.enableRespawnScreen) - output.mc.writeBoolean(value.isDebug) - output.mc.writeBoolean(value.isFlat) - output.mc.writeBoolean(value.hasDeathLocation) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: Login) { + output.writeVarInt(value.entityId) + output.writeBoolean(value.isHardcore) + output.writeUByte(value.gameMode) + output.writeUByte(value.previousGameMode) + output.writeVarIntArray(value.dimensionNames) { str, outputArray -> outputArray.writeIdentifier(str) } + output.writeVarIntByteArray(value.registryCodec) + output.writeIdentifier(value.dimensionType) + output.writeIdentifier(value.dimensionName) + output.writeLong(value.hashedSeed) + output.writeVarInt(value.maxPlayers) + output.writeVarInt(value.viewDistance) + output.writeVarInt(value.simulationDistance) + output.writeBoolean(value.reducedDebugInfo) + output.writeBoolean(value.enableRespawnScreen) + output.writeBoolean(value.isDebug) + output.writeBoolean(value.isFlat) + output.writeBoolean(value.hasDeathLocation) if (value.hasDeathLocation) { - output.mc.writeIdentifier(value.deathDimensionName!!) - output.mc.writePosition(value.deathPosition!!) + output.writeIdentifier(value.deathDimensionName!!) + output.writePosition(value.deathPosition!!) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SetBlockDestroyStage.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SetBlockDestroyStage.kt index eef8ad5..1164c06 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SetBlockDestroyStage.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SetBlockDestroyStage.kt @@ -2,8 +2,10 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface import io.layercraft.translator.types.Position -import io.layercraft.translator.utils.mc +import io.layercraft.translator.utils.minecraft /** * Set block destroy stage | 0x06 | play | client-bound @@ -25,18 +27,18 @@ data class SetBlockDestroyStage( val destroyStage: Byte, ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): SetBlockDestroyStage { - val entityId = input.mc.readVarInt() - val location = input.mc.readPosition() - val destroyStage = input.mc.readByte() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): SetBlockDestroyStage { + val entityId = input.readVarInt() + val location = input.readPosition() + val destroyStage = input.readByte() return SetBlockDestroyStage(entityId, location, destroyStage) } - override fun deserialize(output: Output, value: SetBlockDestroyStage) { - output.mc.writeVarInt(value.entityId) - output.mc.writePosition(value.location) - output.mc.writeByte(value.destroyStage) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: SetBlockDestroyStage) { + output.writeVarInt(value.entityId) + output.writePosition(value.location) + output.writeByte(value.destroyStage) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnEntity.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnEntity.kt index d3c3bd3..3b15441 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnEntity.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnEntity.kt @@ -3,7 +3,9 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.data.entity.EntityType import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft import java.util.* /** @@ -42,38 +44,38 @@ data class SpawnEntity( val velocityZ: Short ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): SpawnEntity { - val entityId = input.mc.readVarInt() - val uuid = input.mc.readUUID() - val type = EntityType.byType(input.mc.readVarInt()) ?: throw IllegalArgumentException("Invalid entity type") - val x = input.mc.readDouble() - val y = input.mc.readDouble() - val z = input.mc.readDouble() - val pitch = input.mc.readAngle() - val yaw = input.mc.readAngle() - val headYaw = input.mc.readAngle() - val data = input.mc.readVarInt() - val velocityX = input.mc.readShort() - val velocityY = input.mc.readShort() - val velocityZ = input.mc.readShort() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): SpawnEntity { + val entityId = input.readVarInt() + val uuid = input.readUUID() + val type = EntityType.byType(input.readVarInt()) ?: throw IllegalArgumentException("Invalid entity type") + val x = input.readDouble() + val y = input.readDouble() + val z = input.readDouble() + val pitch = input.readAngle() + val yaw = input.readAngle() + val headYaw = input.readAngle() + val data = input.readVarInt() + val velocityX = input.readShort() + val velocityY = input.readShort() + val velocityZ = input.readShort() return SpawnEntity(entityId, uuid, type, x, y, z, pitch, yaw, headYaw, data, velocityX, velocityY, velocityZ) } - override fun deserialize(output: Output, value: SpawnEntity) { - output.mc.writeVarInt(value.entityId) - output.mc.writeUUID(value.uuid) - output.mc.writeVarInt(value.type.type) - output.mc.writeDouble(value.x) - output.mc.writeDouble(value.y) - output.mc.writeDouble(value.z) - output.mc.writeAngle(value.pitch) - output.mc.writeAngle(value.yaw) - output.mc.writeAngle(value.headYaw) - output.mc.writeVarInt(value.data) - output.mc.writeShort(value.velocityX) - output.mc.writeShort(value.velocityY) - output.mc.writeShort(value.velocityZ) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: SpawnEntity) { + output.writeVarInt(value.entityId) + output.writeUUID(value.uuid) + output.writeVarInt(value.type.type) + output.writeDouble(value.x) + output.writeDouble(value.y) + output.writeDouble(value.z) + output.writeAngle(value.pitch) + output.writeAngle(value.yaw) + output.writeAngle(value.headYaw) + output.writeVarInt(value.data) + output.writeShort(value.velocityX) + output.writeShort(value.velocityY) + output.writeShort(value.velocityZ) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnExperienceOrb.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnExperienceOrb.kt index 2585fc9..cc7028f 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnExperienceOrb.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnExperienceOrb.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Spawn experience orb | 0x01 | play | client-bound @@ -24,22 +26,22 @@ data class SpawnExperienceOrb( val count: Short ) : ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): SpawnExperienceOrb { - val entityId = input.mc.readVarInt() - val x = input.mc.readDouble() - val y = input.mc.readDouble() - val z = input.mc.readDouble() - val count = input.mc.readShort() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): SpawnExperienceOrb { + val entityId = input.readVarInt() + val x = input.readDouble() + val y = input.readDouble() + val z = input.readDouble() + val count = input.readShort() return SpawnExperienceOrb(entityId, x, y, z, count) } - override fun deserialize(output: Output, value: SpawnExperienceOrb) { - output.mc.writeVarInt(value.entityId) - output.mc.writeDouble(value.x) - output.mc.writeDouble(value.y) - output.mc.writeDouble(value.z) - output.mc.writeShort(value.count) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: SpawnExperienceOrb) { + output.writeVarInt(value.entityId) + output.writeDouble(value.x) + output.writeDouble(value.y) + output.writeDouble(value.z) + output.writeShort(value.count) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnPlayer.kt b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnPlayer.kt index 5eb0507..9535b09 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnPlayer.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/play/clientbound/SpawnPlayer.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.play.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft import java.util.* /** @@ -29,26 +31,26 @@ data class SpawnPlayer( val pitch: Float, ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): SpawnPlayer { - val entityId = input.mc.readVarInt() - val playerUUID = input.mc.readUUID() - val x = input.mc.readDouble() - val y = input.mc.readDouble() - val z = input.mc.readDouble() - val yaw = input.mc.readAngle() - val pitch = input.mc.readAngle() + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): SpawnPlayer { + val entityId = input.readVarInt() + val playerUUID = input.readUUID() + val x = input.readDouble() + val y = input.readDouble() + val z = input.readDouble() + val yaw = input.readAngle() + val pitch = input.readAngle() return SpawnPlayer(entityId, playerUUID, x, y, z, yaw, pitch) } - override fun deserialize(output: Output, value: SpawnPlayer) { - output.mc.writeVarInt(value.entityId) - output.mc.writeUUID(value.playerUUID) - output.mc.writeDouble(value.x) - output.mc.writeDouble(value.y) - output.mc.writeDouble(value.z) - output.mc.writeAngle(value.yaw) - output.mc.writeAngle(value.pitch) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: SpawnPlayer) { + output.writeVarInt(value.entityId) + output.writeUUID(value.playerUUID) + output.writeDouble(value.x) + output.writeDouble(value.y) + output.writeDouble(value.z) + output.writeAngle(value.yaw) + output.writeAngle(value.pitch) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/PingResponse.kt b/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/PingResponse.kt index 64313c2..f34d349 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/PingResponse.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/PingResponse.kt @@ -2,6 +2,8 @@ package io.layercraft.translator.packets.status.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface /** * Ping response | 0x01 | status | client-bound @@ -16,13 +18,13 @@ data class PingResponse( ) : ClientBoundPacket { companion object : PacketSerializer { - override fun serialize(input: Input): PingResponse { + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): PingResponse { val payload = input.readLong() return PingResponse(payload) } - override fun deserialize(output: Output, value: PingResponse) { + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: PingResponse) { output.writeLong(value.payload) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/StatusResponse.kt b/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/StatusResponse.kt index 03ed2d5..1077840 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/StatusResponse.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/status/clientbound/StatusResponse.kt @@ -2,7 +2,9 @@ package io.layercraft.translator.packets.status.clientbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* -import io.layercraft.translator.utils.mc +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface +import io.layercraft.translator.utils.minecraft /** * Status response | 0x00 | status | client-bound @@ -16,14 +18,14 @@ data class StatusResponse( ): ClientBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): StatusResponse { - val jsonResponse = input.mc.readString(32767) + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): StatusResponse { + val jsonResponse = input.readString(32767) return StatusResponse(jsonResponse) } - override fun deserialize(output: Output, value: StatusResponse) { - output.mc.writeString(value.jsonResponse, 32767) + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: StatusResponse) { + output.writeString(value.jsonResponse, 32767) } } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/PingRequest.kt b/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/PingRequest.kt index 6e4ae0d..7b7dfb0 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/PingRequest.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/PingRequest.kt @@ -2,6 +2,8 @@ package io.layercraft.translator.packets.status.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface /** * Ping request | 0x01 | status | server-bound @@ -16,12 +18,12 @@ data class PingRequest( val payload: Long ): ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): PingRequest { + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): PingRequest { val payload = input.readLong() return PingRequest(payload) } - override fun deserialize(output: Output, value: PingRequest) { + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: PingRequest) { output.writeLong(value.payload) } } diff --git a/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/StatusRequest.kt b/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/StatusRequest.kt index f8f21f8..2eb72ec 100644 --- a/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/StatusRequest.kt +++ b/src/main/kotlin/io/layercraft/translator/packets/status/serverbound/StatusRequest.kt @@ -2,6 +2,8 @@ package io.layercraft.translator.packets.status.serverbound import io.ktor.utils.io.core.* import io.layercraft.translator.packets.* +import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface +import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface /** * Status request | 0x00 | status | server-bound @@ -11,10 +13,10 @@ import io.layercraft.translator.packets.* @MinecraftPacket(packetId = 0x00, state = PacketState.STATUS, direction = PacketDirection.SERVERBOUND) class StatusRequest: ServerBoundPacket { companion object: PacketSerializer { - override fun serialize(input: Input): StatusRequest { + override fun serialize(input: MinecraftProtocolDeserializeInterface<*>): StatusRequest { return StatusRequest() } - override fun deserialize(output: Output, value: StatusRequest) {} + override fun deserialize(output: MinecraftProtocolSerializeInterface<*>, value: StatusRequest) {} } } diff --git a/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolDeserializeInterface.kt b/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolDeserializeInterface.kt index 9a78cbb..fda7adc 100644 --- a/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolDeserializeInterface.kt +++ b/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolDeserializeInterface.kt @@ -11,7 +11,10 @@ import java.util.* * @constructor Create empty Minecraft protocol serialize interface * @see https://wiki.vg/Protocol#Data_types */ -interface MinecraftProtocolDeserializeInterface { +interface MinecraftProtocolDeserializeInterface { + + val input: I + fun readBoolean(): Boolean fun readByte(): Byte fun readUByte(): UByte @@ -33,10 +36,10 @@ interface MinecraftProtocolDeserializeInterface { fun readIdentifier(): String fun readVarIntByteArray(): ByteArray - fun readVarIntArray(decoder: (input: Input) -> T): List + fun readVarIntArray(decoder: (input: MinecraftProtocolDeserializeInterface) -> T): List fun readRemainingByteArray(): ByteArray - fun readRemainingArray(decoder: (input: Input) -> T): List + fun readRemainingArray(decoder: (input: MinecraftProtocolDeserializeInterface) -> T): List fun readPosition(): Position fun readUUID(): UUID diff --git a/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolSerializeInterface.kt b/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolSerializeInterface.kt index ebc3544..a4a821d 100644 --- a/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolSerializeInterface.kt +++ b/src/main/kotlin/io/layercraft/translator/serialization/MinecraftProtocolSerializeInterface.kt @@ -11,24 +11,21 @@ import java.util.* * @constructor Create empty Minecraft protocol serialize interface * @see https://wiki.vg/Protocol#Data_types */ -interface MinecraftProtocolSerializeInterface { +interface MinecraftProtocolSerializeInterface { - fun writeBoolean(input: Boolean) + val output: O + fun writeBoolean(input: Boolean) fun writeByte(input: Byte) - fun writeUByte(input: UByte) fun writeShort(input: Short) - fun writeUShort(input: UShort) fun writeInt(input: Int) - fun writeVarInt(input: Int) fun writeLong(input: Long) - fun writeVarLong(input: Long) fun writeFloat(input: Float) @@ -39,14 +36,12 @@ interface MinecraftProtocolSerializeInterface { fun writeIdentifier(input: String) fun writeVarIntByteArray(input: ByteArray) - fun writeVarIntArray(input: List, encoder: (value: T, output: Output) -> Unit) + fun writeVarIntArray(input: List, encoder: (value: T, output: MinecraftProtocolSerializeInterface) -> Unit) fun writeRemainingByteArray(input: ByteArray) - fun writeRemainingArray(input: List, encoder: (value: T, output: Output) -> Unit) + fun writeRemainingArray(input: List, encoder: (value: T, output: MinecraftProtocolSerializeInterface) -> Unit) fun writePosition(input: Position) fun writeUUID(input: UUID) fun writeAngle(input: Float) - - //fun writeEnum(input: Input, enum: Enum<*>, type: MinecraftEnumType): Enum<*> } diff --git a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByte.kt b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByte.kt index 0928e46..1e0870e 100644 --- a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByte.kt +++ b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByte.kt @@ -4,5 +4,5 @@ import io.ktor.utils.io.core.* import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface import io.layercraft.translator.serialization.MinecraftProtocolSerializeInterface -val Input.mc: MinecraftProtocolDeserializeInterface get() = MinecraftByteInput(this) -val Output.mc: MinecraftProtocolSerializeInterface get() = MinecraftByteOutput(this) +val Input.minecraft: MinecraftProtocolDeserializeInterface get() = MinecraftByteInput(this) +val Output.minecraft: MinecraftProtocolSerializeInterface get() = MinecraftByteOutput(this) diff --git a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteInput.kt b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteInput.kt index 0d6f2c8..1cea130 100644 --- a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteInput.kt +++ b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteInput.kt @@ -4,69 +4,71 @@ import io.ktor.utils.io.core.* import io.layercraft.translator.serialization.MinecraftProtocolDeserializeInterface import io.layercraft.translator.types.Position import java.util.* +import kotlin.math.roundToInt @JvmInline -value class MinecraftByteInput(private val buffer: Input): MinecraftProtocolDeserializeInterface { - override fun readBoolean(): Boolean = buffer.readByte() != 0.toByte() +value class MinecraftByteInput(override val input: Input): MinecraftProtocolDeserializeInterface { - override fun readByte(): Byte = buffer.readByte() + override fun readBoolean(): Boolean = input.readByte() != 0.toByte() + + override fun readByte(): Byte = input.readByte() @OptIn(ExperimentalUnsignedTypes::class) - override fun readUByte(): UByte = buffer.readUByte() + override fun readUByte(): UByte = input.readUByte() - override fun readShort(): Short = buffer.readShort() + override fun readShort(): Short = input.readShort() @OptIn(ExperimentalUnsignedTypes::class) - override fun readUShort(): UShort = buffer.readUShort() + override fun readUShort(): UShort = input.readUShort() - override fun readInt(): Int = buffer.readInt() + override fun readInt(): Int = input.readInt() - override fun readVarInt(): Int = MinecraftVarIntUtils.readVarInt(buffer) + override fun readVarInt(): Int = MinecraftVarIntUtils.readVarInt(input) - override fun readLong(): Long = buffer.readLong() + override fun readLong(): Long = input.readLong() - override fun readVarLong(): Long = MinecraftVarLongUtils.readVarLong(buffer) + override fun readVarLong(): Long = MinecraftVarLongUtils.readVarLong(input) - override fun readFloat(): Float = buffer.readFloat() + override fun readFloat(): Float = input.readFloat() - override fun readDouble(): Double = buffer.readDouble() + override fun readDouble(): Double = input.readDouble() - override fun readString(n: Int): String = MinecraftStringUtils.readString(n, buffer) + override fun readString(n: Int): String = MinecraftStringUtils.readString(n, input) override fun readChat(): String = readString(MINECRAFT_MAX_CHAT_LENGTH) override fun readIdentifier(): String = readString(MINECRAFT_MAX_IDENTIFIER_LENGTH) - override fun readVarIntByteArray(): ByteArray = buffer.readBytes(readVarInt()) + override fun readVarIntByteArray(): ByteArray = input.readBytes(readVarInt()) - override fun readVarIntArray(decoder: (input: Input) -> T): List { + override fun readVarIntArray(decoder: (input: MinecraftProtocolDeserializeInterface) -> T): List { val size = readVarInt() - return (1..size).map { decoder(buffer) }.toList() + return (1..size).map { decoder(this) }.toList() } - override fun readRemainingByteArray(): ByteArray = buffer.readBytes() + override fun readRemainingByteArray(): ByteArray = input.readBytes() - override fun readRemainingArray(decoder: (input: Input) -> T): List { + override fun readRemainingArray(decoder: (input: MinecraftProtocolDeserializeInterface) -> T): List { val list: MutableList = mutableListOf() - while (buffer.remaining > 0) { - list.add(decoder(buffer)) + while (input.remaining > 0) { + list.add(decoder(this)) } return list.toList() } - override fun readPosition(): Position = Position.longToPosition(buffer.readLong()) + override fun readPosition(): Position = Position.longToPosition(input.readLong()) override fun readUUID(): UUID { - val most = buffer.readLong() - val least = buffer.readLong() + val most = input.readLong() + val least = input.readLong() return UUID(most, least) } override fun readAngle(): Float { - return buffer.readByte() * 360 / 256f + return (input.readByte() * 360.0f / 256f) } } diff --git a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteOutput.kt b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteOutput.kt index f9cf049..6e972b7 100644 --- a/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteOutput.kt +++ b/src/main/kotlin/io/layercraft/translator/utils/MinecraftByteOutput.kt @@ -6,57 +6,58 @@ import io.layercraft.translator.types.Position import java.util.* @JvmInline -value class MinecraftByteOutput(private val buffer: Output): MinecraftProtocolSerializeInterface { - override fun writeBoolean(input: Boolean) = buffer.writeByte(if (input) 1 else 0) +value class MinecraftByteOutput(override val output: Output): MinecraftProtocolSerializeInterface { - override fun writeByte(input: Byte) = buffer.writeByte(input) + override fun writeBoolean(input: Boolean) = output.writeByte(if (input) 1 else 0) - override fun writeUByte(input: UByte) = buffer.writeByte(input.toByte()) + override fun writeByte(input: Byte) = output.writeByte(input) - override fun writeShort(input: Short) = buffer.writeShort(input) + override fun writeUByte(input: UByte) = output.writeByte(input.toByte()) - override fun writeUShort(input: UShort) = buffer.writeShort(input.toShort()) + override fun writeShort(input: Short) = output.writeShort(input) - override fun writeInt(input: Int) = buffer.writeInt(input) + override fun writeUShort(input: UShort) = output.writeShort(input.toShort()) - override fun writeVarInt(input: Int) = MinecraftVarIntUtils.writeVarInt(input, buffer) + override fun writeInt(input: Int) = output.writeInt(input) - override fun writeLong(input: Long) = buffer.writeLong(input) + override fun writeVarInt(input: Int) = MinecraftVarIntUtils.writeVarInt(input, output) - override fun writeVarLong(input: Long) = MinecraftVarLongUtils.writeVarLong(input, buffer) + override fun writeLong(input: Long) = output.writeLong(input) - override fun writeFloat(input: Float) = buffer.writeFloat(input) + override fun writeVarLong(input: Long) = MinecraftVarLongUtils.writeVarLong(input, output) - override fun writeDouble(input: Double) = buffer.writeDouble(input) + override fun writeFloat(input: Float) = output.writeFloat(input) - override fun writeString(input: String, n: Int) = MinecraftStringUtils.writeString(n, input, buffer) + override fun writeDouble(input: Double) = output.writeDouble(input) + + override fun writeString(input: String, n: Int) = MinecraftStringUtils.writeString(n, input, output) override fun writeChat(input: String) = writeString(input, MINECRAFT_MAX_CHAT_LENGTH) override fun writeIdentifier(input: String) = writeString(input, MINECRAFT_MAX_IDENTIFIER_LENGTH) override fun writeVarIntByteArray(input: ByteArray) { - buffer.mc.writeVarInt(input.size) - buffer.writeFully(input) + writeVarInt(input.size) + output.writeFully(input) } - override fun writeVarIntArray(input: List, encoder: (value: T, output: Output) -> Unit) { - buffer.mc.writeVarInt(input.size) - input.forEach { encoder(it, buffer) } + override fun writeVarIntArray(input: List, encoder: (value: T, output: MinecraftProtocolSerializeInterface) -> Unit) { + writeVarInt(input.size) + input.forEach { encoder(it, this) } } - override fun writeRemainingByteArray(input: ByteArray) = buffer.writeFully(input) + override fun writeRemainingByteArray(input: ByteArray) = output.writeFully(input) - override fun writeRemainingArray(input: List, encoder: (value: T, output: Output) -> Unit) = input.forEach { encoder(it, buffer) } + override fun writeRemainingArray(input: List, encoder: (value: T, output: MinecraftProtocolSerializeInterface) -> Unit) = input.forEach { encoder(it, this) } - override fun writePosition(input: Position) = buffer.writeLong(Position.positionToLong(input)) + override fun writePosition(input: Position) = output.writeLong(Position.positionToLong(input)) override fun writeUUID(input: UUID) { - buffer.writeLong(input.mostSignificantBits) - buffer.writeLong(input.leastSignificantBits) + output.writeLong(input.mostSignificantBits) + output.writeLong(input.leastSignificantBits) } override fun writeAngle(input: Float) { - buffer.writeByte((input * 256.0f / 360.0f).toInt().toByte()) + output.writeByte((input * 256f / 360f).toInt().toByte()) } } diff --git a/src/main/kotlin/io/layercraft/translator/utils/VarStringUtils.kt b/src/main/kotlin/io/layercraft/translator/utils/VarStringUtils.kt index e2e4e08..4eef374 100644 --- a/src/main/kotlin/io/layercraft/translator/utils/VarStringUtils.kt +++ b/src/main/kotlin/io/layercraft/translator/utils/VarStringUtils.kt @@ -16,7 +16,7 @@ object MinecraftStringUtils { fun readString(maxLength: Int = MINECRAFT_MAX_STRING_LENGTH, input: Input): String { if (input.endOfInput) throw EOFException("Premature end of stream") - val length: Int = input.mc.readVarInt() + val length: Int = input.minecraft.readVarInt() if (length > maxLength * 4) throw MinecraftProtocolDecodingException("The received encoded string buffer length is longer than maximum allowed ($length > ${maxLength * 4})") if (length < 0) throw MinecraftProtocolDecodingException("The received encoded string buffer length is less than zero! Weird string!") @@ -32,7 +32,7 @@ object MinecraftStringUtils { val bytes = string.toByteArray(Charsets.UTF_8) if (bytes.size > MINECRAFT_MAX_STRING_LENGTH) throw MinecraftProtocolEncodingException("String too big (was ${bytes.size} bytes encoded, max $MINECRAFT_MAX_STRING_LENGTH)") if (string.length > maxLength) throw MinecraftProtocolEncodingException("String too big (was ${string.length} characters, max $maxLength)") - output.mc.writeVarInt(bytes.size) + output.minecraft.writeVarInt(bytes.size) output.writeFully(bytes) } } diff --git a/src/test/kotlin/io/layercraft/translator/utils/MinecraftByteTest.kt b/src/test/kotlin/io/layercraft/translator/utils/MinecraftByteTest.kt index 98b0d9c..b80e59f 100644 --- a/src/test/kotlin/io/layercraft/translator/utils/MinecraftByteTest.kt +++ b/src/test/kotlin/io/layercraft/translator/utils/MinecraftByteTest.kt @@ -12,222 +12,222 @@ internal class MinecraftByteTest { @Test fun testBoolean() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeBoolean(true) - packetWrite.mc.writeBoolean(false) - + packetWrite.minecraft.writeBoolean(true) + packetWrite.minecraft.writeBoolean(false) + val packetRead = packetWrite.build() - assert(packetRead.mc.readBoolean()) - assert(!packetRead.mc.readBoolean()) + assert(packetRead.minecraft.readBoolean()) + assert(!packetRead.minecraft.readBoolean()) } @Test fun testByte() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeByte(0) - packetWrite.mc.writeByte(1) - packetWrite.mc.writeByte(127) - packetWrite.mc.writeByte(-128) - packetWrite.mc.writeByte(-1) - + packetWrite.minecraft.writeByte(0) + packetWrite.minecraft.writeByte(1) + packetWrite.minecraft.writeByte(127) + packetWrite.minecraft.writeByte(-128) + packetWrite.minecraft.writeByte(-1) + val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readByte(), 0.toByte()) - assertEquals(packetRead.mc.readByte(), 1.toByte()) - assertEquals(packetRead.mc.readByte(), 127.toByte()) - assertEquals(packetRead.mc.readByte(), (-128).toByte()) - assertEquals(packetRead.mc.readByte(), (-1).toByte()) + assertEquals(packetRead.minecraft.readByte(), 0.toByte()) + assertEquals(packetRead.minecraft.readByte(), 1.toByte()) + assertEquals(packetRead.minecraft.readByte(), 127.toByte()) + assertEquals(packetRead.minecraft.readByte(), (-128).toByte()) + assertEquals(packetRead.minecraft.readByte(), (-1).toByte()) } @Test fun testUByte() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeUByte(0.toUByte()) - packetWrite.mc.writeUByte(1.toUByte()) - packetWrite.mc.writeUByte(127.toUByte()) - packetWrite.mc.writeUByte(128.toUByte()) - packetWrite.mc.writeUByte(255.toUByte()) - + packetWrite.minecraft.writeUByte(0.toUByte()) + packetWrite.minecraft.writeUByte(1.toUByte()) + packetWrite.minecraft.writeUByte(127.toUByte()) + packetWrite.minecraft.writeUByte(128.toUByte()) + packetWrite.minecraft.writeUByte(255.toUByte()) + val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readUByte(), 0.toUByte()) - assertEquals(packetRead.mc.readUByte(), 1.toUByte()) - assertEquals(packetRead.mc.readUByte(), 127.toUByte()) - assertEquals(packetRead.mc.readUByte(), 128.toUByte()) - assertEquals(packetRead.mc.readUByte(), 255.toUByte()) + assertEquals(packetRead.minecraft.readUByte(), 0.toUByte()) + assertEquals(packetRead.minecraft.readUByte(), 1.toUByte()) + assertEquals(packetRead.minecraft.readUByte(), 127.toUByte()) + assertEquals(packetRead.minecraft.readUByte(), 128.toUByte()) + assertEquals(packetRead.minecraft.readUByte(), 255.toUByte()) } @Test fun testShort() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeShort(0) - packetWrite.mc.writeShort(1) - packetWrite.mc.writeShort(32767) - packetWrite.mc.writeShort(-32768) - packetWrite.mc.writeShort(-1) - + packetWrite.minecraft.writeShort(0) + packetWrite.minecraft.writeShort(1) + packetWrite.minecraft.writeShort(32767) + packetWrite.minecraft.writeShort(-32768) + packetWrite.minecraft.writeShort(-1) + val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readShort(), 0.toShort()) - assertEquals(packetRead.mc.readShort(), 1.toShort()) - assertEquals(packetRead.mc.readShort(), 32767.toShort()) - assertEquals(packetRead.mc.readShort(), (-32768).toShort()) - assertEquals(packetRead.mc.readShort(), (-1).toShort()) + assertEquals(packetRead.minecraft.readShort(), 0.toShort()) + assertEquals(packetRead.minecraft.readShort(), 1.toShort()) + assertEquals(packetRead.minecraft.readShort(), 32767.toShort()) + assertEquals(packetRead.minecraft.readShort(), (-32768).toShort()) + assertEquals(packetRead.minecraft.readShort(), (-1).toShort()) } @Test fun testUShort() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeUShort(0.toUShort()) - packetWrite.mc.writeUShort(1.toUShort()) - packetWrite.mc.writeUShort(32767.toUShort()) - packetWrite.mc.writeUShort(32768.toUShort()) - packetWrite.mc.writeUShort(65535.toUShort()) + packetWrite.minecraft.writeUShort(0.toUShort()) + packetWrite.minecraft.writeUShort(1.toUShort()) + packetWrite.minecraft.writeUShort(32767.toUShort()) + packetWrite.minecraft.writeUShort(32768.toUShort()) + packetWrite.minecraft.writeUShort(65535.toUShort()) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readUShort(), 0.toUShort()) - assertEquals(packetRead.mc.readUShort(), 1.toUShort()) - assertEquals(packetRead.mc.readUShort(), 32767.toUShort()) - assertEquals(packetRead.mc.readUShort(), 32768.toUShort()) - assertEquals(packetRead.mc.readUShort(), 65535.toUShort()) + assertEquals(packetRead.minecraft.readUShort(), 0.toUShort()) + assertEquals(packetRead.minecraft.readUShort(), 1.toUShort()) + assertEquals(packetRead.minecraft.readUShort(), 32767.toUShort()) + assertEquals(packetRead.minecraft.readUShort(), 32768.toUShort()) + assertEquals(packetRead.minecraft.readUShort(), 65535.toUShort()) } @Test fun testInt() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeInt(0) - packetWrite.mc.writeInt(1) - packetWrite.mc.writeInt(2147483647) - packetWrite.mc.writeInt(-2147483648) - packetWrite.mc.writeInt(-1) + packetWrite.minecraft.writeInt(0) + packetWrite.minecraft.writeInt(1) + packetWrite.minecraft.writeInt(2147483647) + packetWrite.minecraft.writeInt(-2147483648) + packetWrite.minecraft.writeInt(-1) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readInt(), 0) - assertEquals(packetRead.mc.readInt(), 1) - assertEquals(packetRead.mc.readInt(), 2147483647) - assertEquals(packetRead.mc.readInt(), -2147483648) - assertEquals(packetRead.mc.readInt(), -1) + assertEquals(packetRead.minecraft.readInt(), 0) + assertEquals(packetRead.minecraft.readInt(), 1) + assertEquals(packetRead.minecraft.readInt(), 2147483647) + assertEquals(packetRead.minecraft.readInt(), -2147483648) + assertEquals(packetRead.minecraft.readInt(), -1) } @Test fun testVarInt() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeVarInt(0) - packetWrite.mc.writeVarInt(1) - packetWrite.mc.writeVarInt(2147483647) - packetWrite.mc.writeVarInt(-2147483648) - packetWrite.mc.writeVarInt(-1) + packetWrite.minecraft.writeVarInt(0) + packetWrite.minecraft.writeVarInt(1) + packetWrite.minecraft.writeVarInt(2147483647) + packetWrite.minecraft.writeVarInt(-2147483648) + packetWrite.minecraft.writeVarInt(-1) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readVarInt(), 0) - assertEquals(packetRead.mc.readVarInt(), 1) - assertEquals(packetRead.mc.readVarInt(), 2147483647) - assertEquals(packetRead.mc.readVarInt(), -2147483648) - assertEquals(packetRead.mc.readVarInt(), -1) + assertEquals(packetRead.minecraft.readVarInt(), 0) + assertEquals(packetRead.minecraft.readVarInt(), 1) + assertEquals(packetRead.minecraft.readVarInt(), 2147483647) + assertEquals(packetRead.minecraft.readVarInt(), -2147483648) + assertEquals(packetRead.minecraft.readVarInt(), -1) } @Test fun testLong() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeLong(0) - packetWrite.mc.writeLong(1) - packetWrite.mc.writeLong(92233854775807) - packetWrite.mc.writeLong(Long.MAX_VALUE) - packetWrite.mc.writeLong(-1) + packetWrite.minecraft.writeLong(0) + packetWrite.minecraft.writeLong(1) + packetWrite.minecraft.writeLong(92233854775807) + packetWrite.minecraft.writeLong(Long.MAX_VALUE) + packetWrite.minecraft.writeLong(-1) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readLong(), 0) - assertEquals(packetRead.mc.readLong(), 1) - assertEquals(packetRead.mc.readLong(), 92233854775807) - assertEquals(packetRead.mc.readLong(), Long.MAX_VALUE) - assertEquals(packetRead.mc.readLong(), -1) + assertEquals(packetRead.minecraft.readLong(), 0) + assertEquals(packetRead.minecraft.readLong(), 1) + assertEquals(packetRead.minecraft.readLong(), 92233854775807) + assertEquals(packetRead.minecraft.readLong(), Long.MAX_VALUE) + assertEquals(packetRead.minecraft.readLong(), -1) } @Test fun testVarLong() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeVarLong(0) - packetWrite.mc.writeVarLong(1) - packetWrite.mc.writeVarLong(92233854775807) - packetWrite.mc.writeVarLong(Long.MAX_VALUE) - packetWrite.mc.writeVarLong(-1) + packetWrite.minecraft.writeVarLong(0) + packetWrite.minecraft.writeVarLong(1) + packetWrite.minecraft.writeVarLong(92233854775807) + packetWrite.minecraft.writeVarLong(Long.MAX_VALUE) + packetWrite.minecraft.writeVarLong(-1) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readVarLong(), 0) - assertEquals(packetRead.mc.readVarLong(), 1) - assertEquals(packetRead.mc.readVarLong(), 92233854775807) - assertEquals(packetRead.mc.readVarLong(), Long.MAX_VALUE) - assertEquals(packetRead.mc.readVarLong(), -1) + assertEquals(packetRead.minecraft.readVarLong(), 0) + assertEquals(packetRead.minecraft.readVarLong(), 1) + assertEquals(packetRead.minecraft.readVarLong(), 92233854775807) + assertEquals(packetRead.minecraft.readVarLong(), Long.MAX_VALUE) + assertEquals(packetRead.minecraft.readVarLong(), -1) } @Test fun testFloat() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeFloat(0f) - packetWrite.mc.writeFloat(1f) - packetWrite.mc.writeFloat(1.5f) - packetWrite.mc.writeFloat(-1.5f) - packetWrite.mc.writeFloat(-1f) + packetWrite.minecraft.writeFloat(0f) + packetWrite.minecraft.writeFloat(1f) + packetWrite.minecraft.writeFloat(1.5f) + packetWrite.minecraft.writeFloat(-1.5f) + packetWrite.minecraft.writeFloat(-1f) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readFloat(), 0f) - assertEquals(packetRead.mc.readFloat(), 1f) - assertEquals(packetRead.mc.readFloat(), 1.5f) - assertEquals(packetRead.mc.readFloat(), -1.5f) - assertEquals(packetRead.mc.readFloat(), -1f) + assertEquals(packetRead.minecraft.readFloat(), 0f) + assertEquals(packetRead.minecraft.readFloat(), 1f) + assertEquals(packetRead.minecraft.readFloat(), 1.5f) + assertEquals(packetRead.minecraft.readFloat(), -1.5f) + assertEquals(packetRead.minecraft.readFloat(), -1f) } @Test fun testDouble() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeDouble(0.0) - packetWrite.mc.writeDouble(1.0) - packetWrite.mc.writeDouble(1.5) - packetWrite.mc.writeDouble(-1.5) - packetWrite.mc.writeDouble(-1.0) + packetWrite.minecraft.writeDouble(0.0) + packetWrite.minecraft.writeDouble(1.0) + packetWrite.minecraft.writeDouble(1.5) + packetWrite.minecraft.writeDouble(-1.5) + packetWrite.minecraft.writeDouble(-1.0) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readDouble(), 0.0) - assertEquals(packetRead.mc.readDouble(), 1.0) - assertEquals(packetRead.mc.readDouble(), 1.5) - assertEquals(packetRead.mc.readDouble(), -1.5) - assertEquals(packetRead.mc.readDouble(), -1.0) + assertEquals(packetRead.minecraft.readDouble(), 0.0) + assertEquals(packetRead.minecraft.readDouble(), 1.0) + assertEquals(packetRead.minecraft.readDouble(), 1.5) + assertEquals(packetRead.minecraft.readDouble(), -1.5) + assertEquals(packetRead.minecraft.readDouble(), -1.0) } @Test fun testString() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") - packetWrite.mc.writeString("Hello World!") - packetWrite.mc.writeString("Newspicel", 16) + packetWrite.minecraft.writeString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + packetWrite.minecraft.writeString("Hello World!") + packetWrite.minecraft.writeString("Newspicel", 16) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") - assertEquals(packetRead.mc.readString(), "Hello World!") - assertEquals(packetRead.mc.readString(16), "Newspicel") + assertEquals(packetRead.minecraft.readString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + assertEquals(packetRead.minecraft.readString(), "Hello World!") + assertEquals(packetRead.minecraft.readString(16), "Newspicel") } @Test fun testChat() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeChat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + packetWrite.minecraft.writeChat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readChat(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + assertEquals(packetRead.minecraft.readChat(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") } @Test fun testIdentifier() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeIdentifier("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + packetWrite.minecraft.writeIdentifier("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readIdentifier(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") + assertEquals(packetRead.minecraft.readIdentifier(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?`~") } @Test fun testVarIntByteArray() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeVarIntByteArray(byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) + packetWrite.minecraft.writeVarIntByteArray(byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) val packetRead = packetWrite.build() - assertArrayEquals(packetRead.mc.readVarIntByteArray(), byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) + assertArrayEquals(packetRead.minecraft.readVarIntByteArray(), byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) } data class TestDataType( @@ -240,18 +240,18 @@ internal class MinecraftByteTest { fun testVarIntArray() { val data = listOf(TestDataType(1, 1f, "fghjkl"),TestDataType(2, 2f, "qwerty"),TestDataType(3, 3f, "asdfgh")) val packetWrite = BytePacketBuilder() - packetWrite.mc.writeVarIntArray(data) { arrayValue, arrayOutput -> - arrayOutput.mc.writeVarInt(arrayValue.int) - arrayOutput.mc.writeFloat(arrayValue.float) - arrayOutput.mc.writeString(arrayValue.string) + packetWrite.minecraft.writeVarIntArray(data) { arrayValue, arrayOutput -> + arrayOutput.writeVarInt(arrayValue.int) + arrayOutput.writeFloat(arrayValue.float) + arrayOutput.writeString(arrayValue.string) } val packetRead = packetWrite.build() - val result = packetRead.mc.readVarIntArray { arrayInput -> + val result = packetRead.minecraft.readVarIntArray { arrayInput -> TestDataType( - arrayInput.mc.readVarInt(), - arrayInput.mc.readFloat(), - arrayInput.mc.readString() + arrayInput.readVarInt(), + arrayInput.readFloat(), + arrayInput.readString() ) } @@ -262,19 +262,19 @@ internal class MinecraftByteTest { fun testRemainingArray() { val data = listOf(TestDataType(1, 1f, "fghjkl"),TestDataType(2, 2f, "qwerty"),TestDataType(3, 3f, "asdfgh")) val packetWrite = BytePacketBuilder() - packetWrite.mc.writeRemainingArray(data) { arrayValue, arrayOutput -> - arrayOutput.mc.writeInt(arrayValue.int) - arrayOutput.mc.writeFloat(arrayValue.float) - arrayOutput.mc.writeString(arrayValue.string) + packetWrite.minecraft.writeRemainingArray(data) { arrayValue, arrayOutput -> + arrayOutput.writeInt(arrayValue.int) + arrayOutput.writeFloat(arrayValue.float) + arrayOutput.writeString(arrayValue.string) } val packetRead = packetWrite.build() - val result = packetRead.mc.readRemainingArray { arrayInput -> + val result = packetRead.minecraft.readRemainingArray { arrayInput -> TestDataType( - arrayInput.mc.readInt(), - arrayInput.mc.readFloat(), - arrayInput.mc.readString() + arrayInput.readInt(), + arrayInput.readFloat(), + arrayInput.readString() ) } assertEquals(result, data) @@ -283,38 +283,38 @@ internal class MinecraftByteTest { @Test fun testRemainingByteArray() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeRemainingByteArray(byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) + packetWrite.minecraft.writeRemainingByteArray(byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) val packetRead = packetWrite.build() - assertArrayEquals(packetRead.mc.readRemainingByteArray(), byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) + assertArrayEquals(packetRead.minecraft.readRemainingByteArray(), byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) } @Test fun testPosition() { val packetWrite = BytePacketBuilder() val position = Position(1, 2, 3) - packetWrite.mc.writePosition(position) + packetWrite.minecraft.writePosition(position) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readPosition(), position) + assertEquals(packetRead.minecraft.readPosition(), position) } @Test fun testUUID() { val packetWrite = BytePacketBuilder() val uuid = UUID.randomUUID() - packetWrite.mc.writeUUID(uuid) + packetWrite.minecraft.writeUUID(uuid) val packetRead = packetWrite.build() - assertEquals(packetRead.mc.readUUID(), uuid) + assertEquals(packetRead.minecraft.readUUID(), uuid) } @Test fun testAngle() { val packetWrite = BytePacketBuilder() - packetWrite.mc.writeAngle(123f) + packetWrite.minecraft.writeAngle(123f) val packetRead = packetWrite.build() - //TODO assertEquals(packetRead.mc.readAngle(), 123f) + //assertEquals(packetRead.minecraft.readAngle(), 123f) } }