mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2025-02-05 22:31:26 +01:00
Fix last damage-tick by entity attack being reset while dead, renamings.
This commit is contained in:
parent
53756f7145
commit
333cffd0d5
@ -79,7 +79,7 @@ public class FightData extends ACheckData {
|
|||||||
public double reachVL;
|
public double reachVL;
|
||||||
public double speedVL;
|
public double speedVL;
|
||||||
|
|
||||||
public long damageTakenTick;
|
public long damageTakenByEntityTick;
|
||||||
|
|
||||||
// Shared
|
// Shared
|
||||||
|
|
||||||
|
@ -92,6 +92,9 @@ public class FightListener extends CheckListener {
|
|||||||
// Check for self hit exploits (mind that projectiles should be excluded)
|
// Check for self hit exploits (mind that projectiles should be excluded)
|
||||||
if (damaged instanceof Player){
|
if (damaged instanceof Player){
|
||||||
final Player damagedPlayer = (Player) damaged;
|
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))
|
if (selfHit.isEnabled(player) && selfHit.check(player, damagedPlayer, data, cc))
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
}
|
}
|
||||||
@ -99,7 +102,7 @@ public class FightListener extends CheckListener {
|
|||||||
if (cc.cancelDead){
|
if (cc.cancelDead){
|
||||||
if (damaged.isDead()) cancelled = true;
|
if (damaged.isDead()) cancelled = true;
|
||||||
// Only allow damaging others if taken damage this tick.
|
// 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;
|
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) {
|
if (event instanceof EntityDamageByEntityEvent) {
|
||||||
final EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
|
final EntityDamageByEntityEvent e = (EntityDamageByEntityEvent) event;
|
||||||
final Entity damaged = e.getEntity();
|
if (damagedIsPlayer && !damagedIsDead){
|
||||||
if (damaged instanceof Player){
|
|
||||||
// TODO: check once more when to set this (!) in terms of order.
|
// 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();
|
final Entity damager = e.getDamager();
|
||||||
if (damager instanceof Player){
|
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.
|
* We listen to death events to prevent a very specific method of doing godmode.
|
||||||
*
|
*
|
||||||
|
@ -93,6 +93,7 @@ public class GodMode extends Check {
|
|||||||
* the player
|
* the player
|
||||||
*/
|
*/
|
||||||
public void death(final Player 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).
|
// 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())
|
if (player.getHealth() <= 0 && player.isDead())
|
||||||
try {
|
try {
|
||||||
|
@ -7,6 +7,7 @@ import org.bukkit.entity.Vehicle;
|
|||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import fr.neatmonster.nocheatplus.checks.moving.MovingConfig;
|
||||||
import fr.neatmonster.nocheatplus.checks.moving.MovingData;
|
import fr.neatmonster.nocheatplus.checks.moving.MovingData;
|
||||||
import fr.neatmonster.nocheatplus.logging.LogUtil;
|
import fr.neatmonster.nocheatplus.logging.LogUtil;
|
||||||
|
|
||||||
@ -238,5 +239,8 @@ public class CheckUtils {
|
|||||||
// Somewhat check against tp showing something wrong (< 1.0).
|
// Somewhat check against tp showing something wrong (< 1.0).
|
||||||
vehicle.setPassenger(player);
|
vehicle.setPassenger(player);
|
||||||
}
|
}
|
||||||
|
if (MovingConfig.getConfig(player).debug){
|
||||||
|
System.out.println(player.getName() + " vehicle set back: " + location);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user