Commits
md_5 authored 6da82662bb8
1 1 | --- a/net/minecraft/commands/CommandDispatcher.java |
2 2 | +++ b/net/minecraft/commands/CommandDispatcher.java |
3 - | |
3 + | |
4 4 | import net.minecraft.util.profiling.jfr.JvmProfiler; |
5 5 | import org.slf4j.Logger; |
6 6 | |
7 7 | +// CraftBukkit start |
8 8 | +import com.google.common.base.Joiner; |
9 9 | +import java.util.Collection; |
10 10 | +import java.util.LinkedHashSet; |
11 11 | +import org.bukkit.event.player.PlayerCommandSendEvent; |
12 12 | +import org.bukkit.event.server.ServerCommandEvent; |
13 13 | +// CraftBukkit end |
14 14 | + |
15 15 | public class CommandDispatcher { |
16 16 | |
17 17 | private static final Logger LOGGER = LogUtils.getLogger(); |
18 - | |
18 + | |
19 19 | private final com.mojang.brigadier.CommandDispatcher<CommandListenerWrapper> dispatcher = new com.mojang.brigadier.CommandDispatcher(); |
20 20 | |
21 21 | public CommandDispatcher(CommandDispatcher.ServerType commanddispatcher_servertype, CommandBuildContext commandbuildcontext) { |
22 22 | + this(); // CraftBukkit |
23 23 | CommandAdvancement.register(this.dispatcher); |
24 24 | CommandAttribute.register(this.dispatcher); |
25 25 | CommandExecute.register(this.dispatcher, commandbuildcontext); |
26 - | |
26 + | |
27 27 | CommandPublish.register(this.dispatcher); |
28 28 | } |
29 29 | |
30 30 | + // CraftBukkit start |
31 31 | + } |
32 32 | + |
33 33 | + public CommandDispatcher() { |
34 34 | + // CraftBukkkit end |
35 35 | this.dispatcher.setConsumer((commandcontext, flag, i) -> { |
36 36 | ((CommandListenerWrapper) commandcontext.getSource()).onCommandComplete(commandcontext, flag, i); |
37 37 | }); |
38 + | |
39 + | return new ParseResults(commandcontextbuilder1, parseresults.getReader(), parseresults.getExceptions()); |
38 40 | } |
39 41 | |
40 42 | + // CraftBukkit start |
41 43 | + public int dispatchServerCommand(CommandListenerWrapper sender, String command) { |
42 44 | + Joiner joiner = Joiner.on(" "); |
43 45 | + if (command.startsWith("/")) { |
44 46 | + command = command.substring(1); |
45 47 | + } |
46 48 | + |
47 49 | + ServerCommandEvent event = new ServerCommandEvent(sender.getBukkitSender(), command); |
63 65 | + || cmd.equalsIgnoreCase("pardon") || cmd.equalsIgnoreCase("pardon-ip") || cmd.equalsIgnoreCase("reload")) { |
64 66 | + return 0; |
65 67 | + } |
66 68 | + |
67 69 | + // Handle vanilla commands; |
68 70 | + if (sender.getLevel().getCraftServer().getCommandBlockOverride(args[0])) { |
69 71 | + args[0] = "minecraft:" + args[0]; |
70 72 | + } |
71 73 | + |
72 74 | + String newCommand = joiner.join(args); |
73 - | + return this.performCommand(sender, newCommand, newCommand); |
75 + | + return this.performPrefixedCommand(sender, newCommand, newCommand); |
74 76 | + } |
75 77 | + // CraftBukkit end |
76 78 | + |
77 79 | public int performPrefixedCommand(CommandListenerWrapper commandlistenerwrapper, String s) { |
78 - | - return this.performCommand(commandlistenerwrapper, s.startsWith("/") ? s.substring(1) : s); |
79 80 | + // CraftBukkit start |
80 81 | + return this.performPrefixedCommand(commandlistenerwrapper, s, s); |
81 82 | + } |
82 83 | + |
83 84 | + public int performPrefixedCommand(CommandListenerWrapper commandlistenerwrapper, String s, String label) { |
84 - | + return this.performCommand(commandlistenerwrapper, s.startsWith("/") ? s.substring(1) : s, label); |
85 + | s = s.startsWith("/") ? s.substring(1) : s; |
86 + | - return this.performCommand(this.dispatcher.parse(s, commandlistenerwrapper), s); |
87 + | + return this.performCommand(this.dispatcher.parse(s, commandlistenerwrapper), s, label); |
85 88 | + // CraftBukkit end |
86 89 | } |
87 90 | |
88 - | public int performCommand(CommandListenerWrapper commandlistenerwrapper, String s) { |
89 - | + return this.performCommand(commandlistenerwrapper, s, s); |
91 + | public int performCommand(ParseResults<CommandListenerWrapper> parseresults, String s) { |
92 + | + return this.performCommand(parseresults, s, s); |
90 93 | + } |
91 94 | + |
92 - | + public int performCommand(CommandListenerWrapper commandlistenerwrapper, String s, String label) { // CraftBukkit |
93 - | StringReader stringreader = new StringReader(s); |
95 + | + public int performCommand(ParseResults<CommandListenerWrapper> parseresults, String s, String label) { // CraftBukkit |
96 + | CommandListenerWrapper commandlistenerwrapper = (CommandListenerWrapper) parseresults.getContext().getSource(); |
94 97 | |
95 98 | commandlistenerwrapper.getServer().getProfiler().push(() -> { |
96 - | |
99 + | |
97 100 | if (commandsyntaxexception.getInput() != null && commandsyntaxexception.getCursor() >= 0) { |
98 101 | int j = Math.min(commandsyntaxexception.getInput().length(), commandsyntaxexception.getCursor()); |
99 102 | IChatMutableComponent ichatmutablecomponent = IChatBaseComponent.empty().withStyle(EnumChatFormat.GRAY).withStyle((chatmodifier) -> { |
100 103 | - return chatmodifier.withClickEvent(new ChatClickable(ChatClickable.EnumClickAction.SUGGEST_COMMAND, "/" + s)); |
101 104 | + return chatmodifier.withClickEvent(new ChatClickable(ChatClickable.EnumClickAction.SUGGEST_COMMAND, label)); // CraftBukkit |
102 105 | }); |
103 106 | |
104 107 | if (j > 10) { |
105 - | |
108 + | |
106 109 | } |
107 110 | |
108 111 | public void sendCommands(EntityPlayer entityplayer) { |
109 112 | - Map<CommandNode<CommandListenerWrapper>, CommandNode<ICompletionProvider>> map = Maps.newHashMap(); |
110 113 | + // CraftBukkit start |
111 114 | + // Register Vanilla commands into builtRoot as before |
112 115 | + Map<CommandNode<CommandListenerWrapper>, CommandNode<ICompletionProvider>> map = Maps.newIdentityHashMap(); // Use identity to prevent aliasing issues |
113 116 | + RootCommandNode vanillaRoot = new RootCommandNode(); |
114 117 | + |
115 118 | + RootCommandNode<CommandListenerWrapper> vanilla = entityplayer.server.vanillaCommandDispatcher.getDispatcher().getRoot(); |
133 136 | + // Remove labels that were removed during the event |
134 137 | + for (String orig : bukkit) { |
135 138 | + if (!event.getCommands().contains(orig)) { |
136 139 | + rootcommandnode.removeCommand(orig); |
137 140 | + } |
138 141 | + } |
139 142 | + // CraftBukkit end |
140 143 | entityplayer.connection.send(new PacketPlayOutCommands(rootcommandnode)); |
141 144 | } |
142 145 | |
143 - | |
146 + | |
144 147 | CommandNode<CommandListenerWrapper> commandnode2 = (CommandNode) iterator.next(); |
145 148 | |
146 149 | if (commandnode2.canUse(commandlistenerwrapper)) { |
147 150 | - ArgumentBuilder<ICompletionProvider, ?> argumentbuilder = commandnode2.createBuilder(); |
148 151 | + ArgumentBuilder argumentbuilder = commandnode2.createBuilder(); // CraftBukkit - decompile error |
149 152 | |
150 153 | argumentbuilder.requires((icompletionprovider) -> { |
151 154 | return true; |
152 - | |
155 + | |
153 156 | argumentbuilder.redirect((CommandNode) map.get(argumentbuilder.getRedirect())); |
154 157 | } |
155 158 | |
156 159 | - CommandNode<ICompletionProvider> commandnode3 = argumentbuilder.build(); |
157 160 | + CommandNode commandnode3 = argumentbuilder.build(); // CraftBukkit - decompile error |
158 161 | |
159 162 | map.put(commandnode2, commandnode3); |
160 163 | commandnode1.addChild(commandnode3); |