diff --git a/src/me/ryanhamshire/GriefPrevention/EntityEventHandler.java b/src/me/ryanhamshire/GriefPrevention/EntityEventHandler.java index 6664c28..df91462 100644 --- a/src/me/ryanhamshire/GriefPrevention/EntityEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/EntityEventHandler.java @@ -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