Add Friendly Fire permission for parties

This removes the friendly fire config option previously created
Both attacker and defender must have this option

Closes #648
This commit is contained in:
NuclearW
2013-02-07 18:46:41 -05:00
parent 366940fc14
commit af1288b6f8
7 changed files with 36 additions and 10 deletions

View File

@ -83,7 +83,6 @@ public class Config extends ConfigLoader {
/* PARTY SETTINGS */
public int getAutoPartyKickInterval() { return config.getInt("Party.AutoKick_Interval", 12); }
public int getAutoPartyKickTime() { return config.getInt("Party.Old_Party_Member_Cutoff", 7); }
public boolean getPartyFriendlyFire() { return config.getBoolean("Party.FriendlyFire_Enabled", false); }
public boolean getExpShareEnabled() { return config.getBoolean("Party.Sharing.ExpShare_enabled", true); }
public double getPartyShareBonusBase() { return config.getDouble("Party.Sharing.ExpShare_bonus_base", 1.1); }
public double getPartyShareBonusIncrease() { return config.getDouble("Party.Sharing.ExpShare_bonus_increase", 0.05); }

View File

@ -112,9 +112,11 @@ public class EntityListener implements Listener {
return;
}
if (attacker instanceof Player && PartyManager.inSameParty(defendingPlayer, (Player) attacker) && !Config.getInstance().getPartyFriendlyFire()) {
event.setCancelled(true);
return;
if (attacker instanceof Player && PartyManager.inSameParty(defendingPlayer, (Player) attacker)) {
if (!(Permissions.friendlyFire((Player) attacker) && Permissions.friendlyFire(defendingPlayer))) {
event.setCancelled(true);
return;
}
}
}

View File

@ -588,7 +588,7 @@ public final class CombatTools {
return false;
}
if (PartyManager.inSameParty(player, defender) && !Config.getInstance().getPartyFriendlyFire()) {
if (PartyManager.inSameParty(player, defender) && !(Permissions.friendlyFire(player) && Permissions.friendlyFire(defender))) {
return false;
}
@ -601,8 +601,13 @@ public final class CombatTools {
}
}
else if (entity instanceof Tameable) {
if (Misc.isFriendlyPet(player, (Tameable) entity) && !Config.getInstance().getPartyFriendlyFire()) {
return false;
if (Misc.isFriendlyPet(player, (Tameable) entity)) {
// isFriendlyPet ensures that the Tameable is: Tamed, owned by a player, and the owner is in the same party
// So we can make some assumptions here, about our casting and our check
Player owner = (Player) ((Tameable) entity).getOwner();
if (!(Permissions.friendlyFire(player) && Permissions.friendlyFire(owner))) {
return false;
}
}
}

View File

@ -689,4 +689,12 @@ public final class Permissions {
public static boolean smelting(Player player) {
return hasPermission(player, "mcmmo.skills.smelting");
}
/*
* MCMMO.PARTY.*
*/
public static boolean friendlyFire(Player player) {
return hasPermission(player, "mcmmo.party.friendlyfire");
}
}