From 39e31f6268a9c8ea4e4c3008324a22e90232c07e Mon Sep 17 00:00:00 2001 From: Maru32768 Date: Sat, 12 Oct 2024 01:49:27 +0900 Subject: [PATCH] =?UTF-8?q?fix:=201.21=E3=81=A7=E8=A3=9C=E5=AE=8C=E3=82=92?= =?UTF-8?q?=E5=87=BA=E3=81=99=E3=81=A8=E9=AF=96=E8=90=BD=E3=81=A1=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/kunmc/lab/commandlib/CommandLib.java | 48 +++++++++++++------ .../net/kunmc/lab/testplugin/TestBase.java | 4 ++ .../net/kunmc/lab/testplugin/TestMain.java | 2 + 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/bukkit/src/main/java/net/kunmc/lab/commandlib/CommandLib.java b/bukkit/src/main/java/net/kunmc/lab/commandlib/CommandLib.java index f09f595..01e3b8a 100644 --- a/bukkit/src/main/java/net/kunmc/lab/commandlib/CommandLib.java +++ b/bukkit/src/main/java/net/kunmc/lab/commandlib/CommandLib.java @@ -1,8 +1,11 @@ package net.kunmc.lab.commandlib; import com.google.common.collect.Lists; +import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.tree.CommandNode; import com.mojang.brigadier.tree.RootCommandNode; +import net.kunmc.lab.commandlib.util.bukkit.BukkitUtil; +import net.kunmc.lab.commandlib.util.bukkit.MinecraftVersion; import net.kunmc.lab.commandlib.util.nms.command.NMSCommandDispatcher; import net.kunmc.lab.commandlib.util.nms.command.NMSVanillaCommandWrapper; import net.kunmc.lab.commandlib.util.nms.server.NMSCraftServer; @@ -54,14 +57,7 @@ private void enable() { @Override public void run() { registeredCommands.addAll(new CommandNodeCreator<>(commands).build()); - NMSCommandDispatcher dispatcher = NMSCraftServer.create(plugin.getServer()) - .getServer() - .getCommandDispatcher(); - RootCommandNode root = dispatcher.getBrigadier() - .getRoot(); registeredCommands.forEach(x -> { - root.addChild(x); - try { CommandMap commandMap = ((CommandMap) NMSCraftServer.create() .getValue("commandMap")); @@ -69,17 +65,39 @@ public void run() { knownCommandsField.setAccessible(true); Map knownCommands = ((Map) knownCommandsField.get( commandMap)); - knownCommands.put(x.getName(), - NMSVanillaCommandWrapper.create() - .createInstance(dispatcher, x)); + + if (new MinecraftVersion(BukkitUtil.getMinecraftVersion()).isLessThan(new MinecraftVersion( + "1.21.0"))) { + NMSCommandDispatcher dispatcher = NMSCraftServer.create(plugin.getServer()) + .getServer() + .getCommandDispatcher(); + RootCommandNode root = dispatcher.getBrigadier() + .getRoot(); + + root.addChild(x); + knownCommands.put(x.getName(), + NMSVanillaCommandWrapper.create() + .createInstance(dispatcher, x)); + + root.getChild("execute") + .getChild("run") + .getRedirect() + .addChild(x); + } else { + CommandNode shadowBrigNode = (CommandNode) Class.forName( + "io.papermc.paper.command.brigadier.ShadowBrigNode") + .getConstructor(CommandNode.class) + .newInstance(x); + CommandDispatcher dispatcher = ((CommandDispatcher) knownCommands.getClass() + .getDeclaredMethod( + "getDispatcher") + .invoke(knownCommands)); + dispatcher.getRoot() + .addChild(shadowBrigNode); + } } catch (Exception e) { throw new RuntimeException(e); } - - root.getChild("execute") - .getChild("run") - .getRedirect() - .addChild(x); }); commands.stream() diff --git a/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestBase.java b/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestBase.java index 1027ce8..07e333e 100644 --- a/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestBase.java +++ b/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestBase.java @@ -43,4 +43,8 @@ protected final String getKey() { public final List results() { return new ArrayList<>(Collections.unmodifiableCollection(resultMap.values())); } + + public final void clearResults() { + resultMap.clear(); + } } diff --git a/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestMain.java b/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestMain.java index 8ce63e1..07a126f 100644 --- a/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestMain.java +++ b/bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestMain.java @@ -59,6 +59,8 @@ public void runAllTests(Consumer> consumer) { .flatMap(x -> x.results() .stream()) .collect(Collectors.toList())); + + tests.forEach(TestBase::clearResults); }; mainCommand.addChildren(new Command("rerun") {{