summaryrefslogtreecommitdiffstats
path: root/nms-patches
diff options
context:
space:
mode:
authorThinkofname <thinkofdeath@spigotmc.org>2016-04-20 11:24:48 +0100
committerThinkofname <thinkofdeath@spigotmc.org>2016-04-20 11:24:48 +0100
commita4786c824ffe175a5c7847b6ad996db428b12b91 (patch)
tree937e88844e93d6623950a4048e2767e4c8eca2f4 /nms-patches
parentf060bba1ca5521422bfa163df3f0df5d713d9ba5 (diff)
downloadcraftbukkit-a4786c824ffe175a5c7847b6ad996db428b12b91.tar
craftbukkit-a4786c824ffe175a5c7847b6ad996db428b12b91.tar.gz
craftbukkit-a4786c824ffe175a5c7847b6ad996db428b12b91.tar.lz
craftbukkit-a4786c824ffe175a5c7847b6ad996db428b12b91.tar.xz
craftbukkit-a4786c824ffe175a5c7847b6ad996db428b12b91.zip
SPIGOT-2134: Support /execute being chained
Diffstat (limited to 'nms-patches')
-rw-r--r--nms-patches/CommandExecute.patch43
1 files changed, 32 insertions, 11 deletions
diff --git a/nms-patches/CommandExecute.patch b/nms-patches/CommandExecute.patch
index 28b0d55c..ee780904 100644
--- a/nms-patches/CommandExecute.patch
+++ b/nms-patches/CommandExecute.patch
@@ -11,23 +11,44 @@
public class CommandExecute extends CommandAbstract {
-@@ -97,22 +101,48 @@
+@@ -49,7 +53,10 @@
+ }
+
+ String s = a(astring, b0);
+- ICommandListener icommandlistener1 = new ICommandListener() {
++ // CraftBukkit start - name class
++ class ProxyListener implements ICommandListener {
++ private final ICommandListener base = icommandlistener;
++ // CraftBukkit end
+ public String getName() {
+ return entity.getName();
+ }
+@@ -94,25 +101,57 @@
+ return entity.h();
+ }
+ };
++ ICommandListener icommandlistener1 = new ProxyListener(); // CraftBukkit
ICommandHandler icommandhandler = minecraftserver.getCommandHandler();
try {
- int j = icommandhandler.a(icommandlistener1, s);
+ // CraftBukkit start
+ org.bukkit.command.CommandSender sender = null;
-+ if (icommandlistener instanceof DedicatedServer) {
-+ sender = MinecraftServer.getServer().server.getConsoleSender();
-+ } else if (icommandlistener instanceof CommandBlockListenerAbstract) {
-+ sender = ((CommandBlockListenerAbstract) icommandlistener).sender;
-+ } else if (VanillaCommandWrapper.lastSender != null) {
-+ sender = VanillaCommandWrapper.lastSender;
-+ }else if (icommandlistener.f() != null) {
-+ sender = icommandlistener.f().getBukkitEntity();
-+ } else {
-+ throw new CommandException("Unhandled executor " + icommandlistener.getClass().getSimpleName(), new Object[0]);
++ ICommandListener listener = icommandlistener;
++ while (sender == null) {
++ if (listener instanceof DedicatedServer) {
++ sender = minecraftserver.server.getConsoleSender();
++ } else if (listener instanceof CommandBlockListenerAbstract) {
++ sender = ((CommandBlockListenerAbstract) listener).sender;
++ } else if (listener instanceof ProxyListener) {
++ listener = ((ProxyListener) icommandlistener).base; // Search deeper
++ } else if (VanillaCommandWrapper.lastSender != null) {
++ sender = VanillaCommandWrapper.lastSender;
++ } else if (listener.f() != null) {
++ sender = listener.f().getBukkitEntity();
++ } else {
++ throw new CommandException("Unhandled executor " + icommandlistener.getClass().getSimpleName(), new Object[0]);
++ }
+ }
+ int j = CommandBlockListenerAbstract.executeCommand(icommandlistener1, new ProxiedNativeCommandSender(icommandlistener1, sender, entity.getBukkitEntity()), s);
+ // CraftBukkit end