From 641df674e4af25398ff9836011e4074f690fef5e Mon Sep 17 00:00:00 2001 From: RTAkland Date: Mon, 7 Sep 2026 07:40:08 +0800 Subject: [PATCH] Update all codec to suspend; added a default ProtocolCryptoContext implementation --- .gitignore | 1 + gradle/libs.versions.toml | 19 +- libmc-common/build.gradle.kts | 6 +- .../kotlin/cn/rtast/libmc/common/buffer.kt | 47 ---- .../kotlin/cn/rtast/libmc/common/channels.kt | 36 --- .../kotlin/cn/rtast/libmc/common/codec.kt | 30 --- .../common/crypto}/AuthenticationProvider.kt | 2 +- .../libmc/common/crypto/NetworkCipher.kt | 13 + .../libmc/common}/crypto/ProtocolContext.kt | 16 +- .../cn/rtast/libmc/common/mc_primitives.kt | 232 ------------------ .../rtast/libmc/common/packet/PacketCodec.kt | 26 ++ .../libmc/common/packet/PacketRegistry.kt | 9 +- .../rtast/libmc/common/primitives/BitSet.kt | 33 +++ .../cn/rtast/libmc/common/primitives/IdOrX.kt | 31 +++ .../cn/rtast/libmc/common/primitives/IdSet.kt | 41 ++++ .../common/primitives/MinecraftString.kt | 28 +++ .../rtast/libmc/common/primitives/Optional.kt | 25 ++ .../rtast/libmc/common/primitives/Prefixed.kt | 56 +++++ .../cn/rtast/libmc/common/primitives/Uuid.kt | 22 ++ .../rtast/libmc/common/primitives/VarInt.kt | 45 ++++ .../rtast/libmc/common/primitives/VarLong.kt | 39 +++ .../cn/rtast/libmc/common/stream/buffer.kt | 47 ++++ .../libmc/common/{ => stream}/byte_order.kt | 2 +- .../cn/rtast/libmc/common/stream/channels.kt | 36 +++ .../rtast/libmc/common/{ => stream}/socket.kt | 6 +- .../libmc/common/{ => stream}/buffer.jvm.kt | 50 ++-- .../libmc/common/{ => stream}/channels.jvm.kt | 18 +- .../common/{ => stream}/order_convert.kt | 2 +- .../libmc/common/{ => stream}/socket.jvm.kt | 10 +- .../common/{ => stream}/buffer.native.kt | 44 ++-- .../common/{ => stream}/channels.native.kt | 23 +- .../common/{ => stream}/socket.native.kt | 7 +- .../cn/rtast/libmc/mcping/bedrock/packet.kt | 12 +- .../libmc/mcping/bedrock/packet_writer.kt | 8 +- .../libmc/mcping/bedrock/ping_bedrock.kt | 6 +- .../cn/rtast/libmc/mcping/java/packet.kt | 20 +- .../cn/rtast/libmc/mcping/java/ping_java.kt | 6 +- .../kotlin/cn/rtast/libmc/mcping/mcping.kt | 2 +- .../cn/rtast/libmc/mcping/packet_writer.kt | 12 +- .../cn/rtast/libmc/nbt/BytesBufferNBTInput.kt | 8 +- .../rtast/libmc/nbt/BytesBufferNBTOutput.kt | 10 +- .../kotlin/cn/rtast/libmc/nbt/NBTInput.kt | 36 +-- .../kotlin/cn/rtast/libmc/nbt/NBTOutput.kt | 41 ++-- .../kotlin/cn/rtast/libmc/nbt/NBTReader.kt | 14 +- .../kotlin/cn/rtast/libmc/nbt/NBTWriter.kt | 8 +- .../src/jvmTest/kotlin/test/TestNBTReader.kt | 2 +- libmc-protocol-encrypt/README.md | 21 ++ libmc-protocol-encrypt/build.gradle.kts | 43 ++++ .../libmc/protocol/crypto/AesCFB8Cipher.kt | 48 ++++ .../crypto/DefaultProtocolCryptoContext.kt | 31 +++ .../libmc/protocol/crypto/RSAEncryotor.kt | 24 ++ .../rtast/libmc/protocol/crypto/Sha1Hasher.kt | 41 ++++ .../src/jvmTest/kotlin/test/TestJvmClient.kt | 41 ++++ libmc-protocol/build.gradle.kts | 4 +- .../libmc/protocol/client/MinecraftClient.kt | 6 +- .../libmc/protocol/crypto/NetworkCipher.kt | 13 - .../event/InternalPacketDispatcher.kt | 37 +-- .../libmc/protocol/network/CipherChannel.kt | 16 +- .../libmc/protocol/network/NetworkChannel.kt | 11 +- .../libmc/protocol/network/NetworkSession.kt | 16 +- .../packet/configuration/KnownPacks.kt | 12 +- .../ClientboundAddResourcePackPacket.kt | 13 +- .../ClientboundClearDialogPacket.kt | 11 +- .../ClientboundCodeOfConductPacket.kt | 13 +- .../ClientboundConfigurationPacket.kt | 12 - ...lientboundConfigurationShowDialogPacket.kt | 11 +- .../ClientboundCookieRequestPacket.kt | 11 +- .../ClientboundCustomPayloadPacket.kt | 8 +- .../ClientboundCustomReportDetailsPacket.kt | 18 +- ...lientboundDisconnectConfigurationPacket.kt | 11 +- .../ClientboundFinishConfigurationPacket.kt | 11 +- ...ClientboundKeepAliveConfigurationPacket.kt | 11 +- .../ClientboundPingConfigurationPacket.kt | 11 +- .../ClientboundRegistryDataPacket.kt | 13 +- .../ClientboundRemoveResourcePackPacket.kt | 13 +- .../clientbound/ClientboundResetChatPacket.kt | 11 +- .../ClientboundSelectKnownPacksPacket.kt | 13 +- .../ClientboundServerLinksPacket.kt | 13 +- .../ClientboundStoreCookiePacket.kt | 13 +- .../clientbound/ClientboundTransferPacket.kt | 15 +- .../ClientboundUpdateEnabledFeaturesPacket.kt | 14 +- .../ClientboundUpdateTagsPacket.kt | 23 +- .../ServerboundAcceptCodeOfConductPacket.kt | 8 +- ...ServerboundAckFinishConfigurationPacket.kt | 8 +- .../ServerboundCookieResponsePacket.kt | 10 +- ...ServerboundKeepAliveConfigurationPacket.kt | 8 +- .../ServerboundPongConfigurationPacket.kt | 8 +- .../ServerboundSelectKnownPacksPacket.kt | 10 +- .../handshake/ServerboundHandshakePacket.kt | 12 +- .../ClientboundCustomQueryPacket.kt | 13 +- .../ClientboundDisconnectLoginPacket.kt | 11 +- .../clientbound/ClientboundHelloPacket.kt | 15 +- .../clientbound/ClientboundLoginPacket.kt | 12 - .../ClientboundLoginSuccessPacket.kt | 13 +- .../ClientboundSetCompressionPacket.kt | 17 +- .../ServerboundCustomQueryAnswerPacket.kt | 12 +- .../login/serverbound/ServerboundKeyPacket.kt | 10 +- .../ServerboundLoginAcknowledgedPacket.kt | 9 +- .../ServerboundLoginStartPacket.kt | 13 +- ...ClientboundAcknowledgeBlockChangePacket.kt | 13 +- .../ClientboundAwardStatisticsPacket.kt | 13 +- .../ClientboundBlockDestructionPacket.kt | 13 +- .../ClientboundBlockEntityDataPacket.kt | 13 +- .../ClientboundBlockEventPacket.kt | 13 +- .../ClientboundBlockUpdatePacket.kt | 13 +- .../clientbound/ClientboundBossEventPacket.kt | 15 +- .../ClientboundChangeDifficultyPacket.kt | 11 +- .../ClientboundChunkBatchFinishedPacket.kt | 13 +- .../ClientboundChunkBatchStartPacket.kt | 11 +- .../ClientboundChunksBiomesPacket.kt | 13 +- .../ClientboundClearTitlesPacket.kt | 11 +- .../ClientboundCommandSuggestionsPacket.kt | 17 +- .../ClientboundContainerClosePacket.kt | 13 +- .../ClientboundContainerSetDataPacket.kt | 13 +- .../clientbound/ClientboundCooldownPacket.kt | 10 +- .../ClientboundCustomChatCompletionsPacket.kt | 12 +- .../ClientboundDamageEventPacket.kt | 10 +- .../ClientboundDeleteChatPacket.kt | 12 +- .../clientbound/ClientboundDelimiterPacket.kt | 11 +- .../ClientboundDisconnectPlayPacket.kt | 11 +- .../ClientboundDisguisedChatMessagePacket.kt | 10 +- .../ClientboundEntityAnimationPacket.kt | 13 +- .../ClientboundEntityEffectPacket.kt | 13 +- .../ClientboundEntityEventPacket.kt | 8 +- .../ClientboundEntitySoundEffectPacket.kt | 10 +- .../clientbound/ClientboundGameEventPacket.kt | 8 +- .../ClientboundGameRuleValuesPacket.kt | 10 +- .../ClientboundHurtAnimationPacket.kt | 10 +- .../ClientboundInitializeWorldBorderPacket.kt | 12 +- .../ClientboundKeepAlivePlayPacket.kt | 11 +- .../ClientboundLevelEventPacket.kt | 8 +- .../ClientboundLinkEntitiesPacket.kt | 8 +- .../clientbound/ClientboundLoginPlayPacket.kt | 13 +- .../ClientboundLowDiskSpaceWarningPacket.kt | 8 +- ...ClientboundMoveMinecartAlongTrackPacket.kt | 10 +- .../ClientboundMoveVehiclePacket.kt | 8 +- .../clientbound/ClientboundOpenBookPacket.kt | 10 +- .../ClientboundOpenHorseScreenPacket.kt | 10 +- .../ClientboundOpenScreenPacket.kt | 10 +- .../ClientboundOpenSignEditorPacket.kt | 8 +- .../ClientboundPickupItemPacket.kt | 10 +- .../play/clientbound/ClientboundPingPacket.kt | 11 +- .../play/clientbound/ClientboundPlayPacket.kt | 15 -- .../ClientboundPlayerAbilitiesPacket.kt | 8 +- .../ClientboundPlayerChatMessagePacket.kt | 17 +- .../ClientboundPlayerCombatDeathPacket.kt | 10 +- .../ClientboundPlayerEndCombatPacket.kt | 10 +- .../ClientboundPlayerEnterCombatPacket.kt | 9 +- .../ClientboundPlayerInfoRemovePacket.kt | 12 +- .../ClientboundPlayerLookAtPacket.kt | 10 +- .../ClientboundPlayerRotationPacket.kt | 8 +- .../ClientboundProjectilePowerPacket.kt | 10 +- .../ClientboundRemoveEntitiesPacket.kt | 12 +- .../ClientboundRemoveEntityEffectPacket.kt | 10 +- .../ClientboundResetScorePacket.kt | 10 +- .../clientbound/ClientboundRespawnPacket.kt | 12 +- .../ClientboundSelectAdvancementsTabPacket.kt | 10 +- .../ClientboundServerDataPacket.kt | 12 +- .../ClientboundSetActionBarTextPacket.kt | 8 +- .../ClientboundSetBorderCenterPacket.kt | 8 +- .../ClientboundSetBorderLeapSizePacket.kt | 10 +- .../ClientboundSetBorderSizePacket.kt | 8 +- .../ClientboundSetBorderWarningDelayPacket.kt | 10 +- ...ientboundSetBorderWarningDistancePacket.kt | 10 +- .../clientbound/ClientboundSetCameraPacket.kt | 10 +- .../ClientboundSetCarriedItemPacket.kt | 10 +- .../ClientboundSetCenterChunkPacket.kt | 10 +- ...lientboundSetDefaultSpawnPositionPacket.kt | 8 +- .../ClientboundSetDisplayObjectivePacket.kt | 12 +- .../ClientboundSetEntityVelocityPacket.kt | 10 +- .../ClientboundSetExperiencePacket.kt | 10 +- .../ClientboundSetHeadRotationPacket.kt | 10 +- .../clientbound/ClientboundSetHealthPacket.kt | 10 +- .../ClientboundSetPassengersPacket.kt | 12 +- .../ClientboundSetRenderDistancePacket.kt | 10 +- .../ClientboundSetSimulationDistancePacket.kt | 10 +- .../ClientboundSetSubtitleTextPacket.kt | 8 +- ...entboundSetTabListHeaderAndFooterPacket.kt | 8 +- .../ClientboundSetTickingStatePacket.kt | 8 +- .../clientbound/ClientboundSetTimePacket.kt | 10 +- ...ClientboundSetTitleAnimationTimesPacket.kt | 8 +- .../ClientboundSetTitleTextPacket.kt | 8 +- .../ClientboundShowDialogPacket.kt | 15 +- .../ClientboundSoundEffectPacket.kt | 10 +- .../ClientboundSpawnEntityPacket.kt | 15 +- .../ClientboundStartConfigurationPacket.kt | 11 +- .../clientbound/ClientboundStepTickPacket.kt | 10 +- .../clientbound/ClientboundStopSoundPacket.kt | 10 +- ...entboundSynchronizePlayerPositionPacket.kt | 10 +- ...ntboundSynchronizeVehiclePositionPacket.kt | 10 +- .../ClientboundSystemChatMessagePacket.kt | 11 +- .../ClientboundTagQueryResponsePacket.kt | 10 +- .../ClientboundTeleportEntityPacket.kt | 10 +- .../ClientboundTestHighlightPositionPacket.kt | 8 +- ...lientboundTestInstanceBlockStatusPacket.kt | 10 +- .../ClientboundUnloadChunkPacket.kt | 8 +- .../ClientboundUpdateAttributesPacket.kt | 12 +- ...ndUpdateEntityPositionAndRotationPacket.kt | 10 +- .../ClientboundUpdateEntityPositionPacket.kt | 10 +- .../ClientboundUpdateEntityRotationPacket.kt | 10 +- .../ClientboundUpdateObjectivePacket.kt | 12 +- .../ClientboundUpdateScorePacket.kt | 10 +- .../ClientboundUpdateSectionBlockPacket.kt | 12 +- .../ServerboundAcceptTeleportationPacket.kt | 10 +- ...ServerboundAcknowledgeChatMessagePacket.kt | 10 +- .../ServerboundAttackActionPacket.kt | 10 +- .../ServerboundBundleItemSelectedPacket.kt | 10 +- .../ServerboundChangeDifficultyPacket.kt | 8 +- .../ServerboundChangeGameModePacket.kt | 10 +- .../ServerboundChatCommandPacket.kt | 10 +- .../ServerboundChatMessagePacket.kt | 12 +- .../ServerboundChunkBatchReceivedPacket.kt | 8 +- .../ServerboundClientActionPacket.kt | 10 +- .../ServerboundClientCommandPacket.kt | 10 +- .../ServerboundClientInformationPacket.kt | 12 +- .../ServerboundClientTickEndPacket.kt | 8 +- ...rverboundCommandSuggestionRequestPacket.kt | 12 +- ...verboundConfigurationAcknowledgedPacket.kt | 8 +- .../ServerboundContainerClickButtonPacket.kt | 10 +- .../ServerboundContainerClosePacket.kt | 10 +- .../ServerboundCustomClickActionPacket.kt | 10 +- .../ServerboundCustomPayloadPacket.kt | 8 +- .../serverbound/ServerboundEditBookPacket.kt | 10 +- .../serverbound/ServerboundInteractPacket.kt | 10 +- .../ServerboundJigsawGeneratePacket.kt | 10 +- .../ServerboundKeepAlivePlayPacket.kt | 8 +- .../ServerboundLockDifficultyPacket.kt | 8 +- .../ServerboundMoveVehiclePacket.kt | 8 +- .../ServerboundPaddleBoatPacket.kt | 8 +- .../ServerboundPickItemFromBlockPacket.kt | 8 +- .../ServerboundPickItemFromEntityPacket.kt | 10 +- .../ServerboundPlaceRecipePacket.kt | 10 +- .../ServerboundPlayerAbilitiesPacket.kt | 8 +- .../ServerboundPlayerActionPacket.kt | 10 +- .../ServerboundPlayerCommandPacket.kt | 10 +- .../ServerboundPlayerInputPacket.kt | 8 +- .../ServerboundPlayerLoadedPacket.kt | 9 +- .../serverbound/ServerboundPongPlayPacket.kt | 8 +- .../ServerboundQueryBlockEntityTagPacket.kt | 10 +- .../ServerboundQueryEntityTagPacket.kt | 10 +- ...rverboundRecipeBookChangeSettingsPacket.kt | 10 +- .../ServerboundRecipeBookSeenRecipePacket.kt | 10 +- .../ServerboundRenameItemPacket.kt | 10 +- .../ServerboundResourcePackResponsePacket.kt | 12 +- .../ServerboundSeenAdvancementsPacket.kt | 10 +- .../ServerboundSelectTradePacket.kt | 10 +- .../serverbound/ServerboundSetBeaconPacket.kt | 10 +- .../ServerboundSetCarriedItemPacket.kt | 8 +- .../ServerboundSetCommandBlockPacket.kt | 12 +- .../ServerboundSetCommandMinecartPacket.kt | 12 +- .../ServerboundSetGameRulePacket.kt | 10 +- .../ServerboundSetJigsawBlockPacket.kt | 12 +- .../ServerboundSetPlayerMovementFlagPacket.kt | 8 +- ...boundSetPlayerPositionAndRotationPacket.kt | 8 +- .../ServerboundSetPlayerPositionPacket.kt | 8 +- .../ServerboundSetPlayerRotationPacket.kt | 8 +- .../ServerboundSetStructureBlockPacket.kt | 10 +- .../ServerboundSetTestBlockPacket.kt | 12 +- .../ServerboundSignUpdatePacket.kt | 10 +- .../ServerboundSignedChatCommandPacket.kt | 12 +- .../ServerboundSpectatorActionPacket.kt | 10 +- .../serverbound/ServerboundSwingPacket.kt | 10 +- .../ServerboundTeleportToEntityPacket.kt | 10 +- ...erverboundTestInstanceBlockActionPacket.kt | 10 +- .../ServerboundUpdateChatSessionPacket.kt | 12 +- .../serverbound/ServerboundUseItemOnPacket.kt | 10 +- .../serverbound/ServerboundUseItemPacket.kt | 10 +- .../ClientboundPongResponsePacket.kt | 11 +- .../clientbound/ClientboundStatusPacket.kt | 12 - .../ClientboundStatusResponsePacket.kt | 13 +- .../ServerboundPingRequestPacket.kt | 8 +- .../ServerboundStatusRequestPacket.kt | 8 +- .../protocol/protocol/game/Identifier.kt | 16 +- .../protocol/protocol/game/StatisticsEntry.kt | 12 +- .../protocol/protocol/game/block/BlockPos.kt | 12 +- .../protocol/game/chat/ChatTypeDecoration.kt | 19 +- .../protocol/game/chat/InlineChatType.kt | 11 +- .../protocol/game/chunk/ChunkBiomeData.kt | 12 +- .../protocol/game/effect/EntityEffectFlags.kt | 4 +- .../protocol/protocol/game/entity/Minecart.kt | 4 +- .../protocol/game/gamerule/GameRuleEntry.kt | 10 +- .../protocol/protocol/game/math/Angle.kt | 6 +- .../protocol/protocol/game/math/LpVec3.kt | 12 +- .../protocol/protocol/game/math/Vec3d.kt | 6 +- .../protocol/game/registry/RegistryEntry.kt | 8 +- .../protocol/game/sound/SoundEvent.kt | 10 +- .../protocol/signature/ArgumentSignature.kt | 12 +- .../rtast/libmc/protocol/protocol/util/nbt.kt | 8 +- .../protocol/registry/report/ServerLink.kt | 11 +- .../libmc/protocol/session/GameProfile.kt | 12 +- .../src/jvmTest/kotlin/test/JvmAesCipher.kt | 6 +- .../kotlin/test/TestClientTestInJvm.kt | 6 +- .../rtast/libmc/mcping/rconlib/buffer_ext.kt | 4 +- .../cn/rtast/libmc/mcping/rconlib/packet.kt | 16 +- .../cn/rtast/libmc/mcping/rconlib/rconlib.kt | 10 +- settings.gradle.kts | 1 + 296 files changed, 2199 insertions(+), 1818 deletions(-) delete mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/buffer.kt delete mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/channels.kt delete mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/codec.kt rename {libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session => libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto}/AuthenticationProvider.kt (85%) create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/NetworkCipher.kt rename {libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol => libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common}/crypto/ProtocolContext.kt (63%) delete mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/mc_primitives.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketCodec.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/BitSet.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdOrX.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdSet.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/MinecraftString.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Optional.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Prefixed.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Uuid.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarInt.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarLong.kt create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/buffer.kt rename libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/{ => stream}/byte_order.kt (78%) create mode 100644 libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/channels.kt rename libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/{ => stream}/socket.kt (74%) rename libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/{ => stream}/buffer.jvm.kt (59%) rename libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/{ => stream}/channels.jvm.kt (62%) rename libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/{ => stream}/order_convert.kt (96%) rename libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/{ => stream}/socket.jvm.kt (77%) rename libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/{ => stream}/buffer.native.kt (51%) rename libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/{ => stream}/channels.native.kt (61%) rename libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/{ => stream}/socket.native.kt (86%) create mode 100644 libmc-protocol-encrypt/README.md create mode 100644 libmc-protocol-encrypt/build.gradle.kts create mode 100644 libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/AesCFB8Cipher.kt create mode 100644 libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/DefaultProtocolCryptoContext.kt create mode 100644 libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/RSAEncryotor.kt create mode 100644 libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/Sha1Hasher.kt create mode 100644 libmc-protocol-encrypt/src/jvmTest/kotlin/test/TestJvmClient.kt delete mode 100644 libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/NetworkCipher.kt delete mode 100644 libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationPacket.kt delete mode 100644 libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginPacket.kt delete mode 100644 libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayPacket.kt delete mode 100644 libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusPacket.kt diff --git a/.gitignore b/.gitignore index 6812e96..2d7e047 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,4 @@ bin/ .kotlin/ **/build/* /libmc-protocol/src/jvmTest/resources/accessToken.txt +/libmc-protocol-encrypt/src/commonTest/resources/accessToken.txt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e07c61..d7e02db 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,24 +3,27 @@ kotlin = "2.4.10" kotlinx-io = "0.9.1" ktor-network = "3.5.2" coroutines-test = "1.11.0" -#kotlinx-serialization = "1.11.0" kotlinx-coroutines = "1.11.0" ktor-core = "3.5.2" +cryptography-core = "0.6.0" +#kotlinx-serialization = "1.11.0" [libraries] kotlinx-io = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" } ktor-network = { module = "io.ktor:ktor-network", version.ref = "ktor-network" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines-test" } +kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } +cryptography-provider-optimal = { module = "dev.whyoleg.cryptography:cryptography-provider-optimal", version.ref = "cryptography-core" } +cryptography-core = { module = "dev.whyoleg.cryptography:cryptography-core", version.ref = "cryptography-core" } +ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor-core" } +ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor-core" } +ktor-client-winhttp = { module = "io.ktor:ktor-client-winhttp", version.ref = "ktor-core" } +ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor-core" } +ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor-core" } #kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" } #kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } -kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } -ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor-core" } -#ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor-core" } -#ktor-client-winhttp = { module = "io.ktor:ktor-client-winhttp", version.ref = "ktor-core" } -#ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor-core" } -ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor-core" } [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } -kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } maven-publish = { id = "maven-publish" } +#kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } diff --git a/libmc-common/build.gradle.kts b/libmc-common/build.gradle.kts index 06093ff..0aec806 100644 --- a/libmc-common/build.gradle.kts +++ b/libmc-common/build.gradle.kts @@ -11,10 +11,10 @@ kotlin { jvm { compilerOptions.jvmTarget = JvmTarget.JVM_1_8 } sourceSets { - jvmMain.dependencies { - // no dependencies needed + commonMain.dependencies { + api(libs.kotlinx.coroutines) } - + jvmMain.dependencies {} nativeMain.dependencies { implementation(libs.ktor.network) implementation(libs.kotlinx.io) diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/buffer.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/buffer.kt deleted file mode 100644 index cc4d8d3..0000000 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/buffer.kt +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/3 - */ - - -package cn.rtast.libmc.common - -public expect class BytesBuffer { - public constructor() - public constructor(bytes: ByteArray) - - public fun writeByte(value: Byte) - public fun writeShort(value: Short, endian: ByteOrder = ByteOrder.BIG_ENDIAN) - public fun writeInt(value: Int, endian: ByteOrder = ByteOrder.BIG_ENDIAN) - public fun writeLong(value: Long, endian: ByteOrder = ByteOrder.BIG_ENDIAN) - public fun writeDouble(value: Double, endian: ByteOrder = ByteOrder.BIG_ENDIAN) - public fun writeFloat(value: Float, endian: ByteOrder = ByteOrder.BIG_ENDIAN) - public fun writeBytes(bytes: ByteArray) - public fun writeBoolean(value: Boolean) - - public fun readByte(): Byte - public fun readUByte(): UByte - public fun readShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short - public fun readInt(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Int - public fun readLong(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Long - public fun readDouble(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Double - public fun readFloat(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Float - public fun readBytes(length: Int): ByteArray - public fun readBoolean(): Boolean - public fun readRemainingBytes(): ByteArray - - public fun toByteArray(): ByteArray - public fun hasRemaining(): Boolean - public fun close() - public val size: Int - public val remaining: Long -} - -@Suppress("NOTHING_TO_INLINE") -public inline fun ByteArray.wrap(): BytesBuffer = BytesBuffer(this) - -public fun ReadChannel.readPacketFrame(): BytesBuffer { - val length = this.readVarInt() - return this.readBytes(length).wrap() -} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/channels.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/channels.kt deleted file mode 100644 index 072d2ea..0000000 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/channels.kt +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/3 - */ - - -package cn.rtast.libmc.common - -public expect open class ReadChannel() { - public open fun readByte(): Byte - public open fun readShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short - public open fun readInt(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Int - public open fun readLong(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Long - public open fun readBytes(length: Int): ByteArray - public open fun readFully(out: ByteArray, start: Int = 0, end: Int = out.size) -} - -public expect open class WriteChannel() { - public open fun writeFully(value: ByteArray, startIndex: Int = 0, endIndex: Int = value.size) - public open fun flush() -} - -public fun ReadChannel.readVarInt(): Int { - var numRead = 0 - var result = 0 - var read: Byte - do { - read = this.readByte() - val value = (read.toInt() and 0x7F) - result = result or (value shl (7 * numRead)) - numRead++ - if (numRead > 5) throw IllegalArgumentException("VarInt is too big") - } while ((read.toInt() and 0x80) != 0) - return result -} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/codec.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/codec.kt deleted file mode 100644 index 3dd118a..0000000 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/codec.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/4 - */ - - -package cn.rtast.libmc.common - -public interface Encoder { - public fun encode(buffer: BytesBuffer, value: T) -} - -public interface Decoder { - public fun decode(buffer: BytesBuffer): T -} - -public interface PacketCodec : Encoder, Decoder - -@Suppress("NOTHING_TO_INLINE") -public inline fun BytesBuffer.write(value: T, encoder: Encoder): Unit = encoder.encode(this, value) - -@Suppress("NOTHING_TO_INLINE") -public inline fun BytesBuffer.read(decoder: Decoder): T = decoder.decode(this) - -public fun BytesBuffer.writeBuffer(source: BytesBuffer, length: Long = source.remaining) { - if (length <= 0) return - val bytes = source.readBytes(length.toInt()) - this.writeBytes(bytes) -} \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/AuthenticationProvider.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/AuthenticationProvider.kt similarity index 85% rename from libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/AuthenticationProvider.kt rename to libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/AuthenticationProvider.kt index 4b672b7..c6d58f0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/AuthenticationProvider.kt +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/AuthenticationProvider.kt @@ -5,7 +5,7 @@ */ -package cn.rtast.libmc.protocol.session +package cn.rtast.libmc.common.crypto public fun interface AuthenticationProvider { public suspend fun joinServer(url: String, accessToken: String, uuid: String, serverIdHash: String) diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/NetworkCipher.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/NetworkCipher.kt new file mode 100644 index 0000000..9537b1f --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/NetworkCipher.kt @@ -0,0 +1,13 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.crypto + +public interface NetworkCipher { + public suspend fun encrypt(buffer: ByteArray, offset: Int, length: Int) + public suspend fun decrypt(buffer: ByteArray, offset: Int, length: Int) +} \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/ProtocolContext.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/ProtocolContext.kt similarity index 63% rename from libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/ProtocolContext.kt rename to libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/ProtocolContext.kt index b4fcf04..bb1ac43 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/ProtocolContext.kt +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/crypto/ProtocolContext.kt @@ -5,9 +5,7 @@ */ -package cn.rtast.libmc.protocol.crypto - -import cn.rtast.libmc.protocol.session.AuthenticationProvider +package cn.rtast.libmc.common.crypto public data class ProtocolContext( val rsaEncryptor: RSA1024Encryptor, @@ -16,25 +14,25 @@ public data class ProtocolContext( val authProvider: AuthenticationProvider, ) -public class ProtocolContextBuilder internal constructor(private val onlineMode: Boolean) { +public class ProtocolContextBuilder(private val onlineMode: Boolean) { public lateinit var rsaEncryptor: RSA1024Encryptor public lateinit var sha1Hasher: Sha1Hasher public lateinit var cipherFactory: (sharedKey: ByteArray) -> NetworkCipher public lateinit var authProvider: AuthenticationProvider - internal 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"), - authProvider = if (::authProvider.isInitialized && !onlineMode) authProvider else error("authProvider is required") + authProvider = if (::authProvider.isInitialized) if (onlineMode) authProvider + else error("authProvider is required") else error("authProvider is required") ) } public fun interface RSA1024Encryptor { - public fun encrypt(key: ByteArray, data: ByteArray): ByteArray + public suspend fun encrypt(key: ByteArray, data: ByteArray): ByteArray } - public fun interface Sha1Hasher { - public fun hash(serverId: String, secretKey: ByteArray, publicKey: ByteArray): String + public suspend fun hash(serverId: String, secretKey: ByteArray, publicKey: ByteArray): String } \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/mc_primitives.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/mc_primitives.kt deleted file mode 100644 index 8cbb5b4..0000000 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/mc_primitives.kt +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/3 - */ - -package cn.rtast.libmc.common - -import kotlin.uuid.Uuid - -public object VarIntCodec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: Int) { - var v = value - while (true) { - if ((v and 0x7F.inv()) == 0) { - buffer.writeByte(v.toByte()) - return - } - buffer.writeByte(((v and 0x7F) or 0x80).toByte()) - v = v ushr 7 - } - } - - override fun decode(buffer: BytesBuffer): Int { - var numRead = 0 - var result = 0 - var read: Byte - do { - read = buffer.readByte() - val value = (read.toInt() and 0x7F) - result = result or (value shl (7 * numRead)) - numRead++ - if (numRead > 5) throw IllegalArgumentException("VarInt is too big") - } while ((read.toInt() and 0x80) != 0) - return result - } -} - -public object VarLongCodec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: Long) { - var v = value - while (true) { - if ((v and 0x7FL.inv()) == 0L) { - buffer.writeByte(v.toByte()) - return - } - buffer.writeByte(((v and 0x7F) or 0x80).toByte()) - v = v ushr 7 - } - } - - override fun decode(buffer: BytesBuffer): Long { - var numRead = 0 - var result = 0L - var read: Byte - do { - read = buffer.readByte() - val value = (read.toLong() and 0x7F) - result = result or (value shl (7 * numRead)) - numRead++ - if (numRead > 10) throw IllegalArgumentException("VarLong is too big") - } while ((read.toInt() and 0x80) != 0) - return result - } -} - -public object McStringCodec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: String) { - val bytes = value.encodeToByteArray() - VarIntCodec.encode(buffer, bytes.size) - buffer.writeBytes(bytes) - } - - override fun decode(buffer: BytesBuffer): String { - val length = VarIntCodec.decode(buffer) - val bytes = buffer.readBytes(length) - return bytes.decodeToString() - } -} - -public sealed interface IdOrX { - public data class Inline(val value: T) : IdOrX - public data class Reference(val registryId: Int) : IdOrX -} - -public inline fun BytesBuffer.writeIdOrX(value: IdOrX, writeX: BytesBuffer.(T) -> Unit) { - when (value) { - is IdOrX.Inline -> { - this.writeVarInt(0) - this.writeX(value.value) - } - - is IdOrX.Reference -> this.writeVarInt(value.registryId + 1) - } -} - -public inline fun BytesBuffer.readIdOrX(readX: BytesBuffer.() -> T): IdOrX { - val id = this.readVarInt() - return if (id == 0) IdOrX.Inline(this.readX()) else IdOrX.Reference(id - 1) -} - -public fun BytesBuffer.writeUuid(uuid: Uuid): Unit = uuid.toLongs { mostSignificantBits, leastSignificantBits -> - this.writeLong(mostSignificantBits) - this.writeLong(leastSignificantBits) -} - -public fun BytesBuffer.readUuid(): Uuid { - val most = this.readLong() - val least = this.readLong() - return Uuid.fromLongs(most, least) -} - -public fun BytesBuffer.writeVarInt(value: Int): Unit = VarIntCodec.encode(this, value) -public fun BytesBuffer.readVarInt(): Int = VarIntCodec.decode(this) - -public fun BytesBuffer.writeVarLong(value: Long): Unit = VarLongCodec.encode(this, value) -public fun BytesBuffer.readVarLong(): Long = VarLongCodec.decode(this) - -public fun BytesBuffer.writeMcString(value: String): Unit = McStringCodec.encode(this, value) -public fun BytesBuffer.readMcString(): String = McStringCodec.decode(this) - -public fun BytesBuffer.readPrefixedByteArray(): ByteArray { - val length = this.readVarInt() - val data = this.readBytes(length) - return data -} - -public fun BytesBuffer.writePrefixedByteArray(data: ByteArray) { - this.writeVarInt(data.size) - this.writeBytes(data) -} - -public fun BytesBuffer.writeOptionalPrefixedByteArray(data: ByteArray?) { - if (data != null) { - this.writeBoolean(true) - this.writeVarInt(data.size) - this.writeBytes(data) - } else this.writeBoolean(false) -} - -public fun BytesBuffer.readPrefixedStringArray(): List { - val length = readVarInt() - val list = ArrayList(length) - repeat(length) { list.add(readMcString()) } - return list -} - -public fun BytesBuffer.writePrefixedStringArray(value: List) { - writeVarInt(value.size) - for (item in value) writeMcString(item) -} - -public inline fun BytesBuffer.readOptional(block: BytesBuffer.() -> T): T? { - val hasData = this.readBoolean() - return if (hasData) block.invoke(this) else null -} - -/** - * buffer.writeOptional(value.someValue) { writeBlockPos(it) } - */ -public inline fun BytesBuffer.writeOptional(value: T?, block: BytesBuffer.(T) -> Unit) { - if (value != null) { - this.writeBoolean(true) - block.invoke(this, value) - } else this.writeBoolean(false) -} - -public inline fun BytesBuffer.readPrefixed(reader: BytesBuffer.() -> T): List { - val count = this.readVarInt() - val list = ArrayList(count) - repeat(count) { _ -> list.add(this.reader()) } - return list -} - -public inline fun BytesBuffer.writePrefixed(list: List, writer: BytesBuffer.(T) -> Unit) { - this.writeVarInt(list.size) - for (item in list) this.writer(item) -} - -public fun BytesBuffer.readBitSet(): LongArray { - val count = this.readVarInt() - return LongArray(count) { this.readLong() } -} - -public fun BytesBuffer.writeBitSet(data: LongArray) { - this.writeVarInt(data.size) - for (i in data.indices) this.writeLong(data[i]) -} - -public fun LongArray.countSetBits(): Int { - var count = 0 - for (i in indices) count += this[i].countOneBits() - return count -} - -public fun LongArray.getBit(bitIndex: Int): Boolean { - val longIndex = bitIndex shr 6 - if (longIndex !in this.indices) return false - val bitOffset = bitIndex and 63 - return (this[longIndex] and (1L shl bitOffset)) != 0L -} - -public sealed interface IdSet { - public data class Tag(val tagName: String) : IdSet - public data class Entries(val ids: List) : IdSet -} - -public fun BytesBuffer.readIdSet(): IdSet { - val type = this.readVarInt() - return if (type == 0) { - IdSet.Tag(tagName = this.readMcString()) - } else { - val count = type - 1 - val ids = ArrayList(count) - (0 until count).forEach { _ -> ids.add(this.readVarInt()) } - IdSet.Entries(ids) - } -} - -public fun BytesBuffer.writeIdSet(idSet: IdSet) { - when (idSet) { - is IdSet.Tag -> { - this.writeVarInt(0) - this.writeMcString(idSet.tagName) - } - - is IdSet.Entries -> { - this.writeVarInt(idSet.ids.size + 1) - for (id in idSet.ids) this.writeVarInt(id) - } - } -} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketCodec.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketCodec.kt new file mode 100644 index 0000000..5e08b2b --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketCodec.kt @@ -0,0 +1,26 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/4 + */ + + +package cn.rtast.libmc.common.packet + +import cn.rtast.libmc.common.stream.BytesBuffer + +public interface Encoder { + public suspend fun encode(buffer: BytesBuffer, value: T) +} + +public interface Decoder { + public suspend fun decode(buffer: BytesBuffer): T +} + +public interface PacketCodec : Encoder, Decoder + +public suspend fun BytesBuffer.writeBuffer(source: BytesBuffer, length: Long = source.remaining) { + if (length <= 0) return + val bytes = source.readBytes(length.toInt()) + this.writeBytes(bytes) +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketRegistry.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketRegistry.kt index c3bd108..b7bad76 100644 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketRegistry.kt +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/packet/PacketRegistry.kt @@ -7,9 +7,8 @@ package cn.rtast.libmc.common.packet -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.writeVarInt import kotlin.reflect.KClass public class PacketRegistry { @@ -29,10 +28,10 @@ public class PacketRegistry { register(id, T::class, codec) } - public fun decodePacket(packetId: Int, buffer: BytesBuffer): MinecraftPacket = + public suspend fun decodePacket(packetId: Int, buffer: BytesBuffer): MinecraftPacket = idToCodec[packetId]?.decode(buffer) ?: UnknownPacket(packetId, buffer.readBytes(buffer.remaining.toInt())) - public fun encodePacket(buffer: BytesBuffer, packet: T) { + public suspend fun encodePacket(buffer: BytesBuffer, packet: T) { @Suppress("UNCHECKED_CAST") val info = requireNotNull(classToInfo[packet::class]) { "Unregistered Packet ${packet::class.simpleName}" diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/BitSet.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/BitSet.kt new file mode 100644 index 0000000..3ca24d2 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/BitSet.kt @@ -0,0 +1,33 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer + +public suspend fun BytesBuffer.readBitSet(): LongArray { + val count = this.readVarInt() + return LongArray(count) { this.readLong() } +} + +public suspend fun BytesBuffer.writeBitSet(data: LongArray) { + this.writeVarInt(data.size) + for (i in data.indices) this.writeLong(data[i]) +} + +public fun LongArray.countSetBits(): Int { + var count = 0 + for (i in indices) count += this[i].countOneBits() + return count +} + +public fun LongArray.getBit(bitIndex: Int): Boolean { + val longIndex = bitIndex shr 6 + if (longIndex !in this.indices) return false + val bitOffset = bitIndex and 63 + return (this[longIndex] and (1L shl bitOffset)) != 0L +} diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdOrX.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdOrX.kt new file mode 100644 index 0000000..de7f079 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdOrX.kt @@ -0,0 +1,31 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer + +public sealed interface IdOrX { + public data class Inline(val value: T) : IdOrX + public data class Reference(val registryId: Int) : IdOrX +} + +public suspend inline fun BytesBuffer.writeIdOrX(value: IdOrX, writeX: BytesBuffer.(T) -> Unit) { + when (value) { + is IdOrX.Inline -> { + this.writeVarInt(0) + this.writeX(value.value) + } + + is IdOrX.Reference -> this.writeVarInt(value.registryId + 1) + } +} + +public suspend inline fun BytesBuffer.readIdOrX(readX: BytesBuffer.() -> T): IdOrX { + val id = this.readVarInt() + return if (id == 0) IdOrX.Inline(this.readX()) else IdOrX.Reference(id - 1) +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdSet.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdSet.kt new file mode 100644 index 0000000..edc6dd8 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/IdSet.kt @@ -0,0 +1,41 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer + +public sealed interface IdSet { + public data class Tag(val tagName: String) : IdSet + public data class Entries(val ids: List) : IdSet +} + +public suspend fun BytesBuffer.readIdSet(): IdSet { + val type = this.readVarInt() + return if (type == 0) { + IdSet.Tag(tagName = this.readMcString()) + } else { + val count = type - 1 + val ids = ArrayList(count) + (0 until count).forEach { _ -> ids.add(this.readVarInt()) } + IdSet.Entries(ids) + } +} + +public suspend fun BytesBuffer.writeIdSet(idSet: IdSet) { + when (idSet) { + is IdSet.Tag -> { + this.writeVarInt(0) + this.writeMcString(idSet.tagName) + } + + is IdSet.Entries -> { + this.writeVarInt(idSet.ids.size + 1) + for (id in idSet.ids) this.writeVarInt(id) + } + } +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/MinecraftString.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/MinecraftString.kt new file mode 100644 index 0000000..c96f7d5 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/MinecraftString.kt @@ -0,0 +1,28 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec + +public object McStringCodec : PacketCodec { + override suspend fun encode(buffer: BytesBuffer, value: String) { + val bytes = value.encodeToByteArray() + VarIntCodec.encode(buffer, bytes.size) + buffer.writeBytes(bytes) + } + + override suspend fun decode(buffer: BytesBuffer): String { + val length = VarIntCodec.decode(buffer) + val bytes = buffer.readBytes(length) + return bytes.decodeToString() + } +} + +public suspend fun BytesBuffer.writeMcString(value: String): Unit = McStringCodec.encode(this, value) +public suspend fun BytesBuffer.readMcString(): String = McStringCodec.decode(this) diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Optional.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Optional.kt new file mode 100644 index 0000000..4e48fd5 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Optional.kt @@ -0,0 +1,25 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer + +public suspend inline fun BytesBuffer.readOptional(block: BytesBuffer.() -> T): T? { + val hasData = this.readBoolean() + return if (hasData) block.invoke(this) else null +} + +/** + * buffer.writeOptional(value.someValue) { writeBlockPos(it) } + */ +public suspend inline fun BytesBuffer.writeOptional(value: T?, block: BytesBuffer.(T) -> Unit) { + if (value != null) { + this.writeBoolean(true) + block.invoke(this, value) + } else this.writeBoolean(false) +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Prefixed.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Prefixed.kt new file mode 100644 index 0000000..92fb620 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Prefixed.kt @@ -0,0 +1,56 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer + + +public suspend fun BytesBuffer.readPrefixedByteArray(): ByteArray { + val length = this.readVarInt() + val data = this.readBytes(length) + return data +} + +public suspend fun BytesBuffer.writePrefixedByteArray(data: ByteArray) { + this.writeVarInt(data.size) + this.writeBytes(data) +} + +public suspend fun BytesBuffer.writeOptionalPrefixedByteArray(data: ByteArray?) { + if (data != null) { + this.writeBoolean(true) + this.writeVarInt(data.size) + this.writeBytes(data) + } else this.writeBoolean(false) +} + +public suspend fun BytesBuffer.readPrefixedStringArray(): List { + val length = readVarInt() + val list = ArrayList(length) + repeat(length) { list.add(readMcString()) } + return list +} + +public suspend fun BytesBuffer.writePrefixedStringArray(value: List) { + writeVarInt(value.size) + for (item in value) writeMcString(item) +} + + + +public suspend inline fun BytesBuffer.readPrefixed(reader: BytesBuffer.() -> T): List { + val count = this.readVarInt() + val list = ArrayList(count) + repeat(count) { _ -> list.add(this.reader()) } + return list +} + +public suspend inline fun BytesBuffer.writePrefixed(list: List, writer: BytesBuffer.(T) -> Unit) { + this.writeVarInt(list.size) + for (item in list) this.writer(item) +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Uuid.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Uuid.kt new file mode 100644 index 0000000..3cc5615 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/Uuid.kt @@ -0,0 +1,22 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer +import kotlin.uuid.Uuid + +public suspend fun BytesBuffer.writeUuid(uuid: Uuid): Unit = uuid.toLongs { mostSignificantBits, leastSignificantBits -> + this.writeLong(mostSignificantBits) + this.writeLong(leastSignificantBits) +} + +public suspend fun BytesBuffer.readUuid(): Uuid { + val most = this.readLong() + val least = this.readLong() + return Uuid.fromLongs(most, least) +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarInt.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarInt.kt new file mode 100644 index 0000000..9941bae --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarInt.kt @@ -0,0 +1,45 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec + +public object VarIntCodec : PacketCodec { + override suspend fun encode(buffer: BytesBuffer, value: Int) { + var v = value + while (true) { + if ((v and 0x7F.inv()) == 0) { + buffer.writeByte(v.toByte()) + return + } + buffer.writeByte(((v and 0x7F) or 0x80).toByte()) + v = v ushr 7 + } + } + + override suspend fun decode(buffer: BytesBuffer): Int { + var numRead = 0 + var result = 0 + var read: Byte + do { + read = buffer.readByte() + val value = (read.toInt() and 0x7F) + result = result or (value shl (7 * numRead)) + numRead++ + if (numRead > 5) throw IllegalArgumentException("VarInt is too big") + } while ((read.toInt() and 0x80) != 0) + return result + } +} + +public suspend fun BytesBuffer.writeVarInt(value: Int): Unit = VarIntCodec.encode(this, value) +public suspend fun BytesBuffer.readVarInt(): Int = VarIntCodec.decode(this) + +public suspend fun BytesBuffer.writeVarLong(value: Long): Unit = VarLongCodec.encode(this, value) +public suspend fun BytesBuffer.readVarLong(): Long = VarLongCodec.decode(this) diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarLong.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarLong.kt new file mode 100644 index 0000000..028932a --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/primitives/VarLong.kt @@ -0,0 +1,39 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +package cn.rtast.libmc.common.primitives + +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec + +public object VarLongCodec : PacketCodec { + override suspend fun encode(buffer: BytesBuffer, value: Long) { + var v = value + while (true) { + if ((v and 0x7FL.inv()) == 0L) { + buffer.writeByte(v.toByte()) + return + } + buffer.writeByte(((v and 0x7F) or 0x80).toByte()) + v = v ushr 7 + } + } + + override suspend fun decode(buffer: BytesBuffer): Long { + var numRead = 0 + var result = 0L + var read: Byte + do { + read = buffer.readByte() + val value = (read.toLong() and 0x7F) + result = result or (value shl (7 * numRead)) + numRead++ + if (numRead > 10) throw IllegalArgumentException("VarLong is too big") + } while ((read.toInt() and 0x80) != 0) + return result + } +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/buffer.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/buffer.kt new file mode 100644 index 0000000..e56c3d7 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/buffer.kt @@ -0,0 +1,47 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/3 + */ + + +package cn.rtast.libmc.common.stream + +public expect class BytesBuffer { + public constructor() + public constructor(bytes: ByteArray) + + public suspend fun writeByte(value: Byte) + public suspend fun writeShort(value: Short, endian: ByteOrder = ByteOrder.BIG_ENDIAN) + public suspend fun writeInt(value: Int, endian: ByteOrder = ByteOrder.BIG_ENDIAN) + public suspend fun writeLong(value: Long, endian: ByteOrder = ByteOrder.BIG_ENDIAN) + public suspend fun writeDouble(value: Double, endian: ByteOrder = ByteOrder.BIG_ENDIAN) + public suspend fun writeFloat(value: Float, endian: ByteOrder = ByteOrder.BIG_ENDIAN) + public suspend fun writeBytes(bytes: ByteArray) + public suspend fun writeBoolean(value: Boolean) + + public suspend fun readByte(): Byte + public suspend fun readUByte(): UByte + public suspend fun readShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short + public suspend fun readInt(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Int + public suspend fun readLong(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Long + public suspend fun readDouble(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Double + public suspend fun readFloat(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Float + public suspend fun readBytes(length: Int): ByteArray + public suspend fun readBoolean(): Boolean + public suspend fun readRemainingBytes(): ByteArray + + public suspend fun toByteArray(): ByteArray + public suspend fun hasRemaining(): Boolean + public suspend fun close() + public val size: Int + public val remaining: Long +} + +@Suppress("NOTHING_TO_INLINE") +public inline fun ByteArray.wrap(): BytesBuffer = BytesBuffer(this) + +public suspend fun ReadChannel.readPacketFrame(): BytesBuffer { + val length = this.readVarInt() + return this.readBytes(length).wrap() +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/byte_order.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/byte_order.kt similarity index 78% rename from libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/byte_order.kt rename to libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/byte_order.kt index 7de8407..eba650a 100644 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/byte_order.kt +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/byte_order.kt @@ -5,7 +5,7 @@ */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream public enum class ByteOrder { BIG_ENDIAN, LITTLE_ENDIAN diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/channels.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/channels.kt new file mode 100644 index 0000000..a375ca2 --- /dev/null +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/channels.kt @@ -0,0 +1,36 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/3 + */ + + +package cn.rtast.libmc.common.stream + +public expect open class ReadChannel() { + public open suspend fun readByte(): Byte + public open suspend fun readShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short + public open suspend fun readInt(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Int + public open suspend fun readLong(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Long + public open suspend fun readBytes(length: Int): ByteArray + public open suspend fun readFully(out: ByteArray, start: Int = 0, end: Int = out.size) +} + +public expect open class WriteChannel() { + public open suspend fun writeFully(value: ByteArray, startIndex: Int = 0, endIndex: Int = value.size) + public open suspend fun flush() +} + +public suspend fun ReadChannel.readVarInt(): Int { + var numRead = 0 + var result = 0 + var read: Byte + do { + read = this.readByte() + val value = (read.toInt() and 0x7F) + result = result or (value shl (7 * numRead)) + numRead++ + if (numRead > 5) throw IllegalArgumentException("VarInt is too big") + } while ((read.toInt() and 0x80) != 0) + return result +} \ No newline at end of file diff --git a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/socket.kt b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/socket.kt similarity index 74% rename from libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/socket.kt rename to libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/socket.kt index 8dca9cc..8556104 100644 --- a/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/socket.kt +++ b/libmc-common/src/commonMain/kotlin/cn/rtast/libmc/common/stream/socket.kt @@ -5,7 +5,9 @@ */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream + +import cn.rtast.libmc.common.LibMCContext public expect class Socket public constructor(host: String, port: Int, context: LibMCContext) { public fun openReadChannel(): ReadChannel @@ -14,6 +16,6 @@ public expect class Socket public constructor(host: String, port: Int, context: } public expect class UdpSocket public constructor(host: String, port: Int, context: LibMCContext) { - public fun sendAndReceive(data: ByteArray): ByteArray + public suspend fun sendAndReceive(data: ByteArray): ByteArray public fun close() } \ No newline at end of file diff --git a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/buffer.jvm.kt b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/buffer.jvm.kt similarity index 59% rename from libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/buffer.jvm.kt rename to libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/buffer.jvm.kt index ddd7401..643efe9 100644 --- a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/buffer.jvm.kt +++ b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/buffer.jvm.kt @@ -4,8 +4,10 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import java.io.ByteArrayOutputStream public actual class BytesBuffer { @@ -19,12 +21,12 @@ public actual class BytesBuffer { outStream.write(bytes) } - public actual fun writeByte(value: Byte) { + public actual suspend fun writeByte(value: Byte) { readBuffer = null outStream.write(value.toInt()) } - public actual fun writeShort(value: Short, endian: ByteOrder) { + public actual suspend fun writeShort(value: Short, endian: ByteOrder) { readBuffer = null val v = value.toInt() if (endian == ByteOrder.BIG_ENDIAN) { @@ -36,7 +38,7 @@ public actual class BytesBuffer { } } - public actual fun writeInt(value: Int, endian: ByteOrder) { + public actual suspend fun writeInt(value: Int, endian: ByteOrder) { readBuffer = null if (endian == ByteOrder.BIG_ENDIAN) { outStream.write(value shr 24) @@ -51,7 +53,7 @@ public actual class BytesBuffer { } } - public actual fun writeLong(value: Long, endian: ByteOrder) { + public actual suspend fun writeLong(value: Long, endian: ByteOrder) { readBuffer = null if (endian == ByteOrder.BIG_ENDIAN) { for (i in 56 downTo 0 step 8) outStream.write((value shr i).toInt()) @@ -60,22 +62,22 @@ public actual class BytesBuffer { } } - public actual fun writeDouble(value: Double, endian: ByteOrder) { + public actual suspend fun writeDouble(value: Double, endian: ByteOrder) { writeLong(value.toRawBits(), endian) } - public actual fun writeFloat(value: Float, endian: ByteOrder) { + public actual suspend fun writeFloat(value: Float, endian: ByteOrder) { writeInt(value.toRawBits(), endian) } - public actual fun writeBytes(bytes: ByteArray) { + public actual suspend fun writeBytes(bytes: ByteArray) { readBuffer = null - outStream.write(bytes) + withContext(Dispatchers.IO) { outStream.write(bytes) } } - public actual fun writeBoolean(value: Boolean): Unit = writeByte(if (value) 0x01 else 0x00) + public actual suspend fun writeBoolean(value: Boolean): Unit = writeByte(if (value) 0x01 else 0x00) - private fun ensureReadArray(): ByteArray { + private suspend fun ensureReadArray(): ByteArray { var buf = readBuffer if (buf == null) { buf = outStream.toByteArray() @@ -84,26 +86,26 @@ public actual class BytesBuffer { return buf } - public actual fun readByte(): Byte { + public actual suspend fun readByte(): Byte { val array = ensureReadArray() if (readOffset >= array.size) throw IndexOutOfBoundsException("Buffer underflow") return array[readOffset++] } - public actual fun readUByte(): UByte = this.readByte().toUByte() - public actual fun readShort(endian: ByteOrder): Short = readBytes(2).toShort(endian) - public actual fun readInt(endian: ByteOrder): Int = readBytes(4).toInt(endian) - public actual fun readLong(endian: ByteOrder): Long = readBytes(8).toLong(endian) + public actual suspend fun readUByte(): UByte = this.readByte().toUByte() + public actual suspend fun readShort(endian: ByteOrder): Short = readBytes(2).toShort(endian) + public actual suspend fun readInt(endian: ByteOrder): Int = readBytes(4).toInt(endian) + public actual suspend fun readLong(endian: ByteOrder): Long = readBytes(8).toLong(endian) - public actual fun readDouble(endian: ByteOrder): Double { + public actual suspend fun readDouble(endian: ByteOrder): Double { return Double.fromBits(readLong(endian)) } - public actual fun readFloat(endian: ByteOrder): Float { + public actual suspend fun readFloat(endian: ByteOrder): Float { return Float.fromBits(readInt(endian)) } - public actual fun readBytes(length: Int): ByteArray { + public actual suspend fun readBytes(length: Int): ByteArray { val array = ensureReadArray() if (readOffset + length > array.size) throw IndexOutOfBoundsException("Buffer underflow") val result = array.copyOfRange(readOffset, readOffset + length) @@ -111,9 +113,9 @@ public actual class BytesBuffer { return result } - public actual fun readBoolean(): Boolean = this.readByte() != 0x00.toByte() + public actual suspend fun readBoolean(): Boolean = this.readByte() != 0x00.toByte() - public actual fun readRemainingBytes(): ByteArray { + public actual suspend fun readRemainingBytes(): ByteArray { val array = ensureReadArray() if (readOffset >= array.size) return byteArrayOf() val result = array.copyOfRange(readOffset, array.size) @@ -121,10 +123,10 @@ public actual class BytesBuffer { return result } - public actual fun toByteArray(): ByteArray = outStream.toByteArray() - public actual fun hasRemaining(): Boolean = readOffset < ensureReadArray().size + public actual suspend fun toByteArray(): ByteArray = outStream.toByteArray() + public actual suspend fun hasRemaining(): Boolean = readOffset < ensureReadArray().size - public actual fun close(): Unit = outStream.close() + public actual suspend fun close(): Unit = withContext(Dispatchers.IO) { outStream.close() } public actual val size: Int get() = outStream.size() public actual val remaining: Long get() = (outStream.size() - readOffset).coerceAtLeast(0).toLong() } \ No newline at end of file diff --git a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/channels.jvm.kt b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/channels.jvm.kt similarity index 62% rename from libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/channels.jvm.kt rename to libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/channels.jvm.kt index 588a58c..016bd16 100644 --- a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/channels.jvm.kt +++ b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/channels.jvm.kt @@ -4,7 +4,7 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream import java.io.EOFException import java.io.InputStream @@ -17,7 +17,7 @@ public actual open class ReadChannel public actual constructor() { this._inputStream = inputStream } - public actual open fun readFully(out: ByteArray, start: Int, end: Int) { + public actual open suspend fun readFully(out: ByteArray, start: Int, end: Int) { var bytesRead = 0 val length = end - start while (bytesRead < length) { @@ -27,21 +27,21 @@ public actual open class ReadChannel public actual constructor() { } } - public actual open fun readByte(): Byte { + public actual open suspend fun readByte(): Byte { val buf = ByteArray(1) readFully(buf, 0, 1) return buf[0] } - public actual open fun readBytes(length: Int): ByteArray { + public actual open suspend fun readBytes(length: Int): ByteArray { val bytes = ByteArray(length) readFully(bytes, 0, length) return bytes } - public actual open fun readShort(endian: ByteOrder): Short = readBytes(2).toShort(endian) - public actual open fun readInt(endian: ByteOrder): Int = readBytes(4).toInt(endian) - public actual open fun readLong(endian: ByteOrder): Long = readBytes(8).toLong(endian) + public actual open suspend fun readShort(endian: ByteOrder): Short = readBytes(2).toShort(endian) + public actual open suspend fun readInt(endian: ByteOrder): Int = readBytes(4).toInt(endian) + public actual open suspend fun readLong(endian: ByteOrder): Long = readBytes(8).toLong(endian) } public actual open class WriteChannel public actual constructor() { @@ -51,8 +51,8 @@ public actual open class WriteChannel public actual constructor() { _outputStream = outputStream } - public actual open fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int): Unit = + public actual open suspend fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int): Unit = _outputStream.write(value, startIndex, endIndex - startIndex) - public actual open fun flush(): Unit = _outputStream.flush() + public actual open suspend fun flush(): Unit = _outputStream.flush() } \ No newline at end of file diff --git a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/order_convert.kt b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/order_convert.kt similarity index 96% rename from libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/order_convert.kt rename to libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/order_convert.kt index 886baeb..af000f0 100644 --- a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/order_convert.kt +++ b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/order_convert.kt @@ -5,7 +5,7 @@ */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream internal fun ByteArray.toShort(endian: ByteOrder = ByteOrder.BIG_ENDIAN): Short { val b1 = this[0].toInt() and 0xFF diff --git a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/socket.jvm.kt b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/socket.jvm.kt similarity index 77% rename from libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/socket.jvm.kt rename to libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/socket.jvm.kt index 74b900f..1315801 100644 --- a/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/socket.jvm.kt +++ b/libmc-common/src/jvmMain/kotlin/cn/rtast/libmc/common/stream/socket.jvm.kt @@ -4,8 +4,11 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream +import cn.rtast.libmc.common.LibMCContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import java.net.DatagramPacket import java.net.DatagramSocket import java.net.InetSocketAddress @@ -25,13 +28,12 @@ public actual class UdpSocket public actual constructor(host: String, port: Int, connect(InetSocketAddress(host, port)) } - public actual fun sendAndReceive(data: ByteArray): ByteArray { + public actual suspend fun sendAndReceive(data: ByteArray): ByteArray = withContext(Dispatchers.IO) { socket.send(DatagramPacket(data, data.size)) - val buf = ByteArray(2048) val receivePacket = DatagramPacket(buf, buf.size) socket.receive(receivePacket) - return buf.copyOf(receivePacket.length) + return@withContext buf.copyOf(receivePacket.length) } public actual fun close(): Unit = socket.close() diff --git a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/buffer.native.kt b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/buffer.native.kt similarity index 51% rename from libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/buffer.native.kt rename to libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/buffer.native.kt index 9a80c17..ef7a587 100644 --- a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/buffer.native.kt +++ b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/buffer.native.kt @@ -4,7 +4,7 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream import io.ktor.utils.io.core.* import kotlinx.io.* @@ -21,53 +21,53 @@ public actual class BytesBuffer { _delegateBuf = Buffer().apply { write(bytes) } } - public actual fun writeByte(value: Byte): Unit = _delegateBuf.writeByte(value) - public actual fun writeShort(value: Short, endian: ByteOrder) { + public actual suspend fun writeByte(value: Byte): Unit = _delegateBuf.writeByte(value) + public actual suspend fun writeShort(value: Short, endian: ByteOrder) { if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.writeShort(value) else _delegateBuf.writeShortLe(value) } - public actual fun writeInt(value: Int, endian: ByteOrder) { + public actual suspend fun writeInt(value: Int, endian: ByteOrder) { if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.writeInt(value) else _delegateBuf.writeIntLe(value) } - public actual fun writeLong(value: Long, endian: ByteOrder) { + public actual suspend fun writeLong(value: Long, endian: ByteOrder) { if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.writeLong(value) else _delegateBuf.writeLongLe(value) } - public actual fun writeDouble(value: Double, endian: ByteOrder): Unit = + public actual suspend fun writeDouble(value: Double, endian: ByteOrder): Unit = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.writeDouble(value) else _delegateBuf.writeDoubleLe(value) - public actual fun writeFloat(value: Float, endian: ByteOrder): Unit = + public actual suspend fun writeFloat(value: Float, endian: ByteOrder): Unit = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.writeFloat(value) else _delegateBuf.writeFloatLe(value) - public actual fun writeBytes(bytes: ByteArray): Unit = _delegateBuf.write(bytes) - public actual fun writeBoolean(value: Boolean): Unit = _delegateBuf.writeByte(if (value) 0x01 else 0x00) + public actual suspend fun writeBytes(bytes: ByteArray): Unit = _delegateBuf.write(bytes) + public actual suspend fun writeBoolean(value: Boolean): Unit = _delegateBuf.writeByte(if (value) 0x01 else 0x00) - public actual fun readByte(): Byte = _delegateBuf.readByte() - public actual fun readUByte(): UByte = this.readByte().toUByte() - public actual fun readShort(endian: ByteOrder): Short = + public actual suspend fun readByte(): Byte = _delegateBuf.readByte() + public actual suspend fun readUByte(): UByte = this.readByte().toUByte() + public actual suspend fun readShort(endian: ByteOrder): Short = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.readShort() else _delegateBuf.readShortLe() - public actual fun readInt(endian: ByteOrder): Int = + public actual suspend fun readInt(endian: ByteOrder): Int = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.readInt() else _delegateBuf.readIntLe() - public actual fun readLong(endian: ByteOrder): Long = + public actual suspend fun readLong(endian: ByteOrder): Long = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.readLong() else _delegateBuf.readLongLe() - public actual fun readDouble(endian: ByteOrder): Double = + public actual suspend fun readDouble(endian: ByteOrder): Double = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.readDouble() else _delegateBuf.readDoubleLe() - public actual fun readFloat(endian: ByteOrder): Float = + public actual suspend fun readFloat(endian: ByteOrder): Float = if (endian == ByteOrder.BIG_ENDIAN) _delegateBuf.readFloat() else _delegateBuf.readFloatLe() - public actual fun readBytes(length: Int): ByteArray = _delegateBuf.readByteArray(length) - public actual fun readBoolean(): Boolean = _delegateBuf.readByte() != 0x00.toByte() - public actual fun readRemainingBytes(): ByteArray = this.toByteArray() + public actual suspend fun readBytes(length: Int): ByteArray = _delegateBuf.readByteArray(length) + public actual suspend fun readBoolean(): Boolean = _delegateBuf.readByte() != 0x00.toByte() + public actual suspend fun readRemainingBytes(): ByteArray = this.toByteArray() - public actual fun toByteArray(): ByteArray { + public actual suspend fun toByteArray(): ByteArray { val copy = _delegateBuf.peek() return try { copy.readByteArray() @@ -76,8 +76,8 @@ public actual class BytesBuffer { } } - public actual fun hasRemaining(): Boolean = !_delegateBuf.exhausted() - public actual fun close(): Unit = _delegateBuf.close() + public actual suspend fun hasRemaining(): Boolean = !_delegateBuf.exhausted() + public actual suspend fun close(): Unit = _delegateBuf.close() public actual val size: Int get() = _delegateBuf.size.toInt() public actual val remaining: Long get() = _delegateBuf.remaining diff --git a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/channels.native.kt b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/channels.native.kt similarity index 61% rename from libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/channels.native.kt rename to libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/channels.native.kt index 39a844c..88e876d 100644 --- a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/channels.native.kt +++ b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/channels.native.kt @@ -4,11 +4,10 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream import io.ktor.utils.io.* import io.ktor.utils.io.bits.* -import kotlinx.coroutines.runBlocking public actual open class ReadChannel public actual constructor() { @@ -18,18 +17,18 @@ public actual open class ReadChannel public actual constructor() { this._readChannel = readChannel } - public actual open fun readByte(): Byte = runBlocking { _readChannel.readByte() } - public actual open fun readBytes(length: Int): ByteArray = runBlocking { _readChannel.readByteArray(length) } - public actual open fun readFully(out: ByteArray, start: Int, end: Int): Unit = - runBlocking { _readChannel.readFully(out, start, end) } + public actual open suspend fun readByte(): Byte = _readChannel.readByte() + public actual open suspend fun readBytes(length: Int): ByteArray = _readChannel.readByteArray(length) + public actual open suspend fun readFully(out: ByteArray, start: Int, end: Int): Unit = + _readChannel.readFully(out, start, end) - public actual open fun readShort(endian: ByteOrder): Short { + public actual open suspend fun readShort(endian: ByteOrder): Short { val bytes = readBytes(2) val v = ((bytes[0].toInt() and 0xFF shl 8) or (bytes[1].toInt() and 0xFF)).toShort() return if (endian == ByteOrder.BIG_ENDIAN) v else v.reverseByteOrder() } - public actual open fun readInt(endian: ByteOrder): Int { + public actual open suspend fun readInt(endian: ByteOrder): Int { val bytes = readBytes(4) val v = (bytes[0].toInt() and 0xFF shl 24) or (bytes[1].toInt() and 0xFF shl 16) or @@ -38,7 +37,7 @@ public actual open class ReadChannel public actual constructor() { return if (endian == ByteOrder.BIG_ENDIAN) v else v.reverseByteOrder() } - public actual open fun readLong(endian: ByteOrder): Long { + public actual open suspend fun readLong(endian: ByteOrder): Long { val bytes = readBytes(8) var v = 0L for (i in 0 until 8) { @@ -55,8 +54,8 @@ public actual open class WriteChannel public actual constructor() { _writeChannel = writeChannel } - public actual open fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int): Unit = - runBlocking { _writeChannel.writeFully(value, startIndex, endIndex) } + public actual open suspend fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int): Unit = + _writeChannel.writeFully(value, startIndex, endIndex) - public actual open fun flush(): Unit = runBlocking { _writeChannel.flush() } + public actual open suspend fun flush(): Unit = _writeChannel.flush() } \ No newline at end of file diff --git a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/socket.native.kt b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/socket.native.kt similarity index 86% rename from libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/socket.native.kt rename to libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/socket.native.kt index 8dab80b..4c14a32 100644 --- a/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/socket.native.kt +++ b/libmc-common/src/nativeMain/kotlin/cn/rtast/libmc/common/stream/socket.native.kt @@ -4,8 +4,9 @@ * Date: 2026/9/3 */ -package cn.rtast.libmc.common +package cn.rtast.libmc.common.stream +import cn.rtast.libmc.common.LibMCContext import io.ktor.network.sockets.* import io.ktor.utils.io.core.* import kotlinx.coroutines.runBlocking @@ -32,10 +33,10 @@ public actual class UdpSocket public actual constructor(host: String, port: Int, private val socket = runBlocking { aSocket(ctx._selectorManager).udp().bind() } private val remoteAddress = InetSocketAddress(host, port) - public actual fun sendAndReceive(data: ByteArray): ByteArray = runBlocking { + public actual suspend fun sendAndReceive(data: ByteArray): ByteArray { val packet = buildPacket { writeFully(data) } socket.send(Datagram(packet, remoteAddress)) - socket.receive().packet.readByteArray() + return socket.receive().packet.readByteArray() } public actual fun close() { diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet.kt index 9a64922..04b0413 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.mcping.bedrock -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import kotlin.random.Random private val RAKNET_MAGIC = byteArrayOf( @@ -33,14 +33,14 @@ internal data class BedrockRequestPacket( override val packetId: Byte = 0x01 companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: BedrockRequestPacket) { + override suspend fun encode(buffer: BytesBuffer, value: BedrockRequestPacket) { buffer.writeByte(value.packetId) buffer.writeLong(value.time) buffer.writeBytes(value.magic) buffer.writeLong(value.guid) } - override fun decode(buffer: BytesBuffer): BedrockRequestPacket = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): BedrockRequestPacket = throw UnsupportedOperationException() } override fun equals(other: Any?): Boolean { @@ -72,8 +72,8 @@ internal data class BedrockResponsePacket( ) : MinecraftBedrockPacket { companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: BedrockResponsePacket) = throw UnsupportedOperationException() - override fun decode(buffer: BytesBuffer): BedrockResponsePacket { + override suspend fun encode(buffer: BytesBuffer, value: BedrockResponsePacket) = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): BedrockResponsePacket { val packetId = buffer.readByte() if (packetId != 0x1C.toByte()) throw IllegalStateException("Expected pong id 0x1C, got $packetId") val time = buffer.readLong() diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet_writer.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet_writer.kt index 143dfa9..4904720 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet_writer.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/packet_writer.kt @@ -7,12 +7,12 @@ package cn.rtast.libmc.mcping.bedrock -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.UdpSocket +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.stream.UdpSocket -internal fun UdpSocket.sendPacket(packet: T, codec: PacketCodec): ByteArray { +internal suspend fun UdpSocket.sendPacket(packet: T, codec: PacketCodec): ByteArray { val buf = BytesBuffer() codec.encode(buf, packet) return sendAndReceive(buf.toByteArray()) diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/ping_bedrock.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/ping_bedrock.kt index a68781c..9b64d7c 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/ping_bedrock.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/bedrock/ping_bedrock.kt @@ -8,12 +8,12 @@ package cn.rtast.libmc.mcping.bedrock import cn.rtast.libmc.common.LibMCContext -import cn.rtast.libmc.common.UdpSocket -import cn.rtast.libmc.common.wrap +import cn.rtast.libmc.common.stream.UdpSocket +import cn.rtast.libmc.common.stream.wrap import cn.rtast.libmc.mcping.PingResponse import kotlin.time.Clock -internal fun pingBedrockServer(host: String, port: Int, context: LibMCContext): PingResponse { +internal suspend fun pingBedrockServer(host: String, port: Int, context: LibMCContext): PingResponse { val socket = UdpSocket(host, port, context) return try { val sendTime = Clock.System.now().toEpochMilliseconds() diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/packet.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/packet.kt index 0dccbb4..b47dda9 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/packet.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/packet.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.mcping.java -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.McStringCodec -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.VarIntCodec +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 // ref https://minecraft.wiki/w/Java_Edition_protocol/Packets#Handshake @@ -22,30 +22,30 @@ internal data class HandshakePacket( val nextState: Int, ) : MinecraftPacket { companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: HandshakePacket) { + override suspend fun encode(buffer: BytesBuffer, value: HandshakePacket) { VarIntCodec.encode(buffer, value.protocolVersion) McStringCodec.encode(buffer, value.serverAddress) buffer.writeShort(value.serverPort.toShort()) VarIntCodec.encode(buffer, value.nextState) } - override fun decode(buffer: BytesBuffer): HandshakePacket = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): HandshakePacket = throw UnsupportedOperationException() } } // ref https://minecraft.wiki/w/Java_Edition_protocol/Packets#Status internal data object StatusRequestPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: StatusRequestPacket) {} - override fun decode(buffer: BytesBuffer): StatusRequestPacket = throw UnsupportedOperationException() + override suspend fun encode(buffer: BytesBuffer, value: StatusRequestPacket) {} + override suspend fun decode(buffer: BytesBuffer): StatusRequestPacket = throw UnsupportedOperationException() } internal data class PingPacket(val currentTime: Long) : MinecraftPacket { companion object : PacketCodec { - override fun encode(buffer: BytesBuffer, value: PingPacket) { + override suspend fun encode(buffer: BytesBuffer, value: PingPacket) { buffer.writeLong(value.currentTime) } - override fun decode(buffer: BytesBuffer): PingPacket { + override suspend fun decode(buffer: BytesBuffer): PingPacket { return PingPacket(buffer.readLong()) } } diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/ping_java.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/ping_java.kt index bb15d77..b1c2e0f 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/ping_java.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/java/ping_java.kt @@ -8,11 +8,15 @@ 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.mcping.PingResponse import cn.rtast.libmc.mcping.sendPacket import kotlin.time.Clock -internal fun pingJavaServer(host: String, port: Int, context: LibMCContext): PingResponse { +internal suspend fun pingJavaServer(host: String, port: Int, context: LibMCContext): PingResponse { val socket = Socket(host, port, context) val receiveChannel = socket.openReadChannel() val sendChannel = socket.openWriteChannel() diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/mcping.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/mcping.kt index 933c519..1832f71 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/mcping.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/mcping.kt @@ -16,7 +16,7 @@ import kotlin.jvm.JvmName import kotlin.jvm.JvmOverloads @JvmOverloads -public fun mcping( +public suspend fun mcping( host: String, port: Int, type: ServerType = ServerType.Java, diff --git a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/packet_writer.kt b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/packet_writer.kt index 317baa5..858d0fc 100644 --- a/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/packet_writer.kt +++ b/libmc-mcping/src/commonMain/kotlin/cn/rtast/libmc/mcping/packet_writer.kt @@ -7,15 +7,19 @@ package cn.rtast.libmc.mcping -import cn.rtast.libmc.common.* +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 -public fun WriteChannel.sendPacket(packet: T, packetId: Int, codec: PacketCodec) { +public suspend fun WriteChannel.sendPacket(packet: T, packetId: Int, codec: PacketCodec) { val bodyBuffer = BytesBuffer() - bodyBuffer.write(packetId, VarIntCodec) + VarIntCodec.encode(bodyBuffer, packetId) codec.encode(bodyBuffer, packet) val frameBuffer = BytesBuffer() - frameBuffer.write(bodyBuffer.size, VarIntCodec) + VarIntCodec.encode(bodyBuffer, bodyBuffer.size) frameBuffer.writeBuffer(bodyBuffer) val bytes = frameBuffer.toByteArray() this.writeFully(bytes, 0, bytes.size) diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTInput.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTInput.kt index d085332..0fedba3 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTInput.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTInput.kt @@ -7,12 +7,12 @@ package cn.rtast.libmc.nbt -import cn.rtast.libmc.common.ByteOrder -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.ByteOrder +import cn.rtast.libmc.common.stream.BytesBuffer public class BytesBufferNBTInput(override val order: ByteOrder, private val buffer: BytesBuffer) : NBTInput { - override fun readByte(): Byte = buffer.readByte() - override fun readBytes(count: Int): ByteArray = buffer.readBytes(count) + override suspend fun readByte(): Byte = buffer.readByte() + override suspend fun readBytes(count: Int): ByteArray = buffer.readBytes(count) } public fun BytesBuffer.toNBTInput(order: ByteOrder = ByteOrder.BIG_ENDIAN): BytesBufferNBTInput = diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTOutput.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTOutput.kt index bcb11d7..03ba02c 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTOutput.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/BytesBufferNBTOutput.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.nbt -import cn.rtast.libmc.common.ByteOrder -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.ByteOrder +import cn.rtast.libmc.common.stream.BytesBuffer public class BytesBufferNBTOutput( override val order: ByteOrder, override val root: NBTTag.CompoundTag, private val buffer: BytesBuffer, ) : NBTOutput { - override fun writeByte(value: Byte): Unit = buffer.writeByte(value) - override fun writeBytes(value: ByteArray): Unit = buffer.writeBytes(value) - override fun toByteArray(): ByteArray = buffer.toByteArray() + override suspend fun writeByte(value: Byte): Unit = buffer.writeByte(value) + override suspend fun writeBytes(value: ByteArray): Unit = buffer.writeBytes(value) + override suspend fun toByteArray(): ByteArray = buffer.toByteArray() } public fun BytesBuffer.toNBTOutput( diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTInput.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTInput.kt index 8e6ac4a..969aaf8 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTInput.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTInput.kt @@ -7,33 +7,33 @@ package cn.rtast.libmc.nbt -import cn.rtast.libmc.common.ByteOrder +import cn.rtast.libmc.common.stream.ByteOrder public interface NBTInput { public val order: ByteOrder - public fun readByte(): Byte - public fun readBytes(count: Int): ByteArray + public suspend fun readByte(): Byte + public suspend fun readBytes(count: Int): ByteArray - public fun readLong(): Long = if (order == ByteOrder.BIG_ENDIAN) readLongBE() else readLongLE() - public fun readFloat(): Float = if (order == ByteOrder.BIG_ENDIAN) readFloatBE() else readFloatLE() - public fun readDouble(): Double = if (order == ByteOrder.BIG_ENDIAN) readDoubleBE() else readDoubleLE() - public fun readShort(): Short = if (order == ByteOrder.BIG_ENDIAN) readShortBE() else readShortLE() - public fun readInt(): Int = if (order == ByteOrder.BIG_ENDIAN) readIntBE() else readIntLE() + public suspend fun readLong(): Long = if (order == ByteOrder.BIG_ENDIAN) readLongBE() else readLongLE() + public suspend fun readFloat(): Float = if (order == ByteOrder.BIG_ENDIAN) readFloatBE() else readFloatLE() + public suspend fun readDouble(): Double = if (order == ByteOrder.BIG_ENDIAN) readDoubleBE() else readDoubleLE() + public suspend fun readShort(): Short = if (order == ByteOrder.BIG_ENDIAN) readShortBE() else readShortLE() + public suspend fun readInt(): Int = if (order == ByteOrder.BIG_ENDIAN) readIntBE() else readIntLE() // big endian - public fun readLongBE(): Long = + public suspend fun readLongBE(): Long = (readIntBE().toLong() shl 32) or (readIntBE().toLong() and 0xFFFFFFFFL) - public fun readFloatBE(): Float = Float.fromBits(readIntBE()) - public fun readDoubleBE(): Double = Double.fromBits(readLongBE()) - public fun readShortBE(): Short { + public suspend fun readFloatBE(): Float = Float.fromBits(readIntBE()) + public suspend fun readDoubleBE(): Double = Double.fromBits(readLongBE()) + public suspend fun readShortBE(): Short { val b1 = readByte().toInt() and 0xFF val b2 = readByte().toInt() and 0xFF return ((b1 shl 8) or b2).toShort() } - public fun readIntBE(): Int { + public suspend fun readIntBE(): Int { return ((readByte().toInt() and 0xFF) shl 24) or ((readByte().toInt() and 0xFF) shl 16) or ((readByte().toInt() and 0xFF) shl 8) or @@ -41,7 +41,7 @@ public interface NBTInput { } // little endian - public fun readLongLE(): Long { + public suspend fun readLongLE(): Long { return ((readByte().toInt() and 0xFF).toLong() shl 0) or ((readByte().toInt() and 0xFF).toLong() shl 8) or ((readByte().toInt() and 0xFF).toLong() shl 16) or @@ -52,14 +52,14 @@ public interface NBTInput { (readByte().toInt() and 0xFF).toLong() } - public fun readFloatLE(): Float = Float.fromBits(readIntLE()) + public suspend fun readFloatLE(): Float = Float.fromBits(readIntLE()) - public fun readDoubleLE(): Double = Double.fromBits(readLongLE()) + public suspend fun readDoubleLE(): Double = Double.fromBits(readLongLE()) - public fun readShortLE(): Short = + public suspend fun readShortLE(): Short = ((readByte().toInt() and 0xFF) or (readByte().toInt() and 0xFF shl 8)).toShort() - public fun readIntLE(): Int = + public suspend fun readIntLE(): Int = ((readByte().toInt() and 0xFF)) or ((readByte().toInt() and 0xFF) shl 8) or ((readByte().toInt() and 0xFF) shl 16) or diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTOutput.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTOutput.kt index 47224fd..2611cd5 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTOutput.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTOutput.kt @@ -7,44 +7,44 @@ package cn.rtast.libmc.nbt -import cn.rtast.libmc.common.ByteOrder +import cn.rtast.libmc.common.stream.ByteOrder public interface NBTOutput { public val order: ByteOrder public val root: NBTTag.CompoundTag - public fun writeByte(value: Byte) - public fun writeBytes(value: ByteArray) + public suspend fun writeByte(value: Byte) + public suspend fun writeBytes(value: ByteArray) - public fun writeShort(value: Short): Unit = + public suspend fun writeShort(value: Short): Unit = if (order == ByteOrder.BIG_ENDIAN) writeShortBE(value) else writeShortLE(value) - public fun writeInt(value: Int): Unit = + public suspend fun writeInt(value: Int): Unit = if (order == ByteOrder.BIG_ENDIAN) writeIntBE(value) else writeIntLE(value) - public fun writeLong(value: Long): Unit = + public suspend fun writeLong(value: Long): Unit = if (order == ByteOrder.BIG_ENDIAN) writeLongBE(value) else writeLongLE(value) - public fun writeFloat(value: Float): Unit = + public suspend fun writeFloat(value: Float): Unit = if (order == ByteOrder.BIG_ENDIAN) writeFloatBE(value) else writeFloatLE(value) - public fun writeDouble(value: Double): Unit = + public suspend fun writeDouble(value: Double): Unit = if (order == ByteOrder.BIG_ENDIAN) writeDoubleBE(value) else writeDoubleLE(value) // big endian - public fun writeShortBE(value: Short) { + public suspend fun writeShortBE(value: Short) { writeByte(((value.toInt() shr 8) and 0xFF).toByte()) writeByte((value.toInt() and 0xFF).toByte()) } - public fun writeIntBE(value: Int) { + public suspend fun writeIntBE(value: Int) { writeByte(((value shr 24) and 0xFF).toByte()) writeByte(((value shr 16) and 0xFF).toByte()) writeByte(((value shr 8) and 0xFF).toByte()) writeByte((value and 0xFF).toByte()) } - public fun writeLongBE(value: Long) { + public suspend fun writeLongBE(value: Long) { writeByte(((value shr 56).toInt() and 0xFF).toByte()) writeByte(((value shr 48).toInt() and 0xFF).toByte()) writeByte(((value shr 40).toInt() and 0xFF).toByte()) @@ -55,28 +55,28 @@ public interface NBTOutput { writeByte((value.toInt() and 0xFF).toByte()) } - public fun writeFloatBE(value: Float) { + public suspend fun writeFloatBE(value: Float) { writeIntBE(value.toBits()) } - public fun writeDoubleBE(value: Double) { + public suspend fun writeDoubleBE(value: Double) { writeLongBE(value.toBits()) } // Little Endian - public fun writeShortLE(value: Short) { + public suspend fun writeShortLE(value: Short) { writeByte((value.toInt() and 0xFF).toByte()) writeByte(((value.toInt() shr 8) and 0xFF).toByte()) } - public fun writeIntLE(value: Int) { + public suspend fun writeIntLE(value: Int) { writeByte((value and 0xFF).toByte()) writeByte(((value shr 8) and 0xFF).toByte()) writeByte(((value shr 16) and 0xFF).toByte()) writeByte(((value shr 24) and 0xFF).toByte()) } - public fun writeLongLE(value: Long) { + public suspend fun writeLongLE(value: Long) { writeByte(((value and 0xFF).toInt()).toByte()) writeByte((((value shr 8) and 0xFF).toInt()).toByte()) writeByte((((value shr 16) and 0xFF).toInt()).toByte()) @@ -87,10 +87,7 @@ public interface NBTOutput { writeByte((((value shr 56) and 0xFF).toInt()).toByte()) } - public fun writeFloatLE(value: Float): Unit = writeIntLE(value.toBits()) - - public fun writeDoubleLE(value: Double): Unit = writeLongLE(value.toBits()) - - - public fun toByteArray(): ByteArray + public suspend fun writeFloatLE(value: Float): Unit = writeIntLE(value.toBits()) + public suspend fun writeDoubleLE(value: Double): Unit = writeLongLE(value.toBits()) + public suspend fun toByteArray(): ByteArray } \ No newline at end of file diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTReader.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTReader.kt index 2208bfe..ef39d33 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTReader.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTReader.kt @@ -7,13 +7,13 @@ package cn.rtast.libmc.nbt -public fun NBTInput.readStringTag(): String { +public suspend fun NBTInput.readStringTag(): String { val length = readShort().toInt() and 0xFFFF val bytes = readBytes(length) return bytes.decodeToString() } -public fun NBTInput.readListTag(): NBTTag.ListTag { +public suspend fun NBTInput.readListTag(): NBTTag.ListTag { val elementTypeId = readByte().toInt() and 0xFF val elementType = NBTType.fromID(elementTypeId) val length = readInt() @@ -22,7 +22,7 @@ public fun NBTInput.readListTag(): NBTTag.ListTag { return NBTTag.ListTag(elementType, list) } -public fun NBTInput.readCompoundTag(): NBTTag.CompoundTag { +public suspend fun NBTInput.readCompoundTag(): NBTTag.CompoundTag { val map = LinkedHashMap() while (true) { val typeId = readByte().toInt() and 0xFF @@ -35,7 +35,7 @@ public fun NBTInput.readCompoundTag(): NBTTag.CompoundTag { return NBTTag.CompoundTag(map) } -public fun NBTInput.readTagPayload(type: NBTType): NBTTag = +public suspend fun NBTInput.readTagPayload(type: NBTType): NBTTag = when (type) { NBTType.Byte -> NBTTag.ByteTag(readByte()) NBTType.Short -> NBTTag.ShortTag(readShort()) @@ -52,7 +52,7 @@ public fun NBTInput.readTagPayload(type: NBTType): NBTTag = NBTType.End -> error("TAG_End no payload") } -public fun NBTInput.readCompound(): NBTTag { +public suspend fun NBTInput.readCompound(): NBTTag { val map = LinkedHashMap() while (true) { val typeId = readByte().toInt() @@ -67,7 +67,7 @@ public fun NBTInput.readCompound(): NBTTag { return NBTTag.ListTag(NBTType.Compound, map.values.toMutableList()) } -public fun NBTInput.readRootCompound(): NBTCompound { +public suspend fun NBTInput.readRootCompound(): NBTCompound { val rootType = NBTType.fromID(readByte().toInt()) require(rootType == NBTType.Compound) { "Root tag must be TAG_Compound" } val nameLen = readShort().toInt() and 0xFFFF @@ -76,7 +76,7 @@ public fun NBTInput.readRootCompound(): NBTCompound { return NBTCompound(name, root) } -public fun NBTInput.readNetworkCompound(): NBTCompound { +public suspend fun NBTInput.readNetworkCompound(): NBTCompound { return when (val type = NBTType.fromID(readByte().toInt() and 0xFF)) { NBTType.Compound -> NBTCompound("", readCompoundTag()) NBTType.String -> NBTCompound("", NBTTag.CompoundTag(linkedMapOf("text" to NBTTag.StringTag(readStringTag())))) diff --git a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTWriter.kt b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTWriter.kt index 2cc0dfb..9948047 100644 --- a/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTWriter.kt +++ b/libmc-nbt/src/commonMain/kotlin/cn/rtast/libmc/nbt/NBTWriter.kt @@ -8,13 +8,13 @@ package cn.rtast.libmc.nbt -public fun NBTOutput.writeStringTag(value: String) { +public suspend fun NBTOutput.writeStringTag(value: String) { val bytes = value.encodeToByteArray() writeShort(bytes.size.toShort()) writeBytes(bytes) } -public fun NBTOutput.writeTagPayload(tag: NBTTag) { +public suspend fun NBTOutput.writeTagPayload(tag: NBTTag) { when (tag) { is NBTTag.ByteTag -> writeByte(tag.value) is NBTTag.ShortTag -> writeShort(tag.value) @@ -56,14 +56,14 @@ public fun NBTOutput.writeTagPayload(tag: NBTTag) { } } -public fun NBTOutput.writeRootNBTCompound(name: String = ""): ByteArray { +public suspend fun NBTOutput.writeRootNBTCompound(name: String = ""): ByteArray { writeByte(NBTType.Compound.id) writeStringTag(name) writeTagPayload(root) return toByteArray() } -public fun NBTOutput.writeNetworkCompound(compound: NBTCompound) { +public suspend fun NBTOutput.writeNetworkCompound(compound: NBTCompound) { val compoundTag = compound.element as? NBTTag.CompoundTag ?: throw IllegalArgumentException("NBTCompound element must be an NBTTag.CompoundTag") writeByte(NBTType.Compound.id) diff --git a/libmc-nbt/src/jvmTest/kotlin/test/TestNBTReader.kt b/libmc-nbt/src/jvmTest/kotlin/test/TestNBTReader.kt index b3d4b2d..492d505 100644 --- a/libmc-nbt/src/jvmTest/kotlin/test/TestNBTReader.kt +++ b/libmc-nbt/src/jvmTest/kotlin/test/TestNBTReader.kt @@ -7,7 +7,7 @@ package test -import cn.rtast.libmc.common.wrap +import cn.rtast.libmc.common.stream.wrap import cn.rtast.libmc.nbt.NbtReader import org.junit.Test import java.io.File diff --git a/libmc-protocol-encrypt/README.md b/libmc-protocol-encrypt/README.md new file mode 100644 index 0000000..cb7568e --- /dev/null +++ b/libmc-protocol-encrypt/README.md @@ -0,0 +1,21 @@ +# libmc-protocol-encrypt + +This module implemented `ProtocolCryptoContext` and provided a `DefaultProtocolCryptoContext`. + +## Get started + +> `Sha1`, `RSA1024`, `AES-128-CFB8` from `cryptography-kotlin`(and its based provider). +> `HTTP Client` from `ktor-client` + +> Before start, you need to add a `ktor client engine` for your platform. For JVM, `ktor-client-okhttp`(JVM 1.8+) +> or `ktor-client-java`(JVM 11+), for Linux, use `ktor-client-curl`, for Windows, use `ktor-client-winhttp`, +> for Apple, use `ktor-client-darwin` + +```kotlin +fun main() { + val cli = createMinecraftClient( + // ... other paramater + crypto = DefaultProtocolCryptoContext + ) +} +``` \ No newline at end of file diff --git a/libmc-protocol-encrypt/build.gradle.kts b/libmc-protocol-encrypt/build.gradle.kts new file mode 100644 index 0000000..75917fd --- /dev/null +++ b/libmc-protocol-encrypt/build.gradle.kts @@ -0,0 +1,43 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +kotlin { + explicitApi() + withSourcesJar() + + linuxX64() + linuxArm64() + macosArm64() + mingwX64() + jvm { compilerOptions.jvmTarget = JvmTarget.JVM_1_8 } + + sourceSets { + commonMain.dependencies { + api(project(":common")) + implementation(libs.cryptography.core) + implementation(libs.cryptography.provider.optimal) + implementation(libs.ktor.client.core) + } + + jvmTest.dependencies { + implementation(libs.ktor.client.okhttp) + } + + linuxTest.dependencies { + implementation(libs.ktor.client.curl) + } + + mingwTest.dependencies { + implementation(libs.ktor.client.winhttp) + } + + appleTest.dependencies { + implementation(libs.ktor.client.darwin) + } + + commonTest.dependencies { + implementation(kotlin("test")) + implementation(project(":protocol")) + implementation(libs.kotlinx.coroutines.test) + } + } +} \ No newline at end of file diff --git a/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/AesCFB8Cipher.kt b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/AesCFB8Cipher.kt new file mode 100644 index 0000000..9c0a8e8 --- /dev/null +++ b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/AesCFB8Cipher.kt @@ -0,0 +1,48 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +@file:OptIn(DelicateCryptographyApi::class) + +package cn.rtast.libmc.protocol.crypto + +import cn.rtast.libmc.common.crypto.NetworkCipher +import dev.whyoleg.cryptography.DelicateCryptographyApi +import dev.whyoleg.cryptography.algorithms.AES + +public class AesCFB8Cipher(sharedKey: ByteArray) : NetworkCipher { + private val encryptIv = sharedKey.copyOf() + private val decryptIv = sharedKey.copyOf() + + private val cipher = provider.get(AES.CFB8) + .keyDecoder() + .decodeFromByteArrayBlocking(AES.Key.Format.RAW, sharedKey) + .cipher() + + override suspend fun encrypt(buffer: ByteArray, offset: Int, length: Int) { + val plaintext = buffer.copyOfRange(offset, offset + length) + val ciphertext = cipher.encryptWithIvBlocking(encryptIv, plaintext) + ciphertext.copyInto(buffer, destinationOffset = offset) + updateIv(encryptIv, ciphertext) + } + + override suspend fun decrypt(buffer: ByteArray, offset: Int, length: Int) { + val ciphertext = buffer.copyOfRange(offset, offset + length) + val plaintext = cipher.decryptWithIvBlocking(decryptIv, ciphertext) + plaintext.copyInto(buffer, destinationOffset = offset) + updateIv(decryptIv, ciphertext) + } + + private fun updateIv(iv: ByteArray, ciphertext: ByteArray) { + val len = ciphertext.size + if (len >= iv.size) { + ciphertext.copyInto(iv, destinationOffset = 0, startIndex = len - iv.size, endIndex = len) + } else { + iv.copyInto(iv, destinationOffset = 0, startIndex = len, endIndex = iv.size) + ciphertext.copyInto(iv, destinationOffset = iv.size - len) + } + } +} \ No newline at end of file diff --git a/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/DefaultProtocolCryptoContext.kt b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/DefaultProtocolCryptoContext.kt new file mode 100644 index 0000000..6831e7b --- /dev/null +++ b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/DefaultProtocolCryptoContext.kt @@ -0,0 +1,31 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +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 io.ktor.client.* +import io.ktor.client.request.* +import io.ktor.http.* + +private val httpClient = HttpClient() + +public val DefaultProtocolCryptoContext: ProtocolContextBuilder.() -> Unit = { + rsaEncryptor = RSA1024Encryptor { key, data -> rsaEncrypt(key, data) } + sha1Hasher = Sha1Hasher { serverId, secretKey, publicKey -> minecraftServerIdHash(serverId, secretKey, publicKey) } + cipherFactory = { key -> AesCFB8Cipher(key) } + authProvider = AuthenticationProvider { url, accessToken, uuid, serverIdHash -> + val status = httpClient.post(url) { + headers { header("Content-Type", "application/json") } + setBody("{\"accessToken\":\"$accessToken\", \"selectedProfile\":\"$uuid\", \"serverId\":\"$serverIdHash\"}") + }.status + require(status == HttpStatusCode.NoContent) + } +} \ No newline at end of file diff --git a/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/RSAEncryotor.kt b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/RSAEncryotor.kt new file mode 100644 index 0000000..563230d --- /dev/null +++ b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/RSAEncryotor.kt @@ -0,0 +1,24 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +@file:OptIn(DelicateCryptographyApi::class) + +package cn.rtast.libmc.protocol.crypto + +import dev.whyoleg.cryptography.CryptographyProvider +import dev.whyoleg.cryptography.DelicateCryptographyApi +import dev.whyoleg.cryptography.algorithms.RSA +import dev.whyoleg.cryptography.algorithms.SHA1 + +internal val provider = CryptographyProvider.Default + +public suspend fun rsaEncrypt(publicKeyBytes: ByteArray, data: ByteArray): ByteArray { + val provider = CryptographyProvider.Default + val rsa = provider.get(RSA.PKCS1) + val publicKey = rsa.publicKeyDecoder(SHA1).decodeFromByteArray(RSA.PublicKey.Format.DER, publicKeyBytes) + return publicKey.encryptor().encrypt(data) +} \ No newline at end of file diff --git a/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/Sha1Hasher.kt b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/Sha1Hasher.kt new file mode 100644 index 0000000..c30d628 --- /dev/null +++ b/libmc-protocol-encrypt/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/Sha1Hasher.kt @@ -0,0 +1,41 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + + +@file:OptIn(DelicateCryptographyApi::class) + +package cn.rtast.libmc.protocol.crypto + +import dev.whyoleg.cryptography.DelicateCryptographyApi +import dev.whyoleg.cryptography.algorithms.SHA1 + +public suspend fun minecraftServerIdHash(serverId: String, secretKey: ByteArray, publicKey: ByteArray): String { + val serverIdBytes = serverId.encodeToByteArray() + for (b in serverIdBytes) require((b.toInt() and 0xFF) <= 0x7F) { "serverId contains non-US-ASCII character" } + val data = serverIdBytes + secretKey + publicKey + val hash = provider.get(SHA1).hasher().hash(data) + return mcDigestToString(hash) +} + +private fun mcDigestToString(digest: ByteArray): String { + val isNegative = (digest[0].toInt() and 0x80) != 0 + val bytes = if (isNegative) twosComplement(digest) else digest + var hex = bytes.joinToString("") { (it.toInt() and 0xFF).toString(16).padStart(2, '0') } + hex = hex.trimStart('0') + if (hex.isEmpty()) hex = "0" + return if (isNegative) "-$hex" else hex +} + +private fun twosComplement(bytes: ByteArray): ByteArray { + val result = ByteArray(bytes.size) + var carry = 1 + for (i in bytes.size - 1 downTo 0) { + val inverted = (bytes[i].toInt().inv() and 0xFF) + carry + result[i] = (inverted and 0xFF).toByte() + carry = inverted ushr 8 + } + return result +} \ No newline at end of file diff --git a/libmc-protocol-encrypt/src/jvmTest/kotlin/test/TestJvmClient.kt b/libmc-protocol-encrypt/src/jvmTest/kotlin/test/TestJvmClient.kt new file mode 100644 index 0000000..55e4250 --- /dev/null +++ b/libmc-protocol-encrypt/src/jvmTest/kotlin/test/TestJvmClient.kt @@ -0,0 +1,41 @@ +/* + * Copyright © 2026 RTAkland + * Author: RTAkland + * Date: 2026/9/7 + */ + +package test + +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 kotlinx.coroutines.launch +import org.junit.Test +import java.io.File +import kotlin.uuid.Uuid + + +class TestJvmClient { + + val accessToken = File("src/commonTest/resources/accessToken.txt").readText() + + @Test + fun `test default protocol context`() { + val cli = createMinecraftClient( + "127.0.0.1", + 25565, + "RTAkland", +// generateOfflineUuid("RTAkland"), + Uuid.parse("bb033844-e68e-4909-a636-1a5d1821ddc4"), +// null, + accessToken, + crypto = DefaultProtocolCryptoContext + ) + cli.on { println(it) } + cli.on { println(it) } + cli.launch { cli.connect() } + while (true) { + } + } +} \ No newline at end of file diff --git a/libmc-protocol/build.gradle.kts b/libmc-protocol/build.gradle.kts index 847de0d..850457c 100644 --- a/libmc-protocol/build.gradle.kts +++ b/libmc-protocol/build.gradle.kts @@ -14,7 +14,6 @@ kotlin { commonMain.dependencies { api(project(":common")) api(project(":nbt")) - api(libs.kotlinx.coroutines) } jvmMain.dependencies { @@ -27,8 +26,7 @@ kotlin { } jvmTest.dependencies { - implementation(libs.ktor.client.core) - implementation(libs.ktor.client.okhttp) + implementation(project(":protocol-encrypt")) } } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/client/MinecraftClient.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/client/MinecraftClient.kt index df6c6c4..3ef0c5d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/client/MinecraftClient.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/client/MinecraftClient.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.client import cn.rtast.libmc.common.LibMCContext -import cn.rtast.libmc.protocol.crypto.ProtocolContext -import cn.rtast.libmc.protocol.crypto.ProtocolContextBuilder +import cn.rtast.libmc.common.crypto.ProtocolContext +import cn.rtast.libmc.common.crypto.ProtocolContextBuilder import cn.rtast.libmc.protocol.event.InternalPacketDispatcher import cn.rtast.libmc.protocol.event.PacketEventDispatcher import cn.rtast.libmc.protocol.network.NetworkChannel @@ -56,7 +56,7 @@ public class MinecraftClient internal constructor( override val coroutineContext: CoroutineContext get() = clientJob + ioDispatcher + CoroutineName("LibMC-MinecraftClient-$username") - public fun connect(protocolVersion: Int = 776) { + public suspend fun connect(protocolVersion: Int = 776) { networkChannel.connect() startListening() networkChannel.sendPacket( diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/NetworkCipher.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/NetworkCipher.kt deleted file mode 100644 index 4d1a151..0000000 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/crypto/NetworkCipher.kt +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/7 - */ - - -package cn.rtast.libmc.protocol.crypto - -public interface NetworkCipher { - public fun encrypt(buffer: ByteArray, offset: Int, length: Int) - public fun decrypt(buffer: ByteArray, offset: Int, length: Int) -} \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/event/InternalPacketDispatcher.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/event/InternalPacketDispatcher.kt index bc45425..4ff22cf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/event/InternalPacketDispatcher.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/event/InternalPacketDispatcher.kt @@ -19,7 +19,7 @@ import cn.rtast.libmc.protocol.packet.play.serverbound.ServerboundConfigurationA 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.protocol.session.AuthenticationProvider +import cn.rtast.libmc.common.crypto.AuthenticationProvider import cn.rtast.libmc.protocol.util.generateRandom16Bytes public class InternalPacketDispatcher( @@ -31,19 +31,8 @@ public class InternalPacketDispatcher( public suspend fun handleIncomingPackets(packet: MinecraftPacket) { this.dispatchEvent(packet) when (packet) { - is ClientboundLoginPacket -> this.handleLoginPackets(packet) - is ClientboundConfigurationPacket -> this.handleConfigurationPackets(packet) - is ClientboundPlayPacket -> this.handlePlayPackets(packet) - } - } - - private suspend fun handleLoginPackets(packet: ClientboundLoginPacket) { - when (packet) { - is ClientboundDisconnectLoginPacket -> { - println("Login denied: ${packet.reason}") - client.close() - } - + // login + is ClientboundDisconnectLoginPacket -> client.close() is ClientboundSetCompressionPacket -> client.networkChannel.setCompression(packet.threshold) is ClientboundLoginSuccessPacket -> { client.networkChannel.sendPacket(ServerboundLoginAcknowledgedPacket) @@ -67,13 +56,7 @@ public class InternalPacketDispatcher( client.session.enableEncryption(sharedSecret) } - else -> {} - } - } - - private fun handleConfigurationPackets(packet: ClientboundConfigurationPacket) { - when (packet) { - is ClientboundDisconnectConfigurationPacket -> println("Configuration disconnected: ${packet.reason}") + // configuration ClientboundFinishConfigurationPacket -> { client.networkChannel.sendPacket(ServerboundAckFinishConfigurationPacket) client.stateMachine.transitionTo(ProtocolState.PLAY) @@ -91,24 +74,16 @@ public class InternalPacketDispatcher( ServerboundSelectKnownPacksPacket(emptyList()) ) // TODO empty resource packs list is ClientboundCodeOfConductPacket -> client.networkChannel.sendPacket(ServerboundAcceptCodeOfConductPacket) - else -> {} - } - } - private fun handlePlayPackets(packet: ClientboundPlayPacket) { - when (packet) { + // play is ClientboundDisconnectPlayPacket -> client.close() is ClientboundKeepAlivePlayPacket -> client.networkChannel.sendPacket(ServerboundKeepAlivePlayPacket(id = packet.id)) - is ClientboundLoginPlayPacket -> println("Successfully joined world Entity ID: ${packet.entityId}") is ClientboundPingPacket -> client.networkChannel.sendPacket(ServerboundPongPlayPacket(packet.id)) - is ClientboundPlayerChatMessagePacket -> println("[Player Chat Message] ${packet.message}") ClientboundStartConfigurationPacket -> { client.networkChannel.sendPacket(ServerboundConfigurationAcknowledgedPacket) client.stateMachine.transitionTo(ProtocolState.CONFIGURATION) } - - is ClientboundSystemChatMessagePacket -> println("[System message] ${packet.content}") - else -> println(packet) + else -> {} } } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/CipherChannel.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/CipherChannel.kt index e42673e..11bd606 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/CipherChannel.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/CipherChannel.kt @@ -7,27 +7,27 @@ package cn.rtast.libmc.protocol.network -import cn.rtast.libmc.common.ReadChannel -import cn.rtast.libmc.common.WriteChannel -import cn.rtast.libmc.protocol.crypto.NetworkCipher +import cn.rtast.libmc.common.stream.ReadChannel +import cn.rtast.libmc.common.stream.WriteChannel +import cn.rtast.libmc.common.crypto.NetworkCipher internal class CipherReadChannel( private val delegate: ReadChannel, private val crypto: NetworkCipher ) : ReadChannel() { - override fun readFully(out: ByteArray, start: Int, end: Int) { + override suspend fun readFully(out: ByteArray, start: Int, end: Int) { delegate.readFully(out, start, end) val length = end - start if (length > 0) crypto.decrypt(out, start, length) } - override fun readByte(): Byte { + override suspend fun readByte(): Byte { val buf = ByteArray(1) readFully(buf, 0, 1) return buf[0] } - override fun readBytes(length: Int): ByteArray { + override suspend fun readBytes(length: Int): ByteArray { val bytes = ByteArray(length) readFully(bytes, 0, length) return bytes @@ -38,14 +38,14 @@ internal class CipherWriteChannel( private val delegate: WriteChannel, private val crypto: NetworkCipher ) : WriteChannel() { - override fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int) { + override suspend fun writeFully(value: ByteArray, startIndex: Int, endIndex: Int) { val length = endIndex - startIndex if (length <= 0) return val encrypted = value.copyOfRange(startIndex, endIndex) crypto.encrypt(encrypted, 0, length) delegate.writeFully(encrypted, 0, length) } - override fun flush() { + override suspend fun flush() { delegate.flush() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkChannel.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkChannel.kt index 1c98eff..67a28d8 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkChannel.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkChannel.kt @@ -7,9 +7,14 @@ 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.protocol.client.ClientStateMachine -import cn.rtast.libmc.protocol.crypto.NetworkCipher import cn.rtast.libmc.protocol.protocol.GameProtocols import kotlin.concurrent.Volatile @@ -33,7 +38,7 @@ internal class NetworkChannel( this.threshold = threshold } - fun readNextPacket(): MinecraftPacket { + suspend fun readNextPacket(): MinecraftPacket { val packetLength = session.readVarInt() val rawFrameBytes = session.readBytes(packetLength) val frameBuf = rawFrameBytes.wrap() @@ -49,7 +54,7 @@ internal class NetworkChannel( .decodePacket(packetId, payloadBuf) } - fun sendPacket(packet: MinecraftPacket) { + suspend fun sendPacket(packet: MinecraftPacket) { val uncompressedBodyBuf = BytesBuffer() GameProtocols.serverboundGameProtocols .getRegistry(stateMachine.currentState) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkSession.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkSession.kt index ed706d6..41d140b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkSession.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/network/NetworkSession.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.network import cn.rtast.libmc.common.LibMCContext -import cn.rtast.libmc.common.ReadChannel -import cn.rtast.libmc.common.Socket -import cn.rtast.libmc.common.WriteChannel -import cn.rtast.libmc.protocol.crypto.NetworkCipher +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 internal class NetworkSession( private val host: String, @@ -41,17 +41,17 @@ internal class NetworkSession( this.writeChannel = CipherWriteChannel(currentWrite, cipher) } - fun readByte(): Byte { + suspend fun readByte(): Byte { val channel = requireNotNull(readChannel) { "ReadChannel not connected" } return channel.readByte() } - fun readBytes(length: Int): ByteArray { + suspend fun readBytes(length: Int): ByteArray { val channel = requireNotNull(readChannel) { "ReadChannel not connected" } return channel.readBytes(length) } - fun readVarInt(): Int { + suspend fun readVarInt(): Int { var numRead = 0 var result = 0 var read: Byte @@ -65,7 +65,7 @@ internal class NetworkSession( return result } - fun writeFully(data: ByteArray) { + suspend fun writeFully(data: ByteArray) { val channel = requireNotNull(writeChannel) { "WriteChannel not connected" } channel.writeFully(data, 0, data.size) channel.flush() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/KnownPacks.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/KnownPacks.kt index beabec9..06df58a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/KnownPacks.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/KnownPacks.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.configuration -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.writeMcString +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 public data class KnownPacks(val namespace: String, val id: String, val version: String) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: KnownPacks) { + override suspend fun encode(buffer: BytesBuffer, value: KnownPacks) { buffer.writeMcString(value.namespace) buffer.writeMcString(value.id) buffer.writeMcString(value.version) } - override fun decode(buffer: BytesBuffer): KnownPacks { + override suspend fun decode(buffer: BytesBuffer): KnownPacks { val namespace = buffer.readMcString() val id = buffer.readMcString() val version = buffer.readMcString() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundAddResourcePackPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundAddResourcePackPacket.kt index b49f373..995e697 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundAddResourcePackPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundAddResourcePackPacket.kt @@ -7,7 +7,12 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.* +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound import kotlin.uuid.Uuid @@ -18,10 +23,10 @@ public data class ClientboundAddResourcePackPacket( val hash: String, val forced: Boolean, val prompt: NBTCompound, -) : ClientboundConfigurationPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundAddResourcePackPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundAddResourcePackPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundAddResourcePackPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundAddResourcePackPacket { val uuid = buffer.readUuid() val url = buffer.readMcString() val hash = buffer.readMcString() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundClearDialogPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundClearDialogPacket.kt index 4a56f51..ff2a0d7 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundClearDialogPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundClearDialogPacket.kt @@ -7,11 +7,12 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundClearDialogPacket : ClientboundConfigurationPacket, +public data object ClientboundClearDialogPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundClearDialogPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundClearDialogPacket = ClientboundClearDialogPacket + override suspend fun encode(buffer: BytesBuffer, value: ClientboundClearDialogPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundClearDialogPacket = ClientboundClearDialogPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCodeOfConductPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCodeOfConductPacket.kt index 2bc7d36..25328f8 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCodeOfConductPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCodeOfConductPacket.kt @@ -7,14 +7,15 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString +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 -public data class ClientboundCodeOfConductPacket(val codeOfConduct: String) : ClientboundConfigurationPacket { +public data class ClientboundCodeOfConductPacket(val codeOfConduct: String) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCodeOfConductPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCodeOfConductPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCodeOfConductPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCodeOfConductPacket { return ClientboundCodeOfConductPacket(buffer.readMcString()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationPacket.kt deleted file mode 100644 index 9e4eec4..0000000 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationPacket.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/5 - */ - - -package cn.rtast.libmc.protocol.packet.configuration.clientbound - -import cn.rtast.libmc.common.packet.MinecraftPacket - -public sealed interface ClientboundConfigurationPacket : MinecraftPacket \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationShowDialogPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationShowDialogPacket.kt index 09bdf86..32001b8 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationShowDialogPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundConfigurationShowDialogPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound -public data class ClientboundConfigurationShowDialogPacket(val dialog: NBTCompound) : ClientboundConfigurationPacket { +public data class ClientboundConfigurationShowDialogPacket(val dialog: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundConfigurationShowDialogPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundConfigurationShowDialogPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundConfigurationShowDialogPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundConfigurationShowDialogPacket { return ClientboundConfigurationShowDialogPacket(buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCookieRequestPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCookieRequestPacket.kt index 71c3c00..8e6690a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCookieRequestPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCookieRequestPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier -public data class ClientboundCookieRequestPacket(val key: Identifier) : ClientboundConfigurationPacket { +public data class ClientboundCookieRequestPacket(val key: Identifier) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCookieRequestPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCookieRequestPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCookieRequestPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCookieRequestPacket { return ClientboundCookieRequestPacket(key = buffer.readIdentifier()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomPayloadPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomPayloadPacket.kt index 077bdfc..73c9296 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomPayloadPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomPayloadPacket.kt @@ -7,9 +7,9 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier @@ -18,8 +18,8 @@ public data class ClientboundCustomPayloadPacket( val data: ByteArray, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCustomPayloadPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCustomPayloadPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCustomPayloadPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCustomPayloadPacket { val channel = buffer.readIdentifier() val data = buffer.readRemainingBytes() return ClientboundCustomPayloadPacket(channel, data) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomReportDetailsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomReportDetailsPacket.kt index 1971836..89a8812 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomReportDetailsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundCustomReportDetailsPacket.kt @@ -7,18 +7,22 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.* +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 -public data class ClientboundCustomReportDetailsPacket(val details: List) : - ClientboundConfigurationPacket { +public data class ClientboundCustomReportDetailsPacket(val details: List) : MinecraftPacket { public data class ReportDetail(val title: String, val description: String) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ReportDetail) { + override suspend fun encode(buffer: BytesBuffer, value: ReportDetail) { buffer.writeMcString(value.title) buffer.writeMcString(value.description) } - override fun decode(buffer: BytesBuffer): ReportDetail { + override suspend fun decode(buffer: BytesBuffer): ReportDetail { val title = buffer.readMcString() val description = buffer.readMcString() return ReportDetail(title, description) @@ -27,8 +31,8 @@ public data class ClientboundCustomReportDetailsPacket(val details: List { - override fun encode(buffer: BytesBuffer, value: ClientboundCustomReportDetailsPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCustomReportDetailsPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCustomReportDetailsPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCustomReportDetailsPacket { val detailCount = buffer.readVarInt() val details = ArrayList(detailCount) repeat(detailCount) { details.add(ReportDetail.decode(buffer)) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundDisconnectConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundDisconnectConfigurationPacket.kt index 66258c8..d951873 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundDisconnectConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundDisconnectConfigurationPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound -public data class ClientboundDisconnectConfigurationPacket(val reason: NBTCompound) : ClientboundConfigurationPacket { +public data class ClientboundDisconnectConfigurationPacket(val reason: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDisconnectConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDisconnectConfigurationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDisconnectConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDisconnectConfigurationPacket { return ClientboundDisconnectConfigurationPacket(reason = buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundFinishConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundFinishConfigurationPacket.kt index 3a6ded5..d33c68c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundFinishConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundFinishConfigurationPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundFinishConfigurationPacket : ClientboundConfigurationPacket, +public data object ClientboundFinishConfigurationPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundFinishConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundFinishConfigurationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundFinishConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundFinishConfigurationPacket { return ClientboundFinishConfigurationPacket } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundKeepAliveConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundKeepAliveConfigurationPacket.kt index 98f98a4..0dbfa92 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundKeepAliveConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundKeepAliveConfigurationPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundKeepAliveConfigurationPacket(val id: Long) : ClientboundConfigurationPacket { +public data class ClientboundKeepAliveConfigurationPacket(val id: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundKeepAliveConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundKeepAliveConfigurationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundKeepAliveConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundKeepAliveConfigurationPacket { return ClientboundKeepAliveConfigurationPacket(buffer.readLong()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundPingConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundPingConfigurationPacket.kt index dbfb432..8f0e7bf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundPingConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundPingConfigurationPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundPingConfigurationPacket(val id: Int) : ClientboundConfigurationPacket { +public data class ClientboundPingConfigurationPacket(val id: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPingConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPingConfigurationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPingConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPingConfigurationPacket { return ClientboundPingConfigurationPacket(id = buffer.readInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRegistryDataPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRegistryDataPacket.kt index a6e22f7..d3ff57b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRegistryDataPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRegistryDataPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier import cn.rtast.libmc.protocol.protocol.game.registry.RegistryEntry @@ -20,10 +21,10 @@ public data class ClientboundRegistryDataPacket( */ val registryId: Identifier, val entries: List, -) : ClientboundConfigurationPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundRegistryDataPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundRegistryDataPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundRegistryDataPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundRegistryDataPacket { val id = buffer.readIdentifier() val entryCount = buffer.readVarInt() val entries = ArrayList(entryCount) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRemoveResourcePackPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRemoveResourcePackPacket.kt index 73a3879..8672c2f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRemoveResourcePackPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundRemoveResourcePackPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readUuid +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 kotlin.uuid.Uuid -public data class ClientboundRemoveResourcePackPacket(val uuid: Uuid) : ClientboundConfigurationPacket { +public data class ClientboundRemoveResourcePackPacket(val uuid: Uuid) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundRemoveResourcePackPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundRemoveResourcePackPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundRemoveResourcePackPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundRemoveResourcePackPacket { val uuid = buffer.readUuid() return ClientboundRemoveResourcePackPacket(uuid) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundResetChatPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundResetChatPacket.kt index f0e2e4a..c0b9d43 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundResetChatPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundResetChatPacket.kt @@ -7,11 +7,12 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundResetChatPacket : ClientboundConfigurationPacket, +public data object ClientboundResetChatPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundResetChatPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundResetChatPacket = ClientboundResetChatPacket + override suspend fun encode(buffer: BytesBuffer, value: ClientboundResetChatPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundResetChatPacket = ClientboundResetChatPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundSelectKnownPacksPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundSelectKnownPacksPacket.kt index e7e3219..f50b004 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundSelectKnownPacksPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundSelectKnownPacksPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.packet.configuration.KnownPacks -public data class ClientboundSelectKnownPacksPacket(val knownPacks: List) : ClientboundConfigurationPacket { +public data class ClientboundSelectKnownPacksPacket(val knownPacks: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSelectKnownPacksPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSelectKnownPacksPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSelectKnownPacksPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSelectKnownPacksPacket { val packsCount = buffer.readVarInt() val packs = List(packsCount) { KnownPacks.decode(buffer) } return ClientboundSelectKnownPacksPacket(packs) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundServerLinksPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundServerLinksPacket.kt index 9c8d89a..8e9d11e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundServerLinksPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundServerLinksPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.registry.report.ServerLink -public data class ClientboundServerLinksPacket(val links: List) : ClientboundConfigurationPacket { +public data class ClientboundServerLinksPacket(val links: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundServerLinksPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundServerLinksPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundServerLinksPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundServerLinksPacket { val count = buffer.readVarInt() val links = ArrayList(count) repeat(count) { links.add(ServerLink.decode(buffer)) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundStoreCookiePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundStoreCookiePacket.kt index 814558f..1ec4f7f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundStoreCookiePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundStoreCookiePacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readPrefixedByteArray +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier @@ -19,10 +20,10 @@ public data class ClientboundStoreCookiePacket( * cookie */ val payload: ByteArray, -) : ClientboundConfigurationPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundStoreCookiePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundStoreCookiePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundStoreCookiePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundStoreCookiePacket { val key = buffer.readIdentifier() val payload = buffer.readPrefixedByteArray() return ClientboundStoreCookiePacket(key, payload) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundTransferPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundTransferPacket.kt index bde3a52..8ae43d9 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundTransferPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundTransferPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.readVarInt +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 -public data class ClientboundTransferPacket(val host: String, val port: Int) : ClientboundConfigurationPacket { +public data class ClientboundTransferPacket(val host: String, val port: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundTransferPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundTransferPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundTransferPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundTransferPacket { val host = buffer.readMcString() val port = buffer.readVarInt() return ClientboundTransferPacket(host, port) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateEnabledFeaturesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateEnabledFeaturesPacket.kt index 16a4006..aa38a5e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateEnabledFeaturesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateEnabledFeaturesPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier -public data class ClientboundUpdateEnabledFeaturesPacket(val features: List) : - ClientboundConfigurationPacket { +public data class ClientboundUpdateEnabledFeaturesPacket(val features: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateEnabledFeaturesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateEnabledFeaturesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateEnabledFeaturesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateEnabledFeaturesPacket { val featureCount = buffer.readVarInt() val features = ArrayList(featureCount) repeat(featureCount) { features.add(buffer.readIdentifier()) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateTagsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateTagsPacket.kt index 57ef2f4..86e5157 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateTagsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/clientbound/ClientboundUpdateTagsPacket.kt @@ -7,24 +7,25 @@ package cn.rtast.libmc.protocol.packet.configuration.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt -import cn.rtast.libmc.common.writeVarInt +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier -public data class ClientboundUpdateTagsPacket(val registries: List) : ClientboundConfigurationPacket { +public data class ClientboundUpdateTagsPacket(val registries: List) : MinecraftPacket { public data class TaggedRegistry(val registryId: Identifier, val tags: List) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: TaggedRegistry) { + override suspend fun encode(buffer: BytesBuffer, value: TaggedRegistry) { buffer.writeIdentifier(value.registryId) buffer.writeVarInt(value.tags.size) value.tags.forEach { Tag.encode(buffer, it) } } - override fun decode(buffer: BytesBuffer): TaggedRegistry { + override suspend fun decode(buffer: BytesBuffer): TaggedRegistry { val id = buffer.readIdentifier() val tagCount = buffer.readVarInt() val tags = ArrayList(tagCount) @@ -36,13 +37,13 @@ public data class ClientboundUpdateTagsPacket(val registries: List { - override fun encode(buffer: BytesBuffer, value: Tag) { + override suspend fun encode(buffer: BytesBuffer, value: Tag) { buffer.writeIdentifier(value.name) buffer.writeVarInt(value.entries.size) value.entries.forEach { buffer.writeVarInt(it) } } - override fun decode(buffer: BytesBuffer): Tag { + override suspend fun decode(buffer: BytesBuffer): Tag { val name = buffer.readIdentifier() val entrySize = buffer.readVarInt() val entries = ArrayList(entrySize) @@ -68,8 +69,8 @@ public data class ClientboundUpdateTagsPacket(val registries: List { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateTagsPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateTagsPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateTagsPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateTagsPacket { val registryCount = buffer.readVarInt() val registries = ArrayList(registryCount) repeat(registryCount) { registries.add(TaggedRegistry.decode(buffer)) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAcceptCodeOfConductPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAcceptCodeOfConductPacket.kt index b9ed74d..3b04013 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAcceptCodeOfConductPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAcceptCodeOfConductPacket.kt @@ -7,13 +7,13 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data object ServerboundAcceptCodeOfConductPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundAcceptCodeOfConductPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundAcceptCodeOfConductPacket = + override suspend fun encode(buffer: BytesBuffer, value: ServerboundAcceptCodeOfConductPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundAcceptCodeOfConductPacket = ServerboundAcceptCodeOfConductPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAckFinishConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAckFinishConfigurationPacket.kt index 72bc0df..18e05d3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAckFinishConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundAckFinishConfigurationPacket.kt @@ -7,13 +7,13 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data object ServerboundAckFinishConfigurationPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundAckFinishConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundAckFinishConfigurationPacket = + override suspend fun encode(buffer: BytesBuffer, value: ServerboundAckFinishConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundAckFinishConfigurationPacket = throw UnsupportedOperationException() } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundCookieResponsePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundCookieResponsePacket.kt index 0bc6c86..a3214e6 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundCookieResponsePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundCookieResponsePacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier public data class ServerboundCookieResponsePacket(val key: Identifier, val payload: ByteArray?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundCookieResponsePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundCookieResponsePacket) { buffer.writeIdentifier(value.key) if (value.payload != null) { buffer.writeBoolean(true) @@ -25,7 +25,7 @@ public data class ServerboundCookieResponsePacket(val key: Identifier, val paylo } else buffer.writeBoolean(false) } - override fun decode(buffer: BytesBuffer): ServerboundCookieResponsePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundCookieResponsePacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundKeepAliveConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundKeepAliveConfigurationPacket.kt index 82c1ded..950e12f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundKeepAliveConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundKeepAliveConfigurationPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundKeepAliveConfigurationPacket(val id: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundKeepAliveConfigurationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundKeepAliveConfigurationPacket) { buffer.writeLong(value.id) } - override fun decode(buffer: BytesBuffer): ServerboundKeepAliveConfigurationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundKeepAliveConfigurationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundPongConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundPongConfigurationPacket.kt index 18003a8..d337702 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundPongConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundPongConfigurationPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundPongConfigurationPacket(val id: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPongConfigurationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPongConfigurationPacket) { buffer.writeInt(value.id) } - override fun decode(buffer: BytesBuffer): ServerboundPongConfigurationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPongConfigurationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundSelectKnownPacksPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundSelectKnownPacksPacket.kt index b5260fe..4520bbf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundSelectKnownPacksPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/configuration/serverbound/ServerboundSelectKnownPacksPacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.configuration.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.packet.configuration.KnownPacks public data class ServerboundSelectKnownPacksPacket(val knownPacks: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSelectKnownPacksPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSelectKnownPacksPacket) { buffer.writeVarInt(value.knownPacks.size) value.knownPacks.forEach { KnownPacks.encode(buffer, it) } } - override fun decode(buffer: BytesBuffer): ServerboundSelectKnownPacksPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSelectKnownPacksPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/handshake/ServerboundHandshakePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/handshake/ServerboundHandshakePacket.kt index 9184ad0..d030815 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/handshake/ServerboundHandshakePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/handshake/ServerboundHandshakePacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.handshake -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.state.HandshakeIntent public data class ServerboundHandshakePacket( @@ -21,13 +21,13 @@ public data class ServerboundHandshakePacket( val intent: HandshakeIntent, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundHandshakePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundHandshakePacket) { buffer.writeVarInt(value.protocolVersion) buffer.writeMcString(value.serverAddress) buffer.writeShort(value.serverPort.toShort()) buffer.writeVarInt(value.intent.intentID) } - override fun decode(buffer: BytesBuffer): ServerboundHandshakePacket = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): ServerboundHandshakePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundCustomQueryPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundCustomQueryPacket.kt index 2860b75..5d74d32 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundCustomQueryPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundCustomQueryPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.login.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier @@ -17,10 +18,10 @@ public data class ClientboundCustomQueryPacket( val messageId: Int, val channel: Identifier, val data: ByteArray, -) : ClientboundLoginPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCustomQueryPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCustomQueryPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCustomQueryPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCustomQueryPacket { val messageId = buffer.readVarInt() val channel = buffer.readIdentifier() val data = buffer.readBytes(buffer.remaining.toInt()) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundDisconnectLoginPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundDisconnectLoginPacket.kt index 0f6d01a..9a6986a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundDisconnectLoginPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundDisconnectLoginPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.login.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound -public data class ClientboundDisconnectLoginPacket(val reason: NBTCompound) : ClientboundLoginPacket { +public data class ClientboundDisconnectLoginPacket(val reason: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDisconnectLoginPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDisconnectLoginPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDisconnectLoginPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDisconnectLoginPacket { return ClientboundDisconnectLoginPacket(reason = buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundHelloPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundHelloPacket.kt index f3c37d6..bea0fb4 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundHelloPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundHelloPacket.kt @@ -7,10 +7,11 @@ package cn.rtast.libmc.protocol.packet.login.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.readPrefixedByteArray +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 /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Encryption_Request @@ -24,10 +25,10 @@ public data class ClientboundHelloPacket( * ref: https://minecraft.wiki/w/Java_Edition_protocol/Encryption#Authentication */ val shouldAuthenticate: Boolean, -) : ClientboundLoginPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundHelloPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundHelloPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundHelloPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundHelloPacket { val serverId = buffer.readMcString() val publicKey = buffer.readPrefixedByteArray() val verifyToken = buffer.readPrefixedByteArray() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginPacket.kt deleted file mode 100644 index 4718d6b..0000000 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginPacket.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/5 - */ - - -package cn.rtast.libmc.protocol.packet.login.clientbound - -import cn.rtast.libmc.common.packet.MinecraftPacket - -public sealed interface ClientboundLoginPacket : MinecraftPacket \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginSuccessPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginSuccessPacket.kt index b7726ab..4af62ca 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginSuccessPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundLoginSuccessPacket.kt @@ -7,17 +7,18 @@ package cn.rtast.libmc.protocol.packet.login.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readUuid +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.protocol.session.GameProfile import kotlin.uuid.Uuid public data class ClientboundLoginSuccessPacket(val gameProfile: GameProfile, val sessionId: Uuid) : - ClientboundLoginPacket { + MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundLoginSuccessPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundLoginSuccessPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundLoginSuccessPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundLoginSuccessPacket { val gameProfile = GameProfile.decode(buffer) val sessionId = buffer.readUuid() return ClientboundLoginSuccessPacket(gameProfile, sessionId) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundSetCompressionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundSetCompressionPacket.kt index a8d7446..1e27f1e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundSetCompressionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/clientbound/ClientboundSetCompressionPacket.kt @@ -7,18 +7,19 @@ package cn.rtast.libmc.protocol.packet.login.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt -import cn.rtast.libmc.common.writeVarInt +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 -public data class ClientboundSetCompressionPacket(val threshold: Int) : ClientboundLoginPacket { +public data class ClientboundSetCompressionPacket(val threshold: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetCompressionPacket) { - buffer.writeVarInt(value.threshold) + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetCompressionPacket) { + buffer.writeVarInt(value = value.threshold) } - override fun decode(buffer: BytesBuffer): ClientboundSetCompressionPacket { + override suspend fun decode(buffer: BytesBuffer): ClientboundSetCompressionPacket { return ClientboundSetCompressionPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundCustomQueryAnswerPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundCustomQueryAnswerPacket.kt index e997e34..d08da98 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundCustomQueryAnswerPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundCustomQueryAnswerPacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.login.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeOptionalPrefixedByteArray -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeOptionalPrefixedByteArray +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundCustomQueryAnswerPacket(val messageId: Int, val data: ByteArray?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundCustomQueryAnswerPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundCustomQueryAnswerPacket) { buffer.writeVarInt(value.messageId) buffer.writeOptionalPrefixedByteArray(value.data) } - override fun decode(buffer: BytesBuffer): ServerboundCustomQueryAnswerPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundCustomQueryAnswerPacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundKeyPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundKeyPacket.kt index 1a29ac4..9d70e9d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundKeyPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundKeyPacket.kt @@ -7,22 +7,22 @@ package cn.rtast.libmc.protocol.packet.login.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writePrefixedByteArray +import cn.rtast.libmc.common.primitives.writePrefixedByteArray /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Encryption */ public data class ServerboundKeyPacket(val sharedSecret: ByteArray, val verifyToken: ByteArray) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundKeyPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundKeyPacket) { buffer.writePrefixedByteArray(value.sharedSecret) buffer.writePrefixedByteArray(value.verifyToken) } - override fun decode(buffer: BytesBuffer): ServerboundKeyPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundKeyPacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginAcknowledgedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginAcknowledgedPacket.kt index 1f988e2..9e262bf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginAcknowledgedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginAcknowledgedPacket.kt @@ -7,12 +7,13 @@ package cn.rtast.libmc.protocol.packet.login.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data object ServerboundLoginAcknowledgedPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundLoginAcknowledgedPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundLoginAcknowledgedPacket = throw UnsupportedOperationException() + override suspend fun encode(buffer: BytesBuffer, value: ServerboundLoginAcknowledgedPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundLoginAcknowledgedPacket = + throw UnsupportedOperationException() } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginStartPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginStartPacket.kt index d1bc22c..f470732 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginStartPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/login/serverbound/ServerboundLoginStartPacket.kt @@ -7,20 +7,21 @@ package cn.rtast.libmc.protocol.packet.login.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket -import cn.rtast.libmc.common.writeMcString -import cn.rtast.libmc.common.writeUuid +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeUuid import kotlin.uuid.Uuid public data class ServerboundLoginStartPacket(val username: String, val playerUuid: Uuid) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundLoginStartPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundLoginStartPacket) { buffer.writeMcString(value.username) buffer.writeUuid(value.playerUuid) } - override fun decode(buffer: BytesBuffer): ServerboundLoginStartPacket = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): ServerboundLoginStartPacket = + throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAcknowledgeBlockChangePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAcknowledgeBlockChangePacket.kt index 352eeed..fefaa3d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAcknowledgeBlockChangePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAcknowledgeBlockChangePacket.kt @@ -7,17 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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 /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Acknowledge_Block_Change */ -public data class ClientboundAcknowledgeBlockChangePacket(val sequenceId: Int) : ClientboundPlayPacket { +public data class ClientboundAcknowledgeBlockChangePacket(val sequenceId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundAcknowledgeBlockChangePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundAcknowledgeBlockChangePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundAcknowledgeBlockChangePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundAcknowledgeBlockChangePacket { return ClientboundAcknowledgeBlockChangePacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAwardStatisticsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAwardStatisticsPacket.kt index 326a02e..50ca923 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAwardStatisticsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundAwardStatisticsPacket.kt @@ -7,18 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.StatisticsEntry /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Award_Statistics */ -public data class ClientboundAwardStatisticsPacket(val stats: List) : ClientboundPlayPacket { +public data class ClientboundAwardStatisticsPacket(val stats: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundAwardStatisticsPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundAwardStatisticsPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundAwardStatisticsPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundAwardStatisticsPacket { val count = buffer.readVarInt() val stats = List(count) { StatisticsEntry.decode(buffer) } return ClientboundAwardStatisticsPacket(stats) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockDestructionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockDestructionPacket.kt index 2afdeda..5f7a1fa 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockDestructionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockDestructionPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.block.BlockDestroyStage import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos @@ -21,10 +22,10 @@ public data class ClientboundBlockDestructionPacket( val entityId: Int, val location: BlockPos, val stage: BlockDestroyStage, -) : ClientboundPlayPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundBlockDestructionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundBlockDestructionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundBlockDestructionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundBlockDestructionPacket { val entityId = buffer.readVarInt() val location = buffer.readBlockPos() val stage = buffer.readByte() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEntityDataPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEntityDataPacket.kt index ddc043f..51b9299 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEntityDataPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEntityDataPacket.kt @@ -7,19 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundBlockEntityDataPacket(val location: BlockPos, val type: Int, val data: NBTCompound) : - ClientboundPlayPacket { + MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundBlockEntityDataPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundBlockEntityDataPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundBlockEntityDataPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundBlockEntityDataPacket { val location = buffer.readBlockPos() val type = buffer.readVarInt() val data = buffer.readNetworkNBTCompound() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEventPacket.kt index d56cae0..dcf1689 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockEventPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos @@ -29,10 +30,10 @@ public data class ClientboundBlockEventPacket( * as it will infer the type of block based on the given position. */ val blockType: Int, -) : ClientboundPlayPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundBlockEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundBlockEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundBlockEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundBlockEventPacket { val location = buffer.readBlockPos() val actionId = buffer.readUByte() val actionParameter = buffer.readUByte() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockUpdatePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockUpdatePacket.kt index 25b367b..25dcaad 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockUpdatePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBlockUpdatePacket.kt @@ -7,16 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos -public data class ClientboundBlockUpdatePacket(val location: BlockPos, val blockId: Int) : ClientboundPlayPacket { +public data class ClientboundBlockUpdatePacket(val location: BlockPos, val blockId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundBlockUpdatePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundBlockUpdatePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundBlockUpdatePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundBlockUpdatePacket { val position = buffer.readBlockPos() val blockId = buffer.readVarInt() return ClientboundBlockUpdatePacket(position, blockId) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBossEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBossEventPacket.kt index dda8419..1bed727 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBossEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundBossEventPacket.kt @@ -7,10 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readUuid -import cn.rtast.libmc.common.readVarInt +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.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.bossbar.BossBarAction import cn.rtast.libmc.protocol.protocol.game.bossbar.BossBarColor import cn.rtast.libmc.protocol.protocol.game.bossbar.BossBarDivision @@ -18,10 +19,10 @@ import cn.rtast.libmc.protocol.protocol.game.bossbar.BossBarFlags import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound import kotlin.uuid.Uuid -public data class ClientboundBossEventPacket(val uuid: Uuid, val action: BossBarAction) : ClientboundPlayPacket { +public data class ClientboundBossEventPacket(val uuid: Uuid, val action: BossBarAction) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundBossEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundBossEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundBossEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundBossEventPacket { val uuid = buffer.readUuid() val action = when (val actionId = buffer.readVarInt()) { BossBarAction.ADD_ID -> { diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChangeDifficultyPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChangeDifficultyPacket.kt index 10741bd..40cb759 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChangeDifficultyPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChangeDifficultyPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.registry.GameDifficulty public data class ClientboundChangeDifficultyPacket(val difficulty: GameDifficulty, val locked: Boolean) : - ClientboundPlayPacket { + MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundChangeDifficultyPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundChangeDifficultyPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundChangeDifficultyPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundChangeDifficultyPacket { val difficulty = GameDifficulty.fromID(buffer.readByte()) val locked = buffer.readBoolean() return ClientboundChangeDifficultyPacket(difficulty, locked) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchFinishedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchFinishedPacket.kt index 19d70d8..6b1d803 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchFinishedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchFinishedPacket.kt @@ -7,14 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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 -public data class ClientboundChunkBatchFinishedPacket(val batchSize: Int) : ClientboundPlayPacket { +public data class ClientboundChunkBatchFinishedPacket(val batchSize: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundChunkBatchFinishedPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundChunkBatchFinishedPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundChunkBatchFinishedPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundChunkBatchFinishedPacket { return ClientboundChunkBatchFinishedPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchStartPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchStartPacket.kt index 1cba188..d34dfdb 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchStartPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunkBatchStartPacket.kt @@ -7,11 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundChunkBatchStartPacket : ClientboundPlayPacket, +public data object ClientboundChunkBatchStartPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundChunkBatchStartPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundChunkBatchStartPacket = ClientboundChunkBatchStartPacket + override suspend fun encode(buffer: BytesBuffer, value: ClientboundChunkBatchStartPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundChunkBatchStartPacket = ClientboundChunkBatchStartPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunksBiomesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunksBiomesPacket.kt index a1bda64..758080a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunksBiomesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundChunksBiomesPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.chunk.ChunkBiomeData -public data class ClientboundChunksBiomesPacket(val chunkBiomes: List) : ClientboundPlayPacket { +public data class ClientboundChunksBiomesPacket(val chunkBiomes: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundChunksBiomesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundChunksBiomesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundChunksBiomesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundChunksBiomesPacket { val chunkCount = buffer.readVarInt() val chunks = ArrayList(chunkCount) repeat(chunkCount) { chunks.add(ChunkBiomeData.decode(buffer)) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundClearTitlesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundClearTitlesPacket.kt index 4e28469..628a36f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundClearTitlesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundClearTitlesPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundClearTitlesPacket(val reset: Boolean) : ClientboundPlayPacket { +public data class ClientboundClearTitlesPacket(val reset: Boolean) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundClearTitlesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundClearTitlesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundClearTitlesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundClearTitlesPacket { return ClientboundClearTitlesPacket(buffer.readBoolean()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCommandSuggestionsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCommandSuggestionsPacket.kt index 52cf41a..892f72d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCommandSuggestionsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCommandSuggestionsPacket.kt @@ -7,7 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* +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.common.stream.BytesBuffer import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound import cn.rtast.libmc.protocol.protocol.util.writeNetworkNBTCompound @@ -17,16 +22,16 @@ public data class ClientboundCommandSuggestionsPacket( val start: Int, val length: Int, val matches: List, -) : ClientboundPlayPacket { +) : MinecraftPacket { public data class CommandSuggestionMatch(val match: String, val tooltip: NBTCompound?) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: CommandSuggestionMatch) { + override suspend fun encode(buffer: BytesBuffer, value: CommandSuggestionMatch) { buffer.writeMcString(value.match) buffer.writeBoolean(value.tooltip != null) if (value.tooltip != null) buffer.writeNetworkNBTCompound(value.tooltip) } - override fun decode(buffer: BytesBuffer): CommandSuggestionMatch { + override suspend fun decode(buffer: BytesBuffer): CommandSuggestionMatch { val match = buffer.readMcString() val hasTooltip = buffer.readBoolean() val tooltip = if (hasTooltip) buffer.readNetworkNBTCompound() else null @@ -36,8 +41,8 @@ public data class ClientboundCommandSuggestionsPacket( } internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCommandSuggestionsPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCommandSuggestionsPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCommandSuggestionsPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCommandSuggestionsPacket { val id = buffer.readVarInt() val start = buffer.readVarInt() val length = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerClosePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerClosePacket.kt index b3ca798..22b9a5a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerClosePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerClosePacket.kt @@ -7,18 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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 /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Close_Container * This is the ID of the window that was closed. 0 for inventory. */ -public data class ClientboundContainerClosePacket(val windowId: Int) : ClientboundPlayPacket { +public data class ClientboundContainerClosePacket(val windowId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundContainerClosePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundContainerClosePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundContainerClosePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundContainerClosePacket { return ClientboundContainerClosePacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerSetDataPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerSetDataPacket.kt index f68104f..0ddf913 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerSetDataPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundContainerSetDataPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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 /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Set_Container_Property @@ -18,10 +19,10 @@ public data class ClientboundContainerSetDataPacket( val windowId: Int, val property: Short, val value: Short, -) : ClientboundPlayPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundContainerSetDataPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundContainerSetDataPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundContainerSetDataPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundContainerSetDataPacket { val windowId = buffer.readVarInt() val property = buffer.readShort() val value = buffer.readShort() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCooldownPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCooldownPacket.kt index 35dc209..9d270eb 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCooldownPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCooldownPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier @@ -22,8 +22,8 @@ public data class ClientboundCooldownPacket( val ticks: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCooldownPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCooldownPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCooldownPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCooldownPacket { val group = buffer.readIdentifier() val ticks = buffer.readVarInt() return ClientboundCooldownPacket(group, ticks) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCustomChatCompletionsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCustomChatCompletionsPacket.kt index 6745e73..a08003e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCustomChatCompletionsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundCustomChatCompletionsPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readPrefixedStringArray -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readPrefixedStringArray +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.chat.ChatAction public data class ClientboundCustomChatCompletionsPacket(val action: ChatAction, val entries: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundCustomChatCompletionsPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundCustomChatCompletionsPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundCustomChatCompletionsPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundCustomChatCompletionsPacket { val action = ChatAction.fromID(buffer.readVarInt()) val entries = buffer.readPrefixedStringArray() return ClientboundCustomChatCompletionsPacket(action, entries) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDamageEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDamageEventPacket.kt index 1d4986e..0635157 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDamageEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDamageEventPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d @@ -22,8 +22,8 @@ public data class ClientboundDamageEventPacket( val position: Vec3d?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDamageEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDamageEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDamageEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDamageEventPacket { val entityId = buffer.readVarInt() val sourceTypeId = buffer.readVarInt() val rawCauseId = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDeleteChatPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDeleteChatPacket.kt index a1d8506..1ce0240 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDeleteChatPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDeleteChatPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readOptional -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readOptional +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundDeleteChatPacket(val messageId: Int, val signature: ByteArray?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDeleteChatPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDeleteChatPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDeleteChatPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDeleteChatPacket { val messageId = buffer.readVarInt() val signature = buffer.readOptional { buffer.readBytes(256) } return ClientboundDeleteChatPacket(messageId, signature) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDelimiterPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDelimiterPacket.kt index 83b088a..269e734 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDelimiterPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDelimiterPacket.kt @@ -7,12 +7,13 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundDelimiterPacket : ClientboundPlayPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDelimiterPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDelimiterPacket { +public data object ClientboundDelimiterPacket : MinecraftPacket, PacketCodec { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDelimiterPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDelimiterPacket { return ClientboundDelimiterPacket } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisconnectPlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisconnectPlayPacket.kt index 3117bac..c9ad740 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisconnectPlayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisconnectPlayPacket.kt @@ -7,15 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound -public data class ClientboundDisconnectPlayPacket(val reason: NBTCompound) : ClientboundPlayPacket { +public data class ClientboundDisconnectPlayPacket(val reason: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDisconnectPlayPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDisconnectPlayPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDisconnectPlayPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDisconnectPlayPacket { return ClientboundDisconnectPlayPacket(reason = buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisguisedChatMessagePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisguisedChatMessagePacket.kt index cd08884..4ebc308 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisguisedChatMessagePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundDisguisedChatMessagePacket.kt @@ -7,8 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.IdOrX +import cn.rtast.libmc.common.primitives.readIdOrX +import cn.rtast.libmc.common.primitives.readOptional +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.game.chat.InlineChatType import cn.rtast.libmc.protocol.protocol.game.chat.readInlineChatType @@ -21,8 +25,8 @@ public data class ClientboundDisguisedChatMessagePacket( val targetName: NBTCompound?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundDisguisedChatMessagePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundDisguisedChatMessagePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundDisguisedChatMessagePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundDisguisedChatMessagePacket { val message = buffer.readNetworkNBTCompound() val chatType = buffer.readIdOrX { readInlineChatType() } val senderName = buffer.readNetworkNBTCompound() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityAnimationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityAnimationPacket.kt index 1ef3e20..4155068 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityAnimationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityAnimationPacket.kt @@ -7,19 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.Animations /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Entity_Animation */ public data class ClientboundEntityAnimationPacket(val entityId: Int, val animation: Animations) : - ClientboundPlayPacket { + MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundEntityAnimationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundEntityAnimationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundEntityAnimationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundEntityAnimationPacket { val entityId = buffer.readVarInt() val animation = Animations.fromID(buffer.readByte()) return ClientboundEntityAnimationPacket(entityId, animation) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEffectPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEffectPacket.kt index 1208035..0036b82 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEffectPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEffectPacket.kt @@ -7,11 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.effect.EntityEffectFlags +import cn.rtast.libmc.protocol.protocol.game.effect.readEntityEffectFlags import cn.rtast.libmc.protocol.tick.ticks import kotlin.time.Duration @@ -25,13 +26,13 @@ public data class ClientboundEntityEffectPacket( public val duration: Duration get() = if (durationTicks == -1) Duration.INFINITE else durationTicks.ticks internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundEntityEffectPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundEntityEffectPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundEntityEffectPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundEntityEffectPacket { val entityId = buffer.readVarInt() val effectId = buffer.readVarInt() val amplifier = buffer.readVarInt() val durationTicks = buffer.readVarInt() - val flags = EntityEffectFlags.fromByte(buffer.readByte()) + val flags = buffer.readEntityEffectFlags() return ClientboundEntityEffectPacket(entityId, effectId, amplifier, durationTicks, flags) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEventPacket.kt index 2cb1220..7745603 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntityEventPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundEntityEventPacket( @@ -20,8 +20,8 @@ public data class ClientboundEntityEventPacket( val status: Byte, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundEntityEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundEntityEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundEntityEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundEntityEventPacket { val entityId = buffer.readInt() val status = buffer.readByte() return ClientboundEntityEventPacket(entityId, status) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntitySoundEffectPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntitySoundEffectPacket.kt index a3c1066..48e994a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntitySoundEffectPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundEntitySoundEffectPacket.kt @@ -7,8 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.IdOrX +import cn.rtast.libmc.common.primitives.readIdOrX +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.protocol.protocol.game.sound.SoundCategory import cn.rtast.libmc.protocol.protocol.game.sound.SoundEvent import cn.rtast.libmc.protocol.protocol.game.sound.readSoundEvent @@ -22,8 +26,8 @@ public data class ClientboundEntitySoundEffectPacket( val seed: Long, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundEntitySoundEffectPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundEntitySoundEffectPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundEntitySoundEffectPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundEntitySoundEffectPacket { val soundEvent = buffer.readIdOrX { readSoundEvent() } val category = SoundCategory.fromID(buffer.readVarInt()) val entityId = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameEventPacket.kt index dec0414..16d78ba 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameEventPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket /** @@ -16,8 +16,8 @@ import cn.rtast.libmc.common.packet.MinecraftPacket */ public data class ClientboundGameEventPacket(val event: UByte, val value: Float) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundGameEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundGameEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundGameEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundGameEventPacket { val event = buffer.readUByte() val value = buffer.readFloat() return ClientboundGameEventPacket(event, value) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameRuleValuesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameRuleValuesPacket.kt index 1056506..403572c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameRuleValuesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundGameRuleValuesPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.gamerule.GameRuleEntry import cn.rtast.libmc.protocol.protocol.game.gamerule.readGameRule public data class ClientboundGameRuleValuesPacket(val rules: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundGameRuleValuesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundGameRuleValuesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundGameRuleValuesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundGameRuleValuesPacket { val count = buffer.readVarInt() val rules = ArrayList(count) repeat(count) { rules.add(buffer.readGameRule()) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundHurtAnimationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundHurtAnimationPacket.kt index a404138..5a0d1e0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundHurtAnimationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundHurtAnimationPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundHurtAnimationPacket(val entityId: Int, val yaw: Float) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundHurtAnimationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundHurtAnimationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundHurtAnimationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundHurtAnimationPacket { val entityId = buffer.readVarInt() val yaw = buffer.readFloat() return ClientboundHurtAnimationPacket(entityId, yaw) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundInitializeWorldBorderPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundInitializeWorldBorderPacket.kt index b8ac567..bf54473 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundInitializeWorldBorderPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundInitializeWorldBorderPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt -import cn.rtast.libmc.common.readVarLong +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.primitives.readVarLong public data class ClientboundInitializeWorldBorderPacket( val centerX: Double, @@ -24,8 +24,8 @@ public data class ClientboundInitializeWorldBorderPacket( val warningTime: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundInitializeWorldBorderPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundInitializeWorldBorderPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundInitializeWorldBorderPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundInitializeWorldBorderPacket { val centerX = buffer.readDouble() val centerZ = buffer.readDouble() val oldDiameter = buffer.readDouble() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundKeepAlivePlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundKeepAlivePlayPacket.kt index 5ae83f5..6e0bc9b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundKeepAlivePlayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundKeepAlivePlayPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundKeepAlivePlayPacket(val id: Long) : ClientboundPlayPacket { +public data class ClientboundKeepAlivePlayPacket(val id: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundKeepAlivePlayPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundKeepAlivePlayPacket = + override suspend fun encode(buffer: BytesBuffer, value: ClientboundKeepAlivePlayPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundKeepAlivePlayPacket = ClientboundKeepAlivePlayPacket(buffer.readLong()) } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLevelEventPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLevelEventPacket.kt index c286a80..7df2341 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLevelEventPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLevelEventPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos @@ -23,8 +23,8 @@ public data class ClientboundLevelEventPacket( val disableRelativeVolume: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundLevelEventPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundLevelEventPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundLevelEventPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundLevelEventPacket { val eventId = buffer.readInt() val location = buffer.readBlockPos() val data = buffer.readInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLinkEntitiesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLinkEntitiesPacket.kt index 7d37bc2..8129f82 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLinkEntitiesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLinkEntitiesPacket.kt @@ -7,14 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundLinkEntitiesPacket(val attachedEntityId: Int, val holdingEntityId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundLinkEntitiesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundLinkEntitiesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundLinkEntitiesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundLinkEntitiesPacket { val attachedEntityId = buffer.readInt() val holdingEntityId = buffer.readInt() return ClientboundLinkEntitiesPacket(attachedEntityId, holdingEntityId) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLoginPlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLoginPlayPacket.kt index c5cb33f..48f2402 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLoginPlayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLoginPlayPacket.kt @@ -7,9 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt +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.protocol.protocol.game.GameMode import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.block.BlockPos @@ -40,10 +41,10 @@ public data class ClientboundLoginPlayPacket( val seaLevel: Int, val isOnlineMode: Boolean, val enforceSecureChat: Boolean, -) : ClientboundPlayPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundLoginPlayPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundLoginPlayPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundLoginPlayPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundLoginPlayPacket { val entityId = buffer.readInt() val isHardcore = buffer.readBoolean() val dimensionNamesCount = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLowDiskSpaceWarningPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLowDiskSpaceWarningPacket.kt index fc29ede..f04e450 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLowDiskSpaceWarningPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundLowDiskSpaceWarningPacket.kt @@ -7,13 +7,13 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data object ClientboundLowDiskSpaceWarningPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundLowDiskSpaceWarningPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundLowDiskSpaceWarningPacket = + override suspend fun encode(buffer: BytesBuffer, value: ClientboundLowDiskSpaceWarningPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundLowDiskSpaceWarningPacket = ClientboundLowDiskSpaceWarningPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveMinecartAlongTrackPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveMinecartAlongTrackPacket.kt index f8d2fe5..2370be3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveMinecartAlongTrackPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveMinecartAlongTrackPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.entity.MinecartStep import cn.rtast.libmc.protocol.protocol.game.entity.readMinecartStep public data class ClientboundMoveMinecartAlongTrackPacket(val entityId: Int, val steps: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundMoveMinecartAlongTrackPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundMoveMinecartAlongTrackPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundMoveMinecartAlongTrackPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundMoveMinecartAlongTrackPacket { val entityId = buffer.readVarInt() val stepCount = buffer.readVarInt() val steps = ArrayList() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveVehiclePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveVehiclePacket.kt index 82931d3..c6fd730 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveVehiclePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundMoveVehiclePacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d @@ -16,8 +16,8 @@ import cn.rtast.libmc.protocol.protocol.game.math.readVec3d public data class ClientboundMoveVehiclePacket(val position: Vec3d, val yaw: Float, val pitch: Float) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundMoveVehiclePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundMoveVehiclePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundMoveVehiclePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundMoveVehiclePacket { val position = buffer.readVec3d()!! val yaw = buffer.readFloat() val pitch = buffer.readFloat() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenBookPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenBookPacket.kt index 0968d5b..33b9a19 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenBookPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenBookPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.player.Hand public data class ClientboundOpenBookPacket(val hand: Hand) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundOpenBookPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundOpenBookPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundOpenBookPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundOpenBookPacket { return ClientboundOpenBookPacket(Hand.fromID(buffer.readVarInt())) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenHorseScreenPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenHorseScreenPacket.kt index 5803901..2f63b86 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenHorseScreenPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenHorseScreenPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundOpenHorseScreenPacket( val windowId: Int, @@ -18,8 +18,8 @@ public data class ClientboundOpenHorseScreenPacket( val entityId: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundOpenHorseScreenPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundOpenHorseScreenPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundOpenHorseScreenPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundOpenHorseScreenPacket { val windowId = buffer.readVarInt() val columnsCount = buffer.readVarInt() val entityId = buffer.readInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenScreenPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenScreenPacket.kt index 6648140..5cf631d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenScreenPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenScreenPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound @@ -20,8 +20,8 @@ public data class ClientboundOpenScreenPacket( val title: NBTCompound, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundOpenScreenPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundOpenScreenPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundOpenScreenPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundOpenScreenPacket { val windowId = buffer.readVarInt() val windowType = buffer.readVarInt() val title = buffer.readNetworkNBTCompound() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenSignEditorPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenSignEditorPacket.kt index 4326d04..27c63c3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenSignEditorPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundOpenSignEditorPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos public data class ClientboundOpenSignEditorPacket(val location: BlockPos, val isFrontText: Boolean) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundOpenSignEditorPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundOpenSignEditorPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundOpenSignEditorPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundOpenSignEditorPacket { val location = buffer.readBlockPos() val isFrontText = buffer.readBoolean() return ClientboundOpenSignEditorPacket(location, isFrontText) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPickupItemPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPickupItemPacket.kt index 22a2dee..85f5df5 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPickupItemPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPickupItemPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundPickupItemPacket( val collectedEntityId: Int, @@ -21,8 +21,8 @@ public data class ClientboundPickupItemPacket( val itemCount: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPickupItemPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPickupItemPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPickupItemPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPickupItemPacket { val collectedEntityId = buffer.readVarInt() val collectorEntityId = buffer.readVarInt() val itemCount = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPingPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPingPacket.kt index 5f319ba..be5ae07 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPingPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPingPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundPingPacket(val id: Int) : ClientboundPlayPacket { +public data class ClientboundPingPacket(val id: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPingPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPingPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPingPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPingPacket { return ClientboundPingPacket(id = buffer.readInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayPacket.kt deleted file mode 100644 index 9ea4a27..0000000 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayPacket.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/5 - */ - - -package cn.rtast.libmc.protocol.packet.play.clientbound - -import cn.rtast.libmc.common.packet.MinecraftPacket - -/** - * mark a packet that is used when join to the server - */ -public sealed interface ClientboundPlayPacket : MinecraftPacket \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerAbilitiesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerAbilitiesPacket.kt index 355f317..72e86d8 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerAbilitiesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerAbilitiesPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerAbilities @@ -18,8 +18,8 @@ public data class ClientboundPlayerAbilitiesPacket( val fovModifier: Float, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerAbilitiesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerAbilitiesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerAbilitiesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerAbilitiesPacket { val flag = PlayerAbilities.fromByte(buffer.readByte()) val flyingSpeed = buffer.readFloat() val fovModifier = buffer.readFloat() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerChatMessagePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerChatMessagePacket.kt index 201e2e1..632b53c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerChatMessagePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerChatMessagePacket.kt @@ -7,7 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* +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.readUuid +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound import kotlin.uuid.Uuid @@ -30,7 +35,7 @@ public data class ClientboundPlayerChatMessagePacket( val chatType: Int, val senderName: NBTCompound, val targetName: NBTCompound?, -) : ClientboundPlayPacket { +) : MinecraftPacket { public enum class ChatFilterType(public val id: Int) { PASS_THROUGH(0), FULLY_FILTERED(1), @@ -44,8 +49,8 @@ public data class ClientboundPlayerChatMessagePacket( public data class PreviousMessageEntry(val messageId: Int, val signature: ByteArray?) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: PreviousMessageEntry) {} - override fun decode(buffer: BytesBuffer): PreviousMessageEntry { + override suspend fun encode(buffer: BytesBuffer, value: PreviousMessageEntry) {} + override suspend fun decode(buffer: BytesBuffer): PreviousMessageEntry { val messageId = buffer.readVarInt() val signature = if (messageId == 0) buffer.readBytes(256) else null return PreviousMessageEntry(messageId, signature) @@ -69,8 +74,8 @@ public data class ClientboundPlayerChatMessagePacket( } internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerChatMessagePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerChatMessagePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerChatMessagePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerChatMessagePacket { val globalIndex = buffer.readVarInt() val sender = buffer.readUuid() val index = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerCombatDeathPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerCombatDeathPacket.kt index fa25b03..34d6ffa 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerCombatDeathPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerCombatDeathPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundPlayerCombatDeathPacket(val playerId: Int, val message: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerCombatDeathPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerCombatDeathPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerCombatDeathPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerCombatDeathPacket { val playerId = buffer.readVarInt() val message = buffer.readNetworkNBTCompound() return ClientboundPlayerCombatDeathPacket(playerId, message) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEndCombatPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEndCombatPacket.kt index 90d16a7..fd6c73d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEndCombatPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEndCombatPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.tick.ticks import kotlin.time.Duration public data class ClientboundPlayerEndCombatPacket(val duration: Duration) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerEndCombatPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerEndCombatPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerEndCombatPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerEndCombatPacket { return ClientboundPlayerEndCombatPacket(buffer.readVarInt().ticks) // convert int to minecraft ticks } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEnterCombatPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEnterCombatPacket.kt index 8f67251..f35ec06 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEnterCombatPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerEnterCombatPacket.kt @@ -7,12 +7,13 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data object ClientboundPlayerEnterCombatPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerEnterCombatPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerEnterCombatPacket = ClientboundPlayerEnterCombatPacket + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerEnterCombatPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerEnterCombatPacket = + ClientboundPlayerEnterCombatPacket } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerInfoRemovePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerInfoRemovePacket.kt index 7feb188..a152f4c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerInfoRemovePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerInfoRemovePacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket -import cn.rtast.libmc.common.readPrefixed -import cn.rtast.libmc.common.readUuid +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readUuid import kotlin.uuid.Uuid public data class ClientboundPlayerInfoRemovePacket(val uuids: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerInfoRemovePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerInfoRemovePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerInfoRemovePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerInfoRemovePacket { return ClientboundPlayerInfoRemovePacket(buffer.readPrefixed { readUuid() }) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerLookAtPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerLookAtPacket.kt index ce85831..adffa1a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerLookAtPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerLookAtPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d import cn.rtast.libmc.protocol.protocol.game.player.AnchorPoint @@ -26,8 +26,8 @@ public data class ClientboundPlayerLookAtPacket( ) internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerLookAtPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerLookAtPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerLookAtPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerLookAtPacket { val fromAnchor = AnchorPoint.fromID(buffer.readVarInt()) val targetPosition = buffer.readVec3d()!! val isEntity = buffer.readBoolean() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerRotationPacket.kt index f3c3f1b..2082d10 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundPlayerRotationPacket.kt @@ -7,9 +7,9 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data class ClientboundPlayerRotationPacket( val yaw: Float, @@ -18,8 +18,8 @@ public data class ClientboundPlayerRotationPacket( val relativePitch: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPlayerRotationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPlayerRotationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPlayerRotationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPlayerRotationPacket { val yaw = buffer.readFloat() val relativeYaw = buffer.readBoolean() val pitch = buffer.readFloat() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundProjectilePowerPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundProjectilePowerPacket.kt index a39e6e7..33b5e47 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundProjectilePowerPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundProjectilePowerPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundProjectilePowerPacket(val entityId: Int, val power: Double) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundProjectilePowerPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundProjectilePowerPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundProjectilePowerPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundProjectilePowerPacket { val entityId = buffer.readVarInt() val power = buffer.readDouble() return ClientboundProjectilePowerPacket(entityId, power) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntitiesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntitiesPacket.kt index 3b8023b..f711b21 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntitiesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntitiesPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readPrefixed -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundRemoveEntitiesPacket(val entityIds: List): MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundRemoveEntitiesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundRemoveEntitiesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundRemoveEntitiesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundRemoveEntitiesPacket { return ClientboundRemoveEntitiesPacket(buffer.readPrefixed { readVarInt() }) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntityEffectPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntityEffectPacket.kt index 4f22d36..af2f2ff 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntityEffectPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRemoveEntityEffectPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundRemoveEntityEffectPacket(val entityId: Int, val effectId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundRemoveEntityEffectPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundRemoveEntityEffectPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundRemoveEntityEffectPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundRemoveEntityEffectPacket { val entityId = buffer.readVarInt() val effectId = buffer.readVarInt() return ClientboundRemoveEntityEffectPacket(entityId, effectId) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundResetScorePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundResetScorePacket.kt index 2ffbdab..dc6591c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundResetScorePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundResetScorePacket.kt @@ -7,13 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* 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.readOptional +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.stream.BytesBuffer public data class ClientboundResetScorePacket(val entityName: String, val objectiveName: String?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundResetScorePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundResetScorePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundResetScorePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundResetScorePacket { val entityName = buffer.readMcString() val objectiveName = buffer.readPrefixed { readOptional { readMcString() } }.first() // ? return ClientboundResetScorePacket(entityName, objectiveName) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRespawnPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRespawnPacket.kt index ba0a395..a0956d4 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRespawnPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundRespawnPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readOptional -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readOptional +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.GameMode import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.block.BlockPos @@ -35,8 +35,8 @@ public data class ClientboundRespawnPacket( val dataKept: RespawnDataToKeep, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundRespawnPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundRespawnPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundRespawnPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundRespawnPacket { val dimensionType = buffer.readVarInt() val dimensionName = buffer.readIdentifier() val hashedSeed = buffer.readLong() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSelectAdvancementsTabPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSelectAdvancementsTabPacket.kt index fd0c4b4..db16aa9 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSelectAdvancementsTabPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSelectAdvancementsTabPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readOptional +import cn.rtast.libmc.common.primitives.readOptional import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier public data class ClientboundSelectAdvancementsTabPacket(val tabId: Identifier?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSelectAdvancementsTabPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSelectAdvancementsTabPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSelectAdvancementsTabPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSelectAdvancementsTabPacket { return ClientboundSelectAdvancementsTabPacket(buffer.readOptional { readIdentifier() }) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundServerDataPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundServerDataPacket.kt index c0c390c..ffafbcd 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundServerDataPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundServerDataPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readOptional -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readOptional +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundServerDataPacket(val motd: NBTCompound, val icon: ByteArray?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundServerDataPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundServerDataPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundServerDataPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundServerDataPacket { val motd = buffer.readNetworkNBTCompound() val icon = buffer.readOptional { val length = readVarInt(); readBytes(length) } return ClientboundServerDataPacket(motd, icon) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetActionBarTextPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetActionBarTextPacket.kt index ffb6bd7..3853e64 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetActionBarTextPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetActionBarTextPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundSetActionBarTextPacket(val text: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetActionBarTextPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetActionBarTextPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetActionBarTextPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetActionBarTextPacket { return ClientboundSetActionBarTextPacket(buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderCenterPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderCenterPacket.kt index 8c40c2f..607fe7a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderCenterPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderCenterPacket.kt @@ -7,14 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundSetBorderCenterPacket(val x: Double, val z: Double) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetBorderCenterPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetBorderCenterPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetBorderCenterPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetBorderCenterPacket { val x = buffer.readDouble() val z = buffer.readDouble() return ClientboundSetBorderCenterPacket(x, z) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderLeapSizePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderLeapSizePacket.kt index aa86d3a..891aec7 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderLeapSizePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderLeapSizePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarLong +import cn.rtast.libmc.common.primitives.readVarLong public data class ClientboundSetBorderLeapSizePacket( val oldDiameter: Double, @@ -18,8 +18,8 @@ public data class ClientboundSetBorderLeapSizePacket( val speed: Long, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetBorderLeapSizePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetBorderLeapSizePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetBorderLeapSizePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetBorderLeapSizePacket { val oldDiameter = buffer.readDouble() val newDiameter = buffer.readDouble() val speed = buffer.readVarLong() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderSizePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderSizePacket.kt index 754f799..fea04ff 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderSizePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderSizePacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundSetBorderSizePacket( @@ -18,8 +18,8 @@ public data class ClientboundSetBorderSizePacket( val diameter: Double, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetBorderSizePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetBorderSizePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetBorderSizePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetBorderSizePacket { return ClientboundSetBorderSizePacket(buffer.readDouble()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDelayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDelayPacket.kt index 80b823e..4d6e183 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDelayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDelayPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetBorderWarningDelayPacket( /** @@ -19,8 +19,8 @@ public data class ClientboundSetBorderWarningDelayPacket( val warningTime: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetBorderWarningDelayPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetBorderWarningDelayPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetBorderWarningDelayPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetBorderWarningDelayPacket { return ClientboundSetBorderWarningDelayPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDistancePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDistancePacket.kt index 293deee..b048e35 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDistancePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetBorderWarningDistancePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetBorderWarningDistancePacket( /** @@ -19,8 +19,8 @@ public data class ClientboundSetBorderWarningDistancePacket( val warningBlocks: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetBorderWarningDistancePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetBorderWarningDistancePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetBorderWarningDistancePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetBorderWarningDistancePacket { return ClientboundSetBorderWarningDistancePacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCameraPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCameraPacket.kt index 3c195c0..3a9b151 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCameraPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCameraPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetCameraPacket(val cameraId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetCameraPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetCameraPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetCameraPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetCameraPacket { return ClientboundSetCameraPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCarriedItemPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCarriedItemPacket.kt index 68c0d33..6ce2de5 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCarriedItemPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCarriedItemPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetCarriedItemPacket(val slot: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetCarriedItemPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetCarriedItemPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetCarriedItemPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetCarriedItemPacket { return ClientboundSetCarriedItemPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCenterChunkPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCenterChunkPacket.kt index 209c560..3d8cb80 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCenterChunkPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetCenterChunkPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetCenterChunkPacket(val chunkX: Int, val chunkZ: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetCenterChunkPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetCenterChunkPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetCenterChunkPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetCenterChunkPacket { val chunkX = buffer.readVarInt() val chunkZ = buffer.readVarInt() return ClientboundSetCenterChunkPacket(chunkX, chunkZ) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDefaultSpawnPositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDefaultSpawnPositionPacket.kt index 557aa16..87e3602 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDefaultSpawnPositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDefaultSpawnPositionPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.block.BlockPos @@ -22,8 +22,8 @@ public data class ClientboundSetDefaultSpawnPositionPacket( val pitch: Float, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetDefaultSpawnPositionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetDefaultSpawnPositionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetDefaultSpawnPositionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetDefaultSpawnPositionPacket { val dimensionName = buffer.readIdentifier() val location = buffer.readBlockPos() val yaw = buffer.readFloat() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDisplayObjectivePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDisplayObjectivePacket.kt index 0fa973f..00efc13 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDisplayObjectivePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetDisplayObjectivePacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readMcString -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readMcString +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.scoreboard.ObjectiveDisplayPosition public data class ClientboundSetDisplayObjectivePacket(val position: ObjectiveDisplayPosition, val scoreName: String) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetDisplayObjectivePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetDisplayObjectivePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetDisplayObjectivePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetDisplayObjectivePacket { val position = ObjectiveDisplayPosition.fromID(buffer.readVarInt()) val scoreName = buffer.readMcString() return ClientboundSetDisplayObjectivePacket(position, scoreName) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetEntityVelocityPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetEntityVelocityPacket.kt index 4ebb69a..8926b81 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetEntityVelocityPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetEntityVelocityPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.LpVec3 import cn.rtast.libmc.protocol.protocol.game.math.readLpVec3 public data class ClientboundSetEntityVelocityPacket(val entityId: Int, val velocity: LpVec3) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetEntityVelocityPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetEntityVelocityPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetEntityVelocityPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetEntityVelocityPacket { val entityId = buffer.readVarInt() val velocity = buffer.readLpVec3() return ClientboundSetEntityVelocityPacket(entityId, velocity) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetExperiencePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetExperiencePacket.kt index 0a45fcb..658a4d4 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetExperiencePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetExperiencePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetExperiencePacket( /** @@ -21,8 +21,8 @@ public data class ClientboundSetExperiencePacket( val totalExperience: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetExperiencePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetExperiencePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetExperiencePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetExperiencePacket { val experienceBar = buffer.readFloat() val level = buffer.readVarInt() val totalExperience = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHeadRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHeadRotationPacket.kt index 3749973..5791c70 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHeadRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHeadRotationPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Angle import cn.rtast.libmc.protocol.protocol.game.math.readAngle public data class ClientboundSetHeadRotationPacket(val entityId: Int, val headYaw: Angle) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetHeadRotationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetHeadRotationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetHeadRotationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetHeadRotationPacket { val entityId = buffer.readVarInt() val headYaw = buffer.readAngle() return ClientboundSetHeadRotationPacket(entityId, headYaw) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHealthPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHealthPacket.kt index 7e54937..3cc5d6c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHealthPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetHealthPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetHealthPacket( /** @@ -27,8 +27,8 @@ public data class ClientboundSetHealthPacket( val foodSaturation: Float, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetHealthPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetHealthPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetHealthPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetHealthPacket { val health = buffer.readFloat() val food = buffer.readVarInt() val foodSaturation = buffer.readFloat() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetPassengersPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetPassengersPacket.kt index 2be6f22..a0c0b54 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetPassengersPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetPassengersPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readPrefixed -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetPassengersPacket(val entityId: Int, val passengersId: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetPassengersPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetPassengersPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetPassengersPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetPassengersPacket { val entityId = buffer.readVarInt() val passengers = buffer.readPrefixed { readVarInt() } return ClientboundSetPassengersPacket(entityId, passengers) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetRenderDistancePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetRenderDistancePacket.kt index 7313586..2867b1e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetRenderDistancePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetRenderDistancePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetRenderDistancePacket( /** @@ -19,8 +19,8 @@ public data class ClientboundSetRenderDistancePacket( val viewDistance: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetRenderDistancePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetRenderDistancePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetRenderDistancePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetRenderDistancePacket { return ClientboundSetRenderDistancePacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSimulationDistancePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSimulationDistancePacket.kt index 015b93d..f1552b9 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSimulationDistancePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSimulationDistancePacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundSetSimulationDistancePacket(val distance: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetSimulationDistancePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetSimulationDistancePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetSimulationDistancePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetSimulationDistancePacket { return ClientboundSetSimulationDistancePacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSubtitleTextPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSubtitleTextPacket.kt index 0b94db6..ac6ba79 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSubtitleTextPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetSubtitleTextPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundSetSubtitleTextPacket(val subTitleText: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetSubtitleTextPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetSubtitleTextPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetSubtitleTextPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetSubtitleTextPacket { return ClientboundSetSubtitleTextPacket(buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTabListHeaderAndFooterPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTabListHeaderAndFooterPacket.kt index 09da542..238307a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTabListHeaderAndFooterPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTabListHeaderAndFooterPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound @@ -16,8 +16,8 @@ import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundSetTabListHeaderAndFooterPacket(val header: NBTCompound, val footer: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetTabListHeaderAndFooterPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetTabListHeaderAndFooterPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetTabListHeaderAndFooterPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetTabListHeaderAndFooterPacket { val header = buffer.readNetworkNBTCompound() val footer = buffer.readNetworkNBTCompound() return ClientboundSetTabListHeaderAndFooterPacket(header, footer) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTickingStatePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTickingStatePacket.kt index 96eab69..46c6618 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTickingStatePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTickingStatePacket.kt @@ -7,14 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundSetTickingStatePacket(val tickRate: Float, val isFrozen: Boolean) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetTickingStatePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetTickingStatePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetTickingStatePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetTickingStatePacket { val tickRate = buffer.readFloat() val isFrozen = buffer.readBoolean() return ClientboundSetTickingStatePacket(tickRate, isFrozen) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTimePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTimePacket.kt index 834ab92..de953ae 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTimePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTimePacket.kt @@ -7,14 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.primitives.readVarLong +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.protocol.protocol.game.world.WorldClockData public data class ClientboundSetTimePacket(val worldAge: Long, val clocks: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetTimePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetTimePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetTimePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetTimePacket { val age = buffer.readLong() val clocks = buffer.readPrefixed { WorldClockData(readVarInt(), readVarLong(), readFloat(), readFloat()) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleAnimationTimesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleAnimationTimesPacket.kt index b556f3c..8ac5f5c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleAnimationTimesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleAnimationTimesPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundSetTitleAnimationTimesPacket(val fadeIn: Int, val stay: Int, val fadeOut: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetTitleAnimationTimesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetTitleAnimationTimesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetTitleAnimationTimesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetTitleAnimationTimesPacket { val fadeIn = buffer.readInt() val stay = buffer.readInt() val fadeOut = buffer.readInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleTextPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleTextPacket.kt index 510ad09..ecd558e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleTextPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSetTitleTextPacket.kt @@ -7,16 +7,16 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundSetTitleTextPacket(val text: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSetTitleTextPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSetTitleTextPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSetTitleTextPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSetTitleTextPacket { return ClientboundSetTitleTextPacket(buffer.readNetworkNBTCompound()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundShowDialogPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundShowDialogPacket.kt index 079a0e8..950837e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundShowDialogPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundShowDialogPacket.kt @@ -7,17 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.IdOrX -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readIdOrX +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.IdOrX +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readIdOrX import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound -public data class ClientboundShowDialogPacket(val dialog: IdOrX) : ClientboundPlayPacket { +public data class ClientboundShowDialogPacket(val dialog: IdOrX) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundShowDialogPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundShowDialogPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundShowDialogPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundShowDialogPacket { return ClientboundShowDialogPacket(buffer.readIdOrX { this.readNetworkNBTCompound() }) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSoundEffectPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSoundEffectPacket.kt index cdb6935..16a31c7 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSoundEffectPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSoundEffectPacket.kt @@ -7,8 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.IdOrX +import cn.rtast.libmc.common.primitives.readIdOrX +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.protocol.protocol.game.sound.SoundCategory import cn.rtast.libmc.protocol.protocol.game.sound.SoundEvent import cn.rtast.libmc.protocol.protocol.game.sound.readSoundEvent @@ -24,8 +28,8 @@ public data class ClientboundSoundEffectPacket( val seed: Long, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSoundEffectPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSoundEffectPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSoundEffectPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSoundEffectPacket { val soundEvent = buffer.readIdOrX { readSoundEvent() } val category = SoundCategory.fromID(buffer.readVarInt()) val effectPositionX = buffer.readInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSpawnEntityPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSpawnEntityPacket.kt index 381be9f..0818318 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSpawnEntityPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSpawnEntityPacket.kt @@ -7,10 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readUuid -import cn.rtast.libmc.common.readVarInt +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.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Angle import cn.rtast.libmc.protocol.protocol.game.math.LpVec3 import cn.rtast.libmc.protocol.protocol.game.math.readAngle @@ -32,10 +33,10 @@ public data class ClientboundSpawnEntityPacket( val yaw: Angle, val headYaw: Angle, val data: Int, -) : ClientboundPlayPacket { +) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSpawnEntityPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSpawnEntityPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSpawnEntityPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSpawnEntityPacket { val entityId = buffer.readVarInt() val entityUuid = buffer.readUuid() val type = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStartConfigurationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStartConfigurationPacket.kt index 846ff4c..6a44bb5 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStartConfigurationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStartConfigurationPacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data object ClientboundStartConfigurationPacket : ClientboundPlayPacket, +public data object ClientboundStartConfigurationPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundStartConfigurationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundStartConfigurationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundStartConfigurationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundStartConfigurationPacket { return ClientboundStartConfigurationPacket } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStepTickPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStepTickPacket.kt index 29d6ab8..a7dc4f1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStepTickPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStepTickPacket.kt @@ -7,15 +7,15 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundStepTickPacket(val tickSteps: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundStepTickPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundStepTickPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundStepTickPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundStepTickPacket { return ClientboundStepTickPacket(buffer.readVarInt()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStopSoundPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStopSoundPacket.kt index d866ce3..7b17b80 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStopSoundPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundStopSoundPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.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.sound.SoundCategory @@ -24,8 +24,8 @@ public data class ClientboundStopSoundPacket( private const val MASK_HAS_SOURCE = 0x01 private const val MASK_HAS_SOUND = 0x02 - override fun encode(buffer: BytesBuffer, value: ClientboundStopSoundPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundStopSoundPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundStopSoundPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundStopSoundPacket { val flags = buffer.readByte() val category = if ((flags.toInt() and MASK_HAS_SOURCE) != 0) SoundCategory.fromID(buffer.readVarInt()) else null diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizePlayerPositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizePlayerPositionPacket.kt index 4eab1d1..f9121dd 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizePlayerPositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizePlayerPositionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d import cn.rtast.libmc.protocol.protocol.game.player.TeleportFlags @@ -24,8 +24,8 @@ public data class ClientboundSynchronizePlayerPositionPacket( val flags: TeleportFlags, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSynchronizePlayerPositionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSynchronizePlayerPositionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSynchronizePlayerPositionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSynchronizePlayerPositionPacket { val teleportId = buffer.readVarInt() val position = buffer.readVec3d()!! val velocity = buffer.readVec3d()!! diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizeVehiclePositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizeVehiclePositionPacket.kt index ad26138..da489cf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizeVehiclePositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSynchronizeVehiclePositionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d import cn.rtast.libmc.protocol.protocol.game.player.TeleportFlags @@ -25,8 +25,8 @@ public data class ClientboundSynchronizeVehiclePositionPacket( val onGround: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSynchronizeVehiclePositionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSynchronizeVehiclePositionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSynchronizeVehiclePositionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSynchronizeVehiclePositionPacket { val entityId = buffer.readVarInt() val position = buffer.readVec3d()!! val velocityPosition = buffer.readVec3d()!! diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSystemChatMessagePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSystemChatMessagePacket.kt index 3c54f1c..1fae278 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSystemChatMessagePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundSystemChatMessagePacket.kt @@ -7,16 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundSystemChatMessagePacket(val content: NBTCompound, val overlay: Boolean) : - ClientboundPlayPacket { + MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundSystemChatMessagePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundSystemChatMessagePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundSystemChatMessagePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundSystemChatMessagePacket { val content = buffer.readNetworkNBTCompound() val overlay = buffer.readBoolean() return ClientboundSystemChatMessagePacket(content, overlay) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTagQueryResponsePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTagQueryResponsePacket.kt index fd9d879..70ac415 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTagQueryResponsePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTagQueryResponsePacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound public data class ClientboundTagQueryResponsePacket(val transactionId: Int, val nbt: NBTCompound) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundTagQueryResponsePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundTagQueryResponsePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundTagQueryResponsePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundTagQueryResponsePacket { val transactionId = buffer.readVarInt() val nbt = buffer.readNetworkNBTCompound() return ClientboundTagQueryResponsePacket(transactionId, nbt) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTeleportEntityPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTeleportEntityPacket.kt index 0e57040..16ccde8 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTeleportEntityPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTeleportEntityPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readVec3d @@ -29,8 +29,8 @@ public data class ClientboundTeleportEntityPacket( val onGround: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundTeleportEntityPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundTeleportEntityPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundTeleportEntityPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundTeleportEntityPacket { val entityId = buffer.readVarInt() val position = buffer.readVec3d()!! val velocityPosition = buffer.readVec3d()!! diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestHighlightPositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestHighlightPositionPacket.kt index 5c86c29..8ad0fc0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestHighlightPositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestHighlightPositionPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos @@ -16,8 +16,8 @@ import cn.rtast.libmc.protocol.protocol.game.block.readBlockPos public data class ClientboundTestHighlightPositionPacket(val absolute: BlockPos, val relative: BlockPos) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundTestHighlightPositionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundTestHighlightPositionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundTestHighlightPositionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundTestHighlightPositionPacket { val abs = buffer.readBlockPos() val rel = buffer.readBlockPos() return ClientboundTestHighlightPositionPacket(abs, rel) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestInstanceBlockStatusPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestInstanceBlockStatusPacket.kt index 697f335..0c9b72e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestInstanceBlockStatusPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundTestInstanceBlockStatusPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readOptional +import cn.rtast.libmc.common.primitives.readOptional import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound @@ -22,8 +22,8 @@ public data class ClientboundTestInstanceBlockStatusPacket( val sizeZ: Double?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundTestInstanceBlockStatusPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundTestInstanceBlockStatusPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundTestInstanceBlockStatusPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundTestInstanceBlockStatusPacket { val status = buffer.readNetworkNBTCompound() val hasSize = buffer.readBoolean() val sizeX = buffer.readOptional { readDouble() } // ? diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUnloadChunkPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUnloadChunkPacket.kt index 8e57ea1..28c3442 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUnloadChunkPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUnloadChunkPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ClientboundUnloadChunkPacket( @@ -22,8 +22,8 @@ public data class ClientboundUnloadChunkPacket( val chunkX: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUnloadChunkPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUnloadChunkPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUnloadChunkPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUnloadChunkPacket { val z = buffer.readInt() val x = buffer.readInt() return ClientboundUnloadChunkPacket(z, x) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateAttributesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateAttributesPacket.kt index 2dd9dac..c82533f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateAttributesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateAttributesPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readPrefixed -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.entity.attributes.AttributeModifierData import cn.rtast.libmc.protocol.protocol.game.entity.attributes.AttributeModifierOperation import cn.rtast.libmc.protocol.protocol.game.entity.attributes.EntityAttributeProperty @@ -22,8 +22,8 @@ public data class ClientboundUpdateAttributesPacket( val properties: List, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateAttributesPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateAttributesPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateAttributesPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateAttributesPacket { val entityId = buffer.readVarInt() val properties = buffer.readPrefixed { val attributeId = readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionAndRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionAndRotationPacket.kt index 777306e..5ba67bc 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionAndRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionAndRotationPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Angle import cn.rtast.libmc.protocol.protocol.game.math.readAngle @@ -24,8 +24,8 @@ public data class ClientboundUpdateEntityPositionAndRotationPacket( val onGround: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityPositionAndRotationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateEntityPositionAndRotationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityPositionAndRotationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateEntityPositionAndRotationPacket { val entityId = buffer.readVarInt() val x = buffer.readShort() val y = buffer.readShort() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionPacket.kt index 2362b0a..475297d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityPositionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt public data class ClientboundUpdateEntityPositionPacket( val entityId: Int, @@ -20,8 +20,8 @@ public data class ClientboundUpdateEntityPositionPacket( val onGround: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityPositionPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateEntityPositionPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityPositionPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateEntityPositionPacket { val entityId = buffer.readVarInt() val x = buffer.readShort() val y = buffer.readShort() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityRotationPacket.kt index 0c6c167..b3f42d1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateEntityRotationPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readVarInt +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.protocol.protocol.game.math.Angle import cn.rtast.libmc.protocol.protocol.game.math.readAngle @@ -21,8 +21,8 @@ public data class ClientboundUpdateEntityRotationPacket( val onGround: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityRotationPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateEntityRotationPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateEntityRotationPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateEntityRotationPacket { val entityId = buffer.readVarInt() val yaw = buffer.readAngle() val pitch = buffer.readAngle() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateObjectivePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateObjectivePacket.kt index c4773bb..91165ee 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateObjectivePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateObjectivePacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readMcString -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.primitives.readMcString +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTTag import cn.rtast.libmc.protocol.protocol.game.scoreboard.ObjectivePayload import cn.rtast.libmc.protocol.protocol.game.scoreboard.ObjectiveRenderType @@ -24,8 +24,8 @@ public data class ClientboundUpdateObjectivePacket( val payload: ObjectivePayload?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateObjectivePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateObjectivePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateObjectivePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateObjectivePacket { val objectiveName = buffer.readMcString() val mode = buffer.readByte() val payload = when (mode.toInt()) { diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateScorePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateScorePacket.kt index c5104ae..e2ca815 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateScorePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateScorePacket.kt @@ -7,8 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.* 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.readOptional +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.nbt.NBTTag import cn.rtast.libmc.protocol.protocol.game.scoreboard.ScoreNumberFormat @@ -22,8 +26,8 @@ public data class ClientboundUpdateScorePacket( val numberFormat: ScoreNumberFormat?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateScorePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateScorePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateScorePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateScorePacket { val entityName = buffer.readMcString() val objectiveName = buffer.readMcString() val value = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateSectionBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateSectionBlockPacket.kt index 9f02014..8de161e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateSectionBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/clientbound/ClientboundUpdateSectionBlockPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.readPrefixed -import cn.rtast.libmc.common.readVarLong +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarLong import cn.rtast.libmc.protocol.protocol.game.chunk.BlockUpdateEntry import cn.rtast.libmc.protocol.protocol.game.chunk.ChunkSectionPos @@ -20,8 +20,8 @@ public data class ClientboundUpdateSectionBlockPacket( val blockUpdates: List, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundUpdateSectionBlockPacket) {} - override fun decode(buffer: BytesBuffer): ClientboundUpdateSectionBlockPacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundUpdateSectionBlockPacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundUpdateSectionBlockPacket { val rawSectionPos = buffer.readLong() val sectionPos = ChunkSectionPos.fromRaw(rawSectionPos) val blockUpdates = buffer.readPrefixed { diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcceptTeleportationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcceptTeleportationPacket.kt index 318b54c..82b7f7d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcceptTeleportationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcceptTeleportationPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundAcceptTeleportationPacket(val teleportId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundAcceptTeleportationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundAcceptTeleportationPacket) { buffer.writeVarInt(value.teleportId) } - override fun decode(buffer: BytesBuffer): ServerboundAcceptTeleportationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundAcceptTeleportationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcknowledgeChatMessagePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcknowledgeChatMessagePacket.kt index 68e4480..b40bd3a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcknowledgeChatMessagePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAcknowledgeChatMessagePacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundAcknowledgeChatMessagePacket(val messageCount: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundAcknowledgeChatMessagePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundAcknowledgeChatMessagePacket) { buffer.writeVarInt(value.messageCount) } - override fun decode(buffer: BytesBuffer): ServerboundAcknowledgeChatMessagePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundAcknowledgeChatMessagePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAttackActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAttackActionPacket.kt index 152d337..004b62a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAttackActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundAttackActionPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundAttackActionPacket(val entityId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundAttackActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundAttackActionPacket) { buffer.writeVarInt(value.entityId) } - override fun decode(buffer: BytesBuffer): ServerboundAttackActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundAttackActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundBundleItemSelectedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundBundleItemSelectedPacket.kt index 6cd16ec..fed6f8b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundBundleItemSelectedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundBundleItemSelectedPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundBundleItemSelectedPacket(val slotOfBundle: Int, val slotInBundle: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundBundleItemSelectedPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundBundleItemSelectedPacket) { buffer.writeVarInt(value.slotOfBundle) buffer.writeVarInt(value.slotInBundle) } - override fun decode(buffer: BytesBuffer): ServerboundBundleItemSelectedPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundBundleItemSelectedPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeDifficultyPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeDifficultyPacket.kt index ab2a58a..f889560 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeDifficultyPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeDifficultyPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.registry.GameDifficulty public data class ServerboundChangeDifficultyPacket(val newDifficulty: GameDifficulty) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundChangeDifficultyPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundChangeDifficultyPacket) { buffer.writeByte(value.newDifficulty.id) } - override fun decode(buffer: BytesBuffer): ServerboundChangeDifficultyPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundChangeDifficultyPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeGameModePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeGameModePacket.kt index 6a49399..c7007cc 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeGameModePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChangeGameModePacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.GameMode public data class ServerboundChangeGameModePacket(val gameMode: GameMode) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundChangeGameModePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundChangeGameModePacket) { require(value.gameMode != GameMode.Unknown && value.gameMode != GameMode.Undefined) buffer.writeVarInt(value.gameMode.id.toInt()) } - override fun decode(buffer: BytesBuffer): ServerboundChangeGameModePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundChangeGameModePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatCommandPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatCommandPacket.kt index 0d33882..8dd9d84 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatCommandPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatCommandPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString +import cn.rtast.libmc.common.primitives.writeMcString public data class ServerboundChatCommandPacket(val command: String) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundChatCommandPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundChatCommandPacket) { buffer.writeMcString(value.command.removePrefix("/")) } - override fun decode(buffer: BytesBuffer): ServerboundChatCommandPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundChatCommandPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatMessagePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatMessagePacket.kt index 695e034..b50e98f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatMessagePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChatMessagePacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundChatMessagePacket( val message: String, @@ -23,7 +23,7 @@ public data class ServerboundChatMessagePacket( val checksum: Byte, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundChatMessagePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundChatMessagePacket) { buffer.writeMcString(value.message) buffer.writeLong(value.timestamp) buffer.writeLong(value.salt) @@ -35,7 +35,7 @@ public data class ServerboundChatMessagePacket( buffer.writeByte(value.checksum) } - override fun decode(buffer: BytesBuffer): ServerboundChatMessagePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundChatMessagePacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChunkBatchReceivedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChunkBatchReceivedPacket.kt index 9605bf5..f413ebb 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChunkBatchReceivedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundChunkBatchReceivedPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundChunkBatchReceivedPacket(val chunksPerTick: Float) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundChunkBatchReceivedPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundChunkBatchReceivedPacket) { buffer.writeFloat(value.chunksPerTick) } - override fun decode(buffer: BytesBuffer): ServerboundChunkBatchReceivedPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundChunkBatchReceivedPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientActionPacket.kt index f8ea2a5..bd28321 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientActionPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.registry.ClientAction public data class ServerboundClientActionPacket(val action: ClientAction) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundClientActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundClientActionPacket) { buffer.writeVarInt(value.action.actionID) } - override fun decode(buffer: BytesBuffer): ServerboundClientActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundClientActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientCommandPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientCommandPacket.kt index 5cb1e46..c01b2e3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientCommandPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientCommandPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.player.PlayerActionStatus public data class ServerboundClientCommandPacket(val action: PlayerActionStatus) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundClientCommandPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundClientCommandPacket) { buffer.writeVarInt(value.action.id) } - override fun decode(buffer: BytesBuffer): ServerboundClientCommandPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundClientCommandPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientInformationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientInformationPacket.kt index 672112a..07ee2b5 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientInformationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientInformationPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.ChatMode import cn.rtast.libmc.protocol.protocol.game.player.MainHand import cn.rtast.libmc.protocol.protocol.game.player.skin.ParticleStatus @@ -49,7 +49,7 @@ public data class ServerboundClientInformationPacket( val particleStatus: ParticleStatus, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundClientInformationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundClientInformationPacket) { buffer.writeMcString(value.locale) buffer.writeByte(value.viewDistance.toByte()) buffer.writeVarInt(value.chatMode.id) @@ -61,7 +61,7 @@ public data class ServerboundClientInformationPacket( buffer.writeVarInt(value.particleStatus.id) } - override fun decode(buffer: BytesBuffer): ServerboundClientInformationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundClientInformationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientTickEndPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientTickEndPacket.kt index b89a7de..68788fa 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientTickEndPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundClientTickEndPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data object ServerboundClientTickEndPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundClientTickEndPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundClientTickEndPacket = throw UnsupportedOperationException() + override suspend fun encode(buffer: BytesBuffer, value: ServerboundClientTickEndPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundClientTickEndPacket = throw UnsupportedOperationException() } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCommandSuggestionRequestPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCommandSuggestionRequestPacket.kt index 0e1be9f..f049953 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCommandSuggestionRequestPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCommandSuggestionRequestPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundCommandSuggestionRequestPacket( /** @@ -24,12 +24,12 @@ public data class ServerboundCommandSuggestionRequestPacket( val text: String, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundCommandSuggestionRequestPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundCommandSuggestionRequestPacket) { buffer.writeVarInt(value.transactionId) buffer.writeMcString(value.text) } - override fun decode(buffer: BytesBuffer): ServerboundCommandSuggestionRequestPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundCommandSuggestionRequestPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundConfigurationAcknowledgedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundConfigurationAcknowledgedPacket.kt index f0c0429..afe6407 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundConfigurationAcknowledgedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundConfigurationAcknowledgedPacket.kt @@ -7,14 +7,14 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public object ServerboundConfigurationAcknowledgedPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundConfigurationAcknowledgedPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundConfigurationAcknowledgedPacket { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundConfigurationAcknowledgedPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundConfigurationAcknowledgedPacket { return ServerboundConfigurationAcknowledgedPacket } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClickButtonPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClickButtonPacket.kt index 59ae560..389a462 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClickButtonPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClickButtonPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.EnchantmentButton import cn.rtast.libmc.protocol.protocol.game.block.LecternButton @@ -19,12 +19,12 @@ public data class ServerboundContainerClickButtonPacket(val windowId: Int, val b public constructor(windowId: Int, button: LecternButton) : this(windowId, button.id) internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundContainerClickButtonPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundContainerClickButtonPacket) { buffer.writeVarInt(value.windowId) buffer.writeVarInt(value.buttonId) } - override fun decode(buffer: BytesBuffer): ServerboundContainerClickButtonPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundContainerClickButtonPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClosePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClosePacket.kt index f07614b..9514214 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClosePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundContainerClosePacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundContainerClosePacket(val windowId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundContainerClosePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundContainerClosePacket) { buffer.writeVarInt(value.windowId) } - override fun decode(buffer: BytesBuffer): ServerboundContainerClosePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundContainerClosePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomClickActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomClickActionPacket.kt index e7c60fc..eb09b83 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomClickActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomClickActionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier @@ -25,13 +25,13 @@ public data class ServerboundCustomClickActionPacket( val payload: NBTCompound, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundCustomClickActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundCustomClickActionPacket) { buffer.writeIdentifier(value.id) buffer.writeVarInt(value.size) buffer.writeNetworkNBTCompound(value.payload) } - override fun decode(buffer: BytesBuffer): ServerboundCustomClickActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundCustomClickActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomPayloadPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomPayloadPacket.kt index 296fd39..6345dba 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomPayloadPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundCustomPayloadPacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier public data class ServerboundCustomPayloadPacket(val channel: Identifier, val data: ByteArray) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundCustomPayloadPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundCustomPayloadPacket) { buffer.writeIdentifier(value.channel) buffer.writeBytes(value.data) // ? } - override fun decode(buffer: BytesBuffer): ServerboundCustomPayloadPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundCustomPayloadPacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundEditBookPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundEditBookPacket.kt index 4f9db60..11b7c57 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundEditBookPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundEditBookPacket.kt @@ -7,13 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.* 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.writePrefixedStringArray +import cn.rtast.libmc.common.primitives.writeVarInt +import cn.rtast.libmc.common.stream.BytesBuffer public data class ServerboundEditBookPacket(val slot: Int, val entries: List, val title: String?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundEditBookPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundEditBookPacket) { buffer.writeVarInt(value.slot) buffer.writePrefixedStringArray(value.entries) val hasTitle = value.title != null @@ -21,7 +25,7 @@ public data class ServerboundEditBookPacket(val slot: Int, val entries: List { - override fun encode(buffer: BytesBuffer, value: ServerboundInteractPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundInteractPacket) { buffer.writeVarInt(value.entityId) buffer.writeVarInt(value.hand.id) buffer.writeLpVec3(value.targetOffset) buffer.writeBoolean(value.isSneaking) } - override fun decode(buffer: BytesBuffer): ServerboundInteractPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundInteractPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundJigsawGeneratePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundJigsawGeneratePacket.kt index cd91e8d..7261157 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundJigsawGeneratePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundJigsawGeneratePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -23,13 +23,13 @@ public data class ServerboundJigsawGeneratePacket( val keepJigsaw: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundJigsawGeneratePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundJigsawGeneratePacket) { buffer.writeBlockPos(value.location) buffer.writeVarInt(value.levels) buffer.writeBoolean(value.keepJigsaw) } - override fun decode(buffer: BytesBuffer): ServerboundJigsawGeneratePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundJigsawGeneratePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundKeepAlivePlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundKeepAlivePlayPacket.kt index 1a2f761..6c92734 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundKeepAlivePlayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundKeepAlivePlayPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundKeepAlivePlayPacket(val id: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundKeepAlivePlayPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundKeepAlivePlayPacket) { buffer.writeLong(value.id) } - override fun decode(buffer: BytesBuffer): ServerboundKeepAlivePlayPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundKeepAlivePlayPacket = ServerboundKeepAlivePlayPacket(buffer.readLong()) } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundLockDifficultyPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundLockDifficultyPacket.kt index fbfeffb..cd610a2 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundLockDifficultyPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundLockDifficultyPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket /** @@ -18,11 +18,11 @@ import cn.rtast.libmc.common.packet.MinecraftPacket */ public data class ServerboundLockDifficultyPacket(val locked: Boolean) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundLockDifficultyPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundLockDifficultyPacket) { buffer.writeBoolean(value.locked) } - override fun decode(buffer: BytesBuffer): ServerboundLockDifficultyPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundLockDifficultyPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundMoveVehiclePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundMoveVehiclePacket.kt index f728a0a..8e8e122 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundMoveVehiclePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundMoveVehiclePacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket /** @@ -24,7 +24,7 @@ public data class ServerboundMoveVehiclePacket( // val onGround: Boolean ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundMoveVehiclePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundMoveVehiclePacket) { buffer.writeDouble(value.x) buffer.writeDouble(value.y) buffer.writeDouble(value.z) @@ -32,6 +32,6 @@ public data class ServerboundMoveVehiclePacket( buffer.writeFloat(value.pitch) } - override fun decode(buffer: BytesBuffer): ServerboundMoveVehiclePacket = throw UnsupportedOperationException() + override suspend fun decode(buffer: BytesBuffer): ServerboundMoveVehiclePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPaddleBoatPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPaddleBoatPacket.kt index 652e6f0..672ebb6 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPaddleBoatPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPaddleBoatPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket /** @@ -25,12 +25,12 @@ public data class ServerboundPaddleBoatPacket( val rightPaddleTurning: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPaddleBoatPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPaddleBoatPacket) { buffer.writeBoolean(value.leftPaddleTurning) buffer.writeBoolean(value.rightPaddleTurning) } - override fun decode(buffer: BytesBuffer): ServerboundPaddleBoatPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPaddleBoatPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromBlockPacket.kt index 96292f9..f06a311 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromBlockPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -22,12 +22,12 @@ public data class ServerboundPickItemFromBlockPacket( val includeData: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPickItemFromBlockPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPickItemFromBlockPacket) { buffer.writeBlockPos(value.location) buffer.writeBoolean(value.includeData) } - override fun decode(buffer: BytesBuffer): ServerboundPickItemFromBlockPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPickItemFromBlockPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromEntityPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromEntityPacket.kt index 46f843f..20a8284 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromEntityPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPickItemFromEntityPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundPickItemFromEntityPacket( val entityId: Int, @@ -20,12 +20,12 @@ public data class ServerboundPickItemFromEntityPacket( val includeData: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPickItemFromEntityPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPickItemFromEntityPacket) { buffer.writeVarInt(value.entityId) buffer.writeBoolean(value.includeData) } - override fun decode(buffer: BytesBuffer): ServerboundPickItemFromEntityPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPickItemFromEntityPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlaceRecipePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlaceRecipePacket.kt index adc7ed6..efb0e77 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlaceRecipePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlaceRecipePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundPlaceRecipePacket( val windowId: Int, @@ -18,13 +18,13 @@ public data class ServerboundPlaceRecipePacket( val makeAll: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPlaceRecipePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlaceRecipePacket) { buffer.writeVarInt(value.windowId) buffer.writeVarInt(value.recipeId) buffer.writeBoolean(value.makeAll) } - override fun decode(buffer: BytesBuffer): ServerboundPlaceRecipePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPlaceRecipePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerAbilitiesPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerAbilitiesPacket.kt index 9a05fee..e20be46 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerAbilitiesPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerAbilitiesPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerAbilities public data class ServerboundPlayerAbilitiesPacket(val flags: PlayerAbilities) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPlayerAbilitiesPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlayerAbilitiesPacket) { buffer.writeByte(value.flags.mask()) } - override fun decode(buffer: BytesBuffer): ServerboundPlayerAbilitiesPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPlayerAbilitiesPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerActionPacket.kt index 94c3ee9..a5355ed 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerActionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockFace import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -30,14 +30,14 @@ public data class ServerboundPlayerActionPacket( val sequence: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPlayerActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlayerActionPacket) { buffer.writeVarInt(value.status.id) buffer.writeBlockPos(value.location) buffer.writeByte(value.blockFace.id) buffer.writeVarInt(value.sequence) } - override fun decode(buffer: BytesBuffer): ServerboundPlayerActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPlayerActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerCommandPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerCommandPacket.kt index 04c7fc8..c6e2dc3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerCommandPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerCommandPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.player.PlayerCommandAction public data class ServerboundPlayerCommandPacket( @@ -23,13 +23,13 @@ public data class ServerboundPlayerCommandPacket( val jumpBoost: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPlayerCommandPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlayerCommandPacket) { buffer.writeVarInt(value.entityId) buffer.writeVarInt(value.action.id) buffer.writeVarInt(value.jumpBoost) } - override fun decode(buffer: BytesBuffer): ServerboundPlayerCommandPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPlayerCommandPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerInputPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerInputPacket.kt index 5cf4aea..24248f1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerInputPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerInputPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundPlayerInputPacket( @@ -29,7 +29,7 @@ public data class ServerboundPlayerInputPacket( private const val FLAG_SNEAK = 0x20 private const val FLAG_SPRINT = 0x40 - override fun encode(buffer: BytesBuffer, value: ServerboundPlayerInputPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlayerInputPacket) { var flags = 0 if (value.forward) flags = flags or FLAG_FORWARD if (value.backward) flags = flags or FLAG_BACKWARD @@ -41,7 +41,7 @@ public data class ServerboundPlayerInputPacket( buffer.writeByte(flags.toByte()) } - override fun decode(buffer: BytesBuffer): ServerboundPlayerInputPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPlayerInputPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerLoadedPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerLoadedPacket.kt index b297100..f0499a6 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerLoadedPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPlayerLoadedPacket.kt @@ -7,11 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data object ServerboundPlayerLoadedPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPlayerLoadedPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundPlayerLoadedPacket = throw UnsupportedOperationException() + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPlayerLoadedPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundPlayerLoadedPacket = + throw UnsupportedOperationException() } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPongPlayPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPongPlayPacket.kt index 5f148c0..3e06a6b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPongPlayPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundPongPlayPacket.kt @@ -6,17 +6,17 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundPongPlayPacket(val id: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPongPlayPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPongPlayPacket) { buffer.writeInt(value.id) } - override fun decode(buffer: BytesBuffer): ServerboundPongPlayPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPongPlayPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryBlockEntityTagPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryBlockEntityTagPacket.kt index 1c80338..f798b4e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryBlockEntityTagPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryBlockEntityTagPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockPos /** @@ -19,11 +19,11 @@ import cn.rtast.libmc.protocol.protocol.game.block.BlockPos public data class ServerboundQueryBlockEntityTagPacket(val transactionId: Int, val location: BlockPos) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundQueryBlockEntityTagPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundQueryBlockEntityTagPacket) { buffer.writeVarInt(value.transactionId) } - override fun decode(buffer: BytesBuffer): ServerboundQueryBlockEntityTagPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundQueryBlockEntityTagPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryEntityTagPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryEntityTagPacket.kt index 53baeba..8f3c04f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryEntityTagPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundQueryEntityTagPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundQueryEntityTagPacket( /** @@ -20,12 +20,12 @@ public data class ServerboundQueryEntityTagPacket( val entityId: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundQueryEntityTagPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundQueryEntityTagPacket) { buffer.writeVarInt(value.transactionId) buffer.writeVarInt(value.entityId) } - override fun decode(buffer: BytesBuffer): ServerboundQueryEntityTagPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundQueryEntityTagPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookChangeSettingsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookChangeSettingsPacket.kt index e95ece3..197c8da 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookChangeSettingsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookChangeSettingsPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.item.RecipeBookType public data class ServerboundRecipeBookChangeSettingsPacket( @@ -19,13 +19,13 @@ public data class ServerboundRecipeBookChangeSettingsPacket( val filterActive: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundRecipeBookChangeSettingsPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundRecipeBookChangeSettingsPacket) { buffer.writeVarInt(value.bookId.id) buffer.writeBoolean(value.bookOpen) buffer.writeBoolean(value.filterActive) } - override fun decode(buffer: BytesBuffer): ServerboundRecipeBookChangeSettingsPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundRecipeBookChangeSettingsPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookSeenRecipePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookSeenRecipePacket.kt index 70e576c..b53e3c3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookSeenRecipePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRecipeBookSeenRecipePacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundRecipeBookSeenRecipePacket(val recipeId: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundRecipeBookSeenRecipePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundRecipeBookSeenRecipePacket) { buffer.writeVarInt(value.recipeId) } - override fun decode(buffer: BytesBuffer): ServerboundRecipeBookSeenRecipePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundRecipeBookSeenRecipePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRenameItemPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRenameItemPacket.kt index 6ed9e83..05c62b5 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRenameItemPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundRenameItemPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString +import cn.rtast.libmc.common.primitives.writeMcString public data class ServerboundRenameItemPacket(val itemName: String) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundRenameItemPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundRenameItemPacket) { require(value.itemName.length < 50) buffer.writeMcString(value.itemName) } - override fun decode(buffer: BytesBuffer): ServerboundRenameItemPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundRenameItemPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundResourcePackResponsePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundResourcePackResponsePacket.kt index d81faa3..e72b9b1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundResourcePackResponsePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundResourcePackResponsePacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeUuid -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeUuid +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.resources.ResourcePackResult import kotlin.uuid.Uuid @@ -20,12 +20,12 @@ public data class ServerboundResourcePackResponsePacket( val result: ResourcePackResult, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundResourcePackResponsePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundResourcePackResponsePacket) { buffer.writeUuid(value.uuid) buffer.writeVarInt(value.result.id) } - override fun decode(buffer: BytesBuffer): ServerboundResourcePackResponsePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundResourcePackResponsePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSeenAdvancementsPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSeenAdvancementsPacket.kt index 7f13ec4..ec8ded1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSeenAdvancementsPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSeenAdvancementsPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.advancement.AdvancementAction import cn.rtast.libmc.protocol.protocol.game.writeIdentifier @@ -18,7 +18,7 @@ import cn.rtast.libmc.protocol.protocol.game.writeIdentifier public data class ServerboundSeenAdvancementsPacket(val action: AdvancementAction, val tabId: Identifier?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSeenAdvancementsPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSeenAdvancementsPacket) { buffer.writeVarInt(value.action.id) if (value.action == AdvancementAction.OPENED_TAB) { requireNotNull(value.tabId) { "tabId must not be null when action is OPENED_TAB" } @@ -26,7 +26,7 @@ public data class ServerboundSeenAdvancementsPacket(val action: AdvancementActio } else require(value.tabId == null) { "tabId must be null when action is CLOSED_SCREEN" } } - override fun decode(buffer: BytesBuffer): ServerboundSeenAdvancementsPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSeenAdvancementsPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSelectTradePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSelectTradePacket.kt index ffdad3c..1ee7c99 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSelectTradePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSelectTradePacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundSelectTradePacket(val selectedSlot: Int) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSelectTradePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSelectTradePacket) { buffer.writeVarInt(value.selectedSlot) } - override fun decode(buffer: BytesBuffer): ServerboundSelectTradePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSelectTradePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetBeaconPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetBeaconPacket.kt index d08cccb..39d7384 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetBeaconPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetBeaconPacket.kt @@ -7,24 +7,24 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Set_Beacon_Effect */ public data class ServerboundSetBeaconPacket(val primaryEffect: Int?, val secondaryEffect: Int?) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetBeaconPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetBeaconPacket) { buffer.writeBoolean(value.primaryEffect != null) if (value.primaryEffect != null) buffer.writeVarInt(value.primaryEffect) buffer.writeBoolean(value.secondaryEffect != null) if (value.secondaryEffect != null) buffer.writeVarInt(value.secondaryEffect) } - override fun decode(buffer: BytesBuffer): ServerboundSetBeaconPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetBeaconPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCarriedItemPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCarriedItemPacket.kt index 2e62e3d..0cb78c0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCarriedItemPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCarriedItemPacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.common.packet.MinecraftPacket public data class ServerboundSetCarriedItemPacket(val slot: Short) : MinecraftPacket { internal companion object Codec : PacketCodec { private const val MIN_SLOT: Short = 0 private const val MAX_SLOT: Short = 8 - override fun encode(buffer: BytesBuffer, value: ServerboundSetCarriedItemPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetCarriedItemPacket) { require(value.slot in MIN_SLOT..MAX_SLOT) { "Carried item slot ${value.slot} must be between $MIN_SLOT and $MAX_SLOT" } buffer.writeShort(value.slot) } - override fun decode(buffer: BytesBuffer): ServerboundSetCarriedItemPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetCarriedItemPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandBlockPacket.kt index 05d24bf..822bf48 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandBlockPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.CommandBlockMode import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -29,7 +29,7 @@ public data class ServerboundSetCommandBlockPacket( private const val FLAG_CONDITIONAL = 0x02 private const val FLAG_AUTOMATIC = 0x04 - override fun encode(buffer: BytesBuffer, value: ServerboundSetCommandBlockPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetCommandBlockPacket) { var flags = 0 if (value.trackOutput) flags = flags or FLAG_TRACK_OUTPUT if (value.conditional) flags = flags or FLAG_CONDITIONAL @@ -40,7 +40,7 @@ public data class ServerboundSetCommandBlockPacket( buffer.writeByte(flags.toByte()) } - override fun decode(buffer: BytesBuffer): ServerboundSetCommandBlockPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetCommandBlockPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandMinecartPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandMinecartPacket.kt index 4da400e..f2f635c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandMinecartPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetCommandMinecartPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundSetCommandMinecartPacket( val entityId: Int, @@ -22,13 +22,13 @@ public data class ServerboundSetCommandMinecartPacket( val trackOutput: Boolean, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetCommandMinecartPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetCommandMinecartPacket) { buffer.writeVarInt(value.entityId) buffer.writeMcString(value.command) buffer.writeBoolean(value.trackOutput) } - override fun decode(buffer: BytesBuffer): ServerboundSetCommandMinecartPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetCommandMinecartPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetGameRulePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetGameRulePacket.kt index 5c01d54..73151b3 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetGameRulePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetGameRulePacket.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writePrefixed +import cn.rtast.libmc.common.primitives.writePrefixed import cn.rtast.libmc.protocol.protocol.game.gamerule.GameRuleEntry import cn.rtast.libmc.protocol.protocol.game.gamerule.writeGameRule public data class ServerboundSetGameRulePacket(val rules: List) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetGameRulePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetGameRulePacket) { buffer.writePrefixed(value.rules) { rule -> writeGameRule(rule) } } - override fun decode(buffer: BytesBuffer): ServerboundSetGameRulePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetGameRulePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetJigsawBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetJigsawBlockPacket.kt index 71e8fb2..57d8435 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetJigsawBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetJigsawBlockPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -28,7 +28,7 @@ public data class ServerboundSetJigsawBlockPacket( val placementPriority: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetJigsawBlockPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetJigsawBlockPacket) { buffer.writeBlockPos(value.location) buffer.writeIdentifier(value.name) buffer.writeIdentifier(value.target) @@ -39,7 +39,7 @@ public data class ServerboundSetJigsawBlockPacket( buffer.writeVarInt(value.placementPriority) } - override fun decode(buffer: BytesBuffer): ServerboundSetJigsawBlockPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetJigsawBlockPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerMovementFlagPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerMovementFlagPacket.kt index 3c2f014..304d467 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerMovementFlagPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerMovementFlagPacket.kt @@ -7,18 +7,18 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerPositionFlag public data class ServerboundSetPlayerMovementFlagPacket(val flags: PlayerPositionFlag) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerMovementFlagPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerMovementFlagPacket) { buffer.writeByte(value.flags.flag) } - override fun decode(buffer: BytesBuffer): ServerboundSetPlayerMovementFlagPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetPlayerMovementFlagPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionAndRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionAndRotationPacket.kt index a9b5c1a..64a4a76 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionAndRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionAndRotationPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerPositionFlag @@ -30,7 +30,7 @@ public data class ServerboundSetPlayerPositionAndRotationPacket( val flags: PlayerPositionFlag, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerPositionAndRotationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerPositionAndRotationPacket) { buffer.writeDouble(value.x) buffer.writeDouble(value.feetY) buffer.writeDouble(value.z) @@ -39,7 +39,7 @@ public data class ServerboundSetPlayerPositionAndRotationPacket( buffer.writeByte(value.flags.flag) } - override fun decode(buffer: BytesBuffer): ServerboundSetPlayerPositionAndRotationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetPlayerPositionAndRotationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionPacket.kt index 43eeb92..19767c6 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerPositionPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerPositionFlag @@ -19,14 +19,14 @@ public data class ServerboundSetPlayerPositionPacket( val flags: PlayerPositionFlag, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerPositionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerPositionPacket) { buffer.writeDouble(value.x) buffer.writeDouble(value.feetY) buffer.writeDouble(value.z) buffer.writeByte(value.flags.flag) } - override fun decode(buffer: BytesBuffer): ServerboundSetPlayerPositionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetPlayerPositionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerRotationPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerRotationPacket.kt index 034f96f..b666833 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerRotationPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetPlayerRotationPacket.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.protocol.protocol.game.player.PlayerPositionFlag @@ -18,13 +18,13 @@ public data class ServerboundSetPlayerRotationPacket( val flags: PlayerPositionFlag, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerRotationPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetPlayerRotationPacket) { buffer.writeFloat(value.yaw) buffer.writeFloat(value.pitch) buffer.writeByte(value.flags.flag) } - override fun decode(buffer: BytesBuffer): ServerboundSetPlayerRotationPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetPlayerRotationPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetStructureBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetStructureBlockPacket.kt index 0b292c8..d602861 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetStructureBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetStructureBlockPacket.kt @@ -7,8 +7,12 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.* 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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarLong +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.protocol.protocol.game.block.* public data class ServerboundSetStructureBlockPacket( @@ -56,7 +60,7 @@ public data class ServerboundSetStructureBlockPacket( private const val FLAG_SHOW_BOUNDING_BOX = 0x04 private const val FLAG_STRICT_PLACEMENT = 0x08 - override fun encode(buffer: BytesBuffer, value: ServerboundSetStructureBlockPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetStructureBlockPacket) { require(value.offsetX in -48..48) { "offsetX must be between -48 and 48" } require(value.offsetY in -48..48) { "offsetY must be between -48 and 48" } require(value.offsetZ in -48..48) { "offsetZ must be between -48 and 48" } @@ -88,7 +92,7 @@ public data class ServerboundSetStructureBlockPacket( buffer.writeByte(flags.toByte()) } - override fun decode(buffer: BytesBuffer): ServerboundSetStructureBlockPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetStructureBlockPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetTestBlockPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetTestBlockPacket.kt index 6d9c27e..5f260d0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetTestBlockPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSetTestBlockPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.TestBlockMode import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -22,13 +22,13 @@ public data class ServerboundSetTestBlockPacket( val message: String, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSetTestBlockPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSetTestBlockPacket) { buffer.writeBlockPos(value.position) buffer.writeVarInt(value.mode.id) buffer.writeMcString(value.message) } - override fun decode(buffer: BytesBuffer): ServerboundSetTestBlockPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSetTestBlockPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignUpdatePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignUpdatePacket.kt index 6365b0f..74666e0 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignUpdatePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignUpdatePacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString +import cn.rtast.libmc.common.primitives.writeMcString import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -28,7 +28,7 @@ public data class ServerboundSignUpdatePacket( internal companion object Codec : PacketCodec { private const val MAX_LINE_LENGTH = 384 - override fun encode(buffer: BytesBuffer, value: ServerboundSignUpdatePacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSignUpdatePacket) { require(value.line1.length <= MAX_LINE_LENGTH) { "Line 1 exceeds maximum length of $MAX_LINE_LENGTH" } require(value.line2.length <= MAX_LINE_LENGTH) { "Line 2 exceeds maximum length of $MAX_LINE_LENGTH" } require(value.line3.length <= MAX_LINE_LENGTH) { "Line 3 exceeds maximum length of $MAX_LINE_LENGTH" } @@ -41,7 +41,7 @@ public data class ServerboundSignUpdatePacket( buffer.writeMcString(value.line4) } - override fun decode(buffer: BytesBuffer): ServerboundSignUpdatePacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSignUpdatePacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignedChatCommandPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignedChatCommandPacket.kt index 03160c1..e7d5b85 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignedChatCommandPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSignedChatCommandPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeMcString -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.primitives.writeMcString +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.signature.ArgumentSignature public data class ServerboundSignedChatCommandPacket( @@ -24,7 +24,7 @@ public data class ServerboundSignedChatCommandPacket( val checksum: Byte, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSignedChatCommandPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSignedChatCommandPacket) { buffer.writeMcString(value.command) buffer.writeLong(value.timestamp) buffer.writeLong(value.salt) @@ -35,7 +35,7 @@ public data class ServerboundSignedChatCommandPacket( buffer.writeByte(value.checksum) } - override fun decode(buffer: BytesBuffer): ServerboundSignedChatCommandPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSignedChatCommandPacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSpectatorActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSpectatorActionPacket.kt index 2f4df50..422eb47 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSpectatorActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSpectatorActionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt public data class ServerboundSpectatorActionPacket( /** @@ -20,11 +20,11 @@ public data class ServerboundSpectatorActionPacket( val entityId: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSpectatorActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSpectatorActionPacket) { buffer.writeVarInt(value.entityId) } - override fun decode(buffer: BytesBuffer): ServerboundSpectatorActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSpectatorActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSwingPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSwingPacket.kt index e845eb2..7399435 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSwingPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundSwingPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.player.Hand public data class ServerboundSwingPacket(val hand: Hand) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundSwingPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundSwingPacket) { buffer.writeVarInt(value.hand.id) } - override fun decode(buffer: BytesBuffer): ServerboundSwingPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundSwingPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTeleportToEntityPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTeleportToEntityPacket.kt index db1d541..e5bfc0f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTeleportToEntityPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTeleportToEntityPacket.kt @@ -7,19 +7,19 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeUuid +import cn.rtast.libmc.common.primitives.writeUuid import kotlin.uuid.Uuid public data class ServerboundTeleportToEntityPacket(val targetPlayer: Uuid) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundTeleportToEntityPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundTeleportToEntityPacket) { buffer.writeUuid(value.targetPlayer) } - override fun decode(buffer: BytesBuffer): ServerboundTeleportToEntityPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundTeleportToEntityPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTestInstanceBlockActionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTestInstanceBlockActionPacket.kt index 38bebc6..71ca5fe 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTestInstanceBlockActionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundTestInstanceBlockActionPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.block.* @@ -30,7 +30,7 @@ public data class ServerboundTestInstanceBlockActionPacket( val errorMessage: NBTCompound?, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundTestInstanceBlockActionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundTestInstanceBlockActionPacket) { buffer.writeBlockPos(value.position) buffer.writeVarInt(value.action.id) buffer.writeBoolean(value.test != null) @@ -45,7 +45,7 @@ public data class ServerboundTestInstanceBlockActionPacket( if (value.errorMessage != null) buffer.writeNetworkNBTCompound(value.errorMessage) // TODO to fix } - override fun decode(buffer: BytesBuffer): ServerboundTestInstanceBlockActionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundTestInstanceBlockActionPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUpdateChatSessionPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUpdateChatSessionPacket.kt index cc52eba..bff3d75 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUpdateChatSessionPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUpdateChatSessionPacket.kt @@ -7,11 +7,11 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writePrefixedByteArray -import cn.rtast.libmc.common.writeUuid +import cn.rtast.libmc.common.primitives.writePrefixedByteArray +import cn.rtast.libmc.common.primitives.writeUuid import kotlin.uuid.Uuid public data class ServerboundUpdateChatSessionPacket( @@ -32,14 +32,14 @@ public data class ServerboundUpdateChatSessionPacket( val keySignature: ByteArray, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundUpdateChatSessionPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundUpdateChatSessionPacket) { buffer.writeUuid(value.sessionId) buffer.writeLong(value.expiresAt) buffer.writePrefixedByteArray(value.publicKey) buffer.writePrefixedByteArray(value.keySignature) } - override fun decode(buffer: BytesBuffer): ServerboundUpdateChatSessionPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundUpdateChatSessionPacket = throw UnsupportedOperationException() } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemOnPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemOnPacket.kt index fcfa7f5..ab8bd87 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemOnPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemOnPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.block.BlockFace import cn.rtast.libmc.protocol.protocol.game.block.BlockPos import cn.rtast.libmc.protocol.protocol.game.block.writeBlockPos @@ -31,7 +31,7 @@ public data class ServerboundUseItemOnPacket( val sequence: Int, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundUseItemOnPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundUseItemOnPacket) { require(value.cursorPositionX in 0.0f..1.0f) { "cursorPositionX must be between 0.0 and 1.0" } require(value.cursorPositionY in 0.0f..1.0f) { "cursorPositionY must be between 0.0 and 1.0" } require(value.cursorPositionZ in 0.0f..1.0f) { "cursorPositionZ must be between 0.0 and 1.0" } @@ -46,7 +46,7 @@ public data class ServerboundUseItemOnPacket( buffer.writeVarInt(value.sequence) } - override fun decode(buffer: BytesBuffer): ServerboundUseItemOnPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundUseItemOnPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemPacket.kt index ffc9e64..7b88bf1 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/play/serverbound/ServerboundUseItemPacket.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.packet.play.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +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.writeVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import cn.rtast.libmc.protocol.protocol.game.player.Hand public data class ServerboundUseItemPacket( @@ -23,14 +23,14 @@ public data class ServerboundUseItemPacket( val pitch: Float, ) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundUseItemPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundUseItemPacket) { buffer.writeVarInt(value.hand.id) buffer.writeVarInt(value.sequence) buffer.writeFloat(value.yaw) buffer.writeFloat(value.pitch) } - override fun decode(buffer: BytesBuffer): ServerboundUseItemPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundUseItemPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundPongResponsePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundPongResponsePacket.kt index d62c3b0..c7684bb 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundPongResponsePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundPongResponsePacket.kt @@ -7,13 +7,14 @@ package cn.rtast.libmc.protocol.packet.status.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec -public data class ClientboundPongResponsePacket(val timestamp: Long) : ClientboundStatusPacket { +public data class ClientboundPongResponsePacket(val timestamp: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundPongResponsePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundPongResponsePacket { + override suspend fun encode(buffer: BytesBuffer, value: ClientboundPongResponsePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundPongResponsePacket { return ClientboundPongResponsePacket(buffer.readLong()) } } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusPacket.kt deleted file mode 100644 index 1d732f6..0000000 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusPacket.kt +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright © 2026 RTAkland - * Author: RTAkland - * Date: 2026/9/6 - */ - - -package cn.rtast.libmc.protocol.packet.status.clientbound - -import cn.rtast.libmc.common.packet.MinecraftPacket - -public sealed interface ClientboundStatusPacket : MinecraftPacket \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusResponsePacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusResponsePacket.kt index 07e6f94..c0b9b4f 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusResponsePacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/clientbound/ClientboundStatusResponsePacket.kt @@ -7,14 +7,15 @@ package cn.rtast.libmc.protocol.packet.status.clientbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString +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 -public data class ClientboundStatusResponsePacket(val jsonResponse: String) : ClientboundStatusPacket { +public data class ClientboundStatusResponsePacket(val jsonResponse: String) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ClientboundStatusResponsePacket) {} - override fun decode(buffer: BytesBuffer): ClientboundStatusResponsePacket = + override suspend fun encode(buffer: BytesBuffer, value: ClientboundStatusResponsePacket) {} + override suspend fun decode(buffer: BytesBuffer): ClientboundStatusResponsePacket = ClientboundStatusResponsePacket(buffer.readMcString()) } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundPingRequestPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundPingRequestPacket.kt index e2bbeb9..7dfe378 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundPingRequestPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundPingRequestPacket.kt @@ -7,17 +7,17 @@ package cn.rtast.libmc.protocol.packet.status.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data class ServerboundPingRequestPacket(val timestamp: Long) : MinecraftPacket { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundPingRequestPacket) { + override suspend fun encode(buffer: BytesBuffer, value: ServerboundPingRequestPacket) { buffer.writeLong(value.timestamp) } - override fun decode(buffer: BytesBuffer): ServerboundPingRequestPacket = + override suspend fun decode(buffer: BytesBuffer): ServerboundPingRequestPacket = throw UnsupportedOperationException() } } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundStatusRequestPacket.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundStatusRequestPacket.kt index c05b5b2..62f70ef 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundStatusRequestPacket.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/packet/status/serverbound/ServerboundStatusRequestPacket.kt @@ -7,12 +7,12 @@ package cn.rtast.libmc.protocol.packet.status.serverbound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.common.packet.MinecraftPacket +import cn.rtast.libmc.common.packet.PacketCodec public data object ServerboundStatusRequestPacket : MinecraftPacket, PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerboundStatusRequestPacket) {} - override fun decode(buffer: BytesBuffer): ServerboundStatusRequestPacket = + override suspend fun encode(buffer: BytesBuffer, value: ServerboundStatusRequestPacket) {} + override suspend fun decode(buffer: BytesBuffer): ServerboundStatusRequestPacket = throw UnsupportedOperationException() } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/Identifier.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/Identifier.kt index 76b80b1..31bd0a7 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/Identifier.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/Identifier.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.protocol.game -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.writeMcString +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 kotlin.jvm.JvmInline /** @@ -27,13 +27,13 @@ public value class Identifier internal constructor(public val raw: String) { fun of(namespace: String, path: String): Identifier = Identifier("$namespace:$path") fun of(full: String): Identifier = Identifier(full) - override fun encode(buffer: BytesBuffer, value: Identifier) { + override suspend fun encode(buffer: BytesBuffer, value: Identifier) { buffer.writeMcString(value.toString()) } - override fun decode(buffer: BytesBuffer): Identifier = Identifier(buffer.readMcString()) + override suspend fun decode(buffer: BytesBuffer): Identifier = Identifier(buffer.readMcString()) } } -internal fun BytesBuffer.readIdentifier(): Identifier = Identifier.decode(this) -internal fun BytesBuffer.writeIdentifier(identifier: Identifier) = Identifier.encode(this, identifier) \ No newline at end of file +internal suspend fun BytesBuffer.readIdentifier(): Identifier = Identifier.decode(this) +internal suspend fun BytesBuffer.writeIdentifier(identifier: Identifier) = Identifier.encode(this, identifier) \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/StatisticsEntry.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/StatisticsEntry.kt index 66f562c..30f02cf 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/StatisticsEntry.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/StatisticsEntry.kt @@ -7,23 +7,23 @@ package cn.rtast.libmc.protocol.protocol.game -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readVarInt -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.primitives.writeVarInt /** * ref: https://minecraft.wiki/w/Java_Edition_protocol/Packets#Award_Statistics */ public data class StatisticsEntry(val categoryId: Int, val statisticId: Int, val value: Int) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: StatisticsEntry) { + override suspend fun encode(buffer: BytesBuffer, value: StatisticsEntry) { buffer.writeVarInt(value.categoryId) buffer.writeVarInt(value.statisticId) buffer.writeVarInt(value.value) } - override fun decode(buffer: BytesBuffer): StatisticsEntry { + override suspend fun decode(buffer: BytesBuffer): StatisticsEntry { val categoryId = buffer.readVarInt() val statisticId = buffer.readVarInt() val value = buffer.readVarInt() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/block/BlockPos.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/block/BlockPos.kt index 5c578b6..2ce094e 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/block/BlockPos.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/block/BlockPos.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.protocol.game.block -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec /** * An integer/block position: x (-33 554 432 to 33 554 431), z (-33 554 432 to 33 554 431), y (-2048 to 2047) @@ -20,7 +20,7 @@ public data class BlockPos(val x: Int, val y: Int, val z: Int) { private const val PACKED_Y_MASK = 0xFFFL // 12 bits private const val PACKED_Z_MASK = 0x3FFFFFFL // 26 bits - override fun decode(buffer: BytesBuffer): BlockPos { + override suspend fun decode(buffer: BytesBuffer): BlockPos { val packed = buffer.readLong() val x = (packed shr 38).toInt() val y = (packed shl 52 shr 52).toInt() @@ -28,7 +28,7 @@ public data class BlockPos(val x: Int, val y: Int, val z: Int) { return BlockPos(x, y, z) } - override fun encode(buffer: BytesBuffer, value: BlockPos) { + override suspend fun encode(buffer: BytesBuffer, value: BlockPos) { val xLong = (value.x.toLong() and PACKED_X_MASK) val yLong = (value.y.toLong() and PACKED_Y_MASK) val zLong = (value.z.toLong() and PACKED_Z_MASK) @@ -37,5 +37,5 @@ public data class BlockPos(val x: Int, val y: Int, val z: Int) { } } -internal fun BytesBuffer.readBlockPos(): BlockPos = BlockPos.decode(this) -internal fun BytesBuffer.writeBlockPos(pos: BlockPos) = BlockPos.encode(this, pos) \ No newline at end of file +internal suspend fun BytesBuffer.readBlockPos(): BlockPos = BlockPos.decode(this) +internal suspend fun BytesBuffer.writeBlockPos(pos: BlockPos) = BlockPos.encode(this, pos) \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/ChatTypeDecoration.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/ChatTypeDecoration.kt index 9646e02..f2ed17a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/ChatTypeDecoration.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/ChatTypeDecoration.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.protocol.game.chat -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.readPrefixed -import cn.rtast.libmc.common.readVarInt +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.readMcString +import cn.rtast.libmc.common.primitives.readPrefixed +import cn.rtast.libmc.common.primitives.readVarInt import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound @@ -28,10 +28,9 @@ public data class ChatTypeDecoration( } } -internal fun BytesBuffer.readChatTypeDecoration(): ChatTypeDecoration { - return ChatTypeDecoration( - translationKey = this.readMcString(), - parameters = this.readPrefixed { ChatTypeDecoration.ChatTypeParameter.fromID(readVarInt()) }, - style = this.readNetworkNBTCompound() - ) +internal suspend fun BytesBuffer.readChatTypeDecoration(): ChatTypeDecoration { + val translationKey = this.readMcString() + val parameters = this.readPrefixed { ChatTypeDecoration.ChatTypeParameter.fromID(readVarInt()) } + val style = this.readNetworkNBTCompound() + return ChatTypeDecoration(translationKey, parameters, style) } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/InlineChatType.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/InlineChatType.kt index 1bf7cce..3238f2d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/InlineChatType.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chat/InlineChatType.kt @@ -7,16 +7,15 @@ package cn.rtast.libmc.protocol.protocol.game.chat -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer public data class InlineChatType( val chat: ChatTypeDecoration, val narration: ChatTypeDecoration, ) -internal fun BytesBuffer.readInlineChatType(): InlineChatType { - return InlineChatType( - chat = readChatTypeDecoration(), - narration = readChatTypeDecoration() - ) +internal suspend fun BytesBuffer.readInlineChatType(): InlineChatType { + val chat = readChatTypeDecoration() + val narration = readChatTypeDecoration() + return InlineChatType(chat, narration) } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chunk/ChunkBiomeData.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chunk/ChunkBiomeData.kt index b895a00..7b8bef7 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chunk/ChunkBiomeData.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/chunk/ChunkBiomeData.kt @@ -7,20 +7,20 @@ package cn.rtast.libmc.protocol.protocol.game.chunk -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readPrefixedByteArray -import cn.rtast.libmc.common.writePrefixedByteArray +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.readPrefixedByteArray +import cn.rtast.libmc.common.primitives.writePrefixedByteArray public data class ChunkBiomeData(val chunkZ: Int, val chunkX: Int, val data: ByteArray) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ChunkBiomeData) { + override suspend fun encode(buffer: BytesBuffer, value: ChunkBiomeData) { buffer.writeInt(value.chunkZ) buffer.writeInt(value.chunkX) buffer.writePrefixedByteArray(value.data) } - override fun decode(buffer: BytesBuffer): ChunkBiomeData { + override suspend fun decode(buffer: BytesBuffer): ChunkBiomeData { val z = buffer.readInt() val x = buffer.readInt() val data = buffer.readPrefixedByteArray() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/effect/EntityEffectFlags.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/effect/EntityEffectFlags.kt index 233210b..1a75d28 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/effect/EntityEffectFlags.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/effect/EntityEffectFlags.kt @@ -7,7 +7,7 @@ package cn.rtast.libmc.protocol.protocol.game.effect -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer public data class EntityEffectFlags( val isAmbient: Boolean = false, @@ -44,6 +44,6 @@ public data class EntityEffectFlags( } @Suppress("NOTHING_TO_INLINE") -internal inline fun BytesBuffer.readEntityEffectFlags(): EntityEffectFlags { +internal suspend inline fun BytesBuffer.readEntityEffectFlags(): EntityEffectFlags { return EntityEffectFlags.fromByte(this.readByte()) } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/entity/Minecart.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/entity/Minecart.kt index 1336b36..a19634b 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/entity/Minecart.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/entity/Minecart.kt @@ -7,7 +7,7 @@ package cn.rtast.libmc.protocol.protocol.game.entity -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.protocol.protocol.game.math.Angle import cn.rtast.libmc.protocol.protocol.game.math.Vec3d import cn.rtast.libmc.protocol.protocol.game.math.readAngle @@ -21,7 +21,7 @@ public data class MinecartStep( val weight: Float, ) -internal fun BytesBuffer.readMinecartStep(): MinecartStep { +internal suspend fun BytesBuffer.readMinecartStep(): MinecartStep { val position = readVec3d()!! val velocity = readVec3d()!! val yaw = readAngle() diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/gamerule/GameRuleEntry.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/gamerule/GameRuleEntry.kt index 75fbc0d..9e8f090 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/gamerule/GameRuleEntry.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/gamerule/GameRuleEntry.kt @@ -7,22 +7,22 @@ package cn.rtast.libmc.protocol.protocol.game.gamerule -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.writeMcString +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.readMcString +import cn.rtast.libmc.common.primitives.writeMcString import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier public data class GameRuleEntry(val name: Identifier, val value: String) -internal fun BytesBuffer.readGameRule(): GameRuleEntry { +internal suspend fun BytesBuffer.readGameRule(): GameRuleEntry { val name = readIdentifier() val value = readMcString() return GameRuleEntry(name, value) } -internal fun BytesBuffer.writeGameRule(entry: GameRuleEntry) { +internal suspend fun BytesBuffer.writeGameRule(entry: GameRuleEntry) { writeIdentifier(entry.name) writeMcString(entry.value) } \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Angle.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Angle.kt index 389c34a..ad11e70 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Angle.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Angle.kt @@ -7,7 +7,7 @@ package cn.rtast.libmc.protocol.protocol.game.math -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer import kotlin.jvm.JvmInline /** @@ -27,5 +27,5 @@ public value class Angle(public val raw: Byte) { } -internal fun BytesBuffer.readAngle(): Angle = Angle(this.readByte()) -internal fun BytesBuffer.writeAngle(value: Angle) = this.writeByte(value.raw) \ No newline at end of file +internal suspend fun BytesBuffer.readAngle(): Angle = Angle(this.readByte()) +internal suspend fun BytesBuffer.writeAngle(value: Angle) = this.writeByte(value.raw) \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/LpVec3.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/LpVec3.kt index a01e8a9..ce97535 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/LpVec3.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/LpVec3.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.protocol.game.math -import cn.rtast.libmc.common.ByteOrder -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.readVarInt -import cn.rtast.libmc.common.writeVarInt +import cn.rtast.libmc.common.stream.ByteOrder +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.readVarInt +import cn.rtast.libmc.common.primitives.writeVarInt import kotlin.math.abs import kotlin.math.ceil import kotlin.math.max @@ -39,7 +39,7 @@ public data class LpVec3( } // ref: https://minecraft.wiki/w/Java_Edition_protocol/Data_types#LpVec3 -internal fun BytesBuffer.readLpVec3(): LpVec3 { +internal suspend fun BytesBuffer.readLpVec3(): LpVec3 { val byte1 = readByte().toInt() and 0xFF if (byte1 == 0) return LpVec3.ZERO val byte2 = readByte().toInt() and 0xFF @@ -55,7 +55,7 @@ internal fun BytesBuffer.readLpVec3(): LpVec3 { } // ref: https://minecraft.wiki/w/Java_Edition_protocol/Data_types#LpVec3 -internal fun BytesBuffer.writeLpVec3(vec3: LpVec3) { +internal suspend fun BytesBuffer.writeLpVec3(vec3: LpVec3) { val maxCoordinate = max(abs(vec3.x), max(abs(vec3.y), abs(vec3.z))) if (maxCoordinate.isNaN() || maxCoordinate < 1.0 / 32766.0) { writeByte(0x00) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Vec3d.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Vec3d.kt index 5ea07e5..60921cb 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Vec3d.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/math/Vec3d.kt @@ -7,7 +7,7 @@ package cn.rtast.libmc.protocol.protocol.game.math -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer public data class Vec3d(val x: Double, val y: Double, val z: Double) { public companion object { @@ -15,7 +15,7 @@ public data class Vec3d(val x: Double, val y: Double, val z: Double) { } } -internal fun BytesBuffer.readVec3d(optional: Boolean = false): Vec3d? { +internal suspend fun BytesBuffer.readVec3d(optional: Boolean = false): Vec3d? { if (optional && !this.readBoolean()) return null val x = this.readDouble() val y = this.readDouble() @@ -23,7 +23,7 @@ internal fun BytesBuffer.readVec3d(optional: Boolean = false): Vec3d? { return Vec3d(x, y, z) } -internal fun BytesBuffer.writeVec3d(vec3d: Vec3d?, optional: Boolean = false) { +internal suspend fun BytesBuffer.writeVec3d(vec3d: Vec3d?, optional: Boolean = false) { if (optional) { this.writeBoolean(vec3d != null) if (vec3d == null) return diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/registry/RegistryEntry.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/registry/RegistryEntry.kt index 6c136a9..da78d1c 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/registry/RegistryEntry.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/registry/RegistryEntry.kt @@ -7,8 +7,8 @@ package cn.rtast.libmc.protocol.protocol.game.registry -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.packet.PacketCodec import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier @@ -27,13 +27,13 @@ public data class RegistryEntry( val data: NBTCompound?, ) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: RegistryEntry) { + override suspend fun encode(buffer: BytesBuffer, value: RegistryEntry) { buffer.writeIdentifier(value.id) buffer.writeBoolean(value.data != null) if (value.data != null) buffer.writeNetworkNBTCompound(value.data) } - override fun decode(buffer: BytesBuffer): RegistryEntry { + override suspend fun decode(buffer: BytesBuffer): RegistryEntry { val id = buffer.readIdentifier() val hasData = buffer.readBoolean() val data = if (hasData) buffer.readNetworkNBTCompound() else null diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/sound/SoundEvent.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/sound/SoundEvent.kt index b54cf02..2d2ac97 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/sound/SoundEvent.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/game/sound/SoundEvent.kt @@ -7,23 +7,23 @@ package cn.rtast.libmc.protocol.protocol.game.sound -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.readOptional -import cn.rtast.libmc.common.writeOptional +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.primitives.readOptional +import cn.rtast.libmc.common.primitives.writeOptional import cn.rtast.libmc.protocol.protocol.game.Identifier import cn.rtast.libmc.protocol.protocol.game.readIdentifier import cn.rtast.libmc.protocol.protocol.game.writeIdentifier public data class SoundEvent(val name: Identifier, val hasFixedRange: Boolean, val fixedRange: Float?) -internal fun BytesBuffer.readSoundEvent(): SoundEvent { +internal suspend fun BytesBuffer.readSoundEvent(): SoundEvent { val name = readIdentifier() val hasFixedRange = readBoolean() val fixedRange = readOptional { readFloat() } return SoundEvent(name, hasFixedRange, fixedRange) } -internal fun BytesBuffer.writeSoundEvent(event: SoundEvent) { +internal suspend fun BytesBuffer.writeSoundEvent(event: SoundEvent) { writeIdentifier(event.name) writeBoolean(event.hasFixedRange) writeOptional(event.fixedRange) { writeFloat(it) } diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/signature/ArgumentSignature.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/signature/ArgumentSignature.kt index 4e18149..ba9fe4a 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/signature/ArgumentSignature.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/signature/ArgumentSignature.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.protocol.protocol.signature -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.PacketCodec -import cn.rtast.libmc.common.readMcString -import cn.rtast.libmc.common.writeMcString +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 public data class ArgumentSignature(val name: String, val signature: ByteArray) { init { @@ -18,12 +18,12 @@ public data class ArgumentSignature(val name: String, val signature: ByteArray) } internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ArgumentSignature) { + override suspend fun encode(buffer: BytesBuffer, value: ArgumentSignature) { buffer.writeMcString(value.name) buffer.writeBytes(value.signature) } - override fun decode(buffer: BytesBuffer): ArgumentSignature { + override suspend fun decode(buffer: BytesBuffer): ArgumentSignature { val name = buffer.readMcString() val signature = buffer.readBytes(256) return ArgumentSignature(name, signature) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/util/nbt.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/util/nbt.kt index 1706739..aa38a15 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/util/nbt.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/protocol/util/nbt.kt @@ -7,14 +7,14 @@ package cn.rtast.libmc.protocol.protocol.util -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.nbt.* -internal fun BytesBuffer.readNBTCompound(): NBTCompound = +internal suspend fun BytesBuffer.readNBTCompound(): NBTCompound = this.toNBTInput().readRootCompound() -internal fun BytesBuffer.readNetworkNBTCompound(): NBTCompound = +internal suspend fun BytesBuffer.readNetworkNBTCompound(): NBTCompound = this.toNBTInput().readNetworkCompound() -internal fun BytesBuffer.writeNetworkNBTCompound(value: NBTCompound) = +internal suspend fun BytesBuffer.writeNetworkNBTCompound(value: NBTCompound) = this.toNBTOutput(NBTTag.CompoundTag(mutableMapOf("" to NBTTag.StringTag("")))).writeNetworkCompound(value) \ No newline at end of file diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/registry/report/ServerLink.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/registry/report/ServerLink.kt index 92dea49..8aff88d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/registry/report/ServerLink.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/registry/report/ServerLink.kt @@ -7,14 +7,19 @@ package cn.rtast.libmc.protocol.registry.report -import cn.rtast.libmc.common.* +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.common.primitives.writeVarInt +import cn.rtast.libmc.common.stream.BytesBuffer import cn.rtast.libmc.nbt.NBTCompound import cn.rtast.libmc.protocol.protocol.util.readNetworkNBTCompound import cn.rtast.libmc.protocol.protocol.util.writeNetworkNBTCompound public data class ServerLink(val label: ServerLinkLabel, val url: String) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: ServerLink) { + override suspend fun encode(buffer: BytesBuffer, value: ServerLink) { when (value.label) { is ServerLinkLabel.Builtin -> { buffer.writeBoolean(true) @@ -29,7 +34,7 @@ public data class ServerLink(val label: ServerLinkLabel, val url: String) { buffer.writeMcString(value.url) } - override fun decode(buffer: BytesBuffer): ServerLink { + override suspend fun decode(buffer: BytesBuffer): ServerLink { val isBuiltin = buffer.readBoolean() val label = if (isBuiltin) ServerLinkLabel.Builtin(BuiltinServerLinkType.fromID(buffer.readVarInt())) else ServerLinkLabel.Custom(buffer.readNetworkNBTCompound()) diff --git a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/GameProfile.kt b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/GameProfile.kt index 3df8a24..dafe38d 100644 --- a/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/GameProfile.kt +++ b/libmc-protocol/src/commonMain/kotlin/cn/rtast/libmc/protocol/session/GameProfile.kt @@ -7,7 +7,9 @@ package cn.rtast.libmc.protocol.session -import cn.rtast.libmc.common.* +import cn.rtast.libmc.common.packet.PacketCodec +import cn.rtast.libmc.common.primitives.* +import cn.rtast.libmc.common.stream.BytesBuffer import kotlin.uuid.Uuid public data class GameProfile( @@ -21,14 +23,14 @@ public data class GameProfile( val signature: String?, ) { internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: Property) { + override suspend fun encode(buffer: BytesBuffer, value: Property) { buffer.writeMcString(value.name) buffer.writeMcString(value.value) buffer.writeBoolean(value.signature != null) value.signature?.let { buffer.writeMcString(it) } } - override fun decode(buffer: BytesBuffer): Property { + override suspend fun decode(buffer: BytesBuffer): Property { val name = buffer.readMcString() val value = buffer.readMcString() val hasSignature = buffer.readBoolean() @@ -39,14 +41,14 @@ public data class GameProfile( } internal companion object Codec : PacketCodec { - override fun encode(buffer: BytesBuffer, value: GameProfile) { + override suspend fun encode(buffer: BytesBuffer, value: GameProfile) { buffer.writeUuid(value.uuid) buffer.writeMcString(value.username) buffer.writeVarInt(value.properties.size) // prefixed array value.properties.forEach { prop -> Property.encode(buffer, prop) } } - override fun decode(buffer: BytesBuffer): GameProfile { + override suspend fun decode(buffer: BytesBuffer): GameProfile { val uuid = buffer.readUuid() val username = buffer.readMcString() val propertyCount = buffer.readVarInt() diff --git a/libmc-protocol/src/jvmTest/kotlin/test/JvmAesCipher.kt b/libmc-protocol/src/jvmTest/kotlin/test/JvmAesCipher.kt index 68f2d99..7c18c64 100644 --- a/libmc-protocol/src/jvmTest/kotlin/test/JvmAesCipher.kt +++ b/libmc-protocol/src/jvmTest/kotlin/test/JvmAesCipher.kt @@ -7,7 +7,7 @@ package test -import cn.rtast.libmc.protocol.crypto.NetworkCipher +import cn.rtast.libmc.common.crypto.NetworkCipher import javax.crypto.Cipher import javax.crypto.spec.IvParameterSpec import javax.crypto.spec.SecretKeySpec @@ -21,11 +21,11 @@ class JvmAesCipher(sharedKey: ByteArray) : NetworkCipher { init(Cipher.DECRYPT_MODE, SecretKeySpec(sharedKey, "AES"), IvParameterSpec(sharedKey)) } - override fun encrypt(buffer: ByteArray, offset: Int, length: Int) { + override suspend fun encrypt(buffer: ByteArray, offset: Int, length: Int) { encryptCipher.update(buffer, offset, length, buffer, offset) } - override fun decrypt(buffer: ByteArray, offset: Int, length: Int) { + override suspend fun decrypt(buffer: ByteArray, offset: Int, length: Int) { decryptCipher.update(buffer, offset, length, buffer, offset) } } \ No newline at end of file diff --git a/libmc-protocol/src/jvmTest/kotlin/test/TestClientTestInJvm.kt b/libmc-protocol/src/jvmTest/kotlin/test/TestClientTestInJvm.kt index bb3c7b1..bfa0132 100644 --- a/libmc-protocol/src/jvmTest/kotlin/test/TestClientTestInJvm.kt +++ b/libmc-protocol/src/jvmTest/kotlin/test/TestClientTestInJvm.kt @@ -8,11 +8,11 @@ package test import cn.rtast.libmc.protocol.client.createMinecraftClient -import cn.rtast.libmc.protocol.crypto.RSA1024Encryptor -import cn.rtast.libmc.protocol.crypto.Sha1Hasher +import cn.rtast.libmc.common.crypto.RSA1024Encryptor +import cn.rtast.libmc.common.crypto.Sha1Hasher import cn.rtast.libmc.protocol.packet.login.clientbound.ClientboundLoginSuccessPacket import cn.rtast.libmc.protocol.packet.play.clientbound.ClientboundSystemChatMessagePacket -import cn.rtast.libmc.protocol.session.AuthenticationProvider +import cn.rtast.libmc.common.crypto.AuthenticationProvider import cn.rtast.libmc.protocol.util.generateOfflineUuid import kotlinx.coroutines.launch import org.junit.Test diff --git a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/buffer_ext.kt b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/buffer_ext.kt index e3987ff..7d17cb0 100644 --- a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/buffer_ext.kt +++ b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/buffer_ext.kt @@ -7,6 +7,6 @@ package cn.rtast.libmc.mcping.rconlib -import cn.rtast.libmc.common.BytesBuffer +import cn.rtast.libmc.common.stream.BytesBuffer -internal fun BytesBuffer.writeNull() = writeByte(0x00) \ No newline at end of file +internal suspend fun BytesBuffer.writeNull() = writeByte(0x00) \ No newline at end of file diff --git a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/packet.kt b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/packet.kt index 0fdf528..4c56840 100644 --- a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/packet.kt +++ b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/packet.kt @@ -7,10 +7,10 @@ package cn.rtast.libmc.mcping.rconlib -import cn.rtast.libmc.common.ByteOrder -import cn.rtast.libmc.common.BytesBuffer -import cn.rtast.libmc.common.ReadChannel -import cn.rtast.libmc.common.WriteChannel +import cn.rtast.libmc.common.stream.ByteOrder +import cn.rtast.libmc.common.stream.BytesBuffer +import cn.rtast.libmc.common.stream.ReadChannel +import cn.rtast.libmc.common.stream.WriteChannel internal abstract class Packet { abstract val requestId: Int @@ -25,7 +25,7 @@ internal abstract class Packet { open val length: Int get() = 4 + 4 + payloadLength + 2 - fun writePayload(buf: BytesBuffer) { + suspend fun writePayload(buf: BytesBuffer) { buf.writeInt(length, ByteOrder.LITTLE_ENDIAN) buf.writeInt(requestId, ByteOrder.LITTLE_ENDIAN) buf.writeInt(type, ByteOrder.LITTLE_ENDIAN) @@ -35,7 +35,7 @@ internal abstract class Packet { } companion object Codec { - fun decode(channel: ReadChannel): ResponsePacket { + suspend fun decode(channel: ReadChannel): ResponsePacket { val length = channel.readInt(ByteOrder.LITTLE_ENDIAN) val requestId = channel.readInt(ByteOrder.LITTLE_ENDIAN) val type = channel.readInt(ByteOrder.LITTLE_ENDIAN) @@ -73,11 +73,11 @@ internal data class ResponsePacket( ) : Packet() -internal fun WriteChannel.sendPacket(packet: Packet) { +internal suspend fun WriteChannel.sendPacket(packet: Packet) { val buf = BytesBuffer() packet.writePayload(buf) writeFully(buf.toByteArray()) flush() } -internal fun ReadChannel.readPacket(): ResponsePacket = Packet.decode(this) \ No newline at end of file +internal suspend fun ReadChannel.readPacket(): ResponsePacket = Packet.decode(this) \ No newline at end of file diff --git a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/rconlib.kt b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/rconlib.kt index f8ec539..a5817f3 100644 --- a/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/rconlib.kt +++ b/libmc-rconlib/src/commonMain/kotlin/cn/rtast/libmc/mcping/rconlib/rconlib.kt @@ -9,9 +9,9 @@ package cn.rtast.libmc.mcping.rconlib import cn.rtast.libmc.common.LibMCContext -import cn.rtast.libmc.common.ReadChannel -import cn.rtast.libmc.common.Socket -import cn.rtast.libmc.common.WriteChannel +import cn.rtast.libmc.common.stream.ReadChannel +import cn.rtast.libmc.common.stream.Socket +import cn.rtast.libmc.common.stream.WriteChannel import kotlin.jvm.JvmName import kotlin.jvm.JvmOverloads @@ -25,7 +25,7 @@ public class RCONClient internal constructor( private var writeChannel: WriteChannel? = null private var currentRequestId = 1 - public fun connect(password: String): Boolean { + public suspend fun connect(password: String): Boolean { socket = Socket(host, port, context) readChannel = socket!!.openReadChannel() writeChannel = socket!!.openWriteChannel() @@ -34,7 +34,7 @@ public class RCONClient internal constructor( return readChannel!!.readPacket().requestId != -1 } - public fun command(command: String): String { + public suspend fun command(command: String): String { val reqId = currentRequestId++ val commandPacket = ExecCommandPacket(command, reqId) writeChannel!!.sendPacket(commandPacket) diff --git a/settings.gradle.kts b/settings.gradle.kts index d95b7d4..bc97c04 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -8,6 +8,7 @@ includeSubModule(":common") includeSubModule(":mcping") includeSubModule(":rconlib") includeSubModule(":protocol") +includeSubModule(":protocol-encrypt") includeSubModule(":nbt") includeSubModule(":snbt")