diff --git a/src/main/java/net/minecraft/server/ConsoleCommandHandler.java b/src/main/java/net/minecraft/server/ConsoleCommandHandler.java index eb48f2d9be..d6f3bfb3c0 100644 --- a/src/main/java/net/minecraft/server/ConsoleCommandHandler.java +++ b/src/main/java/net/minecraft/server/ConsoleCommandHandler.java @@ -3,6 +3,12 @@ package net.minecraft.server; import java.util.Iterator; import java.util.Set; import java.util.logging.Logger; +// Craftbukkit start +import java.util.List; +import org.bukkit.craftbukkit.command.ServerCommandListener; +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.command.CommandSender; +// Craftbukkit end public class ConsoleCommandHandler { @@ -286,13 +292,38 @@ public class ConsoleCommandHandler { } private void print(String s, String s1) { - listener.sendMessage(s1); // CraftBukkit String s2 = s + ": " + s1; - this.server.serverConfigurationManager.j("\u00A77(" + s2 + ")"); + // CraftBukkit start + listener.sendMessage(s1); + informOps("\u00A77(" + s2 + ")"); + if (listener instanceof MinecraftServer) { + return; // Already logged so don't call a.info() + } + // CraftBukkit end a.info(s2); } + // CraftBukkit start + private void informOps(String msg) { + Packet3Chat packet3chat = new Packet3Chat(msg); + EntityPlayer sender = null; + if (listener instanceof ServerCommandListener) { + CommandSender commandSender = ((ServerCommandListener) listener).getSender(); + if (commandSender instanceof CraftPlayer) { + sender = ((CraftPlayer) commandSender).getHandle(); + } + } + List players = server.serverConfigurationManager.players; + for (int i = 0; i < players.size(); ++i) { + EntityPlayer entityPlayer = (EntityPlayer) players.get(i); + if (sender != entityPlayer && server.serverConfigurationManager.isOp(entityPlayer.name)) { + entityPlayer.netServerHandler.sendPacket(packet3chat); + } + } + } + // CraftBukkit end + private int a(String s, int i) { try { return Integer.parseInt(s); diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java index a63b4c972c..98b6d29c9a 100644 --- a/src/main/java/net/minecraft/server/NetServerHandler.java +++ b/src/main/java/net/minecraft/server/NetServerHandler.java @@ -695,19 +695,15 @@ public class NetServerHandler extends NetHandler implements ICommandListener { return; } - boolean targetPluginFound = false; - try { - targetPluginFound = server.dispatchCommand(player, s.substring(1)); + if (server.dispatchCommand(player, s.substring(1))) { + return; + } } catch (CommandException ex) { player.sendMessage(ChatColor.RED + "An internal error occurred while attempting to perform this command"); Logger.getLogger(NetServerHandler.class.getName()).log(Level.SEVERE, null, ex); return; } - - if (targetPluginFound) { - return; - } // CraftBukkit end if (s.toLowerCase().startsWith("/me ")) { @@ -728,9 +724,10 @@ public class NetServerHandler extends NetHandler implements ICommandListener { this.sendPacket(new Packet3Chat("\u00A7cThere\'s no player by that name online.")); } } + + /* CraftBukkit start - No longer neaded as we have already handled it server.dispatchCommand above. } else { String s1; - if (this.minecraftServer.serverConfigurationManager.isOp(this.player.name)) { s1 = s.substring(1); a.info(this.player.name + " issued server command: " + s1); @@ -739,6 +736,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener { s1 = s.substring(1); a.info(this.player.name + " tried command: " + s1); } + */ // CraftBukkit end } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 04246e2ff5..e245e549e9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -48,6 +48,7 @@ import org.bukkit.craftbukkit.inventory.CraftFurnaceRecipe; import org.bukkit.craftbukkit.inventory.CraftRecipe; import org.bukkit.craftbukkit.inventory.CraftShapedRecipe; import org.bukkit.craftbukkit.inventory.CraftShapelessRecipe; +import org.bukkit.craftbukkit.command.ServerCommandListener; import org.bukkit.scheduler.BukkitWorker; import org.bukkit.scheduler.BukkitTask; import org.bukkit.craftbukkit.scheduler.CraftScheduler; @@ -284,7 +285,7 @@ public final class CraftServer implements Server { } // See if the server can process this command - return console.consoleCommandHandler.handle(new ServerCommand(commandLine, new CommandListener(sender))); + return console.consoleCommandHandler.handle(new ServerCommand(commandLine, new ServerCommandListener(sender))); } public void reload() { @@ -451,25 +452,6 @@ public final class CraftServer implements Server { config.setDataSourceConfig(ds); } - // Inner class to capture the output of default server commands - class CommandListener implements ICommandListener { - private final CommandSender commandSender; - private final String prefix; - CommandListener(CommandSender commandSender) { - this.commandSender = commandSender; - String[] parts = commandSender.getClass().getName().split("\\."); - this.prefix = parts[parts.length-1]; - } - - public void sendMessage(String msg) { - this.commandSender.sendMessage(msg); - } - - public String getName() { - return this.prefix; - } - } - public boolean addRecipe(Recipe recipe) { CraftRecipe toAdd; if(recipe instanceof CraftRecipe) { diff --git a/src/main/java/org/bukkit/craftbukkit/command/ServerCommandListener.java b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandListener.java new file mode 100644 index 0000000000..f8d38d6a1f --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandListener.java @@ -0,0 +1,36 @@ +package org.bukkit.craftbukkit.command; + +import java.lang.reflect.Method; + +import net.minecraft.server.ICommandListener; + +import org.bukkit.command.CommandSender; + +public class ServerCommandListener implements ICommandListener { + private final CommandSender commandSender; + private final String prefix; + + public ServerCommandListener(CommandSender commandSender) { + this.commandSender = commandSender; + String[] parts = commandSender.getClass().getName().split("\\."); + this.prefix = parts[parts.length-1]; + } + + public void sendMessage(String msg) { + this.commandSender.sendMessage(msg); + } + + public CommandSender getSender() { + return commandSender; + } + + public String getName() { + try { + Method getName = commandSender.getClass().getMethod( "getName" ); + return (String) getName.invoke(commandSender); + } catch (Exception e) { + } + + return this.prefix; + } +} \ No newline at end of file