Fix last damage-tick by entity attack being reset while dead, renamings.

This commit is contained in:
asofold 2013-01-26 00:08:17 +01:00
parent 53756f7145
commit 333cffd0d5
4 changed files with 23 additions and 32 deletions

View File

@ -79,7 +79,7 @@ public class FightData extends ACheckData {
public double reachVL;
public double speedVL;
public long damageTakenTick;
public long damageTakenByEntityTick;
// Shared

View File

@ -92,6 +92,9 @@ public class FightListener extends CheckListener {
// Check for self hit exploits (mind that projectiles should be excluded)
if (damaged instanceof Player){
final Player damagedPlayer = (Player) damaged;
if (cc.debug && damagedPlayer.hasPermission(Permissions.ADMINISTRATION_DEBUG)){
damagedPlayer.sendMessage("Attacked by " + player.getName() + ": inv=" + mcAccess.getInvulnerableTicks(damagedPlayer) + " ndt=" + damagedPlayer.getNoDamageTicks());
}
if (selfHit.isEnabled(player) && selfHit.check(player, damagedPlayer, data, cc))
cancelled = true;
}
@ -99,7 +102,7 @@ public class FightListener extends CheckListener {
if (cc.cancelDead){
if (damaged.isDead()) cancelled = true;
// Only allow damaging others if taken damage this tick.
if (player.isDead() && data.damageTakenTick != TickTask.getTick()){
if (player.isDead() && data.damageTakenByEntityTick != TickTask.getTick()){
cancelled = true;
}
}
@ -173,13 +176,22 @@ public class FightListener extends CheckListener {
* |_____|_| |_|\__|_|\__|\__, | |____/ \__,_|_| |_| |_|\__,_|\__, |\___|
* |___/ |___/
*/
// Filter some unwanted events right now.
final Entity damaged = event.getEntity();
final boolean damagedIsPlayer = damaged instanceof Player;
final boolean damagedIsDead = damaged.isDead();
if (damagedIsPlayer && !damagedIsDead) {
final Player player = (Player) event.getEntity();
if (godMode.isEnabled(player) && godMode.check(player))
// It requested to "cancel" the players invulnerability, so set his noDamageTicks to 0.
player.setNoDamageTicks(0);
}
// Attacking entities.
if (event instanceof EntityDamageByEntityEvent) {
final EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
final Entity damaged = e.getEntity();
if (damaged instanceof Player){
if (damagedIsPlayer && !damagedIsDead){
// TODO: check once more when to set this (!) in terms of order.
FightData.getData((Player) damaged).damageTakenTick = TickTask.getTick();
FightData.getData((Player) damaged).damageTakenByEntityTick = TickTask.getTick();
}
final Entity damager = e.getDamager();
if (damager instanceof Player){
@ -191,32 +203,6 @@ public class FightListener extends CheckListener {
}
}
/**
* We listen to EntityDamage events (again) for obvious reasons.
*
* @param event
* the event
*/
@EventHandler(
ignoreCancelled = true, priority = EventPriority.LOW)
public void onEntityDamage_(final EntityDamageEvent event) {
/*
* _____ _ _ _ ____
* | ____|_ __ | |_(_) |_ _ _ | _ \ __ _ _ __ ___ __ _ __ _ ___
* | _| | '_ \| __| | __| | | | | | | |/ _` | '_ ` _ \ / _` |/ _` |/ _ \
* | |___| | | | |_| | |_| |_| | | |_| | (_| | | | | | | (_| | (_| | __/
* |_____|_| |_|\__|_|\__|\__, | |____/ \__,_|_| |_| |_|\__,_|\__, |\___|
* |___/ |___/
*/
// Filter unwanted events right here.
if (event.getEntity() instanceof Player && !event.getEntity().isDead()) {
final Player player = (Player) event.getEntity();
if (godMode.isEnabled(player) && godMode.check(player))
// It requested to "cancel" the players invulnerability, so set his noDamageTicks to 0.
player.setNoDamageTicks(0);
}
}
/**
* We listen to death events to prevent a very specific method of doing godmode.
*

View File

@ -93,6 +93,7 @@ public class GodMode extends Check {
* the player
*/
public void death(final Player player) {
// TODO: Is this still relevant ?
// First check if the player is really dead (e.g. another plugin could have just fired an artificial event).
if (player.getHealth() <= 0 && player.isDead())
try {

View File

@ -7,6 +7,7 @@ import org.bukkit.entity.Vehicle;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.util.Vector;
import fr.neatmonster.nocheatplus.checks.moving.MovingConfig;
import fr.neatmonster.nocheatplus.checks.moving.MovingData;
import fr.neatmonster.nocheatplus.logging.LogUtil;
@ -238,5 +239,8 @@ public class CheckUtils {
// Somewhat check against tp showing something wrong (< 1.0).
vehicle.setPassenger(player);
}
if (MovingConfig.getConfig(player).debug){
System.out.println(player.getName() + " vehicle set back: " + location);
}
}
}