Search in sources :

Example 36 with NPCTag

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

the class BukkitQueueProperties method registerTags.

public static void registerTags() {
    // <--[tag]
    // @attribute <QueueTag.npc>
    // @returns NPCTag
    // @mechanism QueueTag.linked_npc
    // @description
    // Returns the NPCTag linked to a queue.
    // -->
    PropertyParser.<BukkitQueueProperties, NPCTag>registerTag(NPCTag.class, "npc", (attribute, object) -> {
        NPCTag npc = null;
        if (object.queue.getLastEntryExecuted() != null) {
            npc = ((BukkitScriptEntryData) object.queue.getLastEntryExecuted().entryData).getNPC();
        } else if (object.queue.getEntries().size() > 0) {
            npc = ((BukkitScriptEntryData) object.queue.getEntries().get(0).entryData).getNPC();
        } else if (!attribute.hasAlternative()) {
            attribute.echoError("Can't determine a linked NPC.");
        }
        return npc;
    });
    // <--[tag]
    // @attribute <QueueTag.player>
    // @returns PlayerTag
    // @mechanism QueueTag.linked_player
    // @description
    // Returns the PlayerTag linked to a queue.
    // -->
    PropertyParser.<BukkitQueueProperties, PlayerTag>registerTag(PlayerTag.class, "player", (attribute, object) -> {
        PlayerTag player = null;
        if (object.queue.getLastEntryExecuted() != null) {
            player = ((BukkitScriptEntryData) object.queue.getLastEntryExecuted().entryData).getPlayer();
        } else if (object.queue.getEntries().size() > 0) {
            player = ((BukkitScriptEntryData) object.queue.getEntries().get(0).entryData).getPlayer();
        } else {
            attribute.echoError("Can't determine a linked player.");
        }
        return player;
    });
}
Also used : BukkitScriptEntryData(com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) NPCTag(com.denizenscript.denizen.objects.NPCTag)

Example 37 with NPCTag

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

the class BukkitQueueProperties method adjust.

@Override
public void adjust(Mechanism mechanism) {
    // -->
    if (mechanism.matches("linked_player") && mechanism.requireObject(PlayerTag.class)) {
        PlayerTag player = mechanism.valueAsType(PlayerTag.class);
        for (ScriptEntry entry : queue.getEntries()) {
            BukkitScriptEntryData data = (BukkitScriptEntryData) entry.entryData;
            data.setPlayer(player);
        }
    }
    // -->
    if (mechanism.matches("linked_npc") && mechanism.requireObject(NPCTag.class)) {
        NPCTag npc = mechanism.valueAsType(NPCTag.class);
        for (ScriptEntry entry : queue.getEntries()) {
            BukkitScriptEntryData data = (BukkitScriptEntryData) entry.entryData;
            data.setNPC(npc);
        }
    }
}
Also used : PlayerTag(com.denizenscript.denizen.objects.PlayerTag) BukkitScriptEntryData(com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData) NPCTag(com.denizenscript.denizen.objects.NPCTag) ScriptEntry(com.denizenscript.denizencore.scripts.ScriptEntry)

Example 38 with NPCTag

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

the class TriggerTrait method trigger.

public TriggerContext trigger(AbstractTrigger triggerClass, PlayerTag player, Map<String, ObjectTag> context) {
    String trigger_type = triggerClass.getName();
    if (!Denizen.getInstance().triggerRegistry.checkCooldown(npc, player, triggerClass)) {
        return new TriggerContext(false);
    }
    if (context == null) {
        context = new HashMap<>();
    }
    if (EngageCommand.getEngaged(npc, player)) {
        context.put("trigger_type", new ElementTag(trigger_type));
        // TODO: Should this be refactored?
        if (new NPCTag(npc).action("unavailable", player, context).containsCaseInsensitive("available")) {
        // If determined available, continue on...
        // else, return a 'non-triggered' state.
        } else {
            return new TriggerContext(false);
        }
    }
    Denizen.getInstance().triggerRegistry.setCooldown(npc, player, triggerClass, getCooldownDuration(trigger_type));
    ListTag determination = new NPCTag(npc).action(trigger_type, player, context);
    return new TriggerContext(determination, true);
}
Also used : NPCTag(com.denizenscript.denizen.objects.NPCTag) ElementTag(com.denizenscript.denizencore.objects.core.ElementTag) ListTag(com.denizenscript.denizencore.objects.core.ListTag)

Example 39 with NPCTag

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

the class ZapCommand method parseArgs.

@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {
    for (Argument arg : scriptEntry) {
        if (!scriptEntry.hasObject("script") && !scriptEntry.hasObject("step") && arg.hasPrefix() && arg.getPrefix().matchesArgumentType(ScriptTag.class)) {
            Deprecations.zapPrefix.warn(scriptEntry);
            scriptEntry.addObject("script", arg.getPrefix().asType(ScriptTag.class));
            scriptEntry.addObject("step", arg.asElement());
        } else if (!scriptEntry.hasObject("script") && arg.matchesArgumentType(ScriptTag.class) && arg.asType(ScriptTag.class).getContainer() instanceof InteractScriptContainer && arg.limitToOnlyPrefix("script")) {
            scriptEntry.addObject("script", arg.asType(ScriptTag.class));
        } else if (!scriptEntry.hasObject("step") && arg.limitToOnlyPrefix("step")) {
            scriptEntry.addObject("step", arg.asElement());
        } else if (!scriptEntry.hasObject("duration") && arg.matchesArgumentType(DurationTag.class) && arg.limitToOnlyPrefix("duration")) {
            scriptEntry.addObject("duration", arg.asType(DurationTag.class));
        } else {
            arg.reportUnhandled();
        }
    }
    PlayerTag player = Utilities.getEntryPlayer(scriptEntry);
    if (player == null || !player.isValid()) {
        throw new InvalidArgumentsException("Must have player context!");
    }
    if (!scriptEntry.hasObject("script")) {
        ScriptTag script = scriptEntry.getScript();
        if (script != null) {
            if (script.getContainer() instanceof InteractScriptContainer) {
                scriptEntry.addObject("script", script);
            } else if (script.getContainer() instanceof AssignmentScriptContainer) {
                InteractScriptContainer interact = ((AssignmentScriptContainer) script.getContainer()).interact;
                if (interact != null) {
                    scriptEntry.addObject("script", new ScriptTag(interact));
                }
            }
        }
        if (!scriptEntry.hasObject("script")) {
            NPCTag npc = Utilities.getEntryNPC(scriptEntry);
            if (npc != null && npc.getCitizen().hasTrait(AssignmentTrait.class)) {
                AssignmentTrait trait = npc.getCitizen().getOrAddTrait(AssignmentTrait.class);
                for (AssignmentScriptContainer container : trait.containerCache) {
                    if (container != null && container.getInteract() != null) {
                        scriptEntry.addObject("script", new ScriptTag(container.getInteract()));
                        break;
                    }
                }
            }
        }
        if (!scriptEntry.hasObject("script")) {
            throw new InvalidArgumentsException("No script to zap! Must be in an interact script, or have a linked NPC with an associated interact script.");
        }
    }
}
Also used : AssignmentTrait(com.denizenscript.denizen.npc.traits.AssignmentTrait) PlayerTag(com.denizenscript.denizen.objects.PlayerTag) ScriptTag(com.denizenscript.denizencore.objects.core.ScriptTag) NPCTag(com.denizenscript.denizen.objects.NPCTag) InteractScriptContainer(com.denizenscript.denizen.scripts.containers.core.InteractScriptContainer) AssignmentScriptContainer(com.denizenscript.denizen.scripts.containers.core.AssignmentScriptContainer) DurationTag(com.denizenscript.denizencore.objects.core.DurationTag) InvalidArgumentsException(com.denizenscript.denizencore.exceptions.InvalidArgumentsException)

Example 40 with NPCTag

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

the class EquipCommand method execute.

@Override
public void execute(ScriptEntry scriptEntry) {
    Map<String, ItemTag> equipment = (Map<String, ItemTag>) scriptEntry.getObject("equipment");
    List<EntityTag> entities = (List<EntityTag>) scriptEntry.getObject("entities");
    if (scriptEntry.dbCallShouldDebug()) {
        Debug.report(scriptEntry, getName(), db("entities", entities), db("equipment", equipment));
    }
    for (EntityTag entity : entities) {
        if (entity.isGeneric()) {
            Debug.echoError(scriptEntry, "Cannot equip generic entity " + entity.identify() + "!");
        } else if (entity.isCitizensNPC()) {
            NPCTag npc = entity.getDenizenNPC();
            if (npc != null) {
                Equipment trait = npc.getEquipmentTrait();
                if (equipment.get("hand") != null) {
                    trait.set(0, equipment.get("hand").getItemStack());
                }
                if (equipment.get("head") != null) {
                    trait.set(1, equipment.get("head").getItemStack());
                }
                if (equipment.get("chest") != null) {
                    trait.set(2, equipment.get("chest").getItemStack());
                }
                if (equipment.get("legs") != null) {
                    trait.set(3, equipment.get("legs").getItemStack());
                }
                if (equipment.get("boots") != null) {
                    trait.set(4, equipment.get("boots").getItemStack());
                }
                if (equipment.get("offhand") != null) {
                    trait.set(5, equipment.get("offhand").getItemStack());
                }
                if (npc.isSpawned()) {
                    LivingEntity livingEntity = npc.getLivingEntity();
                    // TODO: Citizens API for this blob?
                    if (livingEntity instanceof AbstractHorse) {
                        if (equipment.get("saddle") != null) {
                            ((AbstractHorse) livingEntity).getInventory().setSaddle(equipment.get("saddle").getItemStack());
                        }
                        if (equipment.get("horse_armor") != null) {
                            if (((AbstractHorse) livingEntity).getInventory() instanceof HorseInventory) {
                                ((HorseInventory) ((AbstractHorse) livingEntity).getInventory()).setArmor(equipment.get("horse_armor").getItemStack());
                            }
                        }
                    } else if (livingEntity instanceof Steerable) {
                        if (equipment.get("saddle") != null) {
                            ItemTag saddle = equipment.get("saddle");
                            if (saddle.getBukkitMaterial() == Material.SADDLE) {
                                ((Steerable) livingEntity).setSaddle(true);
                            } else {
                                ((Steerable) livingEntity).setSaddle(false);
                            }
                        }
                    }
                }
            }
        } else {
            LivingEntity livingEntity = entity.getLivingEntity();
            if (livingEntity != null) {
                if (livingEntity instanceof AbstractHorse) {
                    if (equipment.get("saddle") != null) {
                        ((AbstractHorse) livingEntity).getInventory().setSaddle(equipment.get("saddle").getItemStack());
                    }
                    if (equipment.get("horse_armor") != null) {
                        if (((AbstractHorse) livingEntity).getInventory() instanceof HorseInventory) {
                            ((HorseInventory) ((AbstractHorse) livingEntity).getInventory()).setArmor(equipment.get("horse_armor").getItemStack());
                        }
                    }
                } else if (livingEntity instanceof Steerable) {
                    if (equipment.get("saddle") != null) {
                        ItemTag saddle = equipment.get("saddle");
                        if (saddle.getBukkitMaterial() == Material.SADDLE) {
                            ((Steerable) livingEntity).setSaddle(true);
                        } else {
                            ((Steerable) livingEntity).setSaddle(false);
                        }
                    }
                } else {
                    if (equipment.get("hand") != null) {
                        livingEntity.getEquipment().setItemInMainHand(equipment.get("hand").getItemStack());
                    }
                    if (equipment.get("head") != null) {
                        livingEntity.getEquipment().setHelmet(equipment.get("head").getItemStack());
                    }
                    if (equipment.get("chest") != null) {
                        livingEntity.getEquipment().setChestplate(equipment.get("chest").getItemStack());
                    }
                    if (equipment.get("legs") != null) {
                        livingEntity.getEquipment().setLeggings(equipment.get("legs").getItemStack());
                    }
                    if (equipment.get("boots") != null) {
                        livingEntity.getEquipment().setBoots(equipment.get("boots").getItemStack());
                    }
                    if (equipment.get("offhand") != null) {
                        livingEntity.getEquipment().setItemInOffHand(equipment.get("offhand").getItemStack());
                    }
                }
            }
        }
    }
}
Also used : AbstractHorse(org.bukkit.entity.AbstractHorse) LivingEntity(org.bukkit.entity.LivingEntity) Steerable(org.bukkit.entity.Steerable) Equipment(net.citizensnpcs.api.trait.trait.Equipment) NPCTag(com.denizenscript.denizen.objects.NPCTag) EntityTag(com.denizenscript.denizen.objects.EntityTag) HorseInventory(org.bukkit.inventory.HorseInventory) ItemTag(com.denizenscript.denizen.objects.ItemTag)

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