summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nms-patches/CommandBlockListenerAbstract.patch14
-rw-r--r--nms-patches/PlayerSelector.patch18
-rw-r--r--src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java29
3 files changed, 17 insertions, 44 deletions
diff --git a/nms-patches/CommandBlockListenerAbstract.patch b/nms-patches/CommandBlockListenerAbstract.patch
index e38c7440..593e8ef2 100644
--- a/nms-patches/CommandBlockListenerAbstract.patch
+++ b/nms-patches/CommandBlockListenerAbstract.patch
@@ -1,5 +1,5 @@
---- ../work/decompile-8eb82bde//net/minecraft/server/CommandBlockListenerAbstract.java 2014-12-05 23:10:24.921614234 +0000
-+++ src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java 2014-12-05 23:04:53.325621594 +0000
+--- ../work/decompile-8eb82bde/net/minecraft/server/CommandBlockListenerAbstract.java 2014-12-11 20:04:50.493619968 +0000
++++ src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java 2014-12-11 20:02:45.005621331 +0000
@@ -4,6 +4,13 @@
import java.util.Date;
import java.util.concurrent.Callable;
@@ -34,7 +34,7 @@
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.a(throwable, "Executing command block");
CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Command to be executed");
-@@ -91,8 +102,123 @@
+@@ -91,8 +102,129 @@
} else {
this.b = 0;
}
@@ -69,7 +69,13 @@
+ commandBlockCommand = commandMap.getCommand("minecraft:" + args[0]);
+ }
+ if (commandBlockCommand instanceof VanillaCommandWrapper) {
-+ return ((VanillaCommandWrapper) commandBlockCommand).dispatchVanillaCommandBlock(sender, command);
++ command = command.trim();
++ if (command.startsWith("/")) {
++ command = command.substring(1);
++ }
++ String as[] = command.split(" ");
++ as = VanillaCommandWrapper.dropFirstArgument(as);
++ return ((VanillaCommandWrapper) commandBlockCommand).dispatchVanillaCommand(sender, as);
+ }
+
+ // Make sure this is a valid command
diff --git a/nms-patches/PlayerSelector.patch b/nms-patches/PlayerSelector.patch
index a31e8db6..c0b028ba 100644
--- a/nms-patches/PlayerSelector.patch
+++ b/nms-patches/PlayerSelector.patch
@@ -1,18 +1,6 @@
---- ../work/decompile-8eb82bde//net/minecraft/server/PlayerSelector.java 2014-12-02 20:23:52.649621319 +0000
-+++ src/main/java/net/minecraft/server/PlayerSelector.java 2014-12-02 20:22:46.409622789 +0000
-@@ -52,6 +52,11 @@
- }
-
- public static List getPlayers(ICommandListener icommandlistener, String s, Class oclass) {
-+ // CraftBukkit start - disable playerselections for ICommandListeners other than command blocks
-+ if (!(icommandlistener instanceof CommandBlockListenerAbstract)) {
-+ return com.google.common.collect.ImmutableList.of();
-+ }
-+ // CraftBukkit end
- Matcher matcher = PlayerSelector.a.matcher(s);
-
- if (matcher.matches() && icommandlistener.a(1, "@")) {
-@@ -97,7 +102,7 @@
+--- ../work/decompile-8eb82bde/net/minecraft/server/PlayerSelector.java 2014-12-11 20:04:51.273619960 +0000
++++ src/main/java/net/minecraft/server/PlayerSelector.java 2014-12-11 20:03:19.893620952 +0000
+@@ -97,7 +97,7 @@
if (h(map)) {
arraylist.add(icommandlistener.getWorld());
} else {
diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
index a6131d6b..3ccbd775 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
@@ -1,5 +1,6 @@
package org.bukkit.craftbukkit.command;
+import com.google.common.base.Joiner;
import java.util.Iterator;
import java.util.List;
@@ -39,23 +40,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
if (!testPermission(sender)) return true;
ICommandListener icommandlistener = getListener(sender);
- // Some commands use the worldserver variable but we leave it full of null values,
- // so we must temporarily populate it with the world of the commandsender
- WorldServer[] prev = MinecraftServer.getServer().worldServer;
- MinecraftServer.getServer().worldServer = new WorldServer[]{(WorldServer) icommandlistener.getWorld()};
- try {
- vanillaCommand.execute(icommandlistener, args);
- } catch (ExceptionUsage exceptionusage) {
- ChatMessage chatmessage = new ChatMessage("commands.generic.usage", new Object[] {new ChatMessage(exceptionusage.getMessage(), exceptionusage.getArgs())});
- chatmessage.getChatModifier().setColor(EnumChatFormat.RED);
- icommandlistener.sendMessage(chatmessage);
- } catch (CommandException commandexception) {
- ChatMessage chatmessage = new ChatMessage(commandexception.getMessage(), commandexception.getArgs());
- chatmessage.getChatModifier().setColor(EnumChatFormat.RED);
- icommandlistener.sendMessage(chatmessage);
- } finally {
- MinecraftServer.getServer().worldServer = prev;
- }
+ dispatchVanillaCommand(icommandlistener, args);
return true;
}
@@ -67,14 +52,8 @@ public final class VanillaCommandWrapper extends VanillaCommand {
return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
}
- public final int dispatchVanillaCommandBlock(ICommandListener icommandlistener, String s) {
+ public final int dispatchVanillaCommand(ICommandListener icommandlistener, String[] as) {
// Copied from net.minecraft.server.CommandHandler
- s = s.trim();
- if (s.startsWith("/")) {
- s = s.substring(1);
- }
- String as[] = s.split(" ");
- as = dropFirstArgument(as);
int i = getPlayerListSize(as);
int j = 0;
// Some commands use the worldserver variable but we leave it full of null values,
@@ -174,7 +153,7 @@ public final class VanillaCommandWrapper extends VanillaCommand {
return -1;
}
- private String[] dropFirstArgument(String as[]) {
+ public static String[] dropFirstArgument(String as[]) {
String as1[] = new String[as.length - 1];
for (int i = 1; i < as.length; i++) {
as1[i - 1] = as[i];