mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-11-01 16:20:26 +01:00
Attempt to fix issues with player-ignited TNT (1).
This commit is contained in:
parent
ee5c86bb4f
commit
b43fa259dc
@ -137,6 +137,14 @@ public class FightData extends ACheckData {
|
||||
public int speedShortTermCount;
|
||||
public int speedShortTermTick;
|
||||
|
||||
// TNT workaround: Allow ENTITY_ATTACK if these attributes match.
|
||||
/** Amount of damage dealt by the last explosion. */
|
||||
public double lastExplosionDamage = Double.MAX_VALUE;
|
||||
/** Tick the last explosion damage was dealt at. */
|
||||
public int lastExplosionDamageTick = -1 ;
|
||||
/** Last explosion damage causing player (damager). */
|
||||
public String lastExplosionDamagePlayer = null;
|
||||
|
||||
|
||||
public FightData(final FightConfig cc){
|
||||
speedBuckets = new ActionFrequency(cc.speedBuckets, cc.speedBucketDur);
|
||||
|
@ -92,7 +92,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
* The EntityDamageByEntityEvent
|
||||
* @return
|
||||
*/
|
||||
private boolean handleNormalDamage(final Player player, final Entity damaged, double damage) {
|
||||
private boolean handleNormalDamage(final Player player, final Entity damaged, final double damage, final int tick) {
|
||||
final FightConfig cc = FightConfig.getConfig(player);
|
||||
final FightData data = FightData.getData(player);
|
||||
|
||||
@ -105,7 +105,6 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
boolean cancelled = false;
|
||||
|
||||
final String worldName = player.getWorld().getName();
|
||||
final int tick = TickTask.getTick();
|
||||
final long now = System.currentTimeMillis();
|
||||
final boolean worldChanged = !worldName.equals(data.lastWorld);
|
||||
|
||||
@ -321,9 +320,26 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
|
||||
}
|
||||
if (damager instanceof Player){
|
||||
final Player player = (Player) damager;
|
||||
if (e.getCause() == DamageCause.ENTITY_ATTACK){
|
||||
|
||||
if (handleNormalDamage(player, damaged, BridgeHealth.getDamage(e))){
|
||||
final DamageCause damageCause = event.getCause();
|
||||
final double damage = BridgeHealth.getDamage(e);
|
||||
final int tick = TickTask.getTick();
|
||||
if (damageCause == DamageCause.BLOCK_EXPLOSION || damageCause == DamageCause.ENTITY_EXPLOSION) {
|
||||
if (damagedData != null) {
|
||||
damagedData.lastExplosionDamagePlayer = player.getName();
|
||||
damagedData.lastExplosionDamageTick = tick;
|
||||
damagedData.lastExplosionDamage = BridgeHealth.getDamage(event);
|
||||
}
|
||||
} else if (e.getCause() == DamageCause.ENTITY_ATTACK){
|
||||
if (damagedData != null) {
|
||||
// TODO: Might/should skip the damage comparison, though checking on lowest priority.
|
||||
if (damage == damagedData.lastExplosionDamage && player.getName().equals(damagedData.lastExplosionDamagePlayer) && tick == damagedData.lastExplosionDamageTick) {
|
||||
damagedData.lastExplosionDamage = Double.MAX_VALUE;
|
||||
damagedData.lastExplosionDamageTick = -1;
|
||||
damagedData.lastExplosionDamagePlayer = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (handleNormalDamage(player, damaged, damage, tick)){
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user