use of org.bukkit.entity.EntityType in project EliteMobs by MagmaGuy.
the class StatsCommand method statsHandler.
public static void statsHandler(CommandSender commandSender) {
int aggressiveCount = 0;
int passiveCount = 0;
HashMap<EntityType, Integer> entitiesCounted = new HashMap<>();
for (World world : EliteMobs.validWorldList) for (LivingEntity livingEntity : world.getLivingEntities()) if (EntityTracker.isEliteMob(livingEntity)) {
aggressiveCount++;
if (!entitiesCounted.containsKey(livingEntity.getType()))
entitiesCounted.put(livingEntity.getType(), 1);
else
entitiesCounted.put(livingEntity.getType(), entitiesCounted.get(livingEntity.getType()) + 1);
} else if (EntityTracker.isSuperMob(livingEntity)) {
passiveCount++;
if (!entitiesCounted.containsKey(livingEntity.getType()))
entitiesCounted.put(livingEntity.getType(), 1);
else
entitiesCounted.put(livingEntity.getType(), entitiesCounted.get(livingEntity.getType()) + 1);
}
StringBuilder breakdownString = new StringBuilder("&2Breakdown: &a");
for (EntityType entityType : entitiesCounted.keySet()) {
breakdownString.append(entitiesCounted.get(entityType)).append(" ").append(entityType).append("&2, &a");
}
double highestThreat = 0;
String highestThreatUser = "";
double threatAverage = 0;
int highestGuildRank = 0;
String highestGuildUser = "";
double guildRankAverage = 0;
Player highestGuildRankPlayer = null;
for (Player player : Bukkit.getOnlinePlayers()) {
double currentTier = ElitePlayerInventory.playerInventories.get(player.getUniqueId()).getFullPlayerTier(true);
threatAverage += currentTier;
int currentGuildRank = GuildRank.getActiveGuildRank(player);
guildRankAverage += currentGuildRank;
if (currentTier > highestThreat) {
highestThreat = currentTier;
highestThreatUser = player.getDisplayName();
}
if (currentGuildRank > highestGuildRank) {
highestGuildRankPlayer = player;
highestGuildRank = currentGuildRank;
highestGuildUser = player.getDisplayName();
}
}
threatAverage /= Bukkit.getOnlinePlayers().size();
guildRankAverage /= Bukkit.getOnlinePlayers().size();
commandSender.sendMessage(ChatColorConverter.convert("§5§m-----------------------------------------------------"));
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] §a§lEliteMobs v. " + Bukkit.getPluginManager().getPlugin(MetadataHandler.ELITE_MOBS).getDescription().getVersion() + " stats:"));
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2There are currently §l§6" + (aggressiveCount + passiveCount) + " §f§2EliteMobs mobs entities in the world, of which &a" + aggressiveCount + " &2are Elite Mobs and &a" + passiveCount + " &2are Super Mobs."));
commandSender.sendMessage(ChatColorConverter.convert(breakdownString.toString()));
if (highestGuildRankPlayer == null)
return;
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2Highest online threat tier: &a" + highestThreatUser + " &2at total threat tier &a" + highestThreat));
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2Average threat tier: &a" + Round.twoDecimalPlaces(threatAverage)));
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2Highest adventurer's guild tier: &a" + highestGuildUser + " &2at guild rank &a" + GuildRank.getRankName(GuildRank.getGuildPrestigeRank(highestGuildRankPlayer), highestGuildRank) + " &2(&a" + highestGuildRank + "&2)"));
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2Average guild rank: &a" + Round.twoDecimalPlaces(guildRankAverage)));
commandSender.sendMessage(ChatColorConverter.convert("§5§m-----------------------------------------------------"));
commandSender.sendMessage("Tracked boss count: " + EntityTracker.getEliteMobEntities().size());
commandSender.sendMessage("Tracked NPC count: " + EntityTracker.getNpcEntities().size());
commandSender.sendMessage("Tracked visual item count: " + EntityTracker.getItemVisualEffects().size());
int loadedCounter = 0;
for (RegionalBossEntity regionalBossEntity : RegionalBossEntity.getRegionalBossEntities()) if (regionalBossEntity.isValid())
loadedCounter++;
commandSender.sendMessage(ChatColorConverter.convert("&7[EM] &2There are &c" + RegionalBossEntity.getRegionalBossEntities().size() + " &2Regional Bosses installed, of which &c" + loadedCounter + " &2are currently loaded."));
}
use of org.bukkit.entity.EntityType in project EliteMobs by MagmaGuy.
the class CustomBossMount method generateMount.
public static CustomBossEntity generateMount(CustomBossEntity customBossEntity) {
if (customBossEntity.customBossesConfigFields.getMountedEntity() == null)
return null;
try {
EntityType entityType = EntityType.valueOf(customBossEntity.customBossesConfigFields.getMountedEntity());
LivingEntity livingEntity = (LivingEntity) customBossEntity.getLivingEntity().getWorld().spawnEntity(customBossEntity.getLivingEntity().getLocation(), entityType);
PreventMountExploit.bypass = true;
livingEntity.addPassenger(customBossEntity.getLivingEntity());
livingEntity.setRemoveWhenFarAway(false);
customBossEntity.livingEntityMount = livingEntity;
} catch (Exception ex) {
// This runs when it's not an API entity
CustomBossesConfigFields customBossesConfigFields = CustomBossesConfig.getCustomBoss(customBossEntity.customBossesConfigFields.getMountedEntity());
if (customBossesConfigFields != null) {
CustomBossEntity mountEntity = CustomBossEntity.createCustomBossEntity(customBossEntity.customBossesConfigFields.getMountedEntity());
if (mountEntity == null) {
new WarningMessage("Mount for boss " + customBossEntity.getCustomBossesConfigFields().getFilename() + " is not valid!");
return null;
}
mountEntity.setSpawnLocation(customBossEntity.getLivingEntity().getLocation());
mountEntity.setBypassesProtections(customBossEntity.getBypassesProtections());
mountEntity.setPersistent(false);
mountEntity.setMount(true);
mountEntity.spawn(false);
new BukkitRunnable() {
@Override
public void run() {
if (!mountEntity.isValid())
return;
PreventMountExploit.bypass = true;
mountEntity.getLivingEntity().addPassenger(customBossEntity.getLivingEntity());
customBossEntity.customBossMount = mountEntity;
}
}.runTaskLater(MetadataHandler.PLUGIN, 5);
return mountEntity;
}
new WarningMessage("Attempted to make Custom Boss " + customBossEntity.customBossesConfigFields.getFilename() + " mount invalid" + " entity or boss " + customBossEntity.customBossesConfigFields.getMountedEntity() + " . Fix this in the configuration file.");
}
return null;
}
use of org.bukkit.entity.EntityType in project Bukkit by Bukkit.
the class AchievementCommand method execute.
@Override
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
if (!testPermission(sender))
return true;
if (args.length < 2) {
sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
return false;
}
if (!args[0].equalsIgnoreCase("give")) {
sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage);
return false;
}
String statisticString = args[1];
Player player = null;
if (args.length > 2) {
player = Bukkit.getPlayer(args[1]);
} else if (sender instanceof Player) {
player = (Player) sender;
}
if (player == null) {
sender.sendMessage("You must specify which player you wish to perform this action on.");
return true;
}
if (statisticString.equals("*")) {
for (Achievement achievement : Achievement.values()) {
if (player.hasAchievement(achievement)) {
continue;
}
PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement);
Bukkit.getServer().getPluginManager().callEvent(event);
if (!event.isCancelled()) {
player.awardAchievement(achievement);
}
}
Command.broadcastCommandMessage(sender, String.format("Successfully given all achievements to %s", player.getName()));
return true;
}
Achievement achievement = Bukkit.getUnsafe().getAchievementFromInternalName(statisticString);
Statistic statistic = Bukkit.getUnsafe().getStatisticFromInternalName(statisticString);
if (achievement != null) {
if (player.hasAchievement(achievement)) {
sender.sendMessage(String.format("%s already has achievement %s", player.getName(), statisticString));
return true;
}
PlayerAchievementAwardedEvent event = new PlayerAchievementAwardedEvent(player, achievement);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
sender.sendMessage(String.format("Unable to award %s the achievement %s", player.getName(), statisticString));
return true;
}
player.awardAchievement(achievement);
Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString));
return true;
}
if (statistic == null) {
sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString));
return true;
}
if (statistic.getType() == Type.UNTYPED) {
PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName()));
return true;
}
player.incrementStatistic(statistic);
Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString));
return true;
}
if (statistic.getType() == Type.ENTITY) {
EntityType entityType = EntityType.fromName(statisticString.substring(statisticString.lastIndexOf(".") + 1));
if (entityType == null) {
sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString));
return true;
}
PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, entityType);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName()));
return true;
}
try {
player.incrementStatistic(statistic, entityType);
} catch (IllegalArgumentException e) {
sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString));
return true;
}
} else {
int id;
try {
id = getInteger(sender, statisticString.substring(statisticString.lastIndexOf(".") + 1), 0, Integer.MAX_VALUE, true);
} catch (NumberFormatException e) {
sender.sendMessage(e.getMessage());
return true;
}
Material material = Material.getMaterial(id);
if (material == null) {
sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString));
return true;
}
PlayerStatisticIncrementEvent event = new PlayerStatisticIncrementEvent(player, statistic, player.getStatistic(statistic), player.getStatistic(statistic) + 1, material);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
sender.sendMessage(String.format("Unable to increment %s for %s", statisticString, player.getName()));
return true;
}
try {
player.incrementStatistic(statistic, material);
} catch (IllegalArgumentException e) {
sender.sendMessage(String.format("Unknown achievement or statistic '%s'", statisticString));
return true;
}
}
Command.broadcastCommandMessage(sender, String.format("Successfully given %s the stat %s", player.getName(), statisticString));
return true;
}
use of org.bukkit.entity.EntityType in project Denizen-For-Bukkit by DenizenScript.
the class BiomeTag method registerTags.
public static void registerTags() {
AbstractFlagTracker.registerFlagHandlers(tagProcessor);
// <--[tag]
// @attribute <BiomeTag.downfall_type>
// @returns ElementTag
// @mechanism BiomeTag.downfall_type
// @description
// Returns this biome's downfall type for when a world has weather.
// This can be RAIN, SNOW, or NONE.
// -->
tagProcessor.registerTag(ElementTag.class, "downfall_type", (attribute, object) -> {
return new ElementTag(CoreUtilities.toLowerCase(object.biome.getDownfallType().name()));
});
// <--[tag]
// @attribute <BiomeTag.name>
// @returns ElementTag
// @description
// Returns this biome's name.
// -->
tagProcessor.registerTag(ElementTag.class, "name", (attribute, object) -> {
return new ElementTag(CoreUtilities.toLowerCase(object.biome.getName()));
});
// <--[tag]
// @attribute <BiomeTag.humidity>
// @returns ElementTag(Decimal)
// @mechanism BiomeTag.humidity
// @description
// Returns the humidity of this biome.
// -->
tagProcessor.registerTag(ElementTag.class, "humidity", (attribute, object) -> {
return new ElementTag(object.biome.getHumidity());
});
// <--[tag]
// @attribute <BiomeTag.temperature>
// @returns ElementTag(Decimal)
// @mechanism BiomeTag.temperature
// @description
// Returns the temperature of this biome.
// -->
tagProcessor.registerTag(ElementTag.class, "temperature", (attribute, object) -> {
return new ElementTag(object.biome.getTemperature());
});
// <--[tag]
// @attribute <BiomeTag.spawnable_entities[(<type>)]>
// @returns ListTag(EntityTag)
// @description
// Returns all entities that spawn naturally in this biome.
// Optionally specify a type as: AMBIENT, CREATURES, MONSTERS, WATER, or ALL.
// (By default, will be "ALL").
//
// -->
tagProcessor.registerTag(ListTag.class, "spawnable_entities", (attribute, object) -> {
List<EntityType> entityTypes;
if (attribute.startsWith("ambient", 2)) {
Deprecations.biomeSpawnableTag.warn(attribute.context);
attribute.fulfill(1);
entityTypes = object.biome.getAmbientEntities();
} else if (attribute.startsWith("creatures", 2)) {
Deprecations.biomeSpawnableTag.warn(attribute.context);
attribute.fulfill(1);
entityTypes = object.biome.getCreatureEntities();
} else if (attribute.startsWith("monsters", 2)) {
Deprecations.biomeSpawnableTag.warn(attribute.context);
attribute.fulfill(1);
entityTypes = object.biome.getMonsterEntities();
} else if (attribute.startsWith("water", 2)) {
Deprecations.biomeSpawnableTag.warn(attribute.context);
attribute.fulfill(1);
entityTypes = object.biome.getWaterEntities();
} else {
String type = attribute.hasParam() ? CoreUtilities.toLowerCase(attribute.getParam()) : "all";
switch(type) {
case "ambient":
entityTypes = object.biome.getAmbientEntities();
break;
case "creatures":
entityTypes = object.biome.getCreatureEntities();
break;
case "monsters":
entityTypes = object.biome.getMonsterEntities();
break;
case "water":
entityTypes = object.biome.getWaterEntities();
break;
default:
entityTypes = object.biome.getAllEntities();
break;
}
}
ListTag list = new ListTag();
for (EntityType entityType : entityTypes) {
list.add(entityType.name());
}
return list;
});
}
use of org.bukkit.entity.EntityType 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)));
}
}
Aggregations