Search in sources :

Example 6 with Event

use of org.bukkit.event.Event in project Bukkit by Bukkit.

the class PluginManagerTest method testSyncSameThread.

@Test
public void testSyncSameThread() {
    final Event event = new TestEvent(false);
    pm.callEvent(event);
}
Also used : TestEvent(org.bukkit.event.TestEvent) Event(org.bukkit.event.Event) TestEvent(org.bukkit.event.TestEvent) Test(org.junit.Test)

Example 7 with Event

use of org.bukkit.event.Event in project Bukkit by Bukkit.

the class TimedRegisteredListenerTest method testEventClass.

@Test
public void testEventClass() throws EventException {
    Listener listener = new Listener() {
    };
    EventExecutor executor = new EventExecutor() {

        public void execute(Listener listener, Event event) {
        }
    };
    TestPlugin plugin = new TestPlugin("Test");
    PlayerInteractEvent interactEvent = new PlayerInteractEvent(null, null, null, null, null);
    PlayerMoveEvent moveEvent = new PlayerMoveEvent(null, null, null);
    BlockBreakEvent breakEvent = new BlockBreakEvent(null, null);
    TimedRegisteredListener trl = new TimedRegisteredListener(listener, executor, EventPriority.NORMAL, plugin, false);
    // Ensure that the correct event type is reported for a single event
    trl.callEvent(interactEvent);
    assertThat(trl.getEventClass(), is((Object) PlayerInteractEvent.class));
    // Ensure that no superclass is used in lieu of the actual event, after two identical event types
    trl.callEvent(interactEvent);
    assertThat(trl.getEventClass(), is((Object) PlayerInteractEvent.class));
    // Ensure that the closest superclass of the two events is chosen
    trl.callEvent(moveEvent);
    assertThat(trl.getEventClass(), is((Object) PlayerEvent.class));
    // As above, so below
    trl.callEvent(breakEvent);
    assertThat(trl.getEventClass(), is((Object) Event.class));
    // In the name of being thorough, check that it never travels down the hierarchy again.
    trl.callEvent(breakEvent);
    assertThat(trl.getEventClass(), is((Object) Event.class));
    trl = new TimedRegisteredListener(listener, executor, EventPriority.NORMAL, plugin, false);
    trl.callEvent(breakEvent);
    assertThat(trl.getEventClass(), is((Object) BlockBreakEvent.class));
    // Test moving up the class hierarchy by more than one class at a time
    trl.callEvent(moveEvent);
    assertThat(trl.getEventClass(), is((Object) Event.class));
}
Also used : Listener(org.bukkit.event.Listener) PlayerInteractEvent(org.bukkit.event.player.PlayerInteractEvent) Event(org.bukkit.event.Event) PlayerEvent(org.bukkit.event.player.PlayerEvent) BlockBreakEvent(org.bukkit.event.block.BlockBreakEvent) PlayerMoveEvent(org.bukkit.event.player.PlayerMoveEvent) PlayerInteractEvent(org.bukkit.event.player.PlayerInteractEvent) PlayerMoveEvent(org.bukkit.event.player.PlayerMoveEvent) BlockBreakEvent(org.bukkit.event.block.BlockBreakEvent) Test(org.junit.Test)

Example 8 with Event

use of org.bukkit.event.Event in project HawkEye by oliverwoodings.

the class HawkEyeListener method registerEvents.

public final void registerEvents() {
    PluginManager pm = plugin.getServer().getPluginManager();
    Method[] methods = this.getClass().getDeclaredMethods();
    for (int i = 0; i < methods.length; i++) {
        final Method method = methods[i];
        final HawkEvent he = method.getAnnotation(HawkEvent.class);
        if (he == null)
            continue;
        boolean register = false;
        for (DataType dt : he.dataType()) {
            if (Config.isLogged(dt))
                register = true;
        }
        if (!register)
            continue;
        Class<?>[] params = method.getParameterTypes();
        if (!Event.class.isAssignableFrom(params[0]) || params.length != 1) {
            continue;
        }
        final Class<? extends Event> eventClass = params[0].asSubclass(Event.class);
        method.setAccessible(true);
        EventExecutor executor = new EventExecutor() {

            public void execute(Listener listener, Event event) throws EventException {
                try {
                    if (!eventClass.isAssignableFrom(event.getClass())) {
                        return;
                    }
                    Util.debug(DebugLevel.HIGH, "Calling event: " + event.getEventName());
                    method.invoke(listener, event);
                    Util.debug(DebugLevel.HIGH, "Event call complete: " + event.getEventName());
                } catch (Exception ex) {
                    throw new EventException(ex.getCause());
                }
            }
        };
        Util.debug("Registering listener for " + eventClass.getName());
        pm.registerEvent(eventClass, this, he.priority(), executor, plugin, he.ignoreCancelled());
    }
}
Also used : Listener(org.bukkit.event.Listener) EventException(org.bukkit.event.EventException) Method(java.lang.reflect.Method) EventException(org.bukkit.event.EventException) PluginManager(org.bukkit.plugin.PluginManager) EventExecutor(org.bukkit.plugin.EventExecutor) DataType(uk.co.oliwali.HawkEye.DataType) Event(org.bukkit.event.Event) HawkEvent(uk.co.oliwali.HawkEye.HawkEvent) HawkEvent(uk.co.oliwali.HawkEye.HawkEvent)

Example 9 with Event

use of org.bukkit.event.Event in project Denizen-For-Bukkit by DenizenScript.

the class ServerTagBase method serverTag.

public void serverTag(ReplaceableTagEvent event) {
    if (!event.matches("server", "global") || event.replaced()) {
        return;
    }
    if (event.matches("global")) {
        Deprecations.globalTagName.warn(event.getScriptEntry());
    }
    Attribute attribute = event.getAttributes().fulfill(1);
    if (attribute.startsWith("economy")) {
        if (Depends.economy == null) {
            attribute.echoError("No economy loaded! Have you installed Vault and a compatible economy plugin?");
            return;
        }
        attribute = attribute.fulfill(1);
        // -->
        if (attribute.startsWith("format") && attribute.hasParam()) {
            double amount = attribute.getDoubleParam();
            event.setReplacedObject(new ElementTag(Depends.economy.format(amount)).getObjectAttribute(attribute.fulfill(1)));
            return;
        }
        // -->
        if (attribute.startsWith("currency_name") && attribute.hasParam()) {
            double amount = attribute.getDoubleParam();
            event.setReplacedObject(new ElementTag(amount == 1 ? Depends.economy.currencyNameSingular() : Depends.economy.currencyNamePlural()).getObjectAttribute(attribute.fulfill(1)));
            return;
        }
        // -->
        if (attribute.startsWith("currency_plural")) {
            event.setReplacedObject(new ElementTag(Depends.economy.currencyNamePlural()).getObjectAttribute(attribute.fulfill(1)));
            return;
        }
        // -->
        if (attribute.startsWith("currency_singular")) {
            event.setReplacedObject(new ElementTag(Depends.economy.currencyNameSingular()).getObjectAttribute(attribute.fulfill(1)));
            return;
        }
        return;
    }
    // -->
    if (attribute.startsWith("slot_id") && attribute.hasParam()) {
        int slotId = SlotHelper.nameToIndex(attribute.getParam(), null);
        if (slotId != -1) {
            event.setReplacedObject(new ElementTag(slotId).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("parse_bukkit_item") && attribute.hasParam()) {
        YamlConfiguration config = new YamlConfiguration();
        try {
            config.loadFromString(attribute.getParam());
            ItemStack item = config.getItemStack("item");
            if (item != null) {
                event.setReplacedObject(new ItemTag(item).getObjectAttribute(attribute.fulfill(1)));
            }
        } catch (Exception ex) {
            Debug.echoError(ex);
        }
        return;
    }
    // -->
    if (attribute.startsWith("recipe_ids") || attribute.startsWith("list_recipe_ids")) {
        listDeprecateWarn(attribute);
        String type = attribute.hasParam() ? CoreUtilities.toLowerCase(attribute.getParam()) : null;
        ListTag list = new ListTag();
        Iterator<Recipe> recipeIterator = Bukkit.recipeIterator();
        while (recipeIterator.hasNext()) {
            Recipe recipe = recipeIterator.next();
            if (Utilities.isRecipeOfType(recipe, type) && recipe instanceof Keyed) {
                list.add(((Keyed) recipe).getKey().toString());
            }
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("recipe_items") && attribute.hasParam()) {
        NamespacedKey key = Utilities.parseNamespacedKey(attribute.getParam());
        Recipe recipe = NMSHandler.getItemHelper().getRecipeById(key);
        if (recipe == null) {
            return;
        }
        ListTag result = new ListTag();
        Consumer<RecipeChoice> addChoice = (choice) -> {
            if (choice == null) {
                result.addObject(new ItemTag(Material.AIR));
            } else {
                if (choice instanceof RecipeChoice.ExactChoice) {
                    result.addObject(new ItemTag(choice.getItemStack()));
                } else {
                    result.add("material:" + choice.getItemStack().getType().name());
                }
            }
        };
        if (recipe instanceof ShapedRecipe) {
            for (String row : ((ShapedRecipe) recipe).getShape()) {
                for (char column : row.toCharArray()) {
                    addChoice.accept(((ShapedRecipe) recipe).getChoiceMap().get(column));
                }
            }
        } else if (recipe instanceof ShapelessRecipe) {
            for (RecipeChoice choice : ((ShapelessRecipe) recipe).getChoiceList()) {
                addChoice.accept(choice);
            }
        } else if (recipe instanceof CookingRecipe<?>) {
            addChoice.accept(((CookingRecipe) recipe).getInputChoice());
        }
        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("recipe_shape") && attribute.hasParam()) {
        NamespacedKey key = Utilities.parseNamespacedKey(attribute.getParam());
        Recipe recipe = NMSHandler.getItemHelper().getRecipeById(key);
        if (!(recipe instanceof ShapedRecipe)) {
            return;
        }
        String[] shape = ((ShapedRecipe) recipe).getShape();
        event.setReplacedObject(new ElementTag(shape[0].length() + "x" + shape.length).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("recipe_type") && attribute.hasParam()) {
        NamespacedKey key = Utilities.parseNamespacedKey(attribute.getParam());
        Recipe recipe = NMSHandler.getItemHelper().getRecipeById(key);
        if (recipe == null) {
            return;
        }
        event.setReplacedObject(new ElementTag(Utilities.getRecipeType(recipe)).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("recipe_result") && attribute.hasParam()) {
        NamespacedKey key = Utilities.parseNamespacedKey(attribute.getParam());
        Recipe recipe = NMSHandler.getItemHelper().getRecipeById(key);
        if (recipe == null) {
            return;
        }
        event.setReplacedObject(new ItemTag(recipe.getResult()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("scoreboards")) {
        ListTag result = new ListTag();
        for (String board : ScoreboardHelper.scoreboardMap.keySet()) {
            result.addObject(new ElementTag(board));
        }
        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    if (attribute.startsWith("scoreboard")) {
        Scoreboard board;
        String name = "main";
        if (attribute.hasParam()) {
            name = attribute.getParam();
            board = ScoreboardHelper.getScoreboard(name);
        } else {
            board = ScoreboardHelper.getMain();
        }
        attribute = attribute.fulfill(1);
        // -->
        if (attribute.startsWith("exists")) {
            event.setReplacedObject(new ElementTag(board != null).getObjectAttribute(attribute.fulfill(1)));
            return;
        }
        if (board == null) {
            attribute.echoError("Scoreboard '" + name + "' does not exist.");
            return;
        }
        // -->
        if (attribute.startsWith("objectives")) {
            ListTag list = new ListTag();
            for (Objective objective : board.getObjectives()) {
                list.add(objective.getName());
            }
            event.setReplacedObject((list).getObjectAttribute(attribute.fulfill(1)));
        }
        if (attribute.startsWith("objective") && attribute.hasParam()) {
            Objective objective = board.getObjective(attribute.getParam());
            if (objective == null) {
                attribute.echoError("Scoreboard objective '" + attribute.getParam() + "' does not exist.");
                return;
            }
            attribute = attribute.fulfill(1);
            // -->
            if (attribute.startsWith("criteria")) {
                event.setReplacedObject(new ElementTag(objective.getCriteria()).getObjectAttribute(attribute.fulfill(1)));
            }
            // -->
            if (attribute.startsWith("display_name")) {
                event.setReplacedObject(new ElementTag(objective.getDisplayName()).getObjectAttribute(attribute.fulfill(1)));
            }
            // -->
            if (attribute.startsWith("display_slot")) {
                if (objective.getDisplaySlot() == null) {
                    return;
                }
                event.setReplacedObject(new ElementTag(objective.getDisplaySlot().name()).getObjectAttribute(attribute.fulfill(1)));
            }
        }
        // -->
        if (attribute.startsWith("team_names")) {
            ListTag result = new ListTag();
            for (Team team : board.getTeams()) {
                result.add(team.getName());
            }
            event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
        }
        if (attribute.startsWith("team") && attribute.hasParam()) {
            Team team = board.getTeam(attribute.getParam());
            if (team == null) {
                attribute.echoError("Scoreboard team '" + attribute.getParam() + "' does not exist.");
                return;
            }
            attribute = attribute.fulfill(1);
            // -->
            if (attribute.startsWith("members")) {
                event.setReplacedObject(new ListTag(team.getEntries()).getObjectAttribute(attribute.fulfill(1)));
            }
            return;
        }
    }
    // -->
    if (attribute.startsWith("object_is_valid")) {
        ObjectTag o = ObjectFetcher.pickObjectFor(attribute.getParam(), new BukkitTagContext(null, null, null, false, null));
        event.setReplacedObject(new ElementTag(!(o == null || o instanceof ElementTag)).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("has_whitelist")) {
        event.setReplacedObject(new ElementTag(Bukkit.hasWhitelist()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("whitelisted_players")) {
        ListTag result = new ListTag();
        for (OfflinePlayer player : Bukkit.getWhitelistedPlayers()) {
            result.addObject(new PlayerTag(player));
        }
        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("has_flag")) {
        event.setReplacedObject(DenizenCore.serverFlagMap.doHasFlagTag(attribute).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("flag_expiration")) {
        TimeTag exp = DenizenCore.serverFlagMap.doFlagExpirationTag(attribute);
        if (exp != null) {
            event.setReplacedObject(exp.getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("flag")) {
        ObjectTag flag = DenizenCore.serverFlagMap.doFlagTag(attribute);
        if (flag != null) {
            event.setReplacedObject(flag.getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("list_flags")) {
        event.setReplacedObject(DenizenCore.serverFlagMap.doListFlagsTag(attribute).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("flag_map")) {
        event.setReplacedObject(DenizenCore.serverFlagMap.doFlagMapTag(attribute).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("gamerules")) {
        ListTag allGameRules = new ListTag();
        for (GameRule rule : GameRule.values()) {
            allGameRules.add(rule.getName());
        }
        event.setReplacedObject(allGameRules.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if ((attribute.startsWith("traits") || attribute.startsWith("list_traits")) && Depends.citizens != null) {
        listDeprecateWarn(attribute);
        ListTag allTraits = new ListTag();
        for (TraitInfo trait : CitizensAPI.getTraitFactory().getRegisteredTraits()) {
            allTraits.add(trait.getTraitName());
        }
        event.setReplacedObject(allTraits.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("commands") || attribute.startsWith("list_commands")) {
        listDeprecateWarn(attribute);
        CommandScriptHelper.init();
        ListTag list = new ListTag(CommandScriptHelper.knownCommands.keySet());
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("command_plugin")) {
        PluginCommand cmd = Bukkit.getPluginCommand(attribute.getParam());
        if (cmd != null) {
            event.setReplacedObject(new PluginTag(cmd.getPlugin()).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("color_names")) {
        ListTag list = new ListTag();
        for (String color : ColorTag.colorsByName.keySet()) {
            list.add(color);
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("art_types")) {
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        for (Art art : Art.values()) {
            list.add(art.name());
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("advancement_types") || attribute.startsWith("list_advancements")) {
        if (attribute.matches("list_advancements")) {
            Debug.echoError("list_advancements is deprecated: use advancement_types");
        }
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        Bukkit.advancementIterator().forEachRemaining((adv) -> {
            list.add(adv.getKey().toString());
        });
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("nbt_attribute_types") || attribute.startsWith("list_nbt_attribute_types")) {
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        for (org.bukkit.attribute.Attribute attribType : org.bukkit.attribute.Attribute.values()) {
            list.add(attribType.name());
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("damage_causes") || attribute.startsWith("list_damage_causes")) {
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        for (EntityDamageEvent.DamageCause damageCause : EntityDamageEvent.DamageCause.values()) {
            list.add(damageCause.name());
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("teleport_causes")) {
        ListTag list = new ListTag();
        for (PlayerTeleportEvent.TeleportCause teleportCause : PlayerTeleportEvent.TeleportCause.values()) {
            list.add(teleportCause.name());
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("biome_types") || attribute.startsWith("list_biome_types")) {
        listDeprecateWarn(attribute);
        ListTag allBiomes = new ListTag();
        for (Biome biome : Biome.values()) {
            if (biome != Biome.CUSTOM) {
                allBiomes.addObject(new BiomeTag(biome));
            }
        }
        event.setReplacedObject(allBiomes.getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("list_biomes")) {
        Deprecations.serverListBiomeNames.warn(attribute.context);
        ListTag allBiomes = new ListTag();
        for (Biome biome : Biome.values()) {
            allBiomes.add(biome.name());
        }
        event.setReplacedObject(allBiomes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("enchantments")) {
        ListTag enchants = new ListTag();
        for (Enchantment ench : Enchantment.values()) {
            enchants.addObject(new EnchantmentTag(ench));
        }
        event.setReplacedObject(enchants.getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("enchantment_types") || attribute.startsWith("list_enchantments")) {
        Deprecations.echantmentTagUpdate.warn(attribute.context);
        if (attribute.matches("list_enchantments")) {
            Debug.echoError("list_enchantments is deprecated: use enchantment_types");
        }
        listDeprecateWarn(attribute);
        ListTag enchants = new ListTag();
        for (Enchantment e : Enchantment.values()) {
            enchants.add(e.getName());
        }
        event.setReplacedObject(enchants.getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("enchantment_keys") || attribute.startsWith("list_enchantment_keys")) {
        Deprecations.echantmentTagUpdate.warn(attribute.context);
        listDeprecateWarn(attribute);
        ListTag enchants = new ListTag();
        for (Enchantment e : Enchantment.values()) {
            enchants.add(e.getKey().getKey());
        }
        event.setReplacedObject(enchants.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("entity_types") || attribute.startsWith("list_entity_types")) {
        listDeprecateWarn(attribute);
        ListTag allEnt = new ListTag();
        for (EntityType entity : EntityType.values()) {
            if (entity != EntityType.UNKNOWN) {
                allEnt.add(entity.name());
            }
        }
        event.setReplacedObject(allEnt.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("material_types") || attribute.startsWith("list_material_types")) {
        listDeprecateWarn(attribute);
        ListTag allMats = new ListTag();
        for (Material mat : Material.values()) {
            allMats.addObject(new MaterialTag(mat));
        }
        event.setReplacedObject(allMats.getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("list_materials")) {
        Deprecations.serverListMaterialNames.warn(attribute.context);
        ListTag allMats = new ListTag();
        for (Material mat : Material.values()) {
            allMats.add(mat.name());
        }
        event.setReplacedObject(allMats.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("sound_types") || attribute.startsWith("list_sounds")) {
        if (attribute.matches("list_sounds")) {
            Debug.echoError("list_sounds is deprecated: use sound_types");
        }
        listDeprecateWarn(attribute);
        ListTag sounds = new ListTag();
        for (Sound s : Sound.values()) {
            sounds.add(s.toString());
        }
        event.setReplacedObject(sounds.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("particle_types") || attribute.startsWith("list_particles")) {
        if (attribute.matches("list_particles")) {
            Debug.echoError("list_particles is deprecated: use particle_types");
        }
        listDeprecateWarn(attribute);
        ListTag particleTypes = new ListTag();
        for (Particle particle : Particle.values()) {
            particleTypes.add(particle.toString());
        }
        event.setReplacedObject(particleTypes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("effect_types") || attribute.startsWith("list_effects")) {
        if (attribute.matches("list_effects")) {
            Debug.echoError("list_effects is deprecated: use effect_types");
        }
        listDeprecateWarn(attribute);
        ListTag effectTypes = new ListTag();
        for (Effect effect : Effect.values()) {
            effectTypes.add(effect.toString());
        }
        event.setReplacedObject(effectTypes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("pattern_types") || attribute.startsWith("list_patterns")) {
        if (attribute.matches("list_patterns")) {
            Debug.echoError("list_patterns is deprecated: use pattern_types");
        }
        listDeprecateWarn(attribute);
        ListTag allPatterns = new ListTag();
        for (PatternType pat : PatternType.values()) {
            allPatterns.add(pat.toString());
        }
        event.setReplacedObject(allPatterns.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("potion_effect_types") || attribute.startsWith("list_potion_effects")) {
        if (attribute.matches("list_potion_effects")) {
            Debug.echoError("list_potion_effects is deprecated: use potion_effect_types");
        }
        listDeprecateWarn(attribute);
        ListTag statuses = new ListTag();
        for (PotionEffectType effect : PotionEffectType.values()) {
            if (effect != null) {
                statuses.add(effect.getName());
            }
        }
        event.setReplacedObject(statuses.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("potion_types") || attribute.startsWith("list_potion_types")) {
        listDeprecateWarn(attribute);
        ListTag potionTypes = new ListTag();
        for (PotionType type : PotionType.values()) {
            potionTypes.add(type.toString());
        }
        event.setReplacedObject(potionTypes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("tree_types") || attribute.startsWith("list_tree_types")) {
        listDeprecateWarn(attribute);
        ListTag allTrees = new ListTag();
        for (TreeType tree : TreeType.values()) {
            allTrees.add(tree.name());
        }
        event.setReplacedObject(allTrees.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("map_cursor_types") || attribute.startsWith("list_map_cursor_types")) {
        listDeprecateWarn(attribute);
        ListTag mapCursors = new ListTag();
        for (MapCursor.Type cursor : MapCursor.Type.values()) {
            mapCursors.add(cursor.toString());
        }
        event.setReplacedObject(mapCursors.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("world_types") || attribute.startsWith("list_world_types")) {
        listDeprecateWarn(attribute);
        ListTag worldTypes = new ListTag();
        for (WorldType world : WorldType.values()) {
            worldTypes.add(world.toString());
        }
        event.setReplacedObject(worldTypes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("statistic_types") || attribute.startsWith("list_statistics")) {
        listDeprecateWarn(attribute);
        if (attribute.matches("list_statistics")) {
            Debug.echoError("list_statistics is deprecated: use statistic_types");
        }
        Statistic.Type type = null;
        if (attribute.hasParam()) {
            type = Statistic.Type.valueOf(attribute.getParam().toUpperCase());
        }
        ListTag statisticTypes = new ListTag();
        for (Statistic stat : Statistic.values()) {
            if (type == null || type == stat.getType()) {
                statisticTypes.add(stat.toString());
            }
        }
        event.setReplacedObject(statisticTypes.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("structure_types") || attribute.startsWith("list_structure_types")) {
        listDeprecateWarn(attribute);
        event.setReplacedObject(new ListTag(StructureType.getStructureTypes().keySet()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("notes") || attribute.startsWith("list_notables") || attribute.startsWith("notables")) {
        listDeprecateWarn(attribute);
        ListTag allNotables = new ListTag();
        if (attribute.hasParam()) {
            String type = CoreUtilities.toLowerCase(attribute.getParam());
            for (Map.Entry<String, Class> typeClass : NoteManager.namesToTypes.entrySet()) {
                if (type.equals(CoreUtilities.toLowerCase(typeClass.getKey()))) {
                    for (Object notable : NoteManager.getAllType(typeClass.getValue())) {
                        allNotables.addObject((ObjectTag) notable);
                    }
                    break;
                }
            }
        } else {
            for (Notable notable : NoteManager.nameToObject.values()) {
                allNotables.addObject((ObjectTag) notable);
            }
        }
        event.setReplacedObject(allNotables.getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("statistic_type") && attribute.hasParam()) {
        Statistic statistic;
        try {
            statistic = Statistic.valueOf(attribute.getParam().toUpperCase());
        } catch (IllegalArgumentException ex) {
            attribute.echoError("Statistic '" + attribute.getParam() + "' does not exist: " + ex.getMessage());
            return;
        }
        event.setReplacedObject(new ElementTag(statistic.getType().name()).getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("enchantment_max_level") && attribute.hasParam()) {
        Deprecations.echantmentTagUpdate.warn(attribute.context);
        EnchantmentTag ench = EnchantmentTag.valueOf(attribute.getParam(), attribute.context);
        if (ench == null) {
            attribute.echoError("Enchantment '" + attribute.getParam() + "' does not exist.");
            return;
        }
        event.setReplacedObject(new ElementTag(ench.enchantment.getMaxLevel()).getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("enchantment_start_level") && attribute.hasParam()) {
        Deprecations.echantmentTagUpdate.warn(attribute.context);
        EnchantmentTag ench = EnchantmentTag.valueOf(attribute.getParam(), attribute.context);
        if (ench == null) {
            attribute.echoError("Enchantment '" + attribute.getParam() + "' does not exist.");
            return;
        }
        event.setReplacedObject(new ElementTag(ench.enchantment.getStartLevel()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("started_time")) {
        event.setReplacedObject(new TimeTag(DenizenCore.startTime).getObjectAttribute(attribute.fulfill(1)));
    }
    if (attribute.startsWith("start_time")) {
        Deprecations.timeTagRewrite.warn(attribute.context);
        event.setReplacedObject(new DurationTag(DenizenCore.startTime / 50).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("disk_free")) {
        File folder = Denizen.getInstance().getDataFolder();
        event.setReplacedObject(new ElementTag(folder.getUsableSpace()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("disk_total")) {
        File folder = Denizen.getInstance().getDataFolder();
        event.setReplacedObject(new ElementTag(folder.getTotalSpace()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("disk_usage")) {
        File folder = Denizen.getInstance().getDataFolder();
        event.setReplacedObject(new ElementTag(folder.getTotalSpace() - folder.getFreeSpace()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("ram_allocated")) {
        event.setReplacedObject(new ElementTag(Runtime.getRuntime().totalMemory()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("ram_max")) {
        event.setReplacedObject(new ElementTag(Runtime.getRuntime().maxMemory()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("ram_free")) {
        event.setReplacedObject(new ElementTag(Runtime.getRuntime().freeMemory()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("ram_usage")) {
        event.setReplacedObject(new ElementTag(Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("available_processors")) {
        event.setReplacedObject(new ElementTag(Runtime.getRuntime().availableProcessors()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("current_tick")) {
        event.setReplacedObject(new ElementTag(TickScriptEvent.instance.ticks).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("delta_time_since_start")) {
        event.setReplacedObject(new DurationTag(TickScriptEvent.instance.ticks).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("real_time_since_start")) {
        event.setReplacedObject(new DurationTag((System.currentTimeMillis() - serverStartTimeMillis) / 1000.0).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("current_time_millis")) {
        event.setReplacedObject(new ElementTag(System.currentTimeMillis()).getObjectAttribute(attribute.fulfill(1)));
    }
    // -->
    if (attribute.startsWith("selected_npc")) {
        NPC npc = ((Citizens) Bukkit.getPluginManager().getPlugin("Citizens")).getNPCSelector().getSelected(Bukkit.getConsoleSender());
        if (npc == null) {
            return;
        } else {
            event.setReplacedObject(new NPCTag(npc).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if ((attribute.startsWith("npcs_named") || attribute.startsWith("list_npcs_named")) && Depends.citizens != null && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        ListTag npcs = new ListTag();
        String name = attribute.getParam();
        for (NPC npc : CitizensAPI.getNPCRegistry()) {
            if (CoreUtilities.equalsIgnoreCase(npc.getName(), name)) {
                npcs.addObject(new NPCTag(npc));
            }
        }
        event.setReplacedObject(npcs.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("has_file") && attribute.hasParam()) {
        File f = new File(Denizen.getInstance().getDataFolder(), attribute.getParam());
        try {
            if (!Utilities.canReadFile(f)) {
                Debug.echoError("Cannot read from that file path due to security settings in Denizen/config.yml.");
                return;
            }
        } catch (Exception e) {
            Debug.echoError(e);
            return;
        }
        event.setReplacedObject(new ElementTag(f.exists()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("list_files") && attribute.hasParam()) {
        File folder = new File(Denizen.getInstance().getDataFolder(), attribute.getParam());
        try {
            if (!Utilities.canReadFile(folder)) {
                Debug.echoError("Cannot read from that file path due to security settings in Denizen/config.yml.");
                return;
            }
            if (!folder.exists() || !folder.isDirectory()) {
                attribute.echoError("Invalid path specified. No directory exists at that path.");
                return;
            }
        } catch (Exception e) {
            Debug.echoError(e);
            return;
        }
        File[] files = folder.listFiles();
        if (files == null) {
            return;
        }
        ListTag list = new ListTag();
        for (File file : files) {
            list.add(file.getName());
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("has_permissions")) {
        event.setReplacedObject(new ElementTag(Depends.permissions != null && Depends.permissions.isEnabled()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("has_economy")) {
        event.setReplacedObject(new ElementTag(Depends.economy != null && Depends.economy.isEnabled()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("denizen_version")) {
        event.setReplacedObject(new ElementTag(Denizen.getInstance().getDescription().getVersion()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("bukkit_version")) {
        event.setReplacedObject(new ElementTag(Bukkit.getBukkitVersion()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("version")) {
        event.setReplacedObject(new ElementTag(Bukkit.getServer().getVersion()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("java_version")) {
        event.setReplacedObject(new ElementTag(System.getProperty("java.version")).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("max_players")) {
        event.setReplacedObject(new ElementTag(Bukkit.getServer().getMaxPlayers()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("sql_connections") || attribute.startsWith("list_sql_connections")) {
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        for (Map.Entry<String, Connection> entry : SQLCommand.connections.entrySet()) {
            try {
                if (!entry.getValue().isClosed()) {
                    list.add(entry.getKey());
                } else {
                    SQLCommand.connections.remove(entry.getKey());
                }
            } catch (SQLException e) {
                Debug.echoError(attribute.getScriptEntry(), e);
            }
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("group_prefix")) {
        if (Depends.permissions == null) {
            attribute.echoError("No permission system loaded! Have you installed Vault and a compatible permissions plugin?");
            return;
        }
        String group = attribute.getParam();
        if (!Arrays.asList(Depends.permissions.getGroups()).contains(group)) {
            attribute.echoError("Invalid group! '" + (group != null ? group : "") + "' could not be found.");
            return;
        }
        // -->
        if (attribute.startsWith("world", 2)) {
            WorldTag world = attribute.contextAsType(2, WorldTag.class);
            if (world != null) {
                event.setReplacedObject(new ElementTag(Depends.chat.getGroupPrefix(world.getWorld(), group)).getObjectAttribute(attribute.fulfill(2)));
            }
            return;
        }
        // Prefix in default world
        event.setReplacedObject(new ElementTag(Depends.chat.getGroupPrefix(Bukkit.getWorlds().get(0), group)).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("group_suffix")) {
        if (Depends.permissions == null) {
            attribute.echoError("No permission system loaded! Have you installed Vault and a compatible permissions plugin?");
            return;
        }
        String group = attribute.getParam();
        if (!Arrays.asList(Depends.permissions.getGroups()).contains(group)) {
            attribute.echoError("Invalid group! '" + (group != null ? group : "") + "' could not be found.");
            return;
        }
        // -->
        if (attribute.startsWith("world", 2)) {
            WorldTag world = attribute.contextAsType(2, WorldTag.class);
            if (world != null) {
                event.setReplacedObject(new ElementTag(Depends.chat.getGroupSuffix(world.getWorld(), group)).getObjectAttribute(attribute.fulfill(2)));
            }
            return;
        }
        // Suffix in default world
        event.setReplacedObject(new ElementTag(Depends.chat.getGroupSuffix(Bukkit.getWorlds().get(0), group)).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("permission_groups") || attribute.startsWith("list_permission_groups")) {
        if (Depends.permissions == null) {
            attribute.echoError("No permission system loaded! Have you installed Vault and a compatible permissions plugin?");
            return;
        }
        listDeprecateWarn(attribute);
        event.setReplacedObject(new ListTag(Arrays.asList(Depends.permissions.getGroups())).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    if (attribute.startsWith("list_plugin_names")) {
        Deprecations.serverPluginNamesTag.warn(attribute.context);
        ListTag plugins = new ListTag();
        for (Plugin plugin : Bukkit.getServer().getPluginManager().getPlugins()) {
            plugins.add(plugin.getName());
        }
        event.setReplacedObject(plugins.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("scripts") || attribute.startsWith("list_scripts")) {
        listDeprecateWarn(attribute);
        ListTag scripts = new ListTag();
        for (ScriptContainer script : ScriptRegistry.scriptContainers.values()) {
            scripts.addObject(new ScriptTag(script));
        }
        event.setReplacedObject(scripts.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("match_player") && attribute.hasParam()) {
        Player matchPlayer = null;
        String matchInput = CoreUtilities.toLowerCase(attribute.getParam());
        if (matchInput.isEmpty()) {
            return;
        }
        for (Player player : Bukkit.getOnlinePlayers()) {
            String nameLow = CoreUtilities.toLowerCase(player.getName());
            if (nameLow.equals(matchInput)) {
                matchPlayer = player;
                break;
            } else if (nameLow.contains(matchInput)) {
                if (matchPlayer == null || nameLow.startsWith(matchInput)) {
                    matchPlayer = player;
                }
            }
        }
        if (matchPlayer != null) {
            event.setReplacedObject(new PlayerTag(matchPlayer).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("match_offline_player") && attribute.hasParam()) {
        PlayerTag matchPlayer = null;
        String matchInput = CoreUtilities.toLowerCase(attribute.getParam());
        if (matchInput.isEmpty()) {
            return;
        }
        for (Map.Entry<String, UUID> entry : PlayerTag.getAllPlayers().entrySet()) {
            String nameLow = CoreUtilities.toLowerCase(entry.getKey());
            if (nameLow.equals(matchInput)) {
                matchPlayer = new PlayerTag(entry.getValue());
                break;
            } else if (nameLow.contains(matchInput)) {
                PlayerTag newMatch = new PlayerTag(entry.getValue());
                if (matchPlayer == null) {
                    matchPlayer = newMatch;
                } else if (newMatch.isOnline() && !matchPlayer.isOnline()) {
                    matchPlayer = newMatch;
                } else if (nameLow.startsWith(matchInput) && (newMatch.isOnline() == matchPlayer.isOnline())) {
                    matchPlayer = newMatch;
                }
            }
        }
        if (matchPlayer != null) {
            event.setReplacedObject(matchPlayer.getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if ((attribute.startsWith("npcs_assigned") || attribute.startsWith("list_npcs_assigned")) && Depends.citizens != null && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        ScriptTag script = attribute.paramAsType(ScriptTag.class);
        if (script == null || !(script.getContainer() instanceof AssignmentScriptContainer)) {
            attribute.echoError("Invalid script specified.");
        } else {
            AssignmentScriptContainer container = (AssignmentScriptContainer) script.getContainer();
            ListTag npcs = new ListTag();
            for (NPC npc : CitizensAPI.getNPCRegistry()) {
                if (npc.hasTrait(AssignmentTrait.class) && npc.getOrAddTrait(AssignmentTrait.class).isAssigned(container)) {
                    npcs.addObject(new NPCTag(npc));
                }
            }
            event.setReplacedObject(npcs.getObjectAttribute(attribute.fulfill(1)));
            return;
        }
    }
    // -->
    if ((attribute.startsWith("online_players_flagged") || attribute.startsWith("list_online_players_flagged")) && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        String flag = attribute.getParam();
        ListTag players = new ListTag();
        for (Player player : Bukkit.getOnlinePlayers()) {
            PlayerTag plTag = new PlayerTag(player);
            if (plTag.getFlagTracker().hasFlag(flag)) {
                players.addObject(plTag);
            }
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if ((attribute.startsWith("players_flagged") || attribute.startsWith("list_players_flagged")) && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        String flag = attribute.getParam();
        ListTag players = new ListTag();
        for (Map.Entry<String, UUID> entry : PlayerTag.getAllPlayers().entrySet()) {
            PlayerTag plTag = new PlayerTag(entry.getValue());
            if (plTag.getFlagTracker().hasFlag(flag)) {
                players.addObject(plTag);
            }
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if ((attribute.startsWith("spawned_npcs_flagged") || attribute.startsWith("list_spawned_npcs_flagged")) && Depends.citizens != null && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        String flag = attribute.getParam();
        ListTag npcs = new ListTag();
        for (NPC npc : CitizensAPI.getNPCRegistry()) {
            NPCTag dNpc = new NPCTag(npc);
            if (dNpc.isSpawned() && dNpc.hasFlag(flag)) {
                npcs.addObject(dNpc);
            }
        }
        event.setReplacedObject(npcs.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if ((attribute.startsWith("npcs_flagged") || attribute.startsWith("list_npcs_flagged")) && Depends.citizens != null && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        String flag = attribute.getParam();
        ListTag npcs = new ListTag();
        for (NPC npc : CitizensAPI.getNPCRegistry()) {
            NPCTag dNpc = new NPCTag(npc);
            if (dNpc.hasFlag(flag)) {
                npcs.addObject(dNpc);
            }
        }
        event.setReplacedObject(npcs.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("npc_registries") && Depends.citizens != null) {
        ListTag result = new ListTag();
        for (NPCRegistry registry : CitizensAPI.getNPCRegistries()) {
            result.add(registry.getName());
        }
        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if ((attribute.startsWith("npcs") || attribute.startsWith("list_npcs")) && Depends.citizens != null) {
        listDeprecateWarn(attribute);
        ListTag npcs = new ListTag();
        NPCRegistry registry = CitizensAPI.getNPCRegistry();
        if (attribute.hasParam()) {
            registry = NPCTag.getRegistryByName(attribute.getParam());
            if (registry == null) {
                attribute.echoError("NPC Registry '" + attribute.getParam() + "' does not exist.");
                return;
            }
        }
        for (NPC npc : registry) {
            npcs.addObject(new NPCTag(npc));
        }
        event.setReplacedObject(npcs.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("worlds") || attribute.startsWith("list_worlds")) {
        listDeprecateWarn(attribute);
        ListTag worlds = new ListTag();
        for (World world : Bukkit.getWorlds()) {
            worlds.addObject(WorldTag.mirrorBukkitWorld(world));
        }
        event.setReplacedObject(worlds.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("plugins") || attribute.startsWith("list_plugins")) {
        listDeprecateWarn(attribute);
        ListTag plugins = new ListTag();
        for (Plugin plugin : Bukkit.getServer().getPluginManager().getPlugins()) {
            plugins.addObject(new PluginTag(plugin));
        }
        event.setReplacedObject(plugins.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("players") || attribute.startsWith("list_players")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
            players.addObject(PlayerTag.mirrorBukkitPlayer(player));
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("online_players") || attribute.startsWith("list_online_players")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (Player player : Bukkit.getOnlinePlayers()) {
            players.addObject(PlayerTag.mirrorBukkitPlayer(player));
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("offline_players") || attribute.startsWith("list_offline_players")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
            if (!player.isOnline()) {
                players.addObject(PlayerTag.mirrorBukkitPlayer(player));
            }
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("banned_players") || attribute.startsWith("list_banned_players")) {
        listDeprecateWarn(attribute);
        ListTag banned = new ListTag();
        for (OfflinePlayer player : Bukkit.getBannedPlayers()) {
            banned.addObject(PlayerTag.mirrorBukkitPlayer(player));
        }
        event.setReplacedObject(banned.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("banned_addresses") || attribute.startsWith("list_banned_addresses")) {
        listDeprecateWarn(attribute);
        ListTag list = new ListTag();
        list.addAll(Bukkit.getIPBans());
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("is_banned") && attribute.hasParam()) {
        // BanList contains an isBanned method that doesn't check expiration time
        BanEntry ban = Bukkit.getBanList(BanList.Type.IP).getBanEntry(attribute.getParam());
        if (ban == null) {
            event.setReplacedObject(new ElementTag(false).getObjectAttribute(attribute.fulfill(1)));
        } else if (ban.getExpiration() == null) {
            event.setReplacedObject(new ElementTag(true).getObjectAttribute(attribute.fulfill(1)));
        } else {
            event.setReplacedObject(new ElementTag(ban.getExpiration().after(new Date())).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    if (attribute.startsWith("ban_info") && attribute.hasParam()) {
        BanEntry ban = Bukkit.getBanList(BanList.Type.IP).getBanEntry(attribute.getParam());
        attribute.fulfill(1);
        if (ban == null || (ban.getExpiration() != null && ban.getExpiration().before(new Date()))) {
            return;
        }
        // -->
        if (attribute.startsWith("expiration_time") && ban.getExpiration() != null) {
            event.setReplacedObject(new TimeTag(ban.getExpiration().getTime()).getObjectAttribute(attribute.fulfill(1)));
        } else if (attribute.startsWith("expiration") && ban.getExpiration() != null) {
            Deprecations.timeTagRewrite.warn(attribute.context);
            event.setReplacedObject(new DurationTag(ban.getExpiration().getTime() / 50).getObjectAttribute(attribute.fulfill(1)));
        } else // -->
        if (attribute.startsWith("reason")) {
            event.setReplacedObject(new ElementTag(ban.getReason()).getObjectAttribute(attribute.fulfill(1)));
        } else // -->
        if (attribute.startsWith("created_time")) {
            event.setReplacedObject(new TimeTag(ban.getCreated().getTime()).getObjectAttribute(attribute.fulfill(1)));
        } else if (attribute.startsWith("created")) {
            Deprecations.timeTagRewrite.warn(attribute.context);
            event.setReplacedObject(new DurationTag(ban.getCreated().getTime() / 50).getObjectAttribute(attribute.fulfill(1)));
        } else // -->
        if (attribute.startsWith("source")) {
            event.setReplacedObject(new ElementTag(ban.getSource()).getObjectAttribute(attribute.fulfill(1)));
        }
        return;
    }
    // -->
    if (attribute.startsWith("ops") || attribute.startsWith("list_ops")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (OfflinePlayer player : Bukkit.getOperators()) {
            players.addObject(PlayerTag.mirrorBukkitPlayer(player));
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("online_ops") || attribute.startsWith("list_online_ops")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (OfflinePlayer player : Bukkit.getOperators()) {
            if (player.isOnline()) {
                players.addObject(PlayerTag.mirrorBukkitPlayer(player));
            }
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("offline_ops") || attribute.startsWith("list_offline_ops")) {
        listDeprecateWarn(attribute);
        ListTag players = new ListTag();
        for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
            if (player.isOp() && !player.isOnline()) {
                players.addObject(PlayerTag.mirrorBukkitPlayer(player));
            }
        }
        event.setReplacedObject(players.getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("motd")) {
        event.setReplacedObject(new ElementTag(Bukkit.getServer().getMotd()).getObjectAttribute(attribute.fulfill(1)));
        return;
    }
    // -->
    if (attribute.startsWith("view_distance")) {
        event.setReplacedObject(new ElementTag(Bukkit.getServer().getViewDistance()).getObjectAttribute(attribute.fulfill(1)));
        return;
    } else if (attribute.startsWith("entity_is_spawned") && attribute.hasParam()) {
        Deprecations.isValidTag.warn(attribute.context);
        EntityTag ent = EntityTag.valueOf(attribute.getParam(), new BukkitTagContext(null, null, null, false, null));
        event.setReplacedObject(new ElementTag((ent != null && ent.isUnique() && ent.isSpawnedOrValidForTag()) ? "true" : "false").getObjectAttribute(attribute.fulfill(1)));
    } else if (attribute.startsWith("player_is_valid") && attribute.hasParam()) {
        Deprecations.isValidTag.warn(attribute.context);
        event.setReplacedObject(new ElementTag(PlayerTag.playerNameIsValid(attribute.getParam())).getObjectAttribute(attribute.fulfill(1)));
    } else if (attribute.startsWith("npc_is_valid") && attribute.hasParam()) {
        Deprecations.isValidTag.warn(attribute.context);
        NPCTag npc = NPCTag.valueOf(attribute.getParam(), new BukkitTagContext(null, null, null, false, null));
        event.setReplacedObject(new ElementTag((npc != null && npc.isValid())).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("current_bossbars")) {
        ListTag dl = new ListTag(BossBarCommand.bossBarMap.keySet());
        event.setReplacedObject(dl.getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("bossbar_viewers") && attribute.hasParam()) {
        BossBar bar = BossBarCommand.bossBarMap.get(CoreUtilities.toLowerCase(attribute.getParam()));
        if (bar != null) {
            ListTag list = new ListTag();
            for (Player player : bar.getPlayers()) {
                list.addObject(new PlayerTag(player));
            }
            event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
        }
    } else // -->
    if (attribute.startsWith("recent_tps")) {
        ListTag list = new ListTag();
        for (double tps : NMSHandler.getInstance().getRecentTps()) {
            list.addObject(new ElementTag(tps));
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("port")) {
        event.setReplacedObject(new ElementTag(NMSHandler.getInstance().getPort()).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("debug_enabled")) {
        event.setReplacedObject(new ElementTag(com.denizenscript.denizen.utilities.debugging.Debug.showDebug).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("last_reload")) {
        event.setReplacedObject(new TimeTag(DenizenCore.lastReloadTime).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("idle_timeout")) {
        event.setReplacedObject(new DurationTag(Bukkit.getIdleTimeout() * 60).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("vanilla_tags")) {
        event.setReplacedObject(new ListTag(VanillaTagHelper.tagsByKey.keySet()).getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("vanilla_tagged_materials")) {
        if (!attribute.hasParam()) {
            return;
        }
        HashSet<Material> materials = VanillaTagHelper.tagsByKey.get(CoreUtilities.toLowerCase(attribute.getParam()));
        if (materials == null) {
            return;
        }
        ListTag list = new ListTag();
        for (Material material : materials) {
            list.addObject(new MaterialTag(material));
        }
        event.setReplacedObject(list.getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if ((attribute.matches("plugins_handling_event") || attribute.matches("list_plugins_handling_event")) && attribute.hasParam()) {
        listDeprecateWarn(attribute);
        String eventName = attribute.getParam();
        if (CoreUtilities.contains(eventName, '.')) {
            try {
                Class clazz = Class.forName(eventName, false, ServerTagBase.class.getClassLoader());
                ListTag result = getHandlerPluginList(clazz);
                if (result != null) {
                    event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
                }
            } catch (ClassNotFoundException ex) {
                if (!attribute.hasAlternative()) {
                    Debug.echoError(ex);
                }
            }
        } else {
            ScriptEvent scriptEvent = ScriptEvent.eventLookup.get(CoreUtilities.toLowerCase(eventName));
            if (scriptEvent instanceof Listener) {
                Plugin plugin = Denizen.getInstance();
                for (Class eventClass : plugin.getPluginLoader().createRegisteredListeners((Listener) scriptEvent, plugin).keySet()) {
                    ListTag result = getHandlerPluginList(eventClass);
                    // Return results for the first valid match.
                    if (result != null && result.size() > 0) {
                        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
                        return;
                    }
                }
                event.setReplacedObject(new ListTag().getObjectAttribute(attribute.fulfill(1)));
            }
        }
    } else // -->
    if (attribute.startsWith("generate_loot_table") && attribute.hasParam()) {
        MapTag map = attribute.paramAsType(MapTag.class);
        ObjectTag idObj = map.getObject("id");
        ObjectTag locationObj = map.getObject("location");
        if (idObj == null || locationObj == null) {
            return;
        }
        NamespacedKey key = NamespacedKey.fromString(CoreUtilities.toLowerCase(idObj.toString()));
        if (key == null) {
            return;
        }
        LootTable table = Bukkit.getLootTable(key);
        LootContext.Builder context = new LootContext.Builder(locationObj.asType(LocationTag.class, attribute.context));
        ObjectTag killer = map.getObject("killer");
        ObjectTag luck = map.getObject("luck");
        ObjectTag bonus = map.getObject("loot_bonus");
        ObjectTag entity = map.getObject("entity");
        if (entity != null) {
            context = context.lootedEntity(entity.asType(EntityTag.class, attribute.context).getBukkitEntity());
        }
        if (killer != null) {
            context = context.killer((HumanEntity) killer.asType(EntityTag.class, attribute.context).getLivingEntity());
        }
        if (luck != null) {
            context = context.luck(luck.asElement().asFloat());
        }
        if (bonus != null) {
            context = context.lootingModifier(bonus.asElement().asInt());
        }
        Collection<ItemStack> items;
        try {
            items = table.populateLoot(CoreUtilities.getRandom(), context.build());
        } catch (Throwable ex) {
            attribute.echoError("Loot table failed to generate: " + ex.getMessage());
            if (Debug.verbose) {
                attribute.echoError(ex);
            }
            return;
        }
        ListTag result = new ListTag();
        for (ItemStack item : items) {
            if (item != null && item.getType() != Material.AIR) {
                result.addObject(new ItemTag(item));
            }
        }
        event.setReplacedObject(result.getObjectAttribute(attribute.fulfill(1)));
    } else // -->
    if (attribute.startsWith("stack_trace")) {
        String trace = com.denizenscript.denizen.utilities.debugging.Debug.getFullExceptionMessage(new RuntimeException("TRACE"), false);
        event.setReplacedObject(new ElementTag(trace).getObjectAttribute(attribute.fulfill(1)));
    }
}
Also used : Plugin(org.bukkit.plugin.Plugin) PatternType(org.bukkit.block.banner.PatternType) Utilities(com.denizenscript.denizen.utilities.Utilities) AssignmentScriptContainer(com.denizenscript.denizen.scripts.containers.core.AssignmentScriptContainer) Connection(java.sql.Connection) TagManager(com.denizenscript.denizencore.tags.TagManager) Enchantment(org.bukkit.enchantments.Enchantment) NMSHandler(com.denizenscript.denizen.nms.NMSHandler) SQLCommand(com.denizenscript.denizencore.scripts.commands.core.SQLCommand) CommandScriptHelper(com.denizenscript.denizen.scripts.containers.core.CommandScriptHelper) TagRunnable(com.denizenscript.denizencore.tags.TagRunnable) Event(org.bukkit.event.Event) BossBarCommand(com.denizenscript.denizen.scripts.commands.server.BossBarCommand) Player(org.bukkit.entity.Player) NoteManager(com.denizenscript.denizencore.objects.notable.NoteManager) Biome(org.bukkit.block.Biome) Objective(org.bukkit.scoreboard.Objective) org.bukkit(org.bukkit) org.bukkit.inventory(org.bukkit.inventory) Scoreboard(org.bukkit.scoreboard.Scoreboard) CitizensAPI(net.citizensnpcs.api.CitizensAPI) VanillaTagHelper(com.denizenscript.denizen.utilities.VanillaTagHelper) BukkitTagContext(com.denizenscript.denizen.tags.BukkitTagContext) PotionType(org.bukkit.potion.PotionType) EntityType(org.bukkit.entity.EntityType) PluginCommand(org.bukkit.command.PluginCommand) BukkitScriptEvent(com.denizenscript.denizen.events.BukkitScriptEvent) Settings(com.denizenscript.denizen.utilities.Settings) MapCursor(org.bukkit.map.MapCursor) SlotHelper(com.denizenscript.denizen.utilities.inventory.SlotHelper) Deprecations(com.denizenscript.denizencore.utilities.Deprecations) PotionEffectType(org.bukkit.potion.PotionEffectType) HandlerList(org.bukkit.event.HandlerList) Citizens(net.citizensnpcs.Citizens) java.util(java.util) ScriptContainer(com.denizenscript.denizencore.scripts.containers.ScriptContainer) ReplaceableTagEvent(com.denizenscript.denizencore.tags.ReplaceableTagEvent) NPCRegistry(net.citizensnpcs.api.npc.NPCRegistry) Debug(com.denizenscript.denizencore.utilities.debugging.Debug) NPC(net.citizensnpcs.api.npc.NPC) LootContext(org.bukkit.loot.LootContext) DenizenCore(com.denizenscript.denizencore.DenizenCore) FutureWarning(com.denizenscript.denizencore.utilities.debugging.FutureWarning) SQLException(java.sql.SQLException) CommandContext(net.citizensnpcs.api.command.CommandContext) TickScriptEvent(com.denizenscript.denizencore.events.core.TickScriptEvent) ScriptRegistry(com.denizenscript.denizencore.scripts.ScriptRegistry) Attribute(com.denizenscript.denizencore.tags.Attribute) EntityDamageEvent(org.bukkit.event.entity.EntityDamageEvent) Listener(org.bukkit.event.Listener) HumanEntity(org.bukkit.entity.HumanEntity) AssignmentTrait(com.denizenscript.denizen.npc.traits.AssignmentTrait) LootTable(org.bukkit.loot.LootTable) Team(org.bukkit.scoreboard.Team) ScriptEvent(com.denizenscript.denizencore.events.ScriptEvent) com.denizenscript.denizencore.objects.core(com.denizenscript.denizencore.objects.core) Depends(com.denizenscript.denizen.utilities.depends.Depends) Notable(com.denizenscript.denizencore.objects.notable.Notable) File(java.io.File) com.denizenscript.denizen.objects(com.denizenscript.denizen.objects) Denizen(com.denizenscript.denizen.Denizen) RegisteredListener(org.bukkit.plugin.RegisteredListener) Consumer(java.util.function.Consumer) TraitInfo(net.citizensnpcs.api.trait.TraitInfo) BossBar(org.bukkit.boss.BossBar) PlayerTeleportEvent(org.bukkit.event.player.PlayerTeleportEvent) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) ScoreboardHelper(com.denizenscript.denizen.utilities.ScoreboardHelper) com.denizenscript.denizencore.objects(com.denizenscript.denizencore.objects) CoreUtilities(com.denizenscript.denizencore.utilities.CoreUtilities) BossBar(org.bukkit.boss.BossBar) TraitInfo(net.citizensnpcs.api.trait.TraitInfo) HumanEntity(org.bukkit.entity.HumanEntity) PatternType(org.bukkit.block.banner.PatternType) PotionEffectType(org.bukkit.potion.PotionEffectType) MapCursor(org.bukkit.map.MapCursor) PotionType(org.bukkit.potion.PotionType) Attribute(com.denizenscript.denizencore.tags.Attribute) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) Biome(org.bukkit.block.Biome) Team(org.bukkit.scoreboard.Team) EntityDamageEvent(org.bukkit.event.entity.EntityDamageEvent) NPCRegistry(net.citizensnpcs.api.npc.NPCRegistry) LootTable(org.bukkit.loot.LootTable) Connection(java.sql.Connection) AssignmentTrait(com.denizenscript.denizen.npc.traits.AssignmentTrait) BukkitScriptEvent(com.denizenscript.denizen.events.BukkitScriptEvent) TickScriptEvent(com.denizenscript.denizencore.events.core.TickScriptEvent) ScriptEvent(com.denizenscript.denizencore.events.ScriptEvent) AssignmentScriptContainer(com.denizenscript.denizen.scripts.containers.core.AssignmentScriptContainer) Player(org.bukkit.entity.Player) LootContext(org.bukkit.loot.LootContext) PlayerTeleportEvent(org.bukkit.event.player.PlayerTeleportEvent) Notable(com.denizenscript.denizencore.objects.notable.Notable) EntityType(org.bukkit.entity.EntityType) Objective(org.bukkit.scoreboard.Objective) AssignmentScriptContainer(com.denizenscript.denizen.scripts.containers.core.AssignmentScriptContainer) ScriptContainer(com.denizenscript.denizencore.scripts.containers.ScriptContainer) BukkitTagContext(com.denizenscript.denizen.tags.BukkitTagContext) Enchantment(org.bukkit.enchantments.Enchantment) File(java.io.File) NPC(net.citizensnpcs.api.npc.NPC) Listener(org.bukkit.event.Listener) RegisteredListener(org.bukkit.plugin.RegisteredListener) SQLException(java.sql.SQLException) Scoreboard(org.bukkit.scoreboard.Scoreboard) PluginCommand(org.bukkit.command.PluginCommand) SQLException(java.sql.SQLException) Plugin(org.bukkit.plugin.Plugin)

Example 10 with Event

use of org.bukkit.event.Event in project Essentials by drtshock.

the class EssentialsSpawn method onEnable.

@Override
public void onEnable() {
    final PluginManager pluginManager = getServer().getPluginManager();
    ess = (IEssentials) pluginManager.getPlugin("Essentials");
    if (!this.getDescription().getVersion().equals(ess.getDescription().getVersion())) {
        LOGGER.log(Level.WARNING, tl("versionMismatchAll"));
    }
    if (!ess.isEnabled()) {
        this.setEnabled(false);
        return;
    }
    spawns = new SpawnStorage(ess);
    ess.addReloadListener(spawns);
    final EssentialsSpawnPlayerListener playerListener = new EssentialsSpawnPlayerListener(ess, spawns);
    EventPriority respawnPriority = ess.getSettings().getRespawnPriority();
    if (respawnPriority != null) {
        pluginManager.registerEvent(PlayerRespawnEvent.class, playerListener, respawnPriority, new EventExecutor() {

            @Override
            public void execute(final Listener ll, final Event event) throws EventException {
                ((EssentialsSpawnPlayerListener) ll).onPlayerRespawn((PlayerRespawnEvent) event);
            }
        }, this);
    }
    EventPriority joinPriority = ess.getSettings().getSpawnJoinPriority();
    if (joinPriority != null) {
        pluginManager.registerEvent(PlayerJoinEvent.class, playerListener, joinPriority, new EventExecutor() {

            @Override
            public void execute(final Listener ll, final Event event) throws EventException {
                ((EssentialsSpawnPlayerListener) ll).onPlayerJoin((PlayerJoinEvent) event);
            }
        }, this);
    }
}
Also used : PluginManager(org.bukkit.plugin.PluginManager) PlayerJoinEvent(org.bukkit.event.player.PlayerJoinEvent) EventExecutor(org.bukkit.plugin.EventExecutor) Listener(org.bukkit.event.Listener) EventException(org.bukkit.event.EventException) PlayerRespawnEvent(org.bukkit.event.player.PlayerRespawnEvent) PlayerJoinEvent(org.bukkit.event.player.PlayerJoinEvent) Event(org.bukkit.event.Event) PlayerRespawnEvent(org.bukkit.event.player.PlayerRespawnEvent) EventPriority(org.bukkit.event.EventPriority)

Aggregations

Event (org.bukkit.event.Event)26 Listener (org.bukkit.event.Listener)8 Test (org.junit.Test)7 EventException (org.bukkit.event.EventException)6 EventHandler (org.bukkit.event.EventHandler)6 EventExecutor (org.bukkit.plugin.EventExecutor)6 PluginManager (org.bukkit.plugin.PluginManager)6 RegisteredListener (org.bukkit.plugin.RegisteredListener)5 Cancellable (org.bukkit.event.Cancellable)4 TestEvent (org.bukkit.event.TestEvent)4 Field (java.lang.reflect.Field)3 Map (java.util.Map)3 Set (java.util.Set)3 EventPriority (org.bukkit.event.EventPriority)3 File (java.io.File)2 Method (java.lang.reflect.Method)2 List (java.util.List)2 ConquerFaction (me.andrew28.addons.conquer.api.ConquerFaction)2 ConquerPlayer (me.andrew28.addons.conquer.api.ConquerPlayer)2 ConquerFactionCreateEvent (me.andrew28.addons.conquer.api.events.ConquerFactionCreateEvent)2