From a4786c824ffe175a5c7847b6ad996db428b12b91 Mon Sep 17 00:00:00 2001 From: Thinkofname Date: Wed, 20 Apr 2016 11:24:48 +0100 Subject: SPIGOT-2134: Support /execute being chained --- nms-patches/CommandExecute.patch | 43 ++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 11 deletions(-) (limited to 'nms-patches') 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 -- cgit v1.2.3