Search in sources :

Example 31 with NPCTag

use of com.denizenscript.denizen.objects.NPCTag in project Denizen-For-Bukkit by DenizenScript.

the class NPCTagBase method navStuck.

// <--[action]
// @Actions
// stuck
// 
// @Triggers when the NPC's navigator is stuck.
// 
// @Context
// <context.action> returns 'teleport' or 'none'
// 
// @Determine
// "NONE" to do nothing.
// "TELEPORT" to teleport.
// 
// -->
@EventHandler
public void navStuck(NavigationStuckEvent event) {
    // Do the assignment script action
    if (!event.getNPC().hasTrait(AssignmentTrait.class)) {
        return;
    }
    NPCTag npc = new NPCTag(event.getNPC());
    Map<String, ObjectTag> context = new HashMap<>();
    context.put("action", new ElementTag(event.getAction() == TeleportStuckAction.INSTANCE ? "teleport" : "none"));
    ListTag determination = npc.action("stuck", null, context);
    if (determination.containsCaseInsensitive("none")) {
        event.setAction(null);
    }
    if (determination.containsCaseInsensitive("teleport")) {
        event.setAction(TeleportStuckAction.INSTANCE);
    }
}
Also used : AssignmentTrait(com.denizenscript.denizen.npc.traits.AssignmentTrait) ObjectTag(com.denizenscript.denizencore.objects.ObjectTag) HashMap(java.util.HashMap) NPCTag(com.denizenscript.denizen.objects.NPCTag) ElementTag(com.denizenscript.denizencore.objects.core.ElementTag) ListTag(com.denizenscript.denizencore.objects.core.ListTag) EventHandler(org.bukkit.event.EventHandler)

Example 32 with NPCTag

use of com.denizenscript.denizen.objects.NPCTag in project Denizen-For-Bukkit by DenizenScript.

the class ExSustainedCommandHandler method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command cmd, String alias, String[] args) {
    if (cmd.getName().equalsIgnoreCase("exs")) {
        List<Object> entries = new ArrayList<>();
        String entry = String.join(" ", args);
        boolean quiet = !Settings.showExDebug();
        if (entry.length() > 3 && entry.startsWith("-q ")) {
            quiet = !quiet;
            entry = entry.substring("-q ".length());
        }
        if (entry.length() < 2) {
            sender.sendMessage("/exs (-q) <denizen script command> (arguments)");
            return true;
        }
        TimedQueue queue = getOrMakeQueue(sender instanceof Player ? (Player) sender : null, quiet);
        if (!quiet && sender instanceof Player) {
            Player player = (Player) sender;
            queue.debugOutput = (s) -> {
                player.spigot().sendMessage(FormattedTextHelper.parse(s, net.md_5.bungee.api.ChatColor.WHITE));
            };
        } else {
            queue.debugOutput = null;
        }
        if (queue.isPaused() || queue.isDelayed()) {
            sender.sendMessage(ChatColor.YELLOW + "Sustained queue is currently paused or waiting, adding command to queue for later execution.");
        } else if (Settings.showExHelp()) {
            if (Debug.showDebug) {
                if (quiet) {
                    sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command... check the console for full debug output!");
                } else {
                    sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command...");
                }
            } else {
                sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command... to see debug, use /denizen debug");
            }
        }
        entries.add(entry);
        NPCTag npc = null;
        if (Depends.citizens != null && Depends.citizens.getNPCSelector().getSelected(sender) != null) {
            npc = new NPCTag(Depends.citizens.getNPCSelector().getSelected(sender));
        }
        List<ScriptEntry> scriptEntries = ScriptBuilder.buildScriptEntries(entries, null, new BukkitScriptEntryData(sender instanceof Player ? new PlayerTag((Player) sender) : null, npc));
        queue.addEntries(scriptEntries);
        if (!queue.is_started) {
            queue.start();
        } else {
            queue.onStart();
        }
        return true;
    }
    return false;
}
Also used : Player(org.bukkit.entity.Player) BukkitScriptEntryData(com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) ArrayList(java.util.ArrayList) NPCTag(com.denizenscript.denizen.objects.NPCTag) TimedQueue(com.denizenscript.denizencore.scripts.queues.core.TimedQueue) ScriptEntry(com.denizenscript.denizencore.scripts.ScriptEntry)

Example 33 with NPCTag

use of com.denizenscript.denizen.objects.NPCTag in project Denizen-For-Bukkit by DenizenScript.

the class DenizenCommand method canSeeHelp.

public boolean canSeeHelp(CommandSender commandSender) {
    if (!script.hasAllowedHelpProcedure()) {
        return true;
    }
    if (!testPermissionSilent(commandSender)) {
        return false;
    }
    Map<String, ObjectTag> context = new HashMap<>();
    PlayerTag player = null;
    NPCTag npc = null;
    if (commandSender instanceof Player) {
        Player pl = (Player) commandSender;
        if (!EntityTag.isNPC(pl)) {
            player = PlayerTag.mirrorBukkitPlayer(pl);
        }
        context.put("server", new ElementTag(false));
    } else {
        context.put("server", new ElementTag(true));
    }
    return script.runAllowedHelpProcedure(player, npc, context);
}
Also used : Player(org.bukkit.entity.Player) HashMap(java.util.HashMap) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) NPCTag(com.denizenscript.denizen.objects.NPCTag) ElementTag(com.denizenscript.denizencore.objects.core.ElementTag)

Example 34 with NPCTag

use of com.denizenscript.denizen.objects.NPCTag in project Denizen-For-Bukkit by DenizenScript.

the class ExCommandHandler method onCommand.

@Override
public boolean onCommand(CommandSender sender, Command cmd, String alias, String[] args) {
    if (cmd.getName().equalsIgnoreCase("ex")) {
        List<Object> entries = new ArrayList<>();
        String entry = String.join(" ", args);
        boolean quiet = !Settings.showExDebug();
        if (entry.length() > 3 && entry.startsWith("-q ")) {
            quiet = !quiet;
            entry = entry.substring("-q ".length());
        }
        if (entry.length() < 2) {
            sender.sendMessage("/ex (-q) <denizen script command> (arguments)");
            return true;
        }
        if (Settings.showExHelp()) {
            if (Debug.showDebug) {
                if (quiet) {
                    sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command... check the console for full debug output!");
                } else {
                // sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command...");
                }
            } else {
                sender.sendMessage(ChatColor.YELLOW + "Executing Denizen script command... to see debug, use /denizen debug");
            }
        }
        entries.add(entry);
        InstantQueue queue = new InstantQueue("EXCOMMAND");
        NPCTag npc = null;
        if (Depends.citizens != null && Depends.citizens.getNPCSelector().getSelected(sender) != null) {
            npc = new NPCTag(Depends.citizens.getNPCSelector().getSelected(sender));
        }
        List<ScriptEntry> scriptEntries = ScriptBuilder.buildScriptEntries(entries, null, new BukkitScriptEntryData(sender instanceof Player ? new PlayerTag((Player) sender) : null, npc));
        queue.addEntries(scriptEntries);
        if (!quiet && sender instanceof Player) {
            final Player player = (Player) sender;
            queue.debugOutput = (s) -> {
                player.spigot().sendMessage(FormattedTextHelper.parse(s, net.md_5.bungee.api.ChatColor.WHITE));
            };
        }
        queue.start();
        return true;
    }
    return false;
}
Also used : Player(org.bukkit.entity.Player) BukkitScriptEntryData(com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) ArrayList(java.util.ArrayList) NPCTag(com.denizenscript.denizen.objects.NPCTag) InstantQueue(com.denizenscript.denizencore.scripts.queues.core.InstantQueue) ScriptEntry(com.denizenscript.denizencore.scripts.ScriptEntry)

Example 35 with NPCTag

use of com.denizenscript.denizen.objects.NPCTag in project Denizen-For-Bukkit by DenizenScript.

the class ExCommandHandler method onTabComplete.

@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String cmdName, String[] rawArgs) {
    if ((!cmdName.equalsIgnoreCase("ex") && !cmdName.equalsIgnoreCase("exs")) || !sender.hasPermission("denizen.ex")) {
        return null;
    }
    String entry = String.join(" ", rawArgs);
    if (entry.length() > 3 && entry.startsWith("-q ")) {
        entry = entry.substring("-q ".length());
    }
    String[] args = ArgumentHelper.buildArgs(entry);
    boolean isNewArg = rawArgs.length == 0 || rawArgs[rawArgs.length - 1].isEmpty();
    boolean isCommandArg = args.length == 0 || (args.length == 1 && !isNewArg) || args[args.length - (isNewArg ? 1 : 2)].equals("-");
    if (isCommandArg) {
        if (isNewArg || args.length == 0) {
            return new ArrayList<>(DenizenCore.commandRegistry.instances.keySet());
        }
        ArrayList<String> output = new ArrayList<>();
        String startOfName = CoreUtilities.toLowerCase(args[args.length - 1]);
        for (String command : DenizenCore.commandRegistry.instances.keySet()) {
            if (command.startsWith(startOfName)) {
                output.add(command);
            }
        }
        return output;
    }
    if (!isNewArg) {
        String lastArg = rawArgs[rawArgs.length - 1];
        int argStart = 0;
        for (int i = 0; i < lastArg.length(); i++) {
            if (lastArg.charAt(i) == '"' || lastArg.charAt(i) == '\'') {
                char quote = lastArg.charAt(i++);
                while (i < lastArg.length() && lastArg.charAt(i) != quote) {
                    i++;
                }
            } else if (lastArg.charAt(i) == ' ') {
                argStart = i + 1;
            }
        }
        String arg = lastArg.substring(argStart);
        if (CoreUtilities.contains(arg, '<')) {
            int tagBits = 0;
            int relevantTagStart = -1;
            for (int i = arg.length() - 1; i >= 0; i--) {
                if (arg.charAt(i) == '>') {
                    tagBits++;
                } else if (arg.charAt(i) == '<') {
                    if (tagBits == 0) {
                        relevantTagStart = i + 1;
                        break;
                    }
                    tagBits--;
                }
            }
            if (relevantTagStart != -1) {
                String fullTag = CoreUtilities.toLowerCase(arg.substring(relevantTagStart));
                int components = 0;
                int subTags = 0;
                int squareBrackets = 0;
                int lastDot = 0;
                int bracketStart = -1;
                Collection<Class<? extends ObjectTag>> typesApplicable = null;
                for (int i = 0; i < fullTag.length(); i++) {
                    char c = fullTag.charAt(i);
                    if (c == '<') {
                        subTags++;
                    } else if (c == '>') {
                        subTags--;
                    } else if (c == '[' && subTags == 0) {
                        squareBrackets++;
                        bracketStart = i;
                    } else if (c == ']' && subTags == 0) {
                        squareBrackets--;
                    } else if (c == '.' && subTags == 0 && squareBrackets == 0) {
                        Class<? extends ObjectTag> type = null;
                        String part = fullTag.substring(lastDot, bracketStart == -1 ? i : bracketStart);
                        if (components == 0) {
                            TagManager.TagBaseData baseType = TagManager.baseTags.get(part);
                            if (baseType != null) {
                                type = baseType.returnType;
                            }
                        } else if (typesApplicable != null) {
                            for (Class<? extends ObjectTag> possibleType : typesApplicable) {
                                ObjectFetcher.ObjectType<? extends ObjectTag> typeData = ObjectFetcher.objectsByClass.get(possibleType);
                                if (typeData != null && typeData.tagProcessor != null) {
                                    ObjectTagProcessor.TagData data = typeData.tagProcessor.registeredObjectTags.get(part);
                                    if (data != null && data.returnType != null) {
                                        type = data.returnType;
                                        break;
                                    }
                                }
                            }
                        }
                        if (type != null) {
                            typesApplicable = ObjectFetcher.getAllApplicableSubTypesFor(type);
                        } else {
                            typesApplicable = ObjectFetcher.objectsByClass.keySet();
                        }
                        components++;
                        lastDot = i + 1;
                        bracketStart = -1;
                    }
                }
                String beforeDot = arg.substring(0, relevantTagStart) + fullTag.substring(0, lastDot);
                if (components == 0 && !CoreUtilities.contains(fullTag, '[')) {
                    ArrayList<String> output = new ArrayList<>();
                    for (String tagBase : TagManager.baseTags.keySet()) {
                        if (tagBase.startsWith(fullTag)) {
                            output.add(beforeDot + tagBase);
                        }
                    }
                    return output;
                }
                String subComponent = fullTag.substring(lastDot);
                if (lastDot > 0 && !CoreUtilities.contains(subComponent, '[')) {
                    ArrayList<String> output = new ArrayList<>();
                    for (Class<? extends ObjectTag> possibleType : typesApplicable) {
                        ObjectFetcher.ObjectType<? extends ObjectTag> typeData = ObjectFetcher.objectsByClass.get(possibleType);
                        if (typeData != null && typeData.tagProcessor != null) {
                            for (String tag : typeData.tagProcessor.registeredObjectTags.keySet()) {
                                if (tag.startsWith(subComponent)) {
                                    output.add(beforeDot + tag);
                                }
                            }
                        }
                    }
                    return output;
                }
            }
        }
    }
    AbstractCommand dcmd = DenizenCore.commandRegistry.get(args[0]);
    for (int i = args.length - 2; i >= 0; i--) {
        if (args[i].equals("-")) {
            dcmd = DenizenCore.commandRegistry.get(args[i + 1]);
        }
    }
    if (dcmd == null) {
        return null;
    }
    String lowArg = CoreUtilities.toLowerCase(rawArgs[rawArgs.length - 1]);
    AbstractCommand.TabCompletionsBuilder completionsBuilder = new AbstractCommand.TabCompletionsBuilder();
    completionsBuilder.arg = lowArg;
    for (String flat : dcmd.docFlagArgs) {
        completionsBuilder.add(flat);
    }
    for (String prefix : dcmd.docPrefixes) {
        completionsBuilder.add(prefix + ":");
    }
    dcmd.addCustomTabCompletions(completionsBuilder);
    if (dcmd instanceof FlagCommand) {
        if (sender instanceof Player) {
            for (String flagName : new PlayerTag((Player) sender).getFlagTracker().listAllFlags()) {
                if (!flagName.startsWith("__")) {
                    completionsBuilder.add(flagName);
                }
            }
        }
        if (Depends.citizens != null && Depends.citizens.getNPCSelector().getSelected(sender) != null) {
            for (String flagName : new NPCTag(Depends.citizens.getNPCSelector().getSelected(sender)).getFlagTracker().listAllFlags()) {
                if (!flagName.startsWith("__")) {
                    completionsBuilder.add(flagName);
                }
            }
        }
    }
    return completionsBuilder.completions;
}
Also used : Player(org.bukkit.entity.Player) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) ArrayList(java.util.ArrayList) AbstractCommand(com.denizenscript.denizencore.scripts.commands.AbstractCommand) TagManager(com.denizenscript.denizencore.tags.TagManager) ObjectFetcher(com.denizenscript.denizencore.objects.ObjectFetcher) ObjectTag(com.denizenscript.denizencore.objects.ObjectTag) FlagCommand(com.denizenscript.denizencore.scripts.commands.core.FlagCommand) NPCTag(com.denizenscript.denizen.objects.NPCTag)

Aggregations

NPCTag (com.denizenscript.denizen.objects.NPCTag)72 ElementTag (com.denizenscript.denizencore.objects.core.ElementTag)24 EventHandler (org.bukkit.event.EventHandler)22 PlayerTag (com.denizenscript.denizen.objects.PlayerTag)21 Player (org.bukkit.entity.Player)15 LocationTag (com.denizenscript.denizen.objects.LocationTag)12 EntityTag (com.denizenscript.denizen.objects.EntityTag)10 ListTag (com.denizenscript.denizencore.objects.core.ListTag)9 ScriptEntry (com.denizenscript.denizencore.scripts.ScriptEntry)8 HashMap (java.util.HashMap)8 NPC (net.citizensnpcs.api.npc.NPC)8 ObjectTag (com.denizenscript.denizencore.objects.ObjectTag)7 AssignmentTrait (com.denizenscript.denizen.npc.traits.AssignmentTrait)6 Location (org.bukkit.Location)6 TriggerTrait (com.denizenscript.denizen.npc.traits.TriggerTrait)5 BukkitScriptEntryData (com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData)5 DurationTag (com.denizenscript.denizencore.objects.core.DurationTag)5 ArrayList (java.util.ArrayList)5 List (java.util.List)5 Entity (org.bukkit.entity.Entity)5