Fixed self-damage putting a player "in combat".
Fixes especially ender pearls + immediate disconnect = death.
This commit is contained in:
parent
d43356897f
commit
ac0a87124f
|
|
@ -567,63 +567,66 @@ class EntityEventHandler implements Listener
|
|||
|
||||
Player defender = (Player)(event.getEntity());
|
||||
|
||||
PlayerData defenderData = this.dataStore.getPlayerData(((Player)event.getEntity()).getUniqueId());
|
||||
PlayerData attackerData = this.dataStore.getPlayerData(attacker.getUniqueId());
|
||||
|
||||
//otherwise if protecting spawning players
|
||||
if(GriefPrevention.instance.config_pvp_protectFreshSpawns)
|
||||
if(attacker != defender)
|
||||
{
|
||||
if(defenderData.pvpImmune)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.ThatPlayerPvPImmune);
|
||||
return;
|
||||
}
|
||||
|
||||
if(attackerData.pvpImmune)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.CantFightWhileImmune);
|
||||
return;
|
||||
}
|
||||
PlayerData defenderData = this.dataStore.getPlayerData(((Player)event.getEntity()).getUniqueId());
|
||||
PlayerData attackerData = this.dataStore.getPlayerData(attacker.getUniqueId());
|
||||
|
||||
//otherwise if protecting spawning players
|
||||
if(GriefPrevention.instance.config_pvp_protectFreshSpawns)
|
||||
{
|
||||
if(defenderData.pvpImmune)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.ThatPlayerPvPImmune);
|
||||
return;
|
||||
}
|
||||
|
||||
if(attackerData.pvpImmune)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.CantFightWhileImmune);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//FEATURE: prevent players from engaging in PvP combat inside land claims (when it's disabled)
|
||||
if(GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims || GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims)
|
||||
{
|
||||
Claim attackerClaim = this.dataStore.getClaimAt(attacker.getLocation(), false, attackerData.lastClaim);
|
||||
if( attackerClaim != null &&
|
||||
(attackerClaim.isAdminClaim() && attackerClaim.parent == null && GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims ||
|
||||
attackerClaim.isAdminClaim() && attackerClaim.parent != null && GriefPrevention.instance.config_pvp_noCombatInAdminSubdivisions ||
|
||||
!attackerClaim.isAdminClaim() && GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims))
|
||||
{
|
||||
attackerData.lastClaim = attackerClaim;
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.CantFightWhileImmune);
|
||||
return;
|
||||
}
|
||||
|
||||
Claim defenderClaim = this.dataStore.getClaimAt(defender.getLocation(), false, defenderData.lastClaim);
|
||||
if( defenderClaim != null &&
|
||||
(defenderClaim.isAdminClaim() && defenderClaim.parent == null && GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims ||
|
||||
defenderClaim.isAdminClaim() && defenderClaim.parent != null && GriefPrevention.instance.config_pvp_noCombatInAdminSubdivisions ||
|
||||
!defenderClaim.isAdminClaim() && GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims))
|
||||
{
|
||||
defenderData.lastClaim = defenderClaim;
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.PlayerInPvPSafeZone);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//FEATURE: prevent players who very recently participated in pvp combat from hiding inventory to protect it from looting
|
||||
//FEATURE: prevent players who are in pvp combat from logging out to avoid being defeated
|
||||
|
||||
long now = Calendar.getInstance().getTimeInMillis();
|
||||
defenderData.lastPvpTimestamp = now;
|
||||
defenderData.lastPvpPlayer = attacker.getName();
|
||||
attackerData.lastPvpTimestamp = now;
|
||||
attackerData.lastPvpPlayer = defender.getName();
|
||||
}
|
||||
|
||||
//FEATURE: prevent players from engaging in PvP combat inside land claims (when it's disabled)
|
||||
if(GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims || GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims)
|
||||
{
|
||||
Claim attackerClaim = this.dataStore.getClaimAt(attacker.getLocation(), false, attackerData.lastClaim);
|
||||
if( attackerClaim != null &&
|
||||
(attackerClaim.isAdminClaim() && attackerClaim.parent == null && GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims ||
|
||||
attackerClaim.isAdminClaim() && attackerClaim.parent != null && GriefPrevention.instance.config_pvp_noCombatInAdminSubdivisions ||
|
||||
!attackerClaim.isAdminClaim() && GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims))
|
||||
{
|
||||
attackerData.lastClaim = attackerClaim;
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.CantFightWhileImmune);
|
||||
return;
|
||||
}
|
||||
|
||||
Claim defenderClaim = this.dataStore.getClaimAt(defender.getLocation(), false, defenderData.lastClaim);
|
||||
if( defenderClaim != null &&
|
||||
(defenderClaim.isAdminClaim() && defenderClaim.parent == null && GriefPrevention.instance.config_pvp_noCombatInAdminLandClaims ||
|
||||
defenderClaim.isAdminClaim() && defenderClaim.parent != null && GriefPrevention.instance.config_pvp_noCombatInAdminSubdivisions ||
|
||||
!defenderClaim.isAdminClaim() && GriefPrevention.instance.config_pvp_noCombatInPlayerLandClaims))
|
||||
{
|
||||
defenderData.lastClaim = defenderClaim;
|
||||
event.setCancelled(true);
|
||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.PlayerInPvPSafeZone);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//FEATURE: prevent players who very recently participated in pvp combat from hiding inventory to protect it from looting
|
||||
//FEATURE: prevent players who are in pvp combat from logging out to avoid being defeated
|
||||
|
||||
long now = Calendar.getInstance().getTimeInMillis();
|
||||
defenderData.lastPvpTimestamp = now;
|
||||
defenderData.lastPvpPlayer = attacker.getName();
|
||||
attackerData.lastPvpTimestamp = now;
|
||||
attackerData.lastPvpPlayer = defender.getName();
|
||||
}
|
||||
|
||||
//FEATURE: protect claimed animals, boats, minecarts, and items inside item frames
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user