This commit is contained in:
Olof Larsson 2011-10-23 20:50:49 +02:00
parent 842844969b
commit 98c5230655
19 changed files with 297 additions and 155 deletions

View File

@ -26,7 +26,6 @@ permissions:
factions.kit.halfmod: true factions.kit.halfmod: true
factions.disband.any: true factions.disband.any: true
factions.setpermanent: true factions.setpermanent: true
factions.setpermanentpower: true
factions.setpeaceful: true factions.setpeaceful: true
factions.sethome.any: true factions.sethome.any: true
factions.money.*: true factions.money.*: true
@ -37,6 +36,7 @@ permissions:
factions.managesafezone: true factions.managesafezone: true
factions.managewarzone: true factions.managewarzone: true
factions.bypass: true factions.bypass: true
factions.flag.any: true
factions.kick.any: true factions.kick.any: true
factions.ownershipbypass: true factions.ownershipbypass: true
factions.kit.fullplayer: factions.kit.fullplayer:
@ -55,6 +55,7 @@ permissions:
factions.deinvite: true factions.deinvite: true
factions.description: true factions.description: true
factions.disband: true factions.disband: true
factions.flag: true
factions.help: true factions.help: true
factions.home: true factions.home: true
factions.invite: true factions.invite: true
@ -101,6 +102,10 @@ permissions:
description: disband a faction description: disband a faction
factions.disband.any: factions.disband.any:
description: disband an other faction description: disband an other faction
factions.flag:
description: change faction flags
factions.flag.any:
description: change all flags for all factions
factions.help: factions.help:
description: display a help page description: display a help page
factions.home: factions.home:
@ -176,8 +181,6 @@ permissions:
description: designate a faction as peaceful description: designate a faction as peaceful
factions.setpermanent: factions.setpermanent:
description: designate a faction as permanent description: designate a faction as permanent
factions.setpermanentpower:
description: set permanent power for a faction
factions.power: factions.power:
description: show player power info description: show player power info
factions.power.any: factions.power.any:

View File

@ -5,6 +5,8 @@ import java.util.*;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.entity.CreatureType; import org.bukkit.entity.CreatureType;
import com.massivecraft.factions.struct.FactionFlag;
public class Conf public class Conf
{ {
public static List<String> baseCommandAliases = new ArrayList<String>(); public static List<String> baseCommandAliases = new ArrayList<String>();
@ -20,6 +22,16 @@ public class Conf
public static ChatColor colorWar = ChatColor.DARK_RED; public static ChatColor colorWar = ChatColor.DARK_RED;
//public static ChatColor colorWilderness = ChatColor.DARK_GREEN; //public static ChatColor colorWilderness = ChatColor.DARK_GREEN;
// REFACTOR ASJDKJASDKFJKASDF
public static Map<FactionFlag, Boolean> factionFlagDefaults;
public static Map<FactionFlag, Boolean> factionFlagIsChangeable;
// REFACTOR ASJDKJASDKFJKASDF EEEEEENNNNDD
// Power // Power
public static double powerPlayerMax = 10.0; public static double powerPlayerMax = 10.0;
public static double powerPlayerMin = -10.0; public static double powerPlayerMin = -10.0;
@ -245,6 +257,32 @@ public class Conf
{ {
baseCommandAliases.add("f"); baseCommandAliases.add("f");
factionFlagDefaults = new LinkedHashMap<FactionFlag, Boolean>();
factionFlagDefaults.put(FactionFlag.PERMANENT, FactionFlag.PERMANENT.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.PEACEFUL, FactionFlag.PEACEFUL.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.INFPOWER, FactionFlag.INFPOWER.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.POWERLOSS, FactionFlag.POWERLOSS.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.PVP, FactionFlag.PVP.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.FRIENDLYFIRE, FactionFlag.FRIENDLYFIRE.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.MONSTERS, FactionFlag.MONSTERS.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.EXPLOSIONS, FactionFlag.EXPLOSIONS.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.FIRESPREAD, FactionFlag.FIRESPREAD.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.LIGHTNING, FactionFlag.LIGHTNING.defaultDefaultValue);
factionFlagDefaults.put(FactionFlag.ENDERGRIEF, FactionFlag.ENDERGRIEF.defaultDefaultValue);
factionFlagIsChangeable = new LinkedHashMap<FactionFlag, Boolean>();
factionFlagIsChangeable.put(FactionFlag.PERMANENT, FactionFlag.PERMANENT.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.PEACEFUL, FactionFlag.PEACEFUL.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.INFPOWER, FactionFlag.INFPOWER.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.POWERLOSS, FactionFlag.POWERLOSS.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.PVP, FactionFlag.PVP.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.FRIENDLYFIRE, FactionFlag.FRIENDLYFIRE.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.MONSTERS, FactionFlag.MONSTERS.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.EXPLOSIONS, FactionFlag.EXPLOSIONS.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.FIRESPREAD, FactionFlag.FIRESPREAD.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.LIGHTNING, FactionFlag.LIGHTNING.defaultDefaultChangeable);
factionFlagIsChangeable.put(FactionFlag.ENDERGRIEF, FactionFlag.ENDERGRIEF.defaultDefaultChangeable);
territoryEnemyDenyCommands.add("home"); territoryEnemyDenyCommands.add("home");
territoryEnemyDenyCommands.add("sethome"); territoryEnemyDenyCommands.add("sethome");
territoryEnemyDenyCommands.add("spawn"); territoryEnemyDenyCommands.add("spawn");

View File

@ -14,6 +14,7 @@ import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.struct.ChatMode; import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
import com.massivecraft.factions.util.RelationUtil; import com.massivecraft.factions.util.RelationUtil;
@ -574,7 +575,7 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
public void leave(boolean makePay) public void leave(boolean makePay)
{ {
Faction myFaction = this.getFaction(); Faction myFaction = this.getFaction();
boolean perm = myFaction.isPermanent(); boolean perm = myFaction.getFlag(FactionFlag.PERMANENT);
if (!perm && this.getRole() == Rel.LEADER && myFaction.getFPlayers().size() > 1) if (!perm && this.getRole() == Rel.LEADER && myFaction.getFPlayers().size() > 1)
{ {

View File

@ -11,6 +11,7 @@ import org.bukkit.entity.Player;
import com.massivecraft.factions.iface.EconomyParticipator; import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.iface.RelationParticipator;
import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
import com.massivecraft.factions.util.*; import com.massivecraft.factions.util.*;
@ -53,9 +54,9 @@ public class Faction extends Entity implements EconomyParticipator
// FIELD: permanent // FIELD: permanent
// "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members // "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members
private boolean permanent; //private boolean permanent;
public boolean isPermanent() { return permanent; } //public boolean isPermanent() { return permanent; }
public void setPermanent(boolean isPermanent) { permanent = isPermanent; } //public void setPermanent(boolean isPermanent) { permanent = isPermanent; }
// FIELD: tag // FIELD: tag
private String tag; private String tag;
@ -128,11 +129,27 @@ public class Faction extends Entity implements EconomyParticipator
return Econ.getMethod().getAccount(aid); return Econ.getMethod().getAccount(aid);
} }
// FIELD: permanentPower // FIELDS: Flag management
private Integer permanentPower; // TODO: This will save... defaults if they where changed to...
public Integer getPermanentPower() { return this.permanentPower; } private Map<FactionFlag, Boolean> flagOverrides; // Contains the modifications to the default values
public void setPermanentPower(Integer permanentPower) { this.permanentPower = permanentPower; } public boolean getFlag(FactionFlag flag)
public boolean hasPermanentPower() { return this.permanentPower != null; } {
Boolean ret = this.flagOverrides.get(flag);
if (ret == null) ret = flag.getDefault();
return ret;
}
public void setFlag(FactionFlag flag, boolean value)
{
if (Conf.factionFlagDefaults.get(flag) == value)
{
this.flagOverrides.remove(flag);
return;
}
this.flagOverrides.put(flag, value);
}
// FIELDS: Permission <-> Groups management
// -------------------------------------------- // // -------------------------------------------- //
// Construct // Construct
@ -148,8 +165,8 @@ public class Faction extends Entity implements EconomyParticipator
this.lastPlayerLoggedOffTime = 0; this.lastPlayerLoggedOffTime = 0;
this.peaceful = false; this.peaceful = false;
this.peacefulExplosionsEnabled = false; this.peacefulExplosionsEnabled = false;
this.permanent = false;
this.money = 0.0; this.money = 0.0;
this.flagOverrides = new LinkedHashMap<FactionFlag, Boolean>();
} }
// -------------------------------------------- // // -------------------------------------------- //
@ -166,6 +183,8 @@ public class Faction extends Entity implements EconomyParticipator
// Understand the types // Understand the types
// ------------------------------- // -------------------------------
// TODO: These should be gone after the refactoring...
public boolean isNormal() public boolean isNormal()
{ {
return ! (this.isNone() || this.isSafeZone() || this.isWarZone()); return ! (this.isNone() || this.isSafeZone() || this.isWarZone());
@ -252,9 +271,9 @@ public class Faction extends Entity implements EconomyParticipator
//----------------------------------------------// //----------------------------------------------//
public double getPower() public double getPower()
{ {
if (this.hasPermanentPower()) if (this.getFlag(FactionFlag.INFPOWER))
{ {
return this.getPermanentPower(); return 999999;
} }
double ret = 0; double ret = 0;
@ -271,9 +290,9 @@ public class Faction extends Entity implements EconomyParticipator
public double getPowerMax() public double getPowerMax()
{ {
if (this.hasPermanentPower()) if (this.getFlag(FactionFlag.INFPOWER))
{ {
return this.getPermanentPower(); return 999999;
} }
double ret = 0; double ret = 0;

View File

@ -151,7 +151,7 @@ public class P extends MPlugin
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE) .excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
.registerTypeAdapter(Location.class, new MyLocationTypeAdapter()) .registerTypeAdapter(Location.class, new MyLocationTypeAdapter())
.registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter()) .registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter())
.registerTypeAdapter(Rel.class, new MyRelTypeAdapter()); .registerTypeAdapter(Rel.class, new MyRelTypeAdapter()); // This one is for users upgrading from 1.6 to 1.7... should be removed some time in the future.
} }
@Override @Override

View File

@ -6,6 +6,7 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.integration.SpoutFeatures; import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
@ -49,7 +50,7 @@ public class CmdDisband extends FCommand
} }
} }
if (faction.isPermanent()) if (faction.getFlag(FactionFlag.PERMANENT))
{ {
msg("<i>This faction is designated as permanent, so you cannot disband it."); msg("<i>This faction is designated as permanent, so you cannot disband it.");
return; return;

View File

@ -0,0 +1,88 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Rel;
public class CmdFlag extends FCommand
{
public CmdFlag()
{
super();
this.aliases.add("flag");
//this.requiredArgs.add("");
this.optionalArgs.put("faction", "your");
this.optionalArgs.put("flag", "all");
this.optionalArgs.put("on/off", "read");
this.permission = Permission.FLAG.node;
this.disableOnLock = true;
senderMustBePlayer = false;
senderMustBeMember = false;
senderMustBeOfficer = false;
senderMustBeLeader = false;
}
@Override
public void perform()
{
Faction faction = myFaction;
if (this.argIsSet(0))
{
faction = this.argAsFaction(0);
}
if (faction == null) return;
msg(p.txt.titleize("Flag(s) for " + faction.describeTo(fme)));
if ( ! this.argIsSet(1))
{
for (FactionFlag flag : FactionFlag.values())
{
msg(flag.getStateInfo(faction.getFlag(flag), true));
}
return;
}
FactionFlag flag = this.argAsFactionFlag(1);
if (flag == null) return;
if ( ! this.argIsSet(2))
{
msg(flag.getStateInfo(faction.getFlag(flag), true));
return;
}
Boolean targetValue = this.argAsBool(2);
if (targetValue == null) return;
// Do the sender have the right to change flags for this faction?
if (Permission.FLAG_ANY.has(sender))
{
// This sender may modify any flag for anyone
}
else if ( ! flag.isChangeable())
{
msg("<b>Only server operators can change this flag.");
return;
}
else if (faction != myFaction)
{
msg("<b>You are not a member in that faction.");
return;
}
else if (fme.getRole().isLessThan(Rel.OFFICER))
{
msg("<b>You must be faction leader or officer to change your faction flags.");
return;
}
// Do the change
faction.setFlag(flag, targetValue);
msg(flag.getStateInfo(faction.getFlag(flag), true));
}
}

View File

@ -168,8 +168,6 @@ public class CmdHelp extends FCommand
pageLines = new ArrayList<String>(); pageLines = new ArrayList<String>();
pageLines.add(p.txt.parse("<i>More commands for server admins:")); pageLines.add(p.txt.parse("<i>More commands for server admins:"));
pageLines.add( p.cmdBase.cmdPeaceful.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdPeaceful.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPermanent.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPermanentPower.getUseageTemplate(true) );
pageLines.add(p.txt.parse("<i>Peaceful factions are protected from PvP and land capture.")); pageLines.add(p.txt.parse("<i>Peaceful factions are protected from PvP and land capture."));
pageLines.add( p.cmdBase.cmdLock.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdLock.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdReload.getUseageTemplate(true) ); pageLines.add( p.cmdBase.cmdReload.getUseageTemplate(true) );

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers; import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
public class CmdKick extends FCommand public class CmdKick extends FCommand
@ -77,7 +78,7 @@ public class CmdKick extends FCommand
yourFaction.deinvite(you); yourFaction.deinvite(you);
you.resetFactionData(); you.resetFactionData();
if (yourFaction.getFPlayers().isEmpty() && !yourFaction.isPermanent()) if (yourFaction.getFPlayers().isEmpty() && !yourFaction.getFlag(FactionFlag.PERMANENT))
{ {
// Remove this faction // Remove this faction
for (FPlayer fplayer : FPlayers.i.getOnline()) for (FPlayer fplayer : FPlayers.i.getOnline())

View File

@ -1,59 +0,0 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
public class CmdPermanent extends FCommand
{
public CmdPermanent()
{
super();
this.aliases.add("permanent");
this.requiredArgs.add("faction tag");
//this.optionalArgs.put("", "");
this.permission = Permission.SET_PERMANENT.node;
this.disableOnLock = true;
senderMustBePlayer = false;
senderMustBeMember = false;
senderMustBeOfficer = false;
senderMustBeLeader = false;
}
@Override
public void perform()
{
Faction faction = this.argAsFaction(0);
if (faction == null) 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 : FPlayers.i.getOnline())
{
if (fplayer.getFaction() == faction)
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> has "+change+" your faction.");
}
else
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> has "+change+" the faction \"" + faction.getTag(fplayer) + "\".");
}
}
}
}

View File

@ -1,50 +0,0 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
public class CmdPermanentPower extends FCommand
{
public CmdPermanentPower()
{
super();
this.aliases.add("permanentpower");
this.requiredArgs.add("faction");
this.optionalArgs.put("power", "reset");
this.permission = Permission.SET_PERMANENTPOWER.node;
this.disableOnLock = true;
senderMustBePlayer = false;
senderMustBeMember = false;
senderMustBeOfficer = false;
senderMustBeLeader = false;
}
@Override
public void perform()
{
Faction targetFaction = this.argAsFaction(0);
if (targetFaction == null) return;
Integer targetPower = this.argAsInt(1);
targetFaction.setPermanentPower(targetPower);
String change = "removed permanentpower status from";
if(targetFaction.hasPermanentPower())
{
change = "added permanentpower status to";
}
msg("<i>You %s <h>%s<i>.", change, targetFaction.describeTo(fme));
// Inform all players
for (FPlayer fplayer : targetFaction.getFPlayersWhereOnline(true))
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> "+change+" your faction.");
}
}
}

View File

@ -0,0 +1,12 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Rel;
public class CmdRelationTruce extends FRelationCommand
{
public CmdRelationTruce()
{
aliases.add("neutral");
targetRelation = Rel.NEUTRAL;
}
}

View File

@ -7,6 +7,7 @@ import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FPlayer; import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions; import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
@ -63,7 +64,7 @@ public class CmdShow extends FCommand
msg("<a>Joining: <i>"+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus); msg("<a>Joining: <i>"+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus);
msg("<a>Land / Power / Maxpower: <i> %d/%d/%d", faction.getLandRounded(), faction.getPowerRounded(), faction.getPowerMaxRounded()); msg("<a>Land / Power / Maxpower: <i> %d/%d/%d", faction.getLandRounded(), faction.getPowerRounded(), faction.getPowerMaxRounded());
if (faction.isPermanent()) if (faction.getFlag(FactionFlag.PERMANENT))
{ {
msg("<a>This faction is permanent, remaining even with no members."); msg("<a>This faction is permanent, remaining even with no members.");
} }

View File

@ -17,6 +17,7 @@ public class FCmdRoot extends FCommand
public CmdDeinvite cmdDeinvite = new CmdDeinvite(); public CmdDeinvite cmdDeinvite = new CmdDeinvite();
public CmdDescription cmdDescription = new CmdDescription(); public CmdDescription cmdDescription = new CmdDescription();
public CmdDisband cmdDisband = new CmdDisband(); public CmdDisband cmdDisband = new CmdDisband();
public CmdFlag cmdFlag = new CmdFlag();
public CmdHelp cmdHelp = new CmdHelp(); public CmdHelp cmdHelp = new CmdHelp();
public CmdHome cmdHome = new CmdHome(); public CmdHome cmdHome = new CmdHome();
public CmdInvite cmdInvite = new CmdInvite(); public CmdInvite cmdInvite = new CmdInvite();
@ -32,8 +33,6 @@ public class FCmdRoot extends FCommand
public CmdOwner cmdOwner = new CmdOwner(); public CmdOwner cmdOwner = new CmdOwner();
public CmdOwnerList cmdOwnerList = new CmdOwnerList(); public CmdOwnerList cmdOwnerList = new CmdOwnerList();
public CmdPeaceful cmdPeaceful = new CmdPeaceful(); public CmdPeaceful cmdPeaceful = new CmdPeaceful();
public CmdPermanent cmdPermanent = new CmdPermanent();
public CmdPermanentPower cmdPermanentPower = new CmdPermanentPower();
public CmdPower cmdPower = new CmdPower(); public CmdPower cmdPower = new CmdPower();
public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly(); public CmdRelationAlly cmdRelationAlly = new CmdRelationAlly();
public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy(); public CmdRelationEnemy cmdRelationEnemy = new CmdRelationEnemy();
@ -83,6 +82,7 @@ public class FCmdRoot extends FCommand
this.addSubCommand(this.cmdDeinvite); this.addSubCommand(this.cmdDeinvite);
this.addSubCommand(this.cmdDescription); this.addSubCommand(this.cmdDescription);
this.addSubCommand(this.cmdDisband); this.addSubCommand(this.cmdDisband);
this.addSubCommand(this.cmdFlag);
this.addSubCommand(this.cmdHelp); this.addSubCommand(this.cmdHelp);
this.addSubCommand(this.cmdHome); this.addSubCommand(this.cmdHome);
this.addSubCommand(this.cmdInvite); this.addSubCommand(this.cmdInvite);
@ -98,8 +98,6 @@ public class FCmdRoot extends FCommand
this.addSubCommand(this.cmdOwner); this.addSubCommand(this.cmdOwner);
this.addSubCommand(this.cmdOwnerList); this.addSubCommand(this.cmdOwnerList);
this.addSubCommand(this.cmdPeaceful); this.addSubCommand(this.cmdPeaceful);
this.addSubCommand(this.cmdPermanent);
this.addSubCommand(this.cmdPermanentPower);
this.addSubCommand(this.cmdPower); this.addSubCommand(this.cmdPower);
this.addSubCommand(this.cmdRelationAlly); this.addSubCommand(this.cmdRelationAlly);
this.addSubCommand(this.cmdRelationEnemy); this.addSubCommand(this.cmdRelationEnemy);

View File

@ -12,6 +12,7 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction; import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions; import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P; import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.FactionFlag;
import com.massivecraft.factions.struct.Rel; import com.massivecraft.factions.struct.Rel;
import com.massivecraft.factions.zcore.MCommand; import com.massivecraft.factions.zcore.MCommand;
@ -273,6 +274,41 @@ public abstract class FCommand extends MCommand<P>
return this.argAsFaction(idx, null); return this.argAsFaction(idx, null);
} }
// FACTION FLAG ======================
public FactionFlag strAsFactionFlag(String name, FactionFlag def, boolean msg)
{
FactionFlag ret = def;
if (name != null)
{
FactionFlag flag = FactionFlag.parse(name);
if (flag != null)
{
ret = flag;
}
}
if (msg && ret == null)
{
this.msg("<b>The faction-flag \"<p>%s<b>\" could not be found.", name);
}
return ret;
}
public FactionFlag argAsFactionFlag(int idx, FactionFlag def, boolean msg)
{
return this.strAsFactionFlag(this.argAsString(idx), def, msg);
}
public FactionFlag argAsFactionFlag(int idx, FactionFlag def)
{
return this.argAsFactionFlag(idx, def, true);
}
public FactionFlag argAsFactionFlag(int idx)
{
return this.argAsFactionFlag(idx, null);
}
// -------------------------------------------- // // -------------------------------------------- //
// Commonly used logic // Commonly used logic
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -1,5 +1,7 @@
package com.massivecraft.factions.struct; package com.massivecraft.factions.struct;
import com.massivecraft.factions.Conf;
/** /**
* Flags that describe the nature of a faction and it's territory. * Flags that describe the nature of a faction and it's territory.
* Can monsters spawn there? May fire spread etc? Is the faction permanent? * Can monsters spawn there? May fire spread etc? Is the faction permanent?
@ -10,27 +12,51 @@ package com.massivecraft.factions.struct;
public enum FactionFlag public enum FactionFlag
{ {
// Faction flags // Faction flags
PERMANENT, PERMANENT("permanent", "<i>A permanent faction will never be deleted.", false, false),
PEACEFUL, // This faction is friends with everyone PEACEFUL("peaceful", "<i>Allways in truce with other factions.", false, false),
INFPOWER, // This faction has infinite power: TODO: Add faction has enough method. Replace the permanentpower level INFPOWER("infpower", "<i>This flag gives the faction infinite power.", false, false),
// This faction has infinite power: TODO: Add faction has enough method. Replace the permanentpower level
// (Faction) Territory flags // (Faction) Territory flags
POWERLOSS, // Regardless of death-reason players loose power on death IF powerloss is true in this territory POWERLOSS("powerloss", "<i>Is power lost on death in this territory?", true, false),
PVP, PVP("pvp", "<i>Can you PVP in territory?", true, false),
FRIENDLYFIRE, // Can members/allies/friends damage eachother in this territory? FRIENDLYFIRE("friendlyfire", "<i>Can friends hurt eachother here?", false, false),
MONSTERS, MONSTERS("monsters", "<i>Can monsters spawn in this territory?", true, false),
EXPLOSIONS, EXPLOSIONS("explosions", "<i>Can explosions occur in this territory?", true, false),
FIRESPREAD, FIRESPREAD("firespread", "<i>Can fire spread in territory?", true, false),
LIGHTNING, LIGHTNING("lightning", "<i>Can lightning strike in this territory?", true, false),
ENDERGRIEF("endergrief", "<i>Can endermen grief in this territory?", false, true),
; ;
private final String nicename;
private final String desc;
public final boolean defaultDefaultValue;
public final boolean defaultDefaultChangeable;
private FactionFlag(final String nicename, final String desc, final boolean defaultDefaultValue, final boolean defaultDefaultChangeable)
{
this.nicename = nicename;
this.desc = desc;
this.defaultDefaultValue = defaultDefaultValue;
this.defaultDefaultChangeable = defaultDefaultChangeable;
}
public String getNicename()
{
return this.nicename;
}
public String getDescription()
{
return this.desc;
}
/** /**
* The state for newly created factions. * The state for newly created factions.
*/ */
public boolean getDefault() public boolean getDefault()
{ {
// Use config file for this later. return Conf.factionFlagDefaults.get(this);
return true;
} }
/** /**
@ -40,7 +66,32 @@ public enum FactionFlag
*/ */
public boolean isChangeable() public boolean isChangeable()
{ {
// TODO: Use config file return Conf.factionFlagIsChangeable.get(this);
return true; }
public static FactionFlag parse(String str)
{
str = str.toLowerCase();
if (str.startsWith("per")) return PERMANENT;
if (str.startsWith("pea")) return PEACEFUL;
if (str.startsWith("i")) return INFPOWER;
if (str.startsWith("pow")) return POWERLOSS;
if (str.startsWith("pvp")) return PVP;
if (str.startsWith("fr") || str.startsWith("ff")) return FRIENDLYFIRE;
if (str.startsWith("m")) return MONSTERS;
if (str.startsWith("e")) return EXPLOSIONS;
if (str.startsWith("fi")) return FIRESPREAD;
if (str.startsWith("l")) return LIGHTNING;
return null;
}
public String getStateInfo(boolean value, boolean withDesc)
{
String ret = (value ? "<g>YES" : "<b>NOT") + "<h> " + this.getNicename();
if (withDesc)
{
ret += " " + this.getDescription();
}
return ret;
} }
} }

View File

@ -2,10 +2,9 @@ package com.massivecraft.factions.struct;
/** /**
* Permissions that you (a player) may or may not have in the territory of a certain faction. * Permissions that you (a player) may or may not have in the territory of a certain faction.
* * Each faction have many Rel's assigned to each one of these Perms.
* You need a certain rel to be able
*/ */
public enum FactionPlayerPerm public enum FactionPerm
{ {
BUILD, // This player can build in the faction BUILD, // This player can build in the faction
PAINBUILD, // This player can build in the faction BUT will take damage each time. This is overridden by BUILD if player has both PAINBUILD, // This player can build in the faction BUT will take damage each time. This is overridden by BUILD if player has both

View File

@ -20,6 +20,8 @@ public enum Permission
DESCRIPTION("description"), DESCRIPTION("description"),
DISBAND("disband"), DISBAND("disband"),
DISBAND_ANY("disband.any"), DISBAND_ANY("disband.any"),
FLAG("flag"),
FLAG_ANY("flag.any"),
HELP("help"), HELP("help"),
HOME("home"), HOME("home"),
INVITE("invite"), INVITE("invite"),
@ -44,8 +46,6 @@ public enum Permission
OWNER("owner"), OWNER("owner"),
OWNERLIST("ownerlist"), OWNERLIST("ownerlist"),
SET_PEACEFUL("setpeaceful"), SET_PEACEFUL("setpeaceful"),
SET_PERMANENT("setpermanent"),
SET_PERMANENTPOWER("setpermanentpower"),
POWER("power"), POWER("power"),
POWER_ANY("power.any"), POWER_ANY("power.any"),
RELATION("relation"), RELATION("relation"),

View File

@ -15,6 +15,11 @@ public class RelationUtil
{ {
String ret = ""; String ret = "";
if (that == null)
{
return "A server admin";
}
Faction thatFaction = getFaction(that); Faction thatFaction = getFaction(that);
if (thatFaction == null) return "ERROR"; // ERROR if (thatFaction == null) return "ERROR"; // ERROR