use of net.aufdemrand.denizencore.objects.Element in project Denizen-For-Bukkit by DenizenScript.
the class EntityCreatePortalScriptEvent method onEntityCreatesPortal.
@EventHandler
public void onEntityCreatesPortal(EntityCreatePortalEvent event) {
entity = new dEntity(event.getEntity());
portal_type = new Element(event.getPortalType().toString());
/*
blocks = new dList();
for (int i=0; i < event.getBlocks().size(); i++) {
dLocation tempLoc = new dLocation(event.getBlocks().get(i).getBlock().getLocation());
blocks.add(tempLoc.identifySimple());
}
*/
cancelled = event.isCancelled();
this.event = event;
fire();
event.setCancelled(cancelled);
}
use of net.aufdemrand.denizencore.objects.Element in project Denizen-For-Bukkit by DenizenScript.
the class EntityDeathScriptEvent method applyDetermination.
@Override
public boolean applyDetermination(ScriptContainer container, String determination) {
// finish this
String lower = CoreUtilities.toLowerCase(determination);
// Deprecated
if (lower.startsWith("drops ")) {
lower = lower.substring(6);
determination = determination.substring(6);
}
//Handle no_drops and no_drops_or_xp and just no_xp
if (lower.startsWith("no_drops")) {
drops.clear();
changed_drops = true;
if (lower.endsWith("_or_xp")) {
xp = 0;
}
} else if (lower.equals("no_xp")) {
xp = 0;
} else if (lower.equals("keep_inv")) {
keep_inv = true;
} else if (lower.equals("keep_level")) {
keep_level = true;
} else // Change xp value only
if (aH.matchesInteger(determination)) {
xp = aH.Argument.valueOf(lower).asElement().asInt();
} else // Change dropped items if dList detected
if (aH.Argument.valueOf(lower).matchesArgumentList(dItem.class)) {
drops.clear();
changed_drops = true;
dList drops_list = dList.valueOf(determination);
drops_list.filter(dItem.class);
for (String drop : drops_list) {
dItem item = dItem.valueOf(drop);
if (item != null) {
// TODO: Why not just store the dItem in an arraylist?
drops.add(item.identify());
}
}
} else // String containing new Death Message
if (event instanceof PlayerDeathEvent) {
message = new Element(determination);
} else {
return super.applyDetermination(container, determination);
}
return true;
}
use of net.aufdemrand.denizencore.objects.Element in project Denizen-For-Bukkit by DenizenScript.
the class HealthTrait method onDamage.
// <--[action]
// @Actions
// death
// death by entity
// death by <entity>
// death by block
// death by <cause>
//
// @Triggers when the NPC dies. (Requires Health Trait)
//
// @Context
// <context.killer> returns the entity that killed the NPC (if any)
// <context.shooter> returns the shooter of the killing projectile (if any)
//
// -->
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onDamage(EntityDamageEvent event) {
// Check if the event pertains to this NPC
if (event.getEntity() != npc.getEntity() || dying) {
return;
}
// Make sure this is a killing blow
if (this.getHealth() - event.getFinalDamage() > 0) {
return;
}
dying = true;
player = null;
// Save entityId for EntityDeath event
entityId = npc.getEntity().getEntityId();
String deathCause = CoreUtilities.toLowerCase(event.getCause().toString()).replace('_', ' ');
Map<String, dObject> context = new HashMap<String, dObject>();
context.put("damage", new Element(event.getDamage()));
context.put("death_cause", new Element(deathCause));
// Check if the entity has been killed by another entity
if (event instanceof EntityDamageByEntityEvent) {
Entity killerEntity = ((EntityDamageByEntityEvent) event).getDamager();
context.put("killer", new dEntity(killerEntity));
// that player to the action's ScriptEntry
if (killerEntity instanceof Player) {
player = dPlayer.mirrorBukkitPlayer((Player) killerEntity);
} else // account as well
if (killerEntity instanceof Projectile) {
ProjectileSource shooter = ((Projectile) killerEntity).getShooter();
if (shooter != null && shooter instanceof LivingEntity) {
context.put("shooter", new dEntity((LivingEntity) shooter));
if (shooter instanceof Player) {
player = dPlayer.mirrorBukkitPlayer((Player) shooter);
}
DenizenAPI.getDenizenNPC(npc).action("death by " + ((LivingEntity) shooter).getType().toString(), player, context);
}
// TODO: Handle other shooter source thingy types
}
DenizenAPI.getDenizenNPC(npc).action("death by entity", player, context);
DenizenAPI.getDenizenNPC(npc).action("death by " + killerEntity.getType().toString(), player, context);
} else // If not, check if the entity has been killed by a block
if (event instanceof EntityDamageByBlockEvent) {
DenizenAPI.getDenizenNPC(npc).action("death by block", player, context);
// TODO:
// The line of code below should work, but a Bukkit bug makes the damager
// return null. Uncomment it once the bug is fixed.
// DenizenAPI.getDenizenNPC(npc).action("death by " +
// ((EntityDamageByBlockEvent) event).getDamager().getType().name(), null);
}
DenizenAPI.getDenizenNPC(npc).action("death", player, context);
DenizenAPI.getDenizenNPC(npc).action("death by " + deathCause, player, context);
// NPC's entity still exists before proceeding
if (npc.getEntity() == null) {
return;
}
loc = dLocation.valueOf(// TODO: debug option?
TagManager.tag(// TODO: debug option?
respawnLocation, new BukkitTagContext(null, DenizenAPI.getDenizenNPC(npc), false, null, true, null)));
if (loc == null) {
loc = npc.getEntity().getLocation();
}
if (animatedeath) {
// Cancel navigation to keep the NPC from damaging players
// while the death animation is being carried out.
npc.getNavigator().cancelNavigation();
// Reset health now to avoid the death from happening instantly
//setHealth();
// Play animation (TODO)
// playDeathAnimation(npc.getEntity());
}
die();
if (respawn && (Duration.valueOf(respawnDelay).getTicks() > 0)) {
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() {
public void run() {
if (CitizensAPI.getNPCRegistry().getById(npc.getId()) == null || npc.isSpawned()) {
return;
} else {
npc.spawn(loc);
}
}
}, (Duration.valueOf(respawnDelay).getTicks()));
}
}
use of net.aufdemrand.denizencore.objects.Element in project Denizen-For-Bukkit by DenizenScript.
the class dMaterial method getAttribute.
@Override
public String getAttribute(Attribute attribute) {
if (attribute == null) {
return null;
}
// TODO: Scrap getAttribute, make this functionality a core system
String attrLow = CoreUtilities.toLowerCase(attribute.getAttributeWithoutContext(1));
TagRunnable tr = registeredTags.get(attrLow);
if (tr != null) {
if (!tr.name.equals(attrLow)) {
net.aufdemrand.denizencore.utilities.debugging.dB.echoError(attribute.getScriptEntry() != null ? attribute.getScriptEntry().getResidingQueue() : null, "Using deprecated form of tag '" + tr.name + "': '" + attrLow + "'.");
}
return tr.run(attribute, this);
}
// Iterate through this object's properties' attributes
for (Property property : PropertyParser.getProperties(this)) {
String returned = property.getAttribute(attribute);
if (returned != null) {
return returned;
}
}
return new Element(identify()).getAttribute(attribute.fulfill(0));
}
use of net.aufdemrand.denizencore.objects.Element in project Denizen-For-Bukkit by DenizenScript.
the class TriggerTrait method trigger.
public TriggerContext trigger(AbstractTrigger triggerClass, dPlayer player, Map<String, dObject> context) {
String trigger_type = triggerClass.getName();
// Check cool down, return false if not yet met
if (!DenizenAPI.getCurrentInstance().getTriggerRegistry().checkCooldown(npc, player, triggerClass, getCooldownType(trigger_type))) {
return new TriggerContext(false);
}
if (context == null) {
context = new HashMap<String, dObject>();
}
// Check engaged
if (EngageCommand.getEngaged(npc)) {
// Put the trigger_type into context
context.put("trigger_type", new Element(trigger_type));
// TODO: Should this be refactored?
if (dNPCRegistry.getDenizen(npc).action("unavailable", player, context).equalsIgnoreCase("available")) {
// If determined available, continue on...
// else, return a 'non-triggered' state.
} else {
return new TriggerContext(false);
}
}
// Set cool down
DenizenAPI.getCurrentInstance().getTriggerRegistry().setCooldown(npc, player, triggerClass, getCooldownDuration(trigger_type), getCooldownType(trigger_type));
// Grab the determination of the action
String determination = dNPCRegistry.getDenizen(npc).action(trigger_type, player, context);
return new TriggerContext(determination, true);
}
Aggregations