use of org.bukkit.entity.Projectile in project Prism-Bukkit by prism.
the class EntitySerializer method serialize.
/**
* Serialize entity.
* @param entity Entity.
*/
public final void serialize(Entity entity) {
entityName = entity.getType().name().toLowerCase();
// Get custom name
customName = entity.getCustomName();
// Get animal age
if (entity instanceof Ageable) {
isAdult = ((Ageable) entity).isAdult();
}
// Owner
if (entity instanceof Tameable) {
final Tameable mob = (Tameable) entity;
if (mob.getOwner() != null) {
tamingOwner = mob.getOwner().getUniqueId().toString();
} else if (mob.isTamed()) {
tamingOwner = "-none-";
}
}
// Sitting
if (entity instanceof Sittable) {
sitting = ((Sittable) entity).isSitting();
}
EntityDamageEvent damageEvent = entity.getLastDamageCause();
// Saves us the null check
if (damageEvent instanceof EntityDamageByEntityEvent && !damageEvent.isCancelled() && damageEvent.getDamage() > ((LivingEntity) entity).getHealth()) {
EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) damageEvent;
if (e.getDamager() instanceof Projectile) {
customDesc = EntityUtils.getCustomProjectileDescription((Projectile) e.getDamager());
}
}
serializer(entity);
}
use of org.bukkit.entity.Projectile in project Prism-Bukkit by prism.
the class PaperListeners method onTargetHitEvent.
/**
* React to a target hit event.
* @param event the TargetHitEvent.
*/
@EventHandler(priority = EventPriority.MONITOR)
public void onTargetHitEvent(TargetHitEvent event) {
Projectile projectile = event.getEntity();
ProjectileSource shooter = projectile.getShooter();
if (shooter instanceof Player) {
if (!Prism.getIgnore().event("target-hit", (Player) shooter)) {
return;
}
Block block = event.getHitBlock();
RecordingQueue.addToQueue(ActionFactory.createBlock("target-hit", block, (Player) shooter));
}
}
use of org.bukkit.entity.Projectile in project Prism-Bukkit by prism.
the class PrismEntityEvents method onEntityDeath.
/**
* EntityDeathEvent.
* @param event EntityDeathEvent
*/
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onEntityDeath(final EntityDeathEvent event) {
final LivingEntity entity = event.getEntity();
// Mob Death
if (!(entity instanceof Player)) {
// Log item drops
if (Prism.getIgnore().event("item-drop", entity.getWorld())) {
String name = entity.getType().name().toLowerCase();
// Inventory
if (entity instanceof InventoryHolder) {
final InventoryHolder holder = (InventoryHolder) entity;
for (final ItemStack i : holder.getInventory().getContents()) {
if (checkNotNullorAir(i)) {
RecordingQueue.addToQueue(ActionFactory.createItemStack("item-drop", i, i.getAmount(), -1, null, entity.getLocation(), name));
}
}
}
// Equipment
EntityEquipment equipment = entity.getEquipment();
if (equipment != null) {
for (final ItemStack i : equipment.getArmorContents()) {
if (checkNotNullorAir(i)) {
RecordingQueue.addToQueue(ActionFactory.createItemStack("item-drop", i, i.getAmount(), -1, null, entity.getLocation(), name));
}
}
}
// Hand items not stored in "getArmorContents"
ItemStack main = entity.getEquipment().getItemInMainHand();
ItemStack off = entity.getEquipment().getItemInOffHand();
if (checkNotNullorAir(main)) {
RecordingQueue.addToQueue(ActionFactory.createItemStack("item-drop", main, main.getAmount(), -1, null, entity.getLocation(), name));
}
if (checkNotNullorAir(off)) {
RecordingQueue.addToQueue(ActionFactory.createItemStack("item-drop", off, off.getAmount(), -1, null, entity.getLocation(), name));
}
}
EntityDamageEvent damageEvent = entity.getLastDamageCause();
Entity entitySource = null;
Block blockSource = null;
// Resolve source
if (damageEvent != null && !damageEvent.isCancelled()) {
if (damageEvent instanceof EntityDamageByEntityEvent) {
entitySource = ((EntityDamageByEntityEvent) damageEvent).getDamager();
if (entitySource instanceof Projectile) {
ProjectileSource ps = ((Projectile) entitySource).getShooter();
if (ps instanceof BlockProjectileSource) {
entitySource = null;
blockSource = ((BlockProjectileSource) ps).getBlock();
} else {
entitySource = (Entity) ps;
}
}
} else if (damageEvent instanceof EntityDamageByBlockEvent) {
blockSource = ((EntityDamageByBlockEvent) damageEvent).getDamager();
}
}
// Create handlers
if (entitySource instanceof Player) {
Player player = (Player) entitySource;
if (!Prism.getIgnore().event("player-kill", player)) {
return;
}
RecordingQueue.addToQueue(ActionFactory.createEntity("player-kill", entity, player));
} else if (entitySource != null) {
if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) {
return;
}
String name = entitySource.getType().name().toLowerCase(Locale.ENGLISH).replace('_', ' ');
RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity, name));
} else if (blockSource != null) {
if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) {
return;
}
String name = "block:" + blockSource.getType().name().toLowerCase(Locale.ENGLISH).replace('_', ' ');
RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity, name));
} else {
if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) {
return;
}
String name = "unknown";
if (damageEvent != null && !damageEvent.isCancelled()) {
name = damageEvent.getCause().name().toLowerCase(Locale.ENGLISH).replace('_', ' ');
}
RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity, name));
}
/*
* if (entity.getLastDamageCause() instanceof EntityDamageByEntityEvent) { final
* EntityDamageByEntityEvent entityDamageByEntityEvent =
* (EntityDamageByEntityEvent) entity .getLastDamageCause();
*
* // Mob killed by player if (entityDamageByEntityEvent.getDamager() instanceof
* Player) { final Player player = (Player)
* entityDamageByEntityEvent.getDamager(); if
* (!Prism.getIgnore().event("player-kill", player)) return;
* RecordingQueue.addToQueue(ActionFactory.createEntity("player-kill", entity,
* player));
*
* } // Mob shot by an arrow from a player else if
* (entityDamageByEntityEvent.getDamager() instanceof Arrow) { final Arrow arrow
* = (Arrow) entityDamageByEntityEvent.getDamager();
*
* if (arrow.getShooter() instanceof Player) { final Player player = (Player)
* arrow.getShooter(); if (!Prism.getIgnore().event("player-kill", player))
* return; RecordingQueue.addToQueue(ActionFactory.createEntity("player-kill",
* entity, player));
*
* } else if (arrow.getShooter() instanceof LivingEntity) { final Entity damager
* = (Entity) arrow.getShooter(); String name = "unknown"; if (damager != null)
* { name = damager.getType().name().toLowerCase(); }
*
* if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) return;
* RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity,
* name)); } else if (arrow.getShooter() instanceof BlockProjectileSource) {
*
* final Block damager = (Block)
* ((BlockProjectileSource)arrow.getShooter()).getBlock();
*
* if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) return;
*
* String name = "block:" + damager.getType().name().toLowerCase();
*
* RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity,
* name)); } } else { // Mob died by another mob final Entity damager =
* entityDamageByEntityEvent.getDamager(); String name = "unknown"; if (damager
* != null) { name = damager.getType().name().toLowerCase(); }
*
* if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) return;
* RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity,
* name)); } } else {
*
* if (!Prism.getIgnore().event("entity-kill", entity.getWorld())) return;
*
* String killer = "unknown"; final EntityDamageEvent damage =
* entity.getLastDamageCause(); if (damage != null) { final DamageCause cause =
* damage.getCause(); if (cause != null) { killer = cause.name().toLowerCase();
* } }
*
* // Record the death as natural
* RecordingQueue.addToQueue(ActionFactory.createEntity("entity-kill", entity,
* killer));
*
* }
*/
} else {
// Determine who died and what the exact cause was
final Player p = (Player) event.getEntity();
if (Prism.getIgnore().event("player-death", p)) {
final String cause = DeathUtils.getCauseNiceName(p);
String attacker = DeathUtils.getAttackerName(p);
if (attacker.equals("pvpwolf")) {
final String owner = DeathUtils.getTameWolfOwner(event);
attacker = owner + "'s wolf";
}
RecordingQueue.addToQueue(ActionFactory.createPlayerDeath("player-death", p, cause, attacker));
}
// Log item drops
if (Prism.getIgnore().event("item-drop", p)) {
if (!event.getDrops().isEmpty()) {
for (final ItemStack i : event.getDrops()) {
RecordingQueue.addToQueue(ActionFactory.createItemStack("item-drop", i, i.getAmount(), -1, null, p.getLocation(), p));
}
}
}
}
}
use of org.bukkit.entity.Projectile in project AuthMeReloaded by AuthMe.
the class EntityListenerTest method shouldRejectProjectileLaunchFromUnauthed.
@Test
public void shouldRejectProjectileLaunchFromUnauthed() {
// given
Projectile projectile = mock(Projectile.class);
Player player = mock(Player.class);
given(projectile.getShooter()).willReturn(player);
ProjectileLaunchEvent event = mock(ProjectileLaunchEvent.class);
given(event.getEntity()).willReturn(projectile);
given(listenerService.shouldCancelEvent(player)).willReturn(true);
// when
listener.onProjectileLaunch(event);
// then
verify(listenerService).shouldCancelEvent(player);
verify(event).setCancelled(true);
}
use of org.bukkit.entity.Projectile in project AuthMeReloaded by AuthMe.
the class EntityListenerTest method shouldAllowProjectileLaunchFromAuthedHuman.
@Test
public void shouldAllowProjectileLaunchFromAuthedHuman() {
// given
Projectile projectile = mock(Projectile.class);
Player player = mock(Player.class);
given(projectile.getShooter()).willReturn(player);
ProjectileLaunchEvent event = mock(ProjectileLaunchEvent.class);
given(event.getEntity()).willReturn(projectile);
given(listenerService.shouldCancelEvent(player)).willReturn(false);
// when
listener.onProjectileLaunch(event);
// then
verify(listenerService).shouldCancelEvent(player);
verify(event, never()).setCancelled(anyBoolean());
}
Aggregations