package org.bukkit.craftbukkit.command; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.command.ICommandSender; import org.bukkit.Server; import org.bukkit.command.Command; import org.bukkit.command.CommandException; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.SimpleCommandMap; import org.bukkit.craftbukkit.entity.CraftPlayer; import java.util.regex.Pattern; import static org.bukkit.util.Java15Compat.Arrays_copyOfRange; public class CraftSimpleCommandMap extends SimpleCommandMap { private static final Pattern PATTERN_ON_SPACE = Pattern.compile(" ", Pattern.LITERAL); private ICommandSender vanillaConsoleSender; // Cauldron public CraftSimpleCommandMap(Server server) { super(server); } /** * {@inheritDoc} */ public boolean dispatch(CommandSender sender, String commandLine) throws CommandException { String[] args = PATTERN_ON_SPACE.split(commandLine); if(args.length == 0) { return false; } String sentCommandLabel = args[0].toLowerCase(); Command target = getCommand(sentCommandLabel); if(target == null) { return false; } try { // Cauldron start - if command is a mod command, check permissions and route through vanilla if(target instanceof ModCustomCommand) { if(!target.testPermission(sender)) return true; if(sender instanceof ConsoleCommandSender) { FMLCommonHandler.instance().getMinecraftServerInstance().getCommandManager().executeCommand(this.vanillaConsoleSender, commandLine); } else FMLCommonHandler.instance().getMinecraftServerInstance().getCommandManager().executeCommand(((CraftPlayer) sender).getHandle(), commandLine); } else { // Cauldron end // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) target.execute(sender, sentCommandLabel, Arrays_copyOfRange(args, 1, args.length)); } } catch(CommandException ex) { throw ex; } catch(Throwable ex) { throw new CommandException("Unhandled exception executing '" + commandLine + "' in " + target, ex); } // return true as command was handled return true; } // Cauldron start - sets the vanilla console sender public void setVanillaConsoleSender(ICommandSender console) { this.vanillaConsoleSender = console; } // Cauldron end }