diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/commands/synchronization/ArgumentTypesMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/commands/synchronization/ArgumentTypesMixin.java deleted file mode 100644 index 47dca695..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/commands/synchronization/ArgumentTypesMixin.java +++ /dev/null @@ -1,10 +0,0 @@ -package io.izzel.arclight.common.mixin.core.commands.synchronization; - -import net.minecraft.commands.synchronization.ArgumentTypeInfos; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(ArgumentTypeInfos.class) -public abstract class ArgumentTypesMixin { - - // TODO FIXME 1.19 command arguments -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/protocol/game/ClientboundCommandsPacket_ArgumentNodeStubMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/protocol/game/ClientboundCommandsPacket_ArgumentNodeStubMixin.java new file mode 100644 index 00000000..126aba69 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/protocol/game/ClientboundCommandsPacket_ArgumentNodeStubMixin.java @@ -0,0 +1,39 @@ +package io.izzel.arclight.common.mixin.core.network.protocol.game; + +import com.mojang.brigadier.arguments.ArgumentType; +import io.netty.buffer.Unpooled; +import net.minecraft.commands.synchronization.ArgumentTypeInfo; +import net.minecraft.core.Registry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.registries.ForgeRegistries; +import org.spigotmc.SpigotConfig; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(targets = "net.minecraft.network.protocol.game.ClientboundCommandsPacket$ArgumentNodeStub") +public class ClientboundCommandsPacket_ArgumentNodeStubMixin { + + private static final int ARCLIGHT_WRAP_INDEX = -256; + + @Inject(method = "serializeCap(Lnet/minecraft/network/FriendlyByteBuf;Lnet/minecraft/commands/synchronization/ArgumentTypeInfo;Lnet/minecraft/commands/synchronization/ArgumentTypeInfo$Template;)V", + cancellable = true, at = @At("HEAD")) + private static , T extends ArgumentTypeInfo.Template> void arclight$wrapArgument(FriendlyByteBuf buf, ArgumentTypeInfo type, ArgumentTypeInfo.Template node, CallbackInfo ci) { + if (!SpigotConfig.bungee) { + return; + } + var key = ForgeRegistries.COMMAND_ARGUMENT_TYPES.getKey(type); + if (key == null || key.getNamespace().equals("minecraft") || key.getNamespace().equals("brigadier")) { + return; + } + ci.cancel(); + buf.writeVarInt(ARCLIGHT_WRAP_INDEX); + //noinspection deprecation + buf.writeVarInt(Registry.COMMAND_ARGUMENT_TYPE.getId(type)); + var payload = new FriendlyByteBuf(Unpooled.buffer()); + type.serializeToNetwork((T) node, payload); + buf.writeVarInt(payload.readableBytes()); + buf.writeBytes(payload); + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.core.json b/arclight-common/src/main/resources/mixins.arclight.core.json index 58cf3740..407b19ed 100644 --- a/arclight-common/src/main/resources/mixins.arclight.core.json +++ b/arclight-common/src/main/resources/mixins.arclight.core.json @@ -24,7 +24,6 @@ "commands.arguments.EntityArgumentMixin", "commands.arguments.blocks.BlockStateParserMixin", "commands.arguments.selector.EntitySelectorParserMixin", - "commands.synchronization.ArgumentTypesMixin", "fluid.FlowingFluidMixin", "fluid.LavaFluidMixin", "nbt.CompoundTagMixin", @@ -39,6 +38,7 @@ "network.chat.TextColorMixin", "network.protocol.PacketThreadUtilMixin", "network.protocol.game.CCloseWindowPacketMixin", + "network.protocol.game.ClientboundCommandsPacket_ArgumentNodeStubMixin", "network.protocol.game.ClientboundSectionBlocksUpdatePacketMixin", "network.protocol.game.ClientboundSystemChatPacketMixin", "network.protocol.game.CPlayerTryUseItemOnBlockPacketMixin",