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());
|
Player defender = (Player)(event.getEntity());
|
||||||
|
|
||||||
PlayerData defenderData = this.dataStore.getPlayerData(((Player)event.getEntity()).getUniqueId());
|
if(attacker != defender)
|
||||||
PlayerData attackerData = this.dataStore.getPlayerData(attacker.getUniqueId());
|
|
||||||
|
|
||||||
//otherwise if protecting spawning players
|
|
||||||
if(GriefPrevention.instance.config_pvp_protectFreshSpawns)
|
|
||||||
{
|
{
|
||||||
if(defenderData.pvpImmune)
|
PlayerData defenderData = this.dataStore.getPlayerData(((Player)event.getEntity()).getUniqueId());
|
||||||
{
|
PlayerData attackerData = this.dataStore.getPlayerData(attacker.getUniqueId());
|
||||||
event.setCancelled(true);
|
|
||||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.ThatPlayerPvPImmune);
|
//otherwise if protecting spawning players
|
||||||
return;
|
if(GriefPrevention.instance.config_pvp_protectFreshSpawns)
|
||||||
}
|
{
|
||||||
|
if(defenderData.pvpImmune)
|
||||||
if(attackerData.pvpImmune)
|
{
|
||||||
{
|
event.setCancelled(true);
|
||||||
event.setCancelled(true);
|
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.ThatPlayerPvPImmune);
|
||||||
GriefPrevention.sendMessage(attacker, TextMode.Err, Messages.CantFightWhileImmune);
|
return;
|
||||||
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
|
//FEATURE: protect claimed animals, boats, minecarts, and items inside item frames
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user