use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.
the class AssignmentTrait method onHit.
// <--[action]
// @Actions
// hit
// hit on <entity>
//
// @Triggers when the NPC hits an enemy.
//
// @Context
// None
//
// -->
// <--[action]
// @Actions
// kill
// kill of <entity>
//
// @Triggers when the NPC kills an enemy.
//
// @Context
// None
//
// -->
// Listen for this NPC's hits on entities
@EventHandler(priority = EventPriority.MONITOR)
public void onHit(EntityDamageByEntityEvent event) {
// Check if the damager is this NPC
if (event.getDamager() != npc.getEntity()) {
// projectile shot by this NPC, in which case we want to continue
if (event.getDamager() instanceof Projectile) {
if (((Projectile) event.getDamager()).getShooter() != npc.getEntity()) {
return;
}
} else {
return;
}
}
dPlayer player = null;
// Check if the entity hit by this NPC is a player
if (event.getEntity() instanceof Player) {
player = dPlayer.mirrorBukkitPlayer((Player) event.getEntity());
}
// TODO: Context containing the entity hit
DenizenAPI.getDenizenNPC(npc).action("hit", player);
DenizenAPI.getDenizenNPC(npc).action("hit on " + event.getEntityType().name(), player);
if (event.getEntity() instanceof LivingEntity) {
if (((LivingEntity) event.getEntity()).getHealth() - event.getFinalDamage() <= 0) {
DenizenAPI.getDenizenNPC(npc).action("kill", player);
DenizenAPI.getDenizenNPC(npc).action("kill of " + event.getEntityType().name(), player);
}
}
// All done!
}
use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.
the class FishingTrait method cast.
// <--[action]
// @Actions
// cast fishing rod
//
// @Triggers when the NPC casts a fishing rod.
//
// @Context
// None
//
// -->
private void cast() {
DenizenAPI.getDenizenNPC(npc).action("cast fishing rod", null);
if (fishingLocation == null) {
dB.echoError("Fishing location not found!");
return;
}
double v = 34;
double g = 20;
Location from = npc.getEntity().getLocation();
from = from.add(0, .33, 0);
Location to = fishingLocation;
Vector test = to.clone().subtract(from).toVector();
Double elev = test.getY();
Double testAngle = launchAngle(from, to, v, elev, g);
if (testAngle == null) {
return;
}
Double hangtime = hangtime(testAngle, v, elev, g);
Vector victor = to.clone().subtract(from).toVector();
Double dist = Math.sqrt(Math.pow(victor.getX(), 2) + Math.pow(victor.getZ(), 2));
elev = victor.getY();
if (dist == 0) {
return;
}
Double launchAngle = launchAngle(from, to, v, elev, g);
if (launchAngle == null) {
return;
}
victor.setY(Math.tan(launchAngle) * dist);
victor = normalizeVector(victor);
v = v + (.5 * Math.pow(hangtime, 2));
//Random rand = new Random(1234);
v = v + (CoreUtilities.getRandom().nextDouble() - .8) / 2;
victor = victor.multiply(v / 20.0);
fishHook = NMSHandler.getInstance().getFishingHelper().spawnHook(from, (Player) npc.getEntity());
fishHook.setShooter((ProjectileSource) npc.getEntity());
fishHook.setVelocity(victor);
PlayerAnimation.ARM_SWING.play((Player) npc.getEntity());
}
use of org.bukkit.entity.Player 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 org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.
the class KillListenerInstance method listen.
@EventHandler
public void listen(EntityDeathEvent event) {
// Only continue if the event is an event for the player that owns this listener.
if (event.getEntity().getKiller() != player.getPlayerEntity()) {
return;
}
// If REGION argument specified, check. If not in region, don't count kill!
if (region != null) {
//if (!WorldGuardUtilities.inRegion(player.getLocation(), region)) return;
}
// Same with the CUBOID argument...
if (cuboid != null) {
if (!cuboid.isInsideCuboid(player.getLocation())) {
return;
}
}
//
if (type == KillType.ENTITY) {
// Get entity killed
dEntity ent = new dEntity(event.getEntity());
boolean count_it = false;
// Check targets, if any match entity killed, count_it!
for (String target : targets) {
if (dEntity.valueOf(target) != null) {
if (ent.comparesTo(dEntity.valueOf(target)) == 1) {
count_it = true;
}
}
}
boolean right_name = false;
for (String name : names) {
if (ChatColor.stripColor(ent.getName()).contains(name)) {
right_name = true;
}
}
// kills_so_far
if (count_it || targets.contains("*")) {
if (right_name || names.contains("*")) {
kills_so_far++;
dB.log(player.getName() + " killed a " + ent.identify() + ". Current progress '" + kills_so_far + "/" + required + "'.");
// Check the number of kills so far
check();
}
}
} else //
if (type == KillType.NPC) {
// If a NPC wasn't killed, return.
if (!CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
return;
}
// Get the NPC killed
dNPC npc = dNPC.mirrorCitizensNPC(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()));
boolean count_it = false;
// Check targets, if any match entity killed, count_it!
for (String target : targets) {
// Check against a physical NPC object (n@7, n@18, etc.)
if (dNPC.valueOf(target) != null) {
if (dNPC.valueOf(target).getId() == npc.getId()) {
count_it = true;
}
}
if (CoreUtilities.toLowerCase(npc.getName()).equals(CoreUtilities.toLowerCase(target).replace("n@", ""))) {
count_it = true;
}
}
// the kills so far.
if (count_it || targets.contains("*")) {
kills_so_far++;
dB.log(player.getName() + " killed " + npc.toString() + ". Current progress '" + kills_so_far + "/" + required + "'.");
// Check the number of kills so far
check();
}
} else //
if (type == KillType.PLAYER) {
// Check to make sure entity is a Player, and not a NPC
if (event.getEntityType() != EntityType.PLAYER) {
return;
}
if (Depends.citizens != null && CitizensAPI.getNPCRegistry().isNPC(event.getEntity())) {
return;
}
// Get player killed
dPlayer player = dPlayer.mirrorBukkitPlayer((Player) event.getEntity());
boolean count_it = false;
// Check targets, if any match entity killed, count_it!
for (String target : targets) {
if (dPlayer.valueOf(target) != null) {
if (dPlayer.valueOf(target).getName().equalsIgnoreCase(player.getName())) {
count_it = true;
}
}
}
// kills_so_far
if (count_it || targets.contains("*")) {
kills_so_far++;
dB.log(player.getName() + " killed " + player.getName() + ". Current progress '" + kills_so_far + "/" + required + "'.");
// Check the number of kills so far
check();
}
} else //
if (type == KillType.GROUP) {
// Require the entity to be a Player
if (event.getEntityType() == EntityType.PLAYER) // Iterate through groups on the Player
{
for (String group : Depends.permissions.getPlayerGroups((Player) event.getEntity())) // If a group matches, count it!
{
if (targets.contains(group.toUpperCase())) {
kills_so_far++;
dB.log(player.getName() + " killed " + ((Player) event.getEntity()).getName().toUpperCase() + " of group " + group + ".");
check();
break;
}
}
}
}
}
use of org.bukkit.entity.Player in project Denizen-For-Bukkit by DenizenScript.
the class PlayerItemTakesDamageScriptEvent method onPlayerItemTakesDamage.
@EventHandler
public void onPlayerItemTakesDamage(PlayerItemDamageEvent event) {
if (dEntity.isNPC(event.getPlayer())) {
return;
}
item = new dItem(event.getItem());
damage = new Element(event.getDamage());
location = new dLocation(event.getPlayer().getLocation());
cancelled = event.isCancelled();
this.event = event;
fire();
event.setCancelled(cancelled);
event.setDamage(damage.asInt());
final Player p = event.getPlayer();
if (cancelled) {
Bukkit.getScheduler().scheduleSyncDelayedTask(DenizenAPI.getCurrentInstance(), new Runnable() {
@Override
public void run() {
p.updateInventory();
}
}, 1);
}
}
Aggregations