下面列出了org.bukkit.event.entity.EntityDamageByEntityEvent#getEntity ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler(priority=EventPriority.MONITOR)
public void onCombat(EntityDamageByEntityEvent e) {
if(isDisabled("log-entity-damage-event")) return;
String format = getLoggerFormat("entity-damage-event-format");
if(format == null) return;
String wasCancelled = Boolean.toString(e.isCancelled());
Entity damaged = e.getEntity();
String damagedType = damaged.getType().name();
String damagedName = getEntityName(damaged);
Entity damager = e.getDamager();
String damagerType = damager.getType().name();
String damagerName = getEntityName(damager);
String message = format.replace("{damaged_type}", damagedType)
.replace("{damaged_name}", damagedName).replace("{damager_type}", damagerType)
.replace("{damager_name}", damagerName).replace("{was_cancelled}", wasCancelled);
appendLog(message);
}
@Override
public void effect(Event e, ItemStack item, int level) {
if(e instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
LivingEntity target = (LivingEntity) event.getEntity();
double newHealth = target.getHealth()+event.getDamage() + level;
if(newHealth >= target.getMaxHealth())
newHealth = target.getMaxHealth();
target.setHealth(newHealth);
event.setDamage(0);
target.getWorld().playEffect(target.getLocation(), Effect.POTION_BREAK, 10);
}
}
@EventHandler
public void onProjectileHurtEvent(EntityDamageByEntityEvent event) {
if (!(event.getEntity() instanceof LivingEntity)) return;
LivingEntity damagedEntity = (LivingEntity) event.getEntity();
ProjectileDefinition projectileDefinition =
ProjectileMatchModule.getProjectileDefinition(event.getDamager());
if (projectileDefinition != null) {
if (!projectileDefinition.potion.isEmpty()) {
damagedEntity.addPotionEffects(projectileDefinition.potion);
}
if (projectileDefinition.damage != null) {
event.setDamage(projectileDefinition.damage);
}
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onItemFrameDamage(final EntityDamageByEntityEvent e) {
// Check world
if (!inWorld(e.getEntity()) || !(e.getEntity() instanceof ItemFrame)) {
return;
}
if (e.getDamager() instanceof Projectile) {
if (DEBUG)
plugin.getLogger().info("DEBUG: Projectile damage to itemframe");
// Find out who fired the arrow
Projectile p = (Projectile) e.getDamager();
if (DEBUG)
plugin.getLogger().info("DEBUG: Shooter is " + p.getShooter().toString());
if (p.getShooter() instanceof Skeleton || p.getShooter() instanceof Golem) {
if (DEBUG)
plugin.getLogger().info("DEBUG: Shooter is mob");
if (!Settings.allowMobDamageToItemFrames) {
if (DEBUG)
plugin.getLogger().info("DEBUG: Damage not allowed, cancelling");
e.setCancelled(true);
}
}
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity entity = event.getEntity();
if (!isEntitySpectating(entity)) {
return;
}
boolean enablePvp = config.getSpectateSection().isEnablePvp();
if (!enablePvp) {
event.setCancelled(true);
return;
}
Entity damager = event.getDamager();
if (!(damager instanceof Player)) {
event.setCancelled(true);
return;
}
event.setCancelled(false);
}
@EventHandler(priority=EventPriority.HIGHEST)
public void onCancelPVP(EntityDamageByEntityEvent e) {
if(!e.isCancelled()) return;
if(this.expansion.getNoEntryHandler().getNoEntryMode() != NoEntryMode.VULNERABLE) return;
Entity entity = e.getEntity();
if(!(entity instanceof Player)) return;
ICombatLogX plugin = this.expansion.getPlugin();
ICombatManager manager = plugin.getCombatManager();
Player player = (Player) entity;
if(!manager.isInCombat(player)) return;
LivingEntity enemy = manager.getEnemy(player);
if(enemy == null) return;
e.setCancelled(false);
this.expansion.sendNoEntryMessage(player, enemy);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (!(event.getEntity() instanceof Player)) return;
Player player = (Player) event.getEntity();
double finalHealth = player.getHealth() - event.getFinalDamage();
if (finalHealth > 0.01) return;
player.setMaxHealth(20);
player.setHealth(player.getMaxHealth());
event.setDamage(1);
player.setLastDamageCause(event);
if (event.getActor() instanceof Player) {
killPlayer(player, (Player)event.getActor(), event.getCause());
} else if (event.getActor() instanceof Projectile && ((Projectile) event.getActor()).getShooter() instanceof Player) {
killPlayer(player, (Player)((Projectile) event.getActor()).getShooter(), event.getCause());
} else {
killPlayer(player, null, event.getCause());
}
}
@Override
public boolean effect(Event event, Player player) {
EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
if (e.getDamager() == player && e.getEntity() instanceof Player) {
Player damaged = (Player) e.getEntity();
e.setDamage(0);
EffectManager.playSound(damaged.getLocation(), "ENTITY_GENERIC_DRINK", 0.5f, 1f);
EffectManager.playSound(damaged.getLocation(), "BLOCK_ANVIL_LAND", 0.5f, 2f);
short currentDur = player.getItemInHand().getDurability();
if (((Damageable) damaged).getHealth() + Heal <= ((Damageable) damaged).getMaxHealth()) {
damaged.setHealth(((Damageable) damaged).getHealth() + Heal);
} else {
damaged.setHealth(((Damageable) damaged).getMaxHealth());
}
if (currentDur + Heal < player.getItemInHand().getType().getMaxDurability()) {
player.getItemInHand().setDurability((short) (currentDur + Heal));
} else {
player.setItemInHand(new ItemStack(Material.AIR, 1));
EffectManager.playSound(player.getLocation(), "ENTITY_ITEM_BREAK", 0.1f, 0.3f);
}
return true;
}
return false;
}
@Override
public void effect(Event e, ItemStack item, int level) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
LivingEntity target = (LivingEntity) event.getEntity();
target.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, duration * level, strength + level));
}
@Override
public void effect(Event e, ItemStack item, int level) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
LivingEntity target = (LivingEntity) event.getEntity();
EffectManager.playSound(target.getLocation(), "ENTITY_PLAYER_HURT", 1f, 0.4f);
target.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, duration + 20 * level, 0));
}
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
public void onAttack(EntityDamageByEntityEvent e) {
Entity damager = linkPet(linkProjectile(e.getDamager()));
Entity damaged = e.getEntity();
if (!(damaged instanceof Player)) return;
Player attacked = (Player) damaged;
if (!(damager instanceof Player)) return;
Player attacker = (Player) damager;
ICombatManager combatManager = this.plugin.getCombatManager();
combatManager.tag(attacker, attacked, TagType.PLAYER, TagReason.ATTACKER);
combatManager.tag(attacked, attacker, TagType.PLAYER, TagReason.ATTACKED);
}
@EventHandler(priority = EventPriority.LOW)
public void onEntityDamageEvent(EntityDamageByEntityEvent event) {
if (!enabled) return;
if (event.getDamager() instanceof Projectile && ((Projectile) event.getDamager()).getShooter() == event.getEntity()){
event.setCancelled(true);
}
}
/**
* Guild / Ally damage handlers
*
* @param event handles when damage is done between two players that might be in the same guild or are allies
*/
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (!(event.getEntity() instanceof Player) || !(event.getDamager() instanceof Player)) return;
Player player = (Player) event.getEntity();
Player damager = (Player) event.getDamager();
// Make sure that they aren't in a claim that turns off pvpv
if (settingsManager.getProperty(GuildSettings.RESPECT_WG_PVP_FLAG)) {
event.setCancelled(ClaimUtils.checkPvpDisabled(player));
return;
}
// Check if they are the same guild
if (guildHandler.isSameGuild(player, damager)) {
event.setCancelled(!settingsManager.getProperty(GuildSettings.GUILD_DAMAGE));
return;
}
// Get the challenge object
GuildChallenge challenge = challengeHandler.getChallenge(player);
// Check if they are in a challenge
if (challenge != null) {
// Check if the challenge has started
if (challenge.isStarted()) {
// Cancel the rest of the checks in case they are battling allies
return;
}
}
if (guildHandler.isAlly(player, damager)) {
event.setCancelled(!settingsManager.getProperty(GuildSettings.ALLY_DAMAGE));
}
}
/**
* Listener used to generate the ArmorStandDamageEvent.
*
* @param evt The initial EntityDamageByEntityEvent event
* used to generate the ArmorStandDamageEvent
*/
@EventHandler
public void onArmorStandDamage(EntityDamageByEntityEvent evt) {
if (evt.getEntity().getType().equals(EntityType.ARMOR_STAND)
&& evt.getDamager().getType().equals(EntityType.PLAYER)) {
ArmorStandDamageEvent event =
new ArmorStandDamageEvent((Player) evt.getDamager(), evt.getEntity());
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
evt.setCancelled(true);
return;
}
}
}
@Override
public void effect(Event e, ItemStack item, int level) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
Player player = (Player) event.getEntity();
if (getAbsorptionHearts(player) <= 0) {
setAbsorptionHearts(player, baseStrength + level * strengthPerLevel);
generateCooldown(player, cooldown);
}
}
/**
* Called when this sentinel attacks something, to correct damage handling.
*/
public void whenAttacksAreHappeningFromMe(EntityDamageByEntityEvent event) {
if (event.isCancelled()) {
return;
}
if (!npc.isSpawned()) {
return;
}
if (SentinelPlugin.instance.alternateDamage) {
if (canEnforce) {
canEnforce = false;
whenAttacksHappened(event);
if (!event.isCancelled()) {
((LivingEntity) event.getEntity()).damage(event.getFinalDamage());
if (event.getEntity() instanceof LivingEntity) {
weaponHelper.knockback((LivingEntity) event.getEntity());
}
}
if (SentinelPlugin.debugMe) {
debug("enforce damage value to " + event.getFinalDamage());
}
}
else {
if (SentinelPlugin.debugMe) {
debug("refuse damage enforcement");
}
}
event.setDamage(0);
event.setCancelled(true);
return;
}
event.setDamage(EntityDamageEvent.DamageModifier.BASE, getDamage(false));
}
@Override
public void effect(Event e, ItemStack item, final int level) {
if(e instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) e;
Entity target = event.getEntity();
Player p = (Player) ((Projectile) event.getDamager()).getShooter();
if(target.getEntityId() == p.getEntityId())
return;
Location pLoc = p.getLocation();
Location tLoc = target.getLocation();
target.teleport(pLoc);
p.teleport(tLoc);
EffectManager.playSound(tLoc, "ENTITY_ENDERMAN_TELEPORT", 0.4f, 2f);
EffectManager.playSound(pLoc, "ENTITY_ENDERMAN_TELEPORT", 0.4f, 2f);
for(int i = 10; i>0; i--) {
p.getWorld().playEffect(tLoc, Effect.ENDER_SIGNAL, 10);
p.getWorld().playEffect(pLoc, Effect.ENDER_SIGNAL, 10);
}
if(target instanceof Player) {
p.sendMessage(ChatColor.DARK_PURPLE + "You have switched positions with " + target.getName() + "!");
target.sendMessage(ChatColor.DARK_PURPLE + "You have switched positions with " + p.getName() + "!");
}
}
}
@EventHandler(ignoreCancelled = true)
public void fixEntityDamage(EntityDamageByEntityEvent event) {
Entity projectile = event.getDamager();
if(projectile.hasMetadata("customProjectile")) {
// If the custom projectile replaced an arrow, recreate some effects specific to arrows
if(projectile.hasMetadata("damage")) {
boolean critical = projectile.getMetadata("critical").get(0).asBoolean();
int knockback = projectile.getMetadata("knockback").get(0).asInt();
double damage = projectile.getMetadata("damage").get(0).asDouble();
double speed = projectile.getVelocity().length();
// Reproduce the damage calculation from nms.EntityArrow with the addition of our modifier
int finalDamage = (int) Math.ceil(speed * damage * this.velocityMod);
if(critical) {
finalDamage += random.nextInt(finalDamage / 2 + 2);
}
event.setDamage(finalDamage);
// Flame arrows - target burns for 5 seconds always
if(projectile.getFireTicks() > 0) {
event.getEntity().setFireTicks(100);
}
// Reproduce the knockback calculation for punch bows
if(knockback > 0) {
Vector projectileVelocity = projectile.getVelocity();
double horizontalSpeed = Math.sqrt(projectileVelocity.getX() * projectileVelocity.getX() +
projectileVelocity.getZ() * projectileVelocity.getZ());
Vector velocity = event.getEntity().getVelocity();
velocity.setX(velocity.getX() + projectileVelocity.getX() * knockback * 0.6 / horizontalSpeed);
velocity.setY(velocity.getY() + 0.1);
velocity.setZ(velocity.getZ() + projectileVelocity.getZ() * knockback * 0.6 / horizontalSpeed);
event.getEntity().setVelocity(velocity);
}
}
// Apply any potion effects attached to the projectile
if(event.getEntity() instanceof LivingEntity) {
for(PotionEffect potionEffect : this.potionEffects) {
((LivingEntity) event.getEntity()).addPotionEffect(potionEffect);
}
}
}
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled=true)
public void onLingeringPotionDamage(final EntityDamageByEntityEvent e) {
if (!IslandGuard.inWorld(e.getEntity().getLocation())) {
return;
}
if (e.getEntity() == null || e.getEntity().getUniqueId() == null) {
return;
}
if (e.getCause().equals(DamageCause.ENTITY_ATTACK) && thrownPotions.containsKey(e.getDamager().getEntityId())) {
UUID attacker = thrownPotions.get(e.getDamager().getEntityId());
// Self damage
if (attacker.equals(e.getEntity().getUniqueId())) {
return;
}
Island island = plugin.getGrid().getIslandAt(e.getEntity().getLocation());
boolean inNether = false;
if (e.getEntity().getWorld().equals(ASkyBlock.getNetherWorld())) {
inNether = true;
}
// Monsters being hurt
if (e.getEntity() instanceof Monster || e.getEntity() instanceof Slime || e.getEntity() instanceof Squid) {
// Normal island check
if (island != null && island.getMembers().contains(attacker)) {
// Members always allowed
return;
}
if (actionAllowed(attacker, e.getEntity().getLocation(), SettingsFlag.HURT_MONSTERS)) {
return;
}
// Not allowed
e.setCancelled(true);
return;
}
// Mobs being hurt
if (e.getEntity() instanceof Animals || e.getEntity() instanceof IronGolem || e.getEntity() instanceof Snowman
|| e.getEntity() instanceof Villager) {
if (island != null && (island.getIgsFlag(SettingsFlag.HURT_MOBS) || island.getMembers().contains(attacker))) {
return;
}
e.setCancelled(true);
return;
}
// Establish whether PVP is allowed or not.
boolean pvp = false;
if ((inNether && island != null && island.getIgsFlag(SettingsFlag.NETHER_PVP) || (!inNether && island != null && island.getIgsFlag(SettingsFlag.PVP)))) {
pvp = true;
}
// Players being hurt PvP
if (e.getEntity() instanceof Player) {
if (pvp) {
} else {
e.setCancelled(true);
}
}
}
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getEntity().getWorld().equals(Bukkit.getWorlds().get(0))) {
event.setCancelled(true);
return;
}
if (!(event.getEntity() instanceof Player)) {
return;
}
GameArena gameArena = PLUGIN.getGameArena();
Player damaged = (Player) event.getEntity();
if (event.getDamager() instanceof Projectile) {
if (gameArena.isHuman(damaged)) {
event.setCancelled(true);
return;
}
}
if (!(event.getDamager() instanceof Player)) {
return;
}
Player damager = (Player) event.getDamager();
if (gameArena.isGameRunning()) {
if (gameArena.isSameTeam(damaged, damager)) {
event.setCancelled(true);
} else if (gameArena.isHuman(damaged) && gameArena.isZombie(damager)) {
if (checkFortify(damaged)) {
event.setCancelled(true);
return;
}
PlayerInfectedEvent pie = new PlayerInfectedEvent(damaged, InfectReason.ZOMBIE_BITE, damager, false);
Bukkit.getPluginManager().callEvent(pie);
if (pie.isCancelled()) {
event.setCancelled(true);
return;
}
gameArena.addZombie(damaged);
Profile damagerProfile = PLUGIN.getProfile(damager);
if (damagerProfile != null) {
damagerProfile.setHumanKills(damagerProfile.getHumanKills() + 1);
}
damaged.getInventory().setHelmet(new ItemStack(Material.WOOL, 1, (short) 5));
damaged.getInventory().clear();
damaged.getInventory().setArmorContents(null);
gameArena.giveKit(damaged);
Messages.PLAYER_INFECTED_OTHER.broadcast(damager.getName(), damaged.getName());
if (gameArena.shouldEnd()) {
gameArena.endGame();
}
} else if (gameArena.isNotPlaying(damager) || gameArena.isNotPlaying(damaged)) {
event.setCancelled(true);
}
}
}