From 78c7f03923913182032d8c91fb773203892a19cc Mon Sep 17 00:00:00 2001 From: RK_01 <50594595+RaphiMC@users.noreply.github.com> Date: Tue, 24 Oct 2023 00:01:33 +0000 Subject: [PATCH] Fix and improved custom payload handling (#3497) --- .../packets/InventoryPackets.java | 4 ++-- .../packets/InventoryPackets.java | 5 +++-- .../packets/InventoryPackets.java | 17 ++++++++--------- .../Protocol1_16To1_15_2.java | 5 ++++- .../Protocol1_20_2To1_20.java | 8 +++++--- .../protocol1_9to1_8/packets/PlayerPackets.java | 3 +-- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java index 9cea87e02..345c8dcb3 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/packets/InventoryPackets.java @@ -45,8 +45,8 @@ public class InventoryPackets extends ItemRewriter { - String channel = wrapper.get(Type.STRING, 0); - if (channel.equals("minecraft:trader_list") || channel.equals("trader_list")) { + String channel = Key.namespaced(wrapper.get(Type.STRING, 0)); + if (channel.equals("minecraft:trader_list")) { wrapper.passthrough(Type.INT); // Passthrough Window ID int size = wrapper.passthrough(Type.UNSIGNED_BYTE); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_2to1_13_1/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_2to1_13_1/packets/InventoryPackets.java index f218793c0..192bb1902 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_2to1_13_1/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_2to1_13_1/packets/InventoryPackets.java @@ -22,6 +22,7 @@ import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_13_2to1_13_1.Protocol1_13_2To1_13_1; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13; +import com.viaversion.viaversion.util.Key; public class InventoryPackets { @@ -47,8 +48,8 @@ public class InventoryPackets { public void register() { map(Type.STRING); // Channel handler(wrapper -> { - String channel = wrapper.get(Type.STRING, 0); - if (channel.equals("minecraft:trader_list") || channel.equals("trader_list")) { + String channel = Key.namespaced(wrapper.get(Type.STRING, 0)); + if (channel.equals("minecraft:trader_list")) { wrapper.passthrough(Type.INT); // Passthrough Window ID int size = wrapper.passthrough(Type.UNSIGNED_BYTE); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java index 70fdbdd9c..a2b0a14ed 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java @@ -17,11 +17,7 @@ */ package com.viaversion.viaversion.protocols.protocol1_14to1_13_2.packets; -import com.github.steveice10.opennbt.tag.builtin.CompoundTag; -import com.github.steveice10.opennbt.tag.builtin.DoubleTag; -import com.github.steveice10.opennbt.tag.builtin.ListTag; -import com.github.steveice10.opennbt.tag.builtin.StringTag; -import com.github.steveice10.opennbt.tag.builtin.Tag; +import com.github.steveice10.opennbt.tag.builtin.*; import com.google.common.collect.Sets; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -41,6 +37,8 @@ import com.viaversion.viaversion.protocols.protocol1_14to1_13_2.storage.EntityTr import com.viaversion.viaversion.rewriter.ComponentRewriter; import com.viaversion.viaversion.rewriter.ItemRewriter; import com.viaversion.viaversion.rewriter.RecipeRewriter; +import com.viaversion.viaversion.util.Key; + import java.util.Set; import java.util.concurrent.ThreadLocalRandom; @@ -143,8 +141,8 @@ public class InventoryPackets extends ItemRewriter { - String channel = wrapper.get(Type.STRING, 0); - if (channel.equals("minecraft:trader_list") || channel.equals("trader_list")) { + String channel = Key.namespaced(wrapper.get(Type.STRING, 0)); + if (channel.equals("minecraft:trader_list")) { wrapper.setPacketType(ClientboundPackets1_14.TRADE_LIST); wrapper.resetReader(); wrapper.read(Type.STRING); // Remove channel @@ -178,7 +176,8 @@ public class InventoryPackets extends ItemRewriter { String channel = wrapper.passthrough(Type.STRING); + final String namespacedChannel = Key.namespaced(channel); if (channel.length() > 32) { if (!Via.getConfig().isSuppressConversionWarnings()) { Via.getPlatform().getLogger().warning("Ignoring incoming plugin channel, as it is longer than 32 characters: " + channel); } wrapper.cancel(); - } else if (channel.equals("minecraft:register") || channel.equals("minecraft:unregister")) { + } else if (namespacedChannel.equals("minecraft:register") || namespacedChannel.equals("minecraft:unregister")) { String[] channels = new String(wrapper.read(Type.REMAINING_BYTES), StandardCharsets.UTF_8).split("\0"); List checkedChannels = new ArrayList<>(channels.length); for (String registeredChannel : channels) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java index 236bfc91b..4d97b483f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java @@ -50,9 +50,11 @@ import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.Configur import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.LastResourcePack; import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.storage.LastTags; import com.viaversion.viaversion.rewriter.SoundRewriter; -import java.util.UUID; +import com.viaversion.viaversion.util.Key; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.UUID; + public final class Protocol1_20_2To1_20 extends AbstractProtocol { public static final MappingData MAPPINGS = new MappingDataBase("1.20", "1.20.2"); @@ -73,14 +75,14 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol { - final String channel = wrapper.passthrough(Type.STRING); + final String channel = Key.namespaced(wrapper.passthrough(Type.STRING)); if (channel.equals("minecraft:brand")) { wrapper.passthrough(Type.STRING); wrapper.clearInputBuffer(); } }); registerServerbound(ServerboundPackets1_20_2.PLUGIN_MESSAGE, wrapper -> { - final String channel = wrapper.passthrough(Type.STRING); + final String channel = Key.namespaced(wrapper.passthrough(Type.STRING)); if (channel.equals("minecraft:brand")) { wrapper.passthrough(Type.STRING); wrapper.clearInputBuffer(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java index 81b3ee575..f42f37b9a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java @@ -19,12 +19,12 @@ package com.viaversion.viaversion.protocols.protocol1_9to1_8.packets; import com.google.gson.JsonObject; import com.viaversion.viaversion.api.Via; +import com.viaversion.viaversion.api.minecraft.ClientWorld; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_10; import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.protocols.protocol1_8.ClientboundPackets1_8; -import com.viaversion.viaversion.api.minecraft.ClientWorld; import com.viaversion.viaversion.protocols.protocol1_9to1_8.ItemRewriter; import com.viaversion.viaversion.protocols.protocol1_9to1_8.PlayerMovementMapper; import com.viaversion.viaversion.protocols.protocol1_9to1_8.Protocol1_9To1_8; @@ -268,7 +268,6 @@ public class PlayerPackets { handler(wrapper -> { String name = wrapper.get(Type.STRING, 0); if (name.equalsIgnoreCase("MC|BOpen")) { - wrapper.clearInputBuffer(); wrapper.write(Type.VAR_INT, 0); } else if (name.equalsIgnoreCase("MC|TrList")) { wrapper.passthrough(Type.INT); // ID