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",