diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/Protocol1_19_3To1_19_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/Protocol1_19_3To1_19_1.java index f60aa9c2d..77cf8b206 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/Protocol1_19_3To1_19_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/Protocol1_19_3To1_19_1.java @@ -17,13 +17,13 @@ */ package com.viaversion.viaversion.protocols.protocol1_19_3to1_19_1; -import com.google.common.base.Preconditions; import com.google.gson.JsonElement; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.data.MappingData; import com.viaversion.viaversion.api.data.MappingDataBase; import com.viaversion.viaversion.api.minecraft.PlayerMessageSignature; import com.viaversion.viaversion.api.minecraft.ProfileKey; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_3Types; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -71,6 +71,9 @@ public final class Protocol1_19_3To1_19_1 extends AbstractProtocol { - final int size = wrapper.passthrough(Type.VAR_INT); - for (int i = 0; i < size; i++) { - final byte flags = wrapper.passthrough(Type.BYTE); - wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices - if ((flags & 0x08) != 0) { - wrapper.passthrough(Type.VAR_INT); // Redirect node index - } - - final int nodeType = flags & 0x03; - if (nodeType == 1 || nodeType == 2) { // Literal/argument node - wrapper.passthrough(Type.STRING); // Name - } - - if (nodeType == 2) { // Argument node - final int argumentTypeId = wrapper.read(Type.VAR_INT); - final int mappedArgumentTypeId = MAPPINGS.getArgumentTypeMappings().mappings().getNewId(argumentTypeId); - Preconditions.checkArgument(mappedArgumentTypeId != -1, "Unknown command argument type id: " + argumentTypeId); - wrapper.write(Type.VAR_INT, mappedArgumentTypeId); - - final String identifier = MAPPINGS.getArgumentTypeMappings().identifier(argumentTypeId); - commandRewriter.handleArgument(wrapper, identifier); - switch (identifier) { - case "minecraft:item_enchantment": - wrapper.write(Type.STRING, "minecraft:enchantment"); - break; - case "minecraft:mob_effect": - wrapper.write(Type.STRING, "minecraft:mob_effect"); - break; - case "minecraft:entity_summon": - wrapper.write(Type.STRING, "minecraft:entity_type"); - break; - } - - if ((flags & 0x10) != 0) { - wrapper.passthrough(Type.STRING); // Suggestion type - } - } - } - - wrapper.passthrough(Type.VAR_INT); // Root node index - - wrapper.cancel(); //TODO - }); + public void handleArgument(final PacketWrapper wrapper, final String argumentType) throws Exception { + switch (argumentType) { + case "minecraft:item_enchantment": + wrapper.write(Type.STRING, "minecraft:enchantment"); + break; + case "minecraft:mob_effect": + wrapper.write(Type.STRING, "minecraft:mob_effect"); + break; + case "minecraft:entity_summon": + wrapper.write(Type.STRING, "minecraft:entity_type"); + break; + default: + super.handleArgument(wrapper, argumentType); + break; + } } - }); + + @Override + public String handleArgumentType(final String argumentType) { + switch (argumentType) { + case "minecraft:resource": + return "minecraft:resource_key"; + case "minecraft:resource_or_tag": + return "minecraft:resource_or_tag_key"; + case "minecraft:entity_summon": + case "minecraft:item_enchantment": + case "minecraft:mob_effect": + return "minecraft:resource"; + } + return argumentType; + } + }; + commandRewriter.registerDeclareCommands1_19(ClientboundPackets1_19_1.DECLARE_COMMANDS); registerClientbound(ClientboundPackets1_19_1.SERVER_DATA, new PacketRemapper() { @Override diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/CommandRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/CommandRewriter.java index a9c46093f..75998607a 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/CommandRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/CommandRewriter.java @@ -17,6 +17,7 @@ */ package com.viaversion.viaversion.rewriter; +import com.google.common.base.Preconditions; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -150,9 +151,8 @@ public class CommandRewriter { int argumentTypeId = wrapper.read(Type.VAR_INT); String argumentType = protocol.getMappingData().getArgumentTypeMappings().identifier(argumentTypeId); String newArgumentType = handleArgumentType(argumentType); - if (newArgumentType != null) { - wrapper.write(Type.VAR_INT, protocol.getMappingData().getArgumentTypeMappings().mappedId(newArgumentType)); - } + Preconditions.checkArgument(newArgumentType != null, "No mapping for argument type " + argumentType); + wrapper.write(Type.VAR_INT, protocol.getMappingData().getArgumentTypeMappings().mappedId(newArgumentType)); // Always call the handler using the previous name handleArgument(wrapper, argumentType); diff --git a/common/src/main/resources/assets/viaversion/data/mappingdiff-1.19to1.19.3.json b/common/src/main/resources/assets/viaversion/data/mappingdiff-1.19to1.19.3.json index a74845228..4d4153055 100644 --- a/common/src/main/resources/assets/viaversion/data/mappingdiff-1.19to1.19.3.json +++ b/common/src/main/resources/assets/viaversion/data/mappingdiff-1.19to1.19.3.json @@ -1,7 +1,7 @@ { "argumenttypes": { - "minecraft:item_enchantment": "minecraft:resource_or_tag_key", - "minecraft:mob_effect": "minecraft:resource_or_tag_key", - "minecraft:entity_summon": "minecraft:resource_or_tag_key" + "minecraft:item_enchantment": "minecraft:resource", + "minecraft:mob_effect": "minecraft:resource", + "minecraft:entity_summon": "minecraft:resource" } } \ No newline at end of file