use of com.denizenscript.denizencore.objects.core.ListTag in project Denizen-For-Bukkit by DenizenScript.
the class DropCommand method execute.
@Override
public void execute(ScriptEntry scriptEntry) {
LocationTag location = scriptEntry.getObjectTag("location");
ElementTag quantity = scriptEntry.getElement("quantity");
ElementTag action = scriptEntry.getElement("action");
ElementTag speed = scriptEntry.getElement("speed");
List<ItemTag> items = (List<ItemTag>) scriptEntry.getObject("item");
EntityTag entity = scriptEntry.getObjectTag("entity");
DurationTag delay = scriptEntry.getObjectTag("delay");
if (scriptEntry.dbCallShouldDebug()) {
Debug.report(scriptEntry, getName(), action, location, quantity, db("items", items), entity, speed, delay);
}
ListTag entityList = new ListTag();
switch(Action.valueOf(action.asString())) {
case DROP_EXP:
EntityTag orb = new EntityTag(location.getWorld().spawnEntity(location, EntityType.EXPERIENCE_ORB));
((ExperienceOrb) orb.getBukkitEntity()).setExperience(quantity.asInt());
entityList.addObject(orb);
break;
case DROP_ITEM:
for (ItemTag item : items) {
if (item.getMaterial().getMaterial() == Material.AIR) {
continue;
}
if (quantity.asInt() > 1 && item.isUnique()) {
Debug.echoDebug(scriptEntry, "Cannot drop multiples of this item because it is Unique!");
}
for (int x = 0; x < quantity.asInt(); x++) {
EntityTag e = new EntityTag(location.getWorld().dropItem(location, item.getItemStack()));
if (e.isValid()) {
e.setVelocity(e.getVelocity().multiply(speed != null ? speed.asDouble() : 1d));
if (delay != null) {
((Item) e.getBukkitEntity()).setPickupDelay(delay.getTicksAsInt());
}
}
entityList.addObject(e);
}
}
break;
case DROP_ENTITY:
if (quantity.asInt() > 1 && entity.isUnique()) {
Debug.echoDebug(scriptEntry, "Cannot drop multiples of this entity because it is Unique!");
entity.spawnAt(location);
entityList.addObject(entity);
break;
}
for (int x = 0; x < quantity.asInt(); x++) {
ArrayList<Mechanism> mechanisms = new ArrayList<>();
for (Mechanism mechanism : entity.getWaitingMechanisms()) {
mechanisms.add(new Mechanism(mechanism.getName(), mechanism.value, scriptEntry.context));
}
EntityTag ent = new EntityTag(entity.getEntityType(), mechanisms);
ent.spawnAt(location);
entityList.addObject(ent);
}
break;
}
scriptEntry.addObject("dropped_entities", entityList);
if (entityList.size() == 1) {
scriptEntry.addObject("dropped_entity", entityList.getObject(0));
}
}
use of com.denizenscript.denizencore.objects.core.ListTag in project Denizen-For-Bukkit by DenizenScript.
the class StatisticCommand method execute.
@Override
public void execute(ScriptEntry scriptEntry) {
ElementTag action = scriptEntry.getElement("action");
ListTag players = scriptEntry.getObjectTag("players");
ElementTag statistic = scriptEntry.getElement("statistic");
ElementTag amount = scriptEntry.getElement("amount");
MaterialTag material = scriptEntry.getObjectTag("material");
EntityTag entity = scriptEntry.getObjectTag("entity");
if (scriptEntry.dbCallShouldDebug()) {
Debug.report(scriptEntry, getName(), action, statistic, amount, players, material, entity);
}
Action act = Action.valueOf(action.asString().toUpperCase());
Statistic stat = Statistic.valueOf(statistic.asString().toUpperCase());
int amt = amount.asInt();
switch(stat.getType()) {
case BLOCK:
case ITEM:
Material mat = material.getMaterial();
switch(act) {
case ADD:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.incrementStatistic(stat, mat, amt);
}
break;
case TAKE:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.decrementStatistic(stat, mat, amt);
}
break;
case SET:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.setStatistic(stat, mat, amt);
}
break;
}
break;
case ENTITY:
EntityType ent = entity.getBukkitEntityType();
switch(act) {
case ADD:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.incrementStatistic(stat, ent, amt);
}
break;
case TAKE:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.decrementStatistic(stat, ent, amt);
}
break;
case SET:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.setStatistic(stat, ent, amt);
}
break;
}
break;
case UNTYPED:
switch(act) {
case ADD:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.incrementStatistic(stat, amt);
}
break;
case TAKE:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.decrementStatistic(stat, amt);
}
break;
case SET:
for (PlayerTag player : players.filter(PlayerTag.class, scriptEntry)) {
player.setStatistic(stat, amt);
}
break;
}
break;
}
}
use of com.denizenscript.denizencore.objects.core.ListTag in project Denizen-For-Bukkit by DenizenScript.
the class StatisticCommand method parseArgs.
@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {
boolean specified_players = false;
for (Argument arg : scriptEntry) {
if (!scriptEntry.hasObject("action") && arg.matchesEnum(Action.class)) {
scriptEntry.addObject("action", arg.asElement());
} else if (arg.matchesPrefix("players") && !scriptEntry.hasObject("players") && arg.matchesArgumentList(PlayerTag.class)) {
scriptEntry.addObject("players", arg.asType(ListTag.class));
specified_players = true;
} else if (!scriptEntry.hasObject("statistic") && arg.matchesEnum(Statistic.class)) {
scriptEntry.addObject("statistic", arg.asElement());
} else if (!scriptEntry.hasObject("amount") && arg.matchesInteger()) {
scriptEntry.addObject("amount", arg.asElement());
} else if (arg.matchesPrefix("qualifier", "q") && !scriptEntry.hasObject("material") && !scriptEntry.hasObject("entity")) {
if (arg.matchesArgumentType(MaterialTag.class)) {
scriptEntry.addObject("material", arg.asType(MaterialTag.class));
} else if (arg.matchesArgumentType(EntityTag.class)) {
scriptEntry.addObject("entity", arg.asType(EntityTag.class));
}
}
}
if (!scriptEntry.hasObject("action")) {
throw new InvalidArgumentsException("Must specify a valid action!");
}
if (!scriptEntry.hasObject("statistic")) {
throw new InvalidArgumentsException("Must specify a valid Statistic!");
}
if (!scriptEntry.hasObject("amount")) {
scriptEntry.addObject("amount", new ElementTag(1));
}
Statistic.Type type = Statistic.valueOf(scriptEntry.getElement("statistic").asString().toUpperCase()).getType();
if (type != Statistic.Type.UNTYPED) {
if ((type == Statistic.Type.BLOCK || type == Statistic.Type.ITEM) && !scriptEntry.hasObject("material")) {
throw new InvalidArgumentsException("Must specify a valid " + type.name() + " MATERIAL!");
} else if (type == Statistic.Type.ENTITY && !scriptEntry.hasObject("entity")) {
throw new InvalidArgumentsException("Must specify a valid ENTITY!");
}
}
if (!scriptEntry.hasObject("players") && Utilities.entryHasPlayer(scriptEntry) && !specified_players) {
scriptEntry.addObject("players", new ListTag(Utilities.getEntryPlayer(scriptEntry)));
}
if (!scriptEntry.hasObject("players")) {
throw new InvalidArgumentsException("Must specify valid players!");
}
}
use of com.denizenscript.denizencore.objects.core.ListTag in project Denizen-For-Bukkit by DenizenScript.
the class ScoreboardCommand method execute.
@Override
public void execute(final ScriptEntry scriptEntry) {
List<PlayerTag> viewers = (List<PlayerTag>) scriptEntry.getObject("viewers");
ListTag lines = scriptEntry.hasObject("lines") ? ListTag.valueOf(scriptEntry.getElement("lines").asString(), scriptEntry.getContext()) : new ListTag();
ElementTag action = scriptEntry.getElement("action");
ElementTag id = scriptEntry.getElement("id");
ElementTag objective = scriptEntry.getElement("objective");
ElementTag criteria = scriptEntry.getElement("criteria");
ElementTag score = scriptEntry.getElement("score");
ElementTag displaySlot = scriptEntry.getElement("displayslot");
ElementTag displayName = scriptEntry.getElement("displayname");
ElementTag renderType = scriptEntry.getElement("rendertype");
Action act = Action.valueOf(action.asString().toUpperCase());
boolean hadCriteria = criteria != null;
boolean hadDisplaySlot = displaySlot != null;
if (!hadCriteria) {
criteria = new ElementTag("dummy");
}
if (!hadDisplaySlot) {
displaySlot = new ElementTag("sidebar");
}
if (scriptEntry.dbCallShouldDebug()) {
Debug.report(scriptEntry, getName(), action, id, db("viewers", viewers), objective, lines, score, objective, displaySlot, criteria, displayName, renderType);
}
Scoreboard board = null;
// Get the main scoreboard by default
if (id.asString().equalsIgnoreCase("main")) {
board = ScoreboardHelper.getMain();
} else if (id.asString().equalsIgnoreCase("player")) {
board = Utilities.getEntryPlayer(scriptEntry).getPlayerEntity().getScoreboard();
} else {
// If this scoreboard already exists, get it
if (ScoreboardHelper.hasScoreboard(id.asString())) {
board = ScoreboardHelper.getScoreboard(id.asString());
} else // Else, create a new one if Action is ADD
if (act.equals(Action.ADD)) {
board = ScoreboardHelper.createScoreboard(id.asString());
}
}
// Don't progress if we ended up with a null board
if (board == null) {
Debug.echoError(scriptEntry, "Scoreboard " + id.asString() + " does not exist!");
return;
}
Objective obj;
if (act.equals(Action.ADD)) {
if (objective != null) {
// Try getting the objective from the board
obj = board.getObjective(objective.asString());
boolean existedAlready = obj != null;
// Create the objective if it does not already exist
if (obj == null) {
obj = board.registerNewObjective(objective.asString(), criteria.asString());
} else // recreate the objective
if (hadCriteria && !obj.getCriteria().equals(criteria.asString())) {
obj.unregister();
obj = board.registerNewObjective(objective.asString(), criteria.asString());
}
// Change the objective's display slot
if ((!existedAlready || hadDisplaySlot) && !displaySlot.asString().equalsIgnoreCase("none")) {
obj.setDisplaySlot(DisplaySlot.valueOf(displaySlot.asString().toUpperCase()));
}
if (renderType != null) {
obj.setRenderType(RenderType.valueOf(renderType.asString().toUpperCase()));
}
if (displayName != null) {
obj.setDisplayName(displayName.asString());
} else if (!existedAlready) {
obj.setDisplayName(objective.asString());
}
if (!lines.isEmpty()) {
// use a score of 0
if (score == null) {
score = new ElementTag(0);
}
for (ObjectTag line : lines.objectForms) {
ScoreboardHelper.addScore(obj, checkLine(line), score.asInt());
}
}
} else // the command cannot do anything at all, so print a message about that
if (viewers == null && !lines.isEmpty()) {
Debug.echoDebug(scriptEntry, "Cannot add lines without specifying an objective!");
}
} else if (act.equals(Action.REMOVE)) {
if (objective != null) {
// Try getting the objective from the board
obj = board.getObjective(objective.asString());
if (obj != null) {
// Remove the entire objective if no lines have been specified
if (lines.isEmpty()) {
Debug.echoDebug(scriptEntry, "Removing objective " + obj.getName() + " from scoreboard " + id.asString());
obj.unregister();
} else {
for (ObjectTag line : lines.objectForms) {
ScoreboardHelper.removeScore(obj, checkLine(line));
}
}
} else {
Debug.echoError(scriptEntry, "Objective " + objective.asString() + " does not exist in scoreboard " + id.asString());
}
} else // lines from every objective
if (!lines.isEmpty()) {
Debug.echoDebug(scriptEntry, "Removing lines " + lines.identify() + " from all objectives in scoreboard " + id.asString());
for (ObjectTag line : lines.objectForms) {
ScoreboardHelper.removePlayer(id.asString(), checkLine(line));
}
} else // of viewers should be removed instead)
if (viewers == null) {
Debug.echoDebug(scriptEntry, "Removing scoreboard " + id.asString());
ScoreboardHelper.deleteScoreboard(id.asString());
}
}
if (viewers != null) {
for (PlayerTag viewer : viewers) {
// Add viewers for this scoreboard
if (act.equals(Action.ADD)) {
// to the map of viewers saved by Denizen
if (!id.asString().equalsIgnoreCase("main")) {
ScoreboardHelper.viewerMap.put(viewer.getUUID(), id.asString());
}
// is already online
if (viewer.isOnline()) {
viewer.getPlayerEntity().setScoreboard(board);
}
} else // Remove viewers for this scoreboard
if (act.equals(Action.REMOVE)) {
// Take this player out of the map of viewers
ScoreboardHelper.viewerMap.remove(viewer.getUUID());
// provided by Bukkit)
if (viewer.isOnline()) {
viewer.getPlayerEntity().setScoreboard(ScoreboardHelper.createScoreboard());
}
}
}
}
}
use of com.denizenscript.denizencore.objects.core.ListTag in project Denizen-For-Bukkit by DenizenScript.
the class PlayerCompletesAdvancementScriptEvent method getContext.
@Override
public ObjectTag getContext(String name) {
if (name.equals("criteria")) {
ListTag criteria = new ListTag();
criteria.addAll(event.getAdvancement().getCriteria());
return criteria;
} else if (name.equals("advancement")) {
return new ElementTag(event.getAdvancement().getKey().getKey());
}
return super.getContext(name);
}
Aggregations