From 01e3c0e13b13a9c6cf1eee5de1052e3560eb4342 Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Wed, 12 Jul 2023 17:59:43 +0200 Subject: [PATCH] Fixed >= b1.8 clients being able to sword block on <= b1.7 --- .../Protocolb1_8_0_1tob1_7_0_3.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java index aa8f7d7..6fafcaf 100644 --- a/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java +++ b/src/main/java/net/raphimc/vialegacy/protocols/beta/protocolb1_8_0_1tob1_7_0_3/Protocolb1_8_0_1tob1_7_0_3.java @@ -22,6 +22,7 @@ import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; +import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.State; @@ -29,6 +30,7 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import net.raphimc.vialegacy.api.data.BlockList1_6; +import net.raphimc.vialegacy.api.data.ItemList1_6; import net.raphimc.vialegacy.api.splitter.PreNettySplitter; import net.raphimc.vialegacy.protocols.alpha.protocolb1_0_1_1_1toa1_2_3_5_1_2_6.storage.AlphaInventoryTracker; import net.raphimc.vialegacy.protocols.beta.protocol1_0_0_1tob1_8_0_1.ClientboundPacketsb1_8; @@ -41,6 +43,7 @@ import net.raphimc.vialegacy.protocols.classic.protocolc0_28_30toc0_0_20a_27.Pro import net.raphimc.vialegacy.protocols.release.protocol1_2_1_3to1_1.chunks.NibbleArray1_1; import net.raphimc.vialegacy.protocols.release.protocol1_2_1_3to1_1.storage.SeedStorage; import net.raphimc.vialegacy.protocols.release.protocol1_2_1_3to1_1.types.Chunk1_1Type; +import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.storage.EntityTracker; import net.raphimc.vialegacy.protocols.release.protocol1_4_2to1_3_1_2.types.Types1_3_1; import net.raphimc.vialegacy.protocols.release.protocol1_4_4_5to1_4_2.types.Types1_4_2; import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.storage.ChunkTracker; @@ -284,13 +287,24 @@ public class Protocolb1_8_0_1tob1_7_0_3 extends AbstractProtocol { - final Position pos = wrapper.get(Types1_7_6.POSITION_UBYTE, 0); - if (wrapper.user().get(ChunkTracker.class).getBlockNotNull(pos).id == BlockList1_6.cake.blockID) { - final PacketWrapper updateHealth = PacketWrapper.create(ClientboundPacketsb1_8.UPDATE_HEALTH, wrapper.user()); - updateHealth.write(Type.SHORT, wrapper.user().get(PlayerHealthTracker.class).getHealth()); // health - updateHealth.write(Type.SHORT, (short) 6); // food - updateHealth.write(Type.FLOAT, 0F); // saturation - updateHealth.send(Protocolb1_8_0_1tob1_7_0_3.class); + if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 255) { + final Item item = wrapper.get(Types1_4_2.NBTLESS_ITEM, 0); + if (item != null && isSword(item)) { + wrapper.cancel(); + final PacketWrapper entityStatus = PacketWrapper.create(ClientboundPacketsb1_8.ENTITY_STATUS, wrapper.user()); + entityStatus.write(Type.INT, wrapper.user().get(EntityTracker.class).getPlayerID()); // entity id + entityStatus.write(Type.BYTE, (byte) 9); // status | 9 = STOP_ITEM_USE + entityStatus.send(Protocolb1_8_0_1tob1_7_0_3.class); + } + } else { + final Position pos = wrapper.get(Types1_7_6.POSITION_UBYTE, 0); + if (wrapper.user().get(ChunkTracker.class).getBlockNotNull(pos).id == BlockList1_6.cake.blockID) { + final PacketWrapper updateHealth = PacketWrapper.create(ClientboundPacketsb1_8.UPDATE_HEALTH, wrapper.user()); + updateHealth.write(Type.SHORT, wrapper.user().get(PlayerHealthTracker.class).getHealth()); // health + updateHealth.write(Type.SHORT, (short) 6); // food + updateHealth.write(Type.FLOAT, 0F); // saturation + updateHealth.send(Protocolb1_8_0_1tob1_7_0_3.class); + } } }); } @@ -344,4 +358,12 @@ public class Protocolb1_8_0_1tob1_7_0_3 extends AbstractProtocol