From 8abdb8edb9a30abd7023b4c85c1cc4dfea580144 Mon Sep 17 00:00:00 2001 From: Yang Seong Mo <angryko@naver.com> Date: Sat, 28 Dec 2024 20:07:15 +0900 Subject: [PATCH] Prevents item swap when running player animation. --- .../toxicity/model/api/tracker/PlayerTracker.java | 9 +++++++++ .../kr/toxicity/model/nms/v1_20_R3/NMSImpl.kt | 15 +++++++++++++++ .../kr/toxicity/model/nms/v1_20_R4/NMSImpl.kt | 15 +++++++++++++++ .../kr/toxicity/model/nms/v1_21_R1/NMSImpl.kt | 15 +++++++++++++++ .../kr/toxicity/model/nms/v1_21_R2/NMSImpl.kt | 15 +++++++++++++++ .../kr/toxicity/model/nms/v1_21_R3/NMSImpl.kt | 15 +++++++++++++++ 6 files changed, 84 insertions(+) diff --git a/api/src/main/java/kr/toxicity/model/api/tracker/PlayerTracker.java b/api/src/main/java/kr/toxicity/model/api/tracker/PlayerTracker.java index 07382ca..267cdf3 100644 --- a/api/src/main/java/kr/toxicity/model/api/tracker/PlayerTracker.java +++ b/api/src/main/java/kr/toxicity/model/api/tracker/PlayerTracker.java @@ -7,8 +7,11 @@ public final class PlayerTracker extends EntityTracker { + private final Player player; + public PlayerTracker(@NotNull Player entity, @NotNull RenderInstance instance) { super(entity, instance); + this.player = entity; instance.filter(p -> BetterModel.inst().playerManager().player(p).showPlayerLimb()); } @@ -16,4 +19,10 @@ public PlayerTracker(@NotNull Player entity, @NotNull RenderInstance instance) { public boolean isRunningSingleAnimation() { return false; } + + @Override + public void close() throws Exception { + super.close(); + player.updateInventory(); + } } diff --git a/nms/v1_20_R3/src/main/kotlin/kr/toxicity/model/nms/v1_20_R3/NMSImpl.kt b/nms/v1_20_R3/src/main/kotlin/kr/toxicity/model/nms/v1_20_R3/NMSImpl.kt index 85e9b55..23051d7 100644 --- a/nms/v1_20_R3/src/main/kotlin/kr/toxicity/model/nms/v1_20_R3/NMSImpl.kt +++ b/nms/v1_20_R3/src/main/kotlin/kr/toxicity/model/nms/v1_20_R3/NMSImpl.kt @@ -209,6 +209,21 @@ class NMSImpl : NMS { super.write(ctx, msg, promise) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + when (msg) { + is ServerboundSetCarriedItemPacket -> { + if (connection.player.id.toTracker() != null) { + connection.send(ClientboundSetCarriedItemPacket(player.inventory.heldItemSlot)) + return + } + } + is ServerboundPlayerActionPacket -> { + if (connection.player.id.toTracker() != null) return + } + } + super.channelRead(ctx, msg) + } + private fun EntityTracker.remove() { entityUUIDMap.remove(uuid()) remove(player) diff --git a/nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/NMSImpl.kt b/nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/NMSImpl.kt index cc95540..f58625b 100644 --- a/nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/NMSImpl.kt +++ b/nms/v1_20_R4/src/main/kotlin/kr/toxicity/model/nms/v1_20_R4/NMSImpl.kt @@ -196,6 +196,21 @@ class NMSImpl : NMS { super.write(ctx, msg, promise) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + when (msg) { + is ServerboundSetCarriedItemPacket -> { + if (connection.player.id.toTracker() != null) { + connection.send(ClientboundSetCarriedItemPacket(player.inventory.heldItemSlot)) + return + } + } + is ServerboundPlayerActionPacket -> { + if (connection.player.id.toTracker() != null) return + } + } + super.channelRead(ctx, msg) + } + private fun EntityTracker.remove() { entityUUIDMap.remove(uuid()) remove(player) diff --git a/nms/v1_21_R1/src/main/kotlin/kr/toxicity/model/nms/v1_21_R1/NMSImpl.kt b/nms/v1_21_R1/src/main/kotlin/kr/toxicity/model/nms/v1_21_R1/NMSImpl.kt index 7576ed1..eefb8a7 100644 --- a/nms/v1_21_R1/src/main/kotlin/kr/toxicity/model/nms/v1_21_R1/NMSImpl.kt +++ b/nms/v1_21_R1/src/main/kotlin/kr/toxicity/model/nms/v1_21_R1/NMSImpl.kt @@ -199,6 +199,21 @@ class NMSImpl : NMS { super.write(ctx, msg, promise) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + when (msg) { + is ServerboundSetCarriedItemPacket -> { + if (connection.player.id.toTracker() != null) { + connection.send(ClientboundSetCarriedItemPacket(player.inventory.heldItemSlot)) + return + } + } + is ServerboundPlayerActionPacket -> { + if (connection.player.id.toTracker() != null) return + } + } + super.channelRead(ctx, msg) + } + private fun EntityTracker.remove() { entityUUIDMap.remove(uuid()) remove(player) diff --git a/nms/v1_21_R2/src/main/kotlin/kr/toxicity/model/nms/v1_21_R2/NMSImpl.kt b/nms/v1_21_R2/src/main/kotlin/kr/toxicity/model/nms/v1_21_R2/NMSImpl.kt index 54bb0b1..a036d12 100644 --- a/nms/v1_21_R2/src/main/kotlin/kr/toxicity/model/nms/v1_21_R2/NMSImpl.kt +++ b/nms/v1_21_R2/src/main/kotlin/kr/toxicity/model/nms/v1_21_R2/NMSImpl.kt @@ -197,6 +197,21 @@ class NMSImpl : NMS { super.write(ctx, msg, promise) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + when (msg) { + is ServerboundSetCarriedItemPacket -> { + if (connection.player.id.toTracker() != null) { + connection.send(ClientboundSetHeldSlotPacket(player.inventory.heldItemSlot)) + return + } + } + is ServerboundPlayerActionPacket -> { + if (connection.player.id.toTracker() != null) return + } + } + super.channelRead(ctx, msg) + } + private fun EntityTracker.remove() { entityUUIDMap.remove(uuid()) remove(player) diff --git a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/nms/v1_21_R3/NMSImpl.kt b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/nms/v1_21_R3/NMSImpl.kt index d2a537d..1495fce 100644 --- a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/nms/v1_21_R3/NMSImpl.kt +++ b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/nms/v1_21_R3/NMSImpl.kt @@ -199,6 +199,21 @@ class NMSImpl : NMS { super.write(ctx, msg, promise) } + override fun channelRead(ctx: ChannelHandlerContext, msg: Any) { + when (msg) { + is ServerboundSetCarriedItemPacket -> { + if (connection.player.id.toTracker() != null) { + connection.send(ClientboundSetHeldSlotPacket(player.inventory.heldItemSlot)) + return + } + } + is ServerboundPlayerActionPacket -> { + if (connection.player.id.toTracker() != null) return + } + } + super.channelRead(ctx, msg) + } + private fun EntityTracker.remove() { entityUUIDMap.remove(uuid()) remove(player)