New command to set a faction as permanent: /f permanent <faction tag> (requires new admin-level permission "factions.setPermanent"). Permanent factions will not be deleted if they have no members, and faction admins of such factions are allowed to leave without a replacement available. Faction admins are also unable to disband their own faction if it is Permanent; only those with the admin-level "factions.disband" permission can disband such a faction while it is set as Permanent.
This commit is contained in:
parent
249846d6ae
commit
43fdc8ae14
@ -459,8 +459,9 @@ public class FPlayer {
|
|||||||
|
|
||||||
public void leave(boolean makePay) {
|
public void leave(boolean makePay) {
|
||||||
Faction myFaction = this.getFaction();
|
Faction myFaction = this.getFaction();
|
||||||
|
boolean perm = myFaction.isPermanent();
|
||||||
|
|
||||||
if (this.getRole() == Role.ADMIN && myFaction.getFPlayers().size() > 1) {
|
if (!perm && this.getRole() == Role.ADMIN && myFaction.getFPlayers().size() > 1) {
|
||||||
sendMessage("You must give the admin role to someone else first.");
|
sendMessage("You must give the admin role to someone else first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -496,7 +497,7 @@ public class FPlayer {
|
|||||||
|
|
||||||
this.resetFactionData();
|
this.resetFactionData();
|
||||||
|
|
||||||
if (myFaction.isNormal() && myFaction.getFPlayers().isEmpty()) {
|
if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty()) {
|
||||||
// Remove this faction
|
// Remove this faction
|
||||||
for (FPlayer fplayer : FPlayer.getAllOnline()) {
|
for (FPlayer fplayer : FPlayer.getAllOnline()) {
|
||||||
fplayer.sendMessage("The faction "+myFaction.getTag(fplayer)+Conf.colorSystem+" was disbanded.");
|
fplayer.sendMessage("The faction "+myFaction.getTag(fplayer)+Conf.colorSystem+" was disbanded.");
|
||||||
@ -687,7 +688,9 @@ public class FPlayer {
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public boolean shouldBeSaved() {
|
public boolean shouldBeSaved() {
|
||||||
return this.factionId != 0;
|
// return this.factionId != 0;
|
||||||
|
// we now need to track all players, so they don't get stuck back into a default faction if factionless; also to keep track of lost power and such
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean save() {
|
public static boolean save() {
|
||||||
|
@ -34,6 +34,7 @@ public class Faction {
|
|||||||
private boolean open;
|
private boolean open;
|
||||||
private boolean peaceful;
|
private boolean peaceful;
|
||||||
private boolean peacefulExplosionsEnabled;
|
private boolean peacefulExplosionsEnabled;
|
||||||
|
private boolean permanent;
|
||||||
private String tag;
|
private String tag;
|
||||||
private String description;
|
private String description;
|
||||||
private Location home;
|
private Location home;
|
||||||
@ -50,6 +51,9 @@ public class Faction {
|
|||||||
this.tag = "???";
|
this.tag = "???";
|
||||||
this.description = "Default faction description :(";
|
this.description = "Default faction description :(";
|
||||||
this.lastPlayerLoggedOffTime = 0;
|
this.lastPlayerLoggedOffTime = 0;
|
||||||
|
this.peaceful = false;
|
||||||
|
this.peacefulExplosionsEnabled = false;
|
||||||
|
this.permanent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -132,6 +136,14 @@ public class Faction {
|
|||||||
peaceful = isPeaceful;
|
peaceful = isPeaceful;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members
|
||||||
|
public boolean isPermanent() {
|
||||||
|
return permanent;
|
||||||
|
}
|
||||||
|
public void setPermanent(boolean isPermanent) {
|
||||||
|
permanent = isPermanent;
|
||||||
|
}
|
||||||
|
|
||||||
public void setPeacefulExplosions(boolean disable) {
|
public void setPeacefulExplosions(boolean disable) {
|
||||||
peacefulExplosionsEnabled = disable;
|
peacefulExplosionsEnabled = disable;
|
||||||
}
|
}
|
||||||
|
@ -120,6 +120,7 @@ public class Factions extends JavaPlugin {
|
|||||||
commands.add(new FCommandOwnerList());
|
commands.add(new FCommandOwnerList());
|
||||||
commands.add(new FCommandPower());
|
commands.add(new FCommandPower());
|
||||||
commands.add(new FCommandPeaceful());
|
commands.add(new FCommandPeaceful());
|
||||||
|
commands.add(new FCommandPermanent());
|
||||||
commands.add(new FCommandRelationAlly());
|
commands.add(new FCommandRelationAlly());
|
||||||
commands.add(new FCommandRelationEnemy());
|
commands.add(new FCommandRelationEnemy());
|
||||||
commands.add(new FCommandRelationNeutral());
|
commands.add(new FCommandRelationNeutral());
|
||||||
@ -425,6 +426,10 @@ public class Factions extends JavaPlugin {
|
|||||||
return hasPerm(sender, "factions.setPeaceful");
|
return hasPerm(sender, "factions.setPeaceful");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean hasPermSetPermanent(CommandSender sender) {
|
||||||
|
return hasPerm(sender, "factions.setPermanent");
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean hasPermPeacefulExplosionToggle(CommandSender sender) {
|
public static boolean hasPermPeacefulExplosionToggle(CommandSender sender) {
|
||||||
return hasPerm(sender, "factions.peacefulExplosionToggle");
|
return hasPerm(sender, "factions.peacefulExplosionToggle");
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,11 @@ public class FCommandDisband extends FBaseCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
faction = me.getFaction();
|
faction = me.getFaction();
|
||||||
|
|
||||||
|
if (faction.isPermanent() && !Factions.hasPermDisband(sender)) {
|
||||||
|
sendMessage("Your faction is designated as permanent, so you cannot disband it.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inform all players
|
// Inform all players
|
||||||
|
@ -140,6 +140,7 @@ public class FCommandHelp extends FBaseCommand {
|
|||||||
|
|
||||||
pageLines = new ArrayList<String>();
|
pageLines = new ArrayList<String>();
|
||||||
pageLines.add("Finally some commands for the server admins:");
|
pageLines.add("Finally some commands for the server admins:");
|
||||||
|
pageLines.add( new FCommandBypass().getUseageTemplate() );
|
||||||
pageLines.add( new FCommandSafeclaim().getUseageTemplate() );
|
pageLines.add( new FCommandSafeclaim().getUseageTemplate() );
|
||||||
pageLines.add( new FCommandAutoSafeclaim().getUseageTemplate() );
|
pageLines.add( new FCommandAutoSafeclaim().getUseageTemplate() );
|
||||||
pageLines.add( new FCommandSafeunclaimall().getUseageTemplate() );
|
pageLines.add( new FCommandSafeunclaimall().getUseageTemplate() );
|
||||||
@ -151,8 +152,8 @@ public class FCommandHelp extends FBaseCommand {
|
|||||||
|
|
||||||
pageLines = new ArrayList<String>();
|
pageLines = new ArrayList<String>();
|
||||||
pageLines.add("More commands for server admins:");
|
pageLines.add("More commands for server admins:");
|
||||||
pageLines.add( new FCommandBypass().getUseageTemplate() );
|
|
||||||
pageLines.add( new FCommandPeaceful().getUseageTemplate() );
|
pageLines.add( new FCommandPeaceful().getUseageTemplate() );
|
||||||
|
pageLines.add( new FCommandPermanent().getUseageTemplate() );
|
||||||
pageLines.add("Peaceful factions are protected from PvP and land capture.");
|
pageLines.add("Peaceful factions are protected from PvP and land capture.");
|
||||||
pageLines.add( new FCommandLock().getUseageTemplate() );
|
pageLines.add( new FCommandLock().getUseageTemplate() );
|
||||||
pageLines.add( new FCommandReload().getUseageTemplate() );
|
pageLines.add( new FCommandReload().getUseageTemplate() );
|
||||||
|
@ -71,7 +71,7 @@ public class FCommandKick extends FBaseCommand {
|
|||||||
yourFaction.deinvite(you);
|
yourFaction.deinvite(you);
|
||||||
you.resetFactionData();
|
you.resetFactionData();
|
||||||
|
|
||||||
if (yourFaction.getFPlayers().isEmpty()) {
|
if (yourFaction.getFPlayers().isEmpty() && !yourFaction.isPermanent()) {
|
||||||
// Remove this faction
|
// Remove this faction
|
||||||
for (FPlayer fplayer : FPlayer.getAllOnline()) {
|
for (FPlayer fplayer : FPlayer.getAllOnline()) {
|
||||||
fplayer.sendMessage("The faction "+yourFaction.getTag(fplayer)+Conf.colorSystem+" was disbanded.");
|
fplayer.sendMessage("The faction "+yourFaction.getTag(fplayer)+Conf.colorSystem+" was disbanded.");
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package com.massivecraft.factions.commands;
|
||||||
|
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.Faction;
|
||||||
|
import com.massivecraft.factions.Factions;
|
||||||
|
import com.massivecraft.factions.FPlayer;
|
||||||
|
|
||||||
|
|
||||||
|
public class FCommandPermanent extends FBaseCommand {
|
||||||
|
|
||||||
|
public FCommandPermanent() {
|
||||||
|
aliases.add("permanent");
|
||||||
|
|
||||||
|
senderMustBePlayer = false;
|
||||||
|
|
||||||
|
requiredParameters.add("faction tag");
|
||||||
|
|
||||||
|
helpDescription = "Designate a faction as permanent";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(CommandSender sender) {
|
||||||
|
return Factions.hasPermSetPermanent(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void perform() {
|
||||||
|
if( parameters.size() > 0) {
|
||||||
|
Faction faction = Faction.findByTag(parameters.get(0));
|
||||||
|
|
||||||
|
if (faction == null) {
|
||||||
|
sendMessage("No faction found with the tag \"" + parameters.get(0) + "\"");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String change;
|
||||||
|
if(faction.isPermanent()) {
|
||||||
|
change = "removed permanent status from";
|
||||||
|
faction.setPermanent(false);
|
||||||
|
} else {
|
||||||
|
change = "added permanent status to";
|
||||||
|
faction.setPermanent(true);
|
||||||
|
}
|
||||||
|
// Inform all players
|
||||||
|
for (FPlayer fplayer : FPlayer.getAllOnline()) {
|
||||||
|
if (fplayer.getFaction() == faction) {
|
||||||
|
fplayer.sendMessage(me.getNameAndRelevant(fplayer)+Conf.colorSystem+" has "+change+" your faction.");
|
||||||
|
} else {
|
||||||
|
fplayer.sendMessage(me.getNameAndRelevant(fplayer)+Conf.colorSystem+" has "+change+" the faction \"" + faction.getTag(fplayer) + "\".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -70,6 +70,10 @@ public class FCommandShow extends FBaseCommand {
|
|||||||
sendMessage(Conf.colorChrome+"Joining: "+Conf.colorSystem+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus);
|
sendMessage(Conf.colorChrome+"Joining: "+Conf.colorSystem+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus);
|
||||||
sendMessage(Conf.colorChrome+"Land / Power / Maxpower: "+Conf.colorSystem+ faction.getLandRounded()+" / "+faction.getPowerRounded()+" / "+faction.getPowerMaxRounded());
|
sendMessage(Conf.colorChrome+"Land / Power / Maxpower: "+Conf.colorSystem+ faction.getLandRounded()+" / "+faction.getPowerRounded()+" / "+faction.getPowerMaxRounded());
|
||||||
|
|
||||||
|
if (faction.isPermanent()) {
|
||||||
|
sendMessage(Conf.colorChrome+"This faction is permanent, remaining even with no members.");
|
||||||
|
}
|
||||||
|
|
||||||
// show the land value
|
// show the land value
|
||||||
if (Econ.enabled()) {
|
if (Econ.enabled()) {
|
||||||
double value = Econ.calculateTotalLandValue(faction.getLandRounded());
|
double value = Econ.calculateTotalLandValue(faction.getLandRounded());
|
||||||
|
Loading…
Reference in New Issue
Block a user