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);
}
}
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;
}
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);
}
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;
}
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;
}
Aggregations