From 9f6fb76a2a2a9fa722ac92216ecc4f1b2c8cad35 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Thu, 9 Jun 2022 21:40:57 -0700 Subject: [PATCH] bukkit/paper: Fix BukkitBrigadierMapper#mapSimpleContextNMS on 1.18.2 --- .../bukkit/BukkitBrigadierMapper.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitBrigadierMapper.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitBrigadierMapper.java index ecb5c3c6..5cce3062 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitBrigadierMapper.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitBrigadierMapper.java @@ -159,7 +159,8 @@ public final class BukkitBrigadierMapper { /** * Attempt to register a mapping between a cloud argument parser type and an NMS brigadier argument type which - * has a single-arg constructor taking CommandBuildContext. + * has a single-arg constructor taking CommandBuildContext. Will fall back to behavior + * of {@link #mapSimpleNMS(TypeToken, String)} on older versions. * * @param type Type to map * @param argument parser type @@ -170,11 +171,14 @@ public final class BukkitBrigadierMapper { final @NonNull TypeToken type, final @NonNull String argumentId ) { + final Constructor ctr = MinecraftArgumentTypes.getClassByKey(NamespacedKey.minecraft(argumentId)) + .getDeclaredConstructors()[0]; this.mapNMS(type, () -> { + final Object[] args = ctr.getParameterCount() == 1 + ? new Object[]{CommandBuildContextSupplier.commandBuildContext()} + : new Object[]{}; try { - return (ArgumentType) MinecraftArgumentTypes.getClassByKey(NamespacedKey.minecraft(argumentId)) - .getDeclaredConstructors()[0] - .newInstance(CommandBuildContextSupplier.commandBuildContext()); + return (ArgumentType) ctr.newInstance(args); } catch (final ReflectiveOperationException e) { throw new RuntimeException(e); }