/** * In this entity-damage-listener we will cancel fall damage and suffocation damage for vampires. * We will also modify the damage dealt. */ @EventHandler(priority = EventPriority.HIGH) public void onEntityDamageHigh(EntityDamageEvent event) { if (event.isCancelled()) return; // Define local fields Entity damagee; Player pDamagee; VPlayer vpDamagee; EntityDamageByEntityEvent edbeEvent; Entity damager; Player pDamager; VPlayer vpDamager; damagee = event.getEntity(); // If the damagee is a player if (damagee instanceof Player) { pDamagee = (Player) damagee; vpDamagee = VPlayers.i.get(pDamagee); // Vampires can not drown or take fall damage or starve if (vpDamagee.isVampire() && Conf.vampiresCantTakeDamageFrom.contains(event.getCause())) { event.setCancelled(true); return; } } // For further interest this must be a close combat attack by another entity if (event.getCause() != DamageCause.ENTITY_ATTACK) return; if (!(event instanceof EntityDamageByEntityEvent)) return; edbeEvent = (EntityDamageByEntityEvent) event; damager = edbeEvent.getDamager(); // For further interest that attacker must be a player. if (!(damager instanceof Player)) return; pDamager = (Player) damager; vpDamager = VPlayers.i.get(pDamager); // The damage will be modified under certain circumstances. float damage = event.getDamage(); // Modify damage if damager is a vampire if (vpDamager.isVampire()) { damage *= vpDamager.getDamageDealtFactor(); } // Modify damage if damagee is a vampire if (damagee instanceof Player) { pDamagee = (Player) damagee; vpDamagee = VPlayers.i.get(pDamagee); if (vpDamagee.isVampire()) { Material itemMaterial = pDamager.getItemInHand().getType(); if (Conf.woodMaterials.contains(itemMaterial)) { damage = Conf.damageReceivedWood; // Just as much as a diamond sword. vpDamagee.msg(Lang.messageWoodCombatWarning, Txt.getMaterialName(itemMaterial)); } else { damage *= vpDamagee.getDamageReceivedFactor(); } } } event.setDamage(Math.round(damage)); }