SPIGOT-3373: Fix /execute in gameloop functions

This commit is contained in:
md_5 2017-06-25 09:46:19 +10:00
parent 753a8e700d
commit 258575110f
3 changed files with 23 additions and 5 deletions

View File

@ -11,7 +11,7 @@
public class CommandExecute extends CommandAbstract {
@@ -59,26 +63,59 @@
@@ -59,26 +63,61 @@
}
String s = a(astring, b0);
@ -31,6 +31,8 @@
+ sender = minecraftserver.remoteConsole;
+ } else if (listener instanceof CommandBlockListenerAbstract) {
+ sender = ((CommandBlockListenerAbstract) listener).sender;
+ } else if (listener instanceof CustomFunctionData.CustomFunctionListener) {
+ sender = ((CustomFunctionData.CustomFunctionListener) listener).sender;
+ } else if (listener instanceof CommandListenerWrapper) {
+ listener = ((CommandListenerWrapper) listener).base; // Search deeper
+ } else if (VanillaCommandWrapper.lastSender != null) {

View File

@ -5,7 +5,7 @@
public void a(CustomFunctionData customfunctiondata, ICommandListener icommandlistener, ArrayDeque<CustomFunctionData.a> arraydeque, int i) {
- customfunctiondata.a().a(icommandlistener, this.a);
+ CommandBlockListenerAbstract.executeSafely(icommandlistener, new org.bukkit.craftbukkit.command.CraftFunctionCommandSender(icommandlistener), this.a); // CraftBukkit
+ CommandBlockListenerAbstract.executeSafely(icommandlistener, ((CustomFunctionData.CustomFunctionListener) icommandlistener).sender, this.a); // CraftBukkit
}
public String toString() {

View File

@ -1,6 +1,22 @@
--- a/net/minecraft/server/CustomFunctionData.java
+++ b/net/minecraft/server/CustomFunctionData.java
@@ -33,7 +33,7 @@
@@ -23,7 +23,14 @@
private CustomFunction f;
private final ArrayDeque<CustomFunctionData.a> g = new ArrayDeque();
private boolean h = false;
- private final ICommandListener i = new ICommandListener() {
+ // CraftBukkit start
+ private final ICommandListener i = new CustomFunctionListener();
+
+ public class CustomFunctionListener implements ICommandListener {
+
+ protected org.bukkit.command.CommandSender sender = new org.bukkit.craftbukkit.command.CraftFunctionCommandSender(this);
+ // CraftBukkit end
+
public String getName() {
return CustomFunctionData.this.e;
}
@@ -33,7 +40,7 @@
}
public World getWorld() {
@ -9,7 +25,7 @@
}
public MinecraftServer C_() {
@@ -57,7 +57,7 @@
@@ -57,7 +64,7 @@
}
public int c() {
@ -18,7 +34,7 @@
}
public Map<MinecraftKey, CustomFunction> d() {
@@ -65,7 +65,7 @@
@@ -65,7 +72,7 @@
}
public void e() {