diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java index b038c0f195..a9ec4805a5 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandAPIBukkit.java @@ -352,7 +352,8 @@ void updateHelpForCommands(List commands) { } } - addToHelpMap(helpTopicsToAdd); + // We have to use helpTopics.put (instead of .addTopic) because we're overwriting an existing help topic, not adding a new help topic + getHelpMap().putAll(helpTopicsToAdd); } @Override @@ -474,43 +475,59 @@ public LiteralCommandNode registerCommandNode(LiteralArgumentBuilder> children = commandNodeChildren.get(getBrigadierDispatcher().getRoot()); + CommandAPI.logInfo("Unregistering command /" + commandName); - if (force) { - // Remove them by force - for (String key : new HashSet<>(children.keySet())) { - if (key.contains(":") && key.split(":")[1].equalsIgnoreCase(commandName)) { - children.remove(key); - } - } - } + // Remove nodes from the Brigadier dispatcher + RootCommandNode brigRoot = getBrigadierDispatcher().getRoot(); + commandNodeChildren.get(brigRoot).remove(commandName); + commandNodeLiterals.get(brigRoot).remove(commandName); + // We really only expect commands to be represented as literals, but it is technically possible + // to put an ArgumentCommandNode in here, so we'll check + commandNodeArguments.get(brigRoot).remove(commandName); - // Otherwise, just remove them normally - children.remove(commandName); - commandNodeLiterals.get(getBrigadierDispatcher().getRoot()).remove(commandName); - commandNodeArguments.get(getBrigadierDispatcher().getRoot()).remove(commandName); - - if(!CommandAPI.canRegister()) { + if (!CommandAPI.canRegister() || force) { // Bukkit is done with normal command stuff, so we have to modify their CommandMap ourselves + // If we're forcing, we'll also go here to make sure commands are really gone Map knownCommands = getKnownCommands(); - knownCommands.remove(commandName); + if (force) removeCommandNamespace(knownCommands, commandName); + + // Remove commands from the resources dispatcher + RootCommandNode resourcesRoot = getResourcesDispatcher().getRoot(); + Map> children = commandNodeChildren.get(resourcesRoot); + Map> literals = commandNodeLiterals.get(resourcesRoot); + Map> arguments = commandNodeArguments.get(resourcesRoot); + children.remove(commandName); + literals.remove(commandName); + arguments.remove(commandName); + + // Since the commands in here are copied from Bukkit's map, there may be namespaced versions of the command, which we should remove if (force) { - for (String key : new HashSet<>(knownCommands.keySet())) { - if (key.contains(":") && key.split(":")[1].equalsIgnoreCase(commandName)) { - knownCommands.remove(key); - } + removeCommandNamespace(children, commandName); + removeCommandNamespace(literals, commandName); + removeCommandNamespace(arguments, commandName); + } + + if (!CommandAPI.canRegister()) { + // If the server actually is running (not just force unregistering), we should also update help and notify players + getHelpMap().remove("/" + commandName); + + for (Player p : Bukkit.getOnlinePlayers()) { + resendPackets(p); } } } } + private void removeCommandNamespace(Map map, String commandName) { + for(String key : new HashSet<>(map.keySet())) { + if(key.contains(":") && key.split(":")[1].equalsIgnoreCase(commandName)) { + map.remove(key); + } + } + } + private Map getKnownCommands() { return commandMapKnownCommands.get((SimpleCommandMap) paper.getCommandMap()); } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/nms/NMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/nms/NMS.java index 0b7cf8722e..a8fe059ba8 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/nms/NMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/nms/NMS.java @@ -444,7 +444,7 @@ String getScoreHolderSingle(CommandContext cmdCtx, Strin HelpTopic generateHelpTopic(String commandName, String shortDescription, String fullDescription, String permission); - void addToHelpMap(Map helpTopicsToAdd); + Map getHelpMap(); Message generateMessageFromJson(String json); diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java index 4d290ac0f5..eba9e19df2 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.15/src/main/java/dev/jorel/commandapi/nms/NMS_1_15.java @@ -387,10 +387,8 @@ public ArgumentType _ArgumentVec3() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java index ee553a3a07..54bfc8c0ce 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.1/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R1.java @@ -405,10 +405,8 @@ public ArgumentType _ArgumentVec3() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java index 518bb9f37c..bd208eee05 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_R2.java @@ -404,10 +404,8 @@ public ArgumentType _ArgumentVec3() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java index 85c38253d7..ecde0a9c07 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.16.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_16_4_R3.java @@ -354,10 +354,8 @@ public final ArgumentType _ArgumentScoreholder(ArgumentSubType subType) { public ArgumentType _ArgumentVec3() { return ArgumentVec3.a(); } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java index 6b0ca1edd5..580eb072e2 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.17-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_17_Common.java @@ -36,7 +36,6 @@ import java.util.function.ToIntFunction; import com.mojang.brigadier.tree.LiteralCommandNode; -import dev.jorel.commandapi.preprocessor.Differs; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -241,10 +240,8 @@ public ArgumentType _ArgumentSyntheticBiome() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java index 72f237220e..1b77a10098 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18.2/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R2.java @@ -260,10 +260,8 @@ public ArgumentType _ArgumentSyntheticBiome() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java index 7de690fc3a..5675f6f3f7 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.18/src/main/java/dev/jorel/commandapi/nms/NMS_1_18_R1.java @@ -244,10 +244,8 @@ public ArgumentType _ArgumentSyntheticBiome() { } @Override - public void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java index d19d42c78d..6d21e5b9a9 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19-common/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_Common.java @@ -314,10 +314,10 @@ public final ArgumentType _ArgumentSyntheticBiome() { } @Override - public final void addToHelpMap(Map helpTopicsToAdd) { + public final Map getHelpMap() { // We have to use VarHandles to use helpTopics.put (instead of .addTopic) // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.3/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_3_R2.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.3/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_3_R2.java index d5b0abfad7..9b4fdee654 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.3/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_3_R2.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.3/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_3_R2.java @@ -225,10 +225,8 @@ public final ArgumentType _ArgumentSyntheticBiome() { } @Override - public final void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public final Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_4_R3.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_4_R3.java index 2cd89fb3bb..653e715eab 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_4_R3.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-1.19.4/src/main/java/dev/jorel/commandapi/nms/NMS_1_19_4_R3.java @@ -224,10 +224,8 @@ public final ArgumentType _ArgumentSyntheticBiome() { } @Override - public final void addToHelpMap(Map helpTopicsToAdd) { - // We have to use VarHandles to use helpTopics.put (instead of .addTopic) - // because we're updating an existing help topic, not adding a new help topic - helpMapTopics.get((SimpleHelpMap) Bukkit.getServer().getHelpMap()).putAll(helpTopicsToAdd); + public final Map getHelpMap() { + return helpMapTopics.get((SimpleHelpMap) Bukkit.getHelpMap()); } @Override diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-nms-common/src/main/java/dev/jorel/commandapi/nms/NMS_Common.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-nms-common/src/main/java/dev/jorel/commandapi/nms/NMS_Common.java index 35e65dd8fe..72b98b95d2 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-nms-common/src/main/java/dev/jorel/commandapi/nms/NMS_Common.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-nms/commandapi-bukkit-nms-common/src/main/java/dev/jorel/commandapi/nms/NMS_Common.java @@ -274,7 +274,7 @@ public final ArgumentType _ArgumentVec3() { @Override @Unimplemented(because = REQUIRES_CRAFTBUKKIT, classNamed = "SimpleHelpMap") - public abstract void addToHelpMap(Map helpTopicsToAdd); + public abstract Map getHelpMap(); @Override @Unimplemented(because = VERSION_SPECIFIC_IMPLEMENTATION) diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.16.5/src/main/java/dev/jorel/commandapi/test/MockNMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.16.5/src/main/java/dev/jorel/commandapi/test/MockNMS.java index 2e5dde09ca..d96649526c 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.16.5/src/main/java/dev/jorel/commandapi/test/MockNMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.16.5/src/main/java/dev/jorel/commandapi/test/MockNMS.java @@ -19,7 +19,9 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import be.seeseemelk.mockbukkit.help.HelpMapMock; import com.mojang.brigadier.tree.LiteralCommandNode; +import dev.jorel.commandapi.SafeVarHandle; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -91,6 +93,8 @@ import net.minecraft.server.v1_16_R3.WorldServer; public class MockNMS extends Enums { + private static final SafeVarHandle> helpMapTopics = + SafeVarHandle.ofOrNull(HelpMapMock.class, "topics", "topics", Map.class); static { CodeSource src = PotionEffectType.class.getProtectionDomain().getCodeSource(); @@ -589,4 +593,8 @@ public HelpTopic generateHelpTopic(String commandName, String shortDescription, return baseNMS.generateHelpTopic(commandName, shortDescription, fullDescription, permission); } + @Override + public Map getHelpMap() { + return helpMapTopics.get((HelpMapMock) Bukkit.getHelpMap()); + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.17/src/main/java/dev/jorel/commandapi/test/MockNMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.17/src/main/java/dev/jorel/commandapi/test/MockNMS.java index d0fd90f811..e2d8f256ac 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.17/src/main/java/dev/jorel/commandapi/test/MockNMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.17/src/main/java/dev/jorel/commandapi/test/MockNMS.java @@ -18,7 +18,9 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import be.seeseemelk.mockbukkit.help.HelpMapMock; import com.mojang.brigadier.tree.LiteralCommandNode; +import dev.jorel.commandapi.SafeVarHandle; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -92,6 +94,8 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria.RenderType; public class MockNMS extends Enums { + private static final SafeVarHandle> helpMapTopics = + SafeVarHandle.ofOrNull(HelpMapMock.class, "topics", "topics", Map.class); static ServerAdvancementManager advancementDataWorld = new ServerAdvancementManager(null); @@ -579,4 +583,8 @@ public HelpTopic generateHelpTopic(String commandName, String shortDescription, return baseNMS.generateHelpTopic(commandName, shortDescription, fullDescription, permission); } + @Override + public Map getHelpMap() { + return helpMapTopics.get((HelpMapMock) Bukkit.getHelpMap()); + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.18/src/main/java/dev/jorel/commandapi/test/MockNMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.18/src/main/java/dev/jorel/commandapi/test/MockNMS.java index 5e835c0277..876ae764e1 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.18/src/main/java/dev/jorel/commandapi/test/MockNMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.18/src/main/java/dev/jorel/commandapi/test/MockNMS.java @@ -20,7 +20,9 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import be.seeseemelk.mockbukkit.help.HelpMapMock; import com.mojang.brigadier.tree.LiteralCommandNode; +import dev.jorel.commandapi.SafeVarHandle; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -97,6 +99,8 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria.RenderType; public class MockNMS extends Enums { + private static final SafeVarHandle> helpMapTopics = + SafeVarHandle.ofOrNull(HelpMapMock.class, "topics", "topics", Map.class); static { CodeSource src = PotionEffectType.class.getProtectionDomain().getCodeSource(); @@ -615,4 +619,8 @@ public HelpTopic generateHelpTopic(String commandName, String shortDescription, return baseNMS.generateHelpTopic(commandName, shortDescription, fullDescription, permission); } + @Override + public Map getHelpMap() { + return helpMapTopics.get((HelpMapMock) Bukkit.getHelpMap()); + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java index 453a6108d2..413a55861a 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.2/src/main/java/dev/jorel/commandapi/test/MockNMS.java @@ -20,7 +20,9 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import be.seeseemelk.mockbukkit.help.HelpMapMock; import com.mojang.brigadier.tree.LiteralCommandNode; +import dev.jorel.commandapi.SafeVarHandle; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -95,6 +97,8 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria.RenderType; public class MockNMS extends Enums { + private static final SafeVarHandle> helpMapTopics = + SafeVarHandle.ofOrNull(HelpMapMock.class, "topics", "topics", Map.class); static { CodeSource src = PotionEffectType.class.getProtectionDomain().getCodeSource(); @@ -796,4 +800,8 @@ public HelpTopic generateHelpTopic(String commandName, String shortDescription, return baseNMS.generateHelpTopic(commandName, shortDescription, fullDescription, permission); } + @Override + public Map getHelpMap() { + return helpMapTopics.get((HelpMapMock) Bukkit.getHelpMap()); + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.4/src/main/java/dev/jorel/commandapi/test/MockNMS.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.4/src/main/java/dev/jorel/commandapi/test/MockNMS.java index 573a37f983..3dfca64469 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.4/src/main/java/dev/jorel/commandapi/test/MockNMS.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl-1.19.4/src/main/java/dev/jorel/commandapi/test/MockNMS.java @@ -20,7 +20,9 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; +import be.seeseemelk.mockbukkit.help.HelpMapMock; import com.mojang.brigadier.tree.LiteralCommandNode; +import dev.jorel.commandapi.SafeVarHandle; import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Location; @@ -96,6 +98,8 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria.RenderType; public class MockNMS extends Enums { + private static final SafeVarHandle> helpMapTopics = + SafeVarHandle.ofOrNull(HelpMapMock.class, "topics", "topics", Map.class); static { CodeSource src = PotionEffectType.class.getProtectionDomain().getCodeSource(); @@ -807,4 +811,8 @@ public HelpTopic generateHelpTopic(String commandName, String shortDescription, return baseNMS.generateHelpTopic(commandName, shortDescription, fullDescription, permission); } + @Override + public Map getHelpMap() { + return helpMapTopics.get((HelpMapMock) Bukkit.getHelpMap()); + } } diff --git a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl/src/main/java/dev/jorel/commandapi/test/MockPlatform.java b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl/src/main/java/dev/jorel/commandapi/test/MockPlatform.java index 2158db3956..53bef2a980 100644 --- a/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl/src/main/java/dev/jorel/commandapi/test/MockPlatform.java +++ b/commandapi-platforms/commandapi-bukkit/commandapi-bukkit-test/commandapi-bukkit-test-impl/src/main/java/dev/jorel/commandapi/test/MockPlatform.java @@ -8,13 +8,10 @@ import dev.jorel.commandapi.CommandAPIBukkit; import dev.jorel.commandapi.commandsenders.BukkitCommandSender; import dev.jorel.commandapi.wrappers.ParticleData; -import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.Particle; import org.bukkit.Sound; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.help.HelpTopic; import org.bukkit.inventory.ItemFactory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffectType; @@ -31,7 +28,6 @@ import java.util.stream.Collectors; public abstract class MockPlatform extends CommandAPIBukkit { - /***************** * Instantiation * *****************/ @@ -83,18 +79,6 @@ public final BukkitCommandSender getSenderForCommand(Co return getCommandSenderFromCommandSource(cmdCtx.getSource()); } - @Override - public final void addToHelpMap(Map helpTopicsToAdd) { - // We don't want to call the NMS implementation of addToHelpMap because - // that uses reflection to access SimpleHelpMap. Luckily for us, the - // HelpMapMock's addTopic implementation is exactly what we want! - it - // uses Map#put() with no restrictions, whereas SimpleHelpMap#addTopic - // only adds the help topic if the topic name doesn't already exist - for(HelpTopic topic : helpTopicsToAdd.values()) { - Bukkit.getServer().getHelpMap().addTopic(topic); - } - } - @Override public final String convert(ItemStack is) { throw new UnimplementedError();