From 36baf6ed24fd4141083f2b87a2f0f2699fce5db3 Mon Sep 17 00:00:00 2001 From: EnZaXD Date: Sun, 15 Sep 2024 19:17:45 +0200 Subject: [PATCH] Fix body set equipment in 1.20.5->.3 if value is not the last (#886) --- .../rewriter/BlockItemPacketRewriter1_20_2.java | 1 - .../rewriter/EntityPacketRewriter1_20_5.java | 9 ++++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java index f2baf774..392cb6cb 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java @@ -26,7 +26,6 @@ import com.viaversion.viabackwards.protocol.v1_20_2to1_20.provider.AdvancementCriteriaProvider; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; -import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.ChunkPosition; import com.viaversion.viaversion.api.minecraft.blockentity.BlockEntity; diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java index 4104f7c8..ac9c8b7e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java @@ -77,9 +77,12 @@ public void registerPackets() { do { slot = wrapper.read(Types.BYTE); final Item item = protocol.getItemRewriter().handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.ITEM)); + final int rawSlot = slot & 0x7F; + + if (rawSlot == 6) { + final boolean lastSlot = (slot & 0xFFFFFF80) == 0; + slot = (byte) (lastSlot ? 4 : 4 | 0xFFFFFF80); // Map body slot index to chest slot index for horses, also wolves - if (slot == 6) { - slot = 4; // Map body slot index to chest slot index for horses, also wolves if (type != null && type.isOrHasParent(EntityTypes1_20_5.LLAMA)) { // Cancel equipment and set correct entity data instead wrapper.cancel(); @@ -89,7 +92,7 @@ public void registerPackets() { wrapper.write(Types.BYTE, slot); wrapper.write(Types.ITEM1_20_2, item); - } while (slot < 0); + } while ((slot & 0xFFFFFF80) != 0); }); protocol.registerClientbound(ClientboundPackets1_20_5.HORSE_SCREEN_OPEN, wrapper -> {