|
1 | 1 | package net.kunmc.lab.commandlib; |
2 | 2 |
|
3 | 3 | import com.google.common.collect.Lists; |
| 4 | +import com.mojang.brigadier.CommandDispatcher; |
4 | 5 | import com.mojang.brigadier.tree.CommandNode; |
5 | 6 | import com.mojang.brigadier.tree.RootCommandNode; |
| 7 | +import net.kunmc.lab.commandlib.util.bukkit.BukkitUtil; |
| 8 | +import net.kunmc.lab.commandlib.util.bukkit.MinecraftVersion; |
6 | 9 | import net.kunmc.lab.commandlib.util.nms.command.NMSCommandDispatcher; |
7 | 10 | import net.kunmc.lab.commandlib.util.nms.command.NMSVanillaCommandWrapper; |
8 | 11 | import net.kunmc.lab.commandlib.util.nms.server.NMSCraftServer; |
@@ -54,32 +57,47 @@ private void enable() { |
54 | 57 | @Override |
55 | 58 | public void run() { |
56 | 59 | registeredCommands.addAll(new CommandNodeCreator<>(commands).build()); |
57 | | - NMSCommandDispatcher dispatcher = NMSCraftServer.create(plugin.getServer()) |
58 | | - .getServer() |
59 | | - .getCommandDispatcher(); |
60 | | - RootCommandNode root = dispatcher.getBrigadier() |
61 | | - .getRoot(); |
62 | 60 | registeredCommands.forEach(x -> { |
63 | | - root.addChild(x); |
64 | | - |
65 | 61 | try { |
66 | 62 | CommandMap commandMap = ((CommandMap) NMSCraftServer.create() |
67 | 63 | .getValue("commandMap")); |
68 | 64 | Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands"); |
69 | 65 | knownCommandsField.setAccessible(true); |
70 | 66 | Map<String, org.bukkit.command.Command> knownCommands = ((Map<String, org.bukkit.command.Command>) knownCommandsField.get( |
71 | 67 | commandMap)); |
72 | | - knownCommands.put(x.getName(), |
73 | | - NMSVanillaCommandWrapper.create() |
74 | | - .createInstance(dispatcher, x)); |
| 68 | + |
| 69 | + if (new MinecraftVersion(BukkitUtil.getMinecraftVersion()).isLessThan(new MinecraftVersion( |
| 70 | + "1.21.0"))) { |
| 71 | + NMSCommandDispatcher dispatcher = NMSCraftServer.create(plugin.getServer()) |
| 72 | + .getServer() |
| 73 | + .getCommandDispatcher(); |
| 74 | + RootCommandNode root = dispatcher.getBrigadier() |
| 75 | + .getRoot(); |
| 76 | + |
| 77 | + root.addChild(x); |
| 78 | + knownCommands.put(x.getName(), |
| 79 | + NMSVanillaCommandWrapper.create() |
| 80 | + .createInstance(dispatcher, x)); |
| 81 | + |
| 82 | + root.getChild("execute") |
| 83 | + .getChild("run") |
| 84 | + .getRedirect() |
| 85 | + .addChild(x); |
| 86 | + } else { |
| 87 | + CommandNode shadowBrigNode = (CommandNode) Class.forName( |
| 88 | + "io.papermc.paper.command.brigadier.ShadowBrigNode") |
| 89 | + .getConstructor(CommandNode.class) |
| 90 | + .newInstance(x); |
| 91 | + CommandDispatcher dispatcher = ((CommandDispatcher) knownCommands.getClass() |
| 92 | + .getDeclaredMethod( |
| 93 | + "getDispatcher") |
| 94 | + .invoke(knownCommands)); |
| 95 | + dispatcher.getRoot() |
| 96 | + .addChild(shadowBrigNode); |
| 97 | + } |
75 | 98 | } catch (Exception e) { |
76 | 99 | throw new RuntimeException(e); |
77 | 100 | } |
78 | | - |
79 | | - root.getChild("execute") |
80 | | - .getChild("run") |
81 | | - .getRedirect() |
82 | | - .addChild(x); |
83 | 101 | }); |
84 | 102 |
|
85 | 103 | commands.stream() |
|
0 commit comments