package net.aufdemrand.denizen.utilities; import net.aufdemrand.denizen.objects.dEntity; import net.aufdemrand.denizen.objects.dNPC; import net.aufdemrand.denizen.objects.dPlayer; import net.aufdemrand.denizen.scripts.containers.core.CommandScriptContainer; import net.aufdemrand.denizen.tags.BukkitTagContext; import net.aufdemrand.denizen.utilities.depends.Depends; import net.aufdemrand.denizencore.objects.*; import net.aufdemrand.denizencore.tags.TagManager; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.npc.NPC; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class DenizenCommand extends Command { private CommandScriptContainer script; public DenizenCommand(CommandScriptContainer script) { super(script.getCommandName(), script.getDescription(), script.getUsage(), script.getAliases()); String permission = script.getPermission(); if (permission != null && !permission.equals("")) { this.setPermission(permission); String permissionMessage = script.getPermissionMessage(); if (permissionMessage != null && !permissionMessage.equals("")) { this.setPermissionMessage(permissionMessage); } } this.script = script; } public boolean canSeeHelp(CommandSender commandSender) { if (!script.hasAllowedHelpProcedure()) { return true; } if (!testPermissionSilent(commandSender)) { return false; } Map<String, dObject> context = new HashMap<String, dObject>(); dPlayer player = null; dNPC npc = null; if (commandSender instanceof Player) { Player pl = (Player) commandSender; if (!dEntity.isNPC(pl)) { player = dPlayer.mirrorBukkitPlayer(pl); } context.put("server", Element.FALSE); } else { context.put("server", Element.TRUE); } return script.runAllowedHelpProcedure(player, npc, context); } @Override public boolean testPermission(CommandSender target) { if (testPermissionSilent(target)) { return true; } String permissionMessage = getPermissionMessage(); if (permissionMessage == null) { target.sendMessage(ChatColor.RED + "I'm sorry, but you do not have permission to perform this command. " + "Please contact the server administrators if you believe that this is in error."); } else if (permissionMessage.length() != 0) { dPlayer player = null; dNPC npc = null; if (target instanceof Player) { Player pl = (Player) target; if (dEntity.isCitizensNPC(pl)) { npc = dNPC.fromEntity(pl); } else { player = dPlayer.mirrorBukkitPlayer(pl); } } if (Depends.citizens != null && npc == null) { NPC citizen = CitizensAPI.getDefaultNPCSelector().getSelected(target); if (citizen != null) { npc = dNPC.mirrorCitizensNPC(citizen); } } // <permission> is built into Bukkit... let's keep it here for (String line : TagManager.tag(permissionMessage.replace("<permission>", getPermission()), new BukkitTagContext(player, npc, false, null, false, new dScript(script))).split("\n")) { target.sendMessage(line); } } return false; } @Override public boolean execute(CommandSender commandSender, String commandLabel, String[] arguments) { if (!testPermission(commandSender)) { return true; } Map<String, dObject> context = new HashMap<String, dObject>(); String raw_args = ""; if (arguments.length > 0) { StringBuilder rawArgsBuilder = new StringBuilder(); for (String arg : arguments) { rawArgsBuilder.append(arg).append(' '); } raw_args = rawArgsBuilder.substring(0, rawArgsBuilder.length() - 1); } List<String> args = Arrays.asList(aH.buildArgs(raw_args)); context.put("args", new dList(args)); context.put("raw_args", new Element(raw_args)); context.put("alias", new Element(commandLabel)); dPlayer player = null; dNPC npc = null; if (commandSender instanceof Player) { Player pl = (Player) commandSender; if (dEntity.isCitizensNPC(pl)) { npc = dNPC.fromEntity(pl); } else { player = dPlayer.mirrorBukkitPlayer(pl); } context.put("server", Element.FALSE); } else { context.put("server", Element.TRUE); } if (Depends.citizens != null && npc == null) { NPC citizen = CitizensAPI.getDefaultNPCSelector().getSelected(commandSender); if (citizen != null) { npc = dNPC.mirrorCitizensNPC(citizen); } } script.runCommandScript(player, npc, context); return true; } @Override public boolean isRegistered() { return true; } @Override public List<String> tabComplete(CommandSender commandSender, String alias, String[] arguments) { if (!script.hasTabCompleteProcedure()) { return super.tabComplete(commandSender, alias, arguments); } Map<String, dObject> context = new HashMap<String, dObject>(); String raw_args = ""; if (arguments.length > 0) { StringBuilder rawArgsBuilder = new StringBuilder(); for (String arg : arguments) { rawArgsBuilder.append(arg).append(' '); } raw_args = rawArgsBuilder.substring(0, rawArgsBuilder.length() - 1); } List<String> args = Arrays.asList(aH.buildArgs(raw_args)); context.put("args", new dList(args)); context.put("raw_args", new Element(raw_args)); context.put("alias", new Element(alias)); dPlayer player = null; dNPC npc = null; if (commandSender instanceof Player) { Player pl = (Player) commandSender; if (dEntity.isCitizensNPC(pl)) { npc = dNPC.fromEntity(pl); } else { player = dPlayer.mirrorBukkitPlayer(pl); } context.put("server", Element.FALSE); } else { context.put("server", Element.TRUE); } if (Depends.citizens != null && npc == null) { NPC citizen = CitizensAPI.getDefaultNPCSelector().getSelected(commandSender); if (citizen != null) { npc = dNPC.mirrorCitizensNPC(citizen); } } return script.runTabCompleteProcedure(player, npc, context); } }