Skip to content

Commit 39e31f6

Browse files
committed
fix: 1.21で補完を出すと鯖落ちする
1 parent 76ef65f commit 39e31f6

File tree

3 files changed

+39
-15
lines changed

3 files changed

+39
-15
lines changed

bukkit/src/main/java/net/kunmc/lab/commandlib/CommandLib.java

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package net.kunmc.lab.commandlib;
22

33
import com.google.common.collect.Lists;
4+
import com.mojang.brigadier.CommandDispatcher;
45
import com.mojang.brigadier.tree.CommandNode;
56
import com.mojang.brigadier.tree.RootCommandNode;
7+
import net.kunmc.lab.commandlib.util.bukkit.BukkitUtil;
8+
import net.kunmc.lab.commandlib.util.bukkit.MinecraftVersion;
69
import net.kunmc.lab.commandlib.util.nms.command.NMSCommandDispatcher;
710
import net.kunmc.lab.commandlib.util.nms.command.NMSVanillaCommandWrapper;
811
import net.kunmc.lab.commandlib.util.nms.server.NMSCraftServer;
@@ -54,32 +57,47 @@ private void enable() {
5457
@Override
5558
public void run() {
5659
registeredCommands.addAll(new CommandNodeCreator<>(commands).build());
57-
NMSCommandDispatcher dispatcher = NMSCraftServer.create(plugin.getServer())
58-
.getServer()
59-
.getCommandDispatcher();
60-
RootCommandNode root = dispatcher.getBrigadier()
61-
.getRoot();
6260
registeredCommands.forEach(x -> {
63-
root.addChild(x);
64-
6561
try {
6662
CommandMap commandMap = ((CommandMap) NMSCraftServer.create()
6763
.getValue("commandMap"));
6864
Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands");
6965
knownCommandsField.setAccessible(true);
7066
Map<String, org.bukkit.command.Command> knownCommands = ((Map<String, org.bukkit.command.Command>) knownCommandsField.get(
7167
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+
}
7598
} catch (Exception e) {
7699
throw new RuntimeException(e);
77100
}
78-
79-
root.getChild("execute")
80-
.getChild("run")
81-
.getRedirect()
82-
.addChild(x);
83101
});
84102

85103
commands.stream()

bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestBase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,8 @@ protected final String getKey() {
4343
public final List<TestResult> results() {
4444
return new ArrayList<>(Collections.unmodifiableCollection(resultMap.values()));
4545
}
46+
47+
public final void clearResults() {
48+
resultMap.clear();
49+
}
4650
}

bukkit/test_plugin_common/src/main/java/net/kunmc/lab/testplugin/TestMain.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public void runAllTests(Consumer<List<TestResult>> consumer) {
5959
.flatMap(x -> x.results()
6060
.stream())
6161
.collect(Collectors.toList()));
62+
63+
tests.forEach(TestBase::clearResults);
6264
};
6365

6466
mainCommand.addChildren(new Command("rerun") {{

0 commit comments

Comments
 (0)