Use a utility for getting the damage of damage-events as well.

This commit is contained in:
asofold 2013-07-06 22:28:43 +02:00
parent 9edfb14103
commit 4035719597
3 changed files with 20 additions and 3 deletions

View File

@ -278,7 +278,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
final FightData damagedData = damagedPlayer == null ? null : FightData.getData(damagedPlayer);
final boolean damagedIsDead = damaged.isDead();
if (damagedPlayer != null && !damagedIsDead) {
if (!damagedPlayer.isDead() && godMode.isEnabled(damagedPlayer) && godMode.check(damagedPlayer, event.getDamage(), damagedData)){
if (!damagedPlayer.isDead() && godMode.isEnabled(damagedPlayer) && godMode.check(damagedPlayer, BridgeHealth.getDamage(event), damagedData)){
// It requested to "cancel" the players invulnerability, so set his noDamageTicks to 0.
damagedPlayer.setNoDamageTicks(0);
}
@ -312,7 +312,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
final Player player = (Player) damager;
if (e.getCause() == DamageCause.ENTITY_ATTACK){
if (handleNormalDamage(player, damaged, e.getDamage())){
if (handleNormalDamage(player, damaged, BridgeHealth.getDamage(e))){
e.setCancelled(true);
}
}

View File

@ -49,6 +49,7 @@ import fr.neatmonster.nocheatplus.checks.combined.BedLeave;
import fr.neatmonster.nocheatplus.checks.combined.Combined;
import fr.neatmonster.nocheatplus.checks.combined.CombinedConfig;
import fr.neatmonster.nocheatplus.checks.combined.CombinedData;
import fr.neatmonster.nocheatplus.compat.BridgeHealth;
import fr.neatmonster.nocheatplus.components.IData;
import fr.neatmonster.nocheatplus.components.IHaveCheckType;
import fr.neatmonster.nocheatplus.components.INeedConfig;
@ -1199,7 +1200,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
parkedInfo.add(moveInfo);
}
final float fallDistance = player.getFallDistance();
final double damage = event.getDamage();
final double damage = BridgeHealth.getDamage(event);
final float yDiff = (float) (data.noFallMaxY - loc.getY());
if (cc.debug){
System.out.println(player.getName() + " damage(FALL): " + damage + " / dist=" + player.getFallDistance() + " nf=" + data.noFallFallDistance + " yDiff=" + yDiff);

View File

@ -4,6 +4,7 @@ import java.util.HashSet;
import java.util.Set;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import fr.neatmonster.nocheatplus.logging.LogUtil;
@ -65,6 +66,21 @@ public class BridgeHealth {
}
}
/**
* Get the damage from an EntityDamageEvent.
* @param event
* @return
* @throws RuntimeException, in case of an AbstractMethodError without success on recovery attempts.
*/
public static double getDamage(final EntityDamageEvent event){
try{
return event.getDamage();
}
catch(AbstractMethodError e){
return getDoubleOrInt(event, "getDamage", e);
}
}
/**
* Get the health for an entity (LivingEntity).
* @param entity