diff options
author | Jason Penilla <[email protected]> | 2024-07-30 11:28:05 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2024-07-30 11:28:05 -0700 |
commit | 67d414a9274232ad68deb3d9b08bf1f7bc699108 (patch) | |
tree | 9a24aef3c662d273f3f6254456c4a67e622bf44c | |
parent | 227544cfc78c855d1209f8ea96dd51698199b45a (diff) | |
download | Paper-67d414a9274232ad68deb3d9b08bf1f7bc699108.tar.gz Paper-67d414a9274232ad68deb3d9b08bf1f7bc699108.zip |
Allow plugin aliases to override vanilla commands (#11186)
fixes #11035
-rw-r--r-- | patches/server/0972-Brigadier-based-command-API.patch | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/patches/server/0972-Brigadier-based-command-API.patch b/patches/server/0972-Brigadier-based-command-API.patch index d98a2a98c3..4edd28ec6c 100644 --- a/patches/server/0972-Brigadier-based-command-API.patch +++ b/patches/server/0972-Brigadier-based-command-API.patch @@ -686,10 +686,10 @@ index 0000000000000000000000000000000000000000..1b1642f306771f029e6214a2e2ebebb6 +} diff --git a/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java b/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java new file mode 100644 -index 0000000000000000000000000000000000000000..a3e128bde0fa4ab0ecab4172f02288a29b9fddc7 +index 0000000000000000000000000000000000000000..da50ca4c6524e4f99ea4de2157d7ef900178d0f1 --- /dev/null +++ b/src/main/java/io/papermc/paper/command/brigadier/PaperCommands.java -@@ -0,0 +1,194 @@ +@@ -0,0 +1,198 @@ +package io.papermc.paper.command.brigadier; + +import com.google.common.base.Preconditions; @@ -699,6 +699,7 @@ index 0000000000000000000000000000000000000000..a3e128bde0fa4ab0ecab4172f02288a2 +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import com.mojang.brigadier.tree.CommandNode; +import com.mojang.brigadier.tree.LiteralCommandNode; ++import io.papermc.paper.command.brigadier.bukkit.BukkitCommandNode; +import io.papermc.paper.plugin.configuration.PluginMeta; +import io.papermc.paper.plugin.lifecycle.event.LifecycleEventOwner; +import io.papermc.paper.plugin.lifecycle.event.registrar.PaperRegistrar; @@ -839,9 +840,12 @@ index 0000000000000000000000000000000000000000..a3e128bde0fa4ab0ecab4172f02288a2 + return this.registerIntoDispatcher(new PluginCommandNode(aliasLiteral, plugin, redirect, description), override); + } + -+ private boolean registerIntoDispatcher(final PluginCommandNode node, final boolean override) { -+ final boolean hasChild = this.getDispatcher().getRoot().getChild(node.getLiteral()) != null; -+ if (!hasChild || override) { // Avoid merging behavior. Maybe something to look into in the future ++ private boolean registerIntoDispatcher(final PluginCommandNode node, boolean override) { ++ final @Nullable CommandNode<CommandSourceStack> existingChild = this.getDispatcher().getRoot().getChild(node.getLiteral()); ++ if (existingChild != null && !(existingChild instanceof PluginCommandNode) && !(existingChild instanceof BukkitCommandNode)) { ++ override = true; // override vanilla commands ++ } ++ if (existingChild == null || override) { // Avoid merging behavior. Maybe something to look into in the future + if (override) { + this.getDispatcher().getRoot().removeCommand(node.getLiteral()); + } |