summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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