More refactoring... the commands are refactored now :)

This commit is contained in:
Olof Larsson 2011-03-22 15:45:41 +01:00
parent 0b96a821ce
commit d7c1d0fce3
33 changed files with 1278 additions and 122 deletions

View File

@ -1,3 +1,3 @@
name: Factions name: Factions
version: 1.0 beta7 version: 1.0 beta8
main: com.bukkit.mcteam.factions.Factions main: com.bukkit.mcteam.factions.Factions

View File

@ -124,7 +124,7 @@ public class Board {
* north is in the direction of decreasing x * north is in the direction of decreasing x
* east is in the direction of decreasing z * east is in the direction of decreasing z
*/ */
public ArrayList<String> getMap(Faction faction, FLocation flocation, double inDegrees) { public static ArrayList<String> getMap(Faction faction, FLocation flocation, double inDegrees) {
ArrayList<String> ret = new ArrayList<String>(); ArrayList<String> ret = new ArrayList<String>();
ret.add(TextUtil.titleize("("+flocation+") "+getFactionAt(flocation).getTag(faction))); ret.add(TextUtil.titleize("("+flocation+") "+getFactionAt(flocation).getTag(faction)));

View File

@ -14,11 +14,23 @@ import com.bukkit.mcteam.factions.struct.Role;
import com.bukkit.mcteam.gson.reflect.TypeToken; import com.bukkit.mcteam.gson.reflect.TypeToken;
import com.bukkit.mcteam.util.DiscUtil; import com.bukkit.mcteam.util.DiscUtil;
/**
* Logged in players always have exactly one FPlayer instance.
* Logged out players may or may not have an FPlayer instance. They will always have one if they are part of a faction.
* This is because only players with a faction are saved to disk (in order to not waste disk space).
*
* The FPlayer is linked to a minecraft player using the player name in lowercase form.
* Lowercase is enforced while loading from disk TODO
*
* The same instance is always returned for the same player.
* This means you can use the == operator. No .equals method necessary.
*/
public class FPlayer { public class FPlayer {
public static transient Map<String, FPlayer> instances = new HashMap<String, FPlayer>(); public static transient Map<String, FPlayer> instances = new HashMap<String, FPlayer>();
public static transient File file = new File(Factions.instance.getDataFolder(), "players.json"); public static transient File file = new File(Factions.instance.getDataFolder(), "players.json");
public transient String playername; public transient String playerName;
public transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked? public transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
public int factionId; public int factionId;
@ -26,15 +38,15 @@ public class FPlayer {
private String title; private String title;
private double power; private double power;
private long lastPowerUpdateTime; private long lastPowerUpdateTime;
private boolean mapAutoUpdating; private transient boolean mapAutoUpdating;
private boolean factionChatting; private boolean factionChatting;
public FPlayer(Player player) { public FPlayer(Player player) {
this.playername = player.getName(); this.playerName = player.getName().toLowerCase();
} }
public FPlayer(String playername) { public FPlayer(String playerName) {
this.playername = playername; this.playerName = playerName.toLowerCase();
} }
// GSON need this noarg constructor. // GSON need this noarg constructor.
@ -53,11 +65,11 @@ public class FPlayer {
} }
public Player getPlayer() { public Player getPlayer() {
return Factions.instance.getServer().getPlayer(playername); return Factions.instance.getServer().getPlayer(playerName);
} }
public String getPlayerName() { public String getPlayerName() {
return this.playername; return this.playerName;
} }
// -------------------------------------------- // // -------------------------------------------- //
@ -65,7 +77,7 @@ public class FPlayer {
// -------------------------------------------- // // -------------------------------------------- //
public boolean isOnline() { public boolean isOnline() {
return Factions.instance.getServer().getPlayer(playername) != null; return Factions.instance.getServer().getPlayer(playerName) != null;
} }
public boolean isOffline() { public boolean isOffline() {
@ -109,7 +121,7 @@ public class FPlayer {
} }
public String getName() { public String getName() {
return this.playername; return this.playerName;
} }
public String getTag() { public String getTag() {
@ -316,70 +328,17 @@ public class FPlayer {
return factionId != 0; return factionId != 0;
} }
public ArrayList<String> invite(FPlayer follower) {
ArrayList<String> errors = new ArrayList<String>();
//Log.debug("this.role: "+this.role);
//Log.debug("this.role.value: "+this.role.value);
//Log.debug("FactionRole.MODERATOR.value: "+FactionRole.MODERATOR.value);
if (this.role.value < Role.MODERATOR.value) {
errors.add(Conf.colorSystem+"You must be a moderator to invite.");
}
if(errors.size() > 0) {
return errors;
}
return this.getFaction().invite(follower);
}
public ArrayList<String> deinvite(FPlayer follower) {
ArrayList<String> errors = new ArrayList<String>();
if (this.role.value < Role.MODERATOR.value) {
errors.add(Conf.colorSystem+"You must be a moderator to deinvite.");
}
if(errors.size() > 0) {
return errors;
}
return this.getFaction().deinvite(follower);
}
public ArrayList<String> kick(FPlayer follower) {
ArrayList<String> errors = new ArrayList<String>();
if ( ! follower.getFaction().equals(this.getFaction())) {
errors.add(follower.getNameAndRelevant(this)+Conf.colorSystem+" is not a member of "+Conf.colorMember+this.getFaction().getTag());
} else if (follower.equals(this)) {
errors.add(Conf.colorSystem+"You cannot kick yourself.");
errors.add(Conf.colorSystem+"You might want to "+Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasLeave.get(0));
} else if (follower.role.value >= this.role.value) { // TODO add more informative messages.
errors.add(Conf.colorSystem+"Your rank is too low to kick this player.");
}
if(errors.size() > 0) {
return errors;
}
return follower.getFaction().kick(follower);
}
// -------------------------------------------- // // -------------------------------------------- //
// Get and search // Get and search
// You can only get a "skin" for online players.
// The same object is always returned for the same player.
// This means you can use the == operator. No .equals method necessary.
// -------------------------------------------- // // -------------------------------------------- //
public static FPlayer get(String playername) { public static FPlayer get(String playerName) {
if (instances.containsKey(playername)) { playerName = playerName.toLowerCase();
return instances.get(playername); if (instances.containsKey(playerName)) {
return instances.get(playerName);
} }
FPlayer vplayer = new FPlayer(playername); FPlayer vplayer = new FPlayer(playerName);
instances.put(playername, vplayer); instances.put(playerName, vplayer);
return vplayer; return vplayer;
} }
@ -460,7 +419,12 @@ public class FPlayer {
try { try {
Type type = new TypeToken<Map<String, FPlayer>>(){}.getType(); Type type = new TypeToken<Map<String, FPlayer>>(){}.getType();
instances = Factions.gson.fromJson(DiscUtil.read(file), type); Map<String, FPlayer> instancesFromFile = Factions.gson.fromJson(DiscUtil.read(file), type);
instances = new HashMap<String, FPlayer>();
for (Entry<String, FPlayer> instanceFromFile : instancesFromFile.entrySet()) {
instances.put(instanceFromFile.getKey().toLowerCase(), instanceFromFile.getValue());
}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return false; return false;
@ -473,7 +437,7 @@ public class FPlayer {
public static void fillPlayernames() { public static void fillPlayernames() {
for(Entry<String, FPlayer> entry : instances.entrySet()) { for(Entry<String, FPlayer> entry : instances.entrySet()) {
entry.getValue().playername = entry.getKey(); entry.getValue().playerName = entry.getKey();
} }
} }

View File

@ -24,7 +24,7 @@ public class Faction {
public transient int id; public transient int id;
protected Map<Integer, Relation> relationWish; protected Map<Integer, Relation> relationWish;
protected Set<String> invites; // Where string is a follower id (lower case name) public Set<String> invites; // Where string is a follower id (lower case name)
protected boolean open; protected boolean open;
protected String tag; protected String tag;
protected String description; protected String description;
@ -118,7 +118,7 @@ public class Faction {
// ------------------------------- // -------------------------------
public ArrayList<String> invite(FPlayer follower) { // TODO Move out /*public ArrayList<String> invite(FPlayer follower) { // TODO Move out
ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> errors = new ArrayList<String>();
if (follower.getFaction().equals(this)) { // error här? if (follower.getFaction().equals(this)) { // error här?
@ -149,7 +149,7 @@ public class Faction {
this.invites.remove(follower.id); this.invites.remove(follower.id);
this.save(); this.save();
return errors; return errors;
} }*/
public ArrayList<String> kick(FPlayer follower) { public ArrayList<String> kick(FPlayer follower) {
ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> errors = new ArrayList<String>();
@ -198,6 +198,7 @@ public class Faction {
return ret; return ret;
} }
/*
public void removeFollower(FPlayer follower) { public void removeFollower(FPlayer follower) {
if (this.id != follower.factionId) { if (this.id != follower.factionId) {
return; // safety check return; // safety check
@ -207,7 +208,7 @@ public class Faction {
follower.resetFactionData(); follower.resetFactionData();
follower.save(); follower.save();
this.save(); this.save();
} }*/
public ArrayList<Player> getOnlinePlayers() { public ArrayList<Player> getOnlinePlayers() {
ArrayList<Player> ret = new ArrayList<Player>(); ArrayList<Player> ret = new ArrayList<Player>();

View File

@ -16,7 +16,7 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import com.bukkit.mcteam.factions.commands.FCommand; import com.bukkit.mcteam.factions.commands.FBaseCommand;
import com.bukkit.mcteam.factions.listeners.FactionsBlockListener; import com.bukkit.mcteam.factions.listeners.FactionsBlockListener;
import com.bukkit.mcteam.factions.listeners.FactionsEntityListener; import com.bukkit.mcteam.factions.listeners.FactionsEntityListener;
import com.bukkit.mcteam.factions.listeners.FactionsPlayerListener; import com.bukkit.mcteam.factions.listeners.FactionsPlayerListener;
@ -47,7 +47,7 @@ public class Factions extends JavaPlugin {
public static Help helpPlugin; public static Help helpPlugin;
// Commands // Commands
public List<FCommand> commands = new ArrayList<FCommand>(); public List<FBaseCommand> commands = new ArrayList<FBaseCommand>();
public Factions() { public Factions() {
Factions.instance = this; Factions.instance = this;
@ -106,12 +106,12 @@ public class Factions extends JavaPlugin {
// -------------------------------------------- // // -------------------------------------------- //
private void setupPermissions() { private void setupPermissions() {
Plugin test = this.getServer().getPluginManager().getPlugin("Permissions");
if (Permissions != null) { if (Permissions != null) {
return; return;
} }
Plugin test = this.getServer().getPluginManager().getPlugin("Permissions");
if (test != null) { if (test != null) {
Permissions = ((Permissions)test).getHandler(); Permissions = ((Permissions)test).getHandler();
Factions.log("Found and will use plugin "+((Permissions)test).getDescription().getFullName()); Factions.log("Found and will use plugin "+((Permissions)test).getDescription().getFullName());
@ -121,21 +121,18 @@ public class Factions extends JavaPlugin {
} }
private void setupHelp() { private void setupHelp() {
Plugin test = this.getServer().getPluginManager().getPlugin("Help");
if (helpPlugin != null) { if (helpPlugin != null) {
return; return;
} }
Plugin test = this.getServer().getPluginManager().getPlugin("Help");
if (test != null) { if (test != null) {
helpPlugin = ((Help) test); helpPlugin = ((Help) test);
Factions.log("Found and will use plugin "+helpPlugin.getDescription().getFullName()); Factions.log("Found and will use plugin "+helpPlugin.getDescription().getFullName());
for(FCommand fcommand : commands) {
fcommand.helpRegister(); // TODO not hardcoded:
} helpPlugin.registerCommand("f help *[page]", "Factions plugin help.", helpPlugin, true);
helpPlugin.registerCommand("help vampire", "help for the vampire plugin.", helpPlugin, true);
} else {
Factions.log(Level.WARNING, "'Help' plugin isn't detected. No /help support.");
} }
} }
@ -160,7 +157,7 @@ public class Factions extends JavaPlugin {
String commandName = parameters.get(0).toLowerCase(); String commandName = parameters.get(0).toLowerCase();
parameters.remove(0); parameters.remove(0);
for (FCommand fcommand : this.commands) { for (FBaseCommand fcommand : this.commands) {
if (fcommand.getAliases().contains(commandName)) { if (fcommand.getAliases().contains(commandName)) {
fcommand.execute(sender, parameters); fcommand.execute(sender, parameters);
return; return;

View File

@ -11,8 +11,9 @@ import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction; import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.Factions; import com.bukkit.mcteam.factions.Factions;
import com.bukkit.mcteam.factions.struct.Role; import com.bukkit.mcteam.factions.struct.Role;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommand { public class FBaseCommand {
public List<String> requiredParameters; public List<String> requiredParameters;
public List<String> optionalParameters; public List<String> optionalParameters;
@ -29,7 +30,7 @@ public class FCommand {
public List<String> parameters; public List<String> parameters;
public FCommand() { public FBaseCommand() {
requiredParameters = new ArrayList<String>(); requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>(); optionalParameters = new ArrayList<String>();
@ -81,10 +82,6 @@ public class FCommand {
} }
public void helpRegister() {
Factions.helpPlugin.registerCommand(this.getBaseName()+ " " +this.helpNameAndParams, this.helpDescription, Factions.instance, false, permissions);
}
public void sendMessage(String message) { public void sendMessage(String message) {
sender.sendMessage(Conf.colorSystem+message); sender.sendMessage(Conf.colorSystem+message);
} }
@ -96,6 +93,7 @@ public class FCommand {
} }
// Test if the number of params is correct. // Test if the number of params is correct.
// TODO print usage
public boolean validateCall() { public boolean validateCall() {
if( ! testPermission(sender)) { if( ! testPermission(sender)) {
sendMessage("You do not have sufficient permissions to use this command."); sendMessage("You do not have sufficient permissions to use this command.");
@ -108,13 +106,7 @@ public class FCommand {
} }
if (parameters.size() < requiredParameters.size()) { if (parameters.size() < requiredParameters.size()) {
int missing = requiredParameters.size() - parameters.size(); sendMessage("Usage: "+this.getUseageTemplate(true));
sendMessage("Missing parameters. You must enter "+missing+" more.");
return false;
}
if (parameters.size() > requiredParameters.size() + optionalParameters.size()) {
sendMessage("To many parameters.");
return false; return false;
} }
@ -142,6 +134,65 @@ public class FCommand {
return Factions.Permissions.has(player, this.permissions); return Factions.Permissions.has(player, this.permissions);
} }
// -------------------------------------------- //
// Help and usage description
// -------------------------------------------- //
public String getUseageTemplate(boolean withColor) {
String ret = "";
if (withColor) {
ret += Conf.colorCommand;
}
ret += this.getBaseName()+ " " +TextUtil.implode(this.getAliases(), ",")+" ";
List<String> parts = new ArrayList<String>();
for (String requiredParameter : this.requiredParameters) {
parts.add("["+requiredParameter+"]");
}
for (String optionalParameter : this.optionalParameters) {
parts.add("*["+optionalParameter+"]");
}
if (withColor) {
ret += Conf.colorParameter;
}
ret += TextUtil.implode(parts, " ");
return ret;
}
public String getUseageTemplate() {
return getUseageTemplate(true);
}
public void helpRegister() {
Factions.helpPlugin.registerCommand(this.getUseageTemplate(false), this.helpDescription, Factions.instance, false, permissions);
}
// -------------------------------------------- //
// Assertions
// -------------------------------------------- //
public boolean assertHasFaction() {
if ( ! me.hasFaction()) {
sendMessage("You are not member of any faction.");
return false;
}
return true;
}
public boolean assertMinRole(Role role) {
if (me.role.value < role.value) {
sendMessage("You must be "+role+" to "+this.helpDescription+".");
return false;
}
return true;
}
// -------------------------------------------- // // -------------------------------------------- //
// Commonly used logic // Commonly used logic
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -0,0 +1,66 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandAdmin extends FBaseCommand {
public FCommandAdmin() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Hand over your admin rights";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.ADMIN)) {
return;
}
String playerName = parameters.get(0);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
Faction myFaction = me.getFaction();
if (you.getFaction() != myFaction) {
sendMessage(you.getNameAndRelevant(me)+Conf.colorSystem+" is not a member in your faction.");
return;
}
if (you == me) {
sendMessage("The target player musn't be yourself.");
return;
}
me.role = Role.MODERATOR;
you.role = Role.ADMIN;
// Inform all players
for (FPlayer fplayer : FPlayer.getAllOnline()) {
if (fplayer.factionId == me.factionId) {
fplayer.sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" gave "+you.getNameAndRelevant(me)+Conf.colorSystem+" the leadership of your faction.");
} else {
fplayer.sendMessage(me.getNameAndRelevant(fplayer)+Conf.colorSystem+" gave "+you.getNameAndRelevant(fplayer)+Conf.colorSystem+" the leadership of "+myFaction.getTag(fplayer));
}
}
}
}

View File

@ -0,0 +1,34 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
public class FCommandChat extends FBaseCommand {
public FCommandChat() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
permissions = "";
senderMustBePlayer = true;
helpDescription = "Switch faction only chat on and off";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! me.isFactionChatting()) {
// Turn on
me.setFactionChatting(true);
sendMessage("Faction-only chat ENABLED.");
} else {
// Turn off
me.setFactionChatting(false);
sendMessage("Faction-only chat DISABLED.");
}
}
}

View File

@ -0,0 +1,78 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Board;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FLocation;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Relation;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandClaim extends FBaseCommand {
public FCommandClaim() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
permissions = "";
senderMustBePlayer = true;
helpDescription = "Claim the land where you are standing";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
Faction myFaction = me.getFaction();
FLocation flocation = new FLocation(me);
Faction otherFaction = Board.getFactionAt(flocation);
if (myFaction == otherFaction) {
sendMessage("You already own this land.");
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
if (myFaction.getLandRounded() >= myFaction.getPowerRounded()) {
sendMessage("You can't claim more land! You need more power!");
return;
}
if (otherFaction.getRelation(me) == Relation.ALLY) {
sendMessage("You can't claim the land of your allies.");
return;
}
if (otherFaction.id != 0) {
if ( ! otherFaction.hasLandInflation()) { // TODO more messages WARN current faction most importantly
sendMessage(me.getRelationColor(otherFaction)+otherFaction.getTag()+Conf.colorSystem+" owns this land and is strong enough to keep it.");
return;
}
if ( ! Board.isBorderLocation(flocation)) {
sendMessage("You must start claiming land at the border of the territory.");
return;
}
}
if (otherFaction.id == 0) {
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" claimed some new land :D");
} else {
// ASDF claimed some of your land 450 blocks NNW of you.
// ASDf claimed some land from FACTION NAME
otherFaction.sendMessage(me.getNameAndRelevant(otherFaction)+Conf.colorSystem+" stole some of your land :O");
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" claimed some land from "+otherFaction.getTag(myFaction));
}
Board.setFactionAt(myFaction, flocation);
}
}

View File

@ -7,7 +7,7 @@ import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction; import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role; import com.bukkit.mcteam.factions.struct.Role;
public class FCommandCreate extends FCommand { public class FCommandCreate extends FBaseCommand {
public FCommandCreate() { public FCommandCreate() {
requiredParameters = new ArrayList<String>(); requiredParameters = new ArrayList<String>();
@ -18,8 +18,7 @@ public class FCommandCreate extends FCommand {
senderMustBePlayer = true; senderMustBePlayer = true;
helpNameAndParams = "create [faction tag]"; helpDescription = "Create a new faction";
helpDescription = "Create new faction";
} }
public void perform() { public void perform() {

View File

@ -0,0 +1,54 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandDeinvite extends FBaseCommand {
public FCommandDeinvite() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Remove a pending invitation";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
String playerName = parameters.get(0);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
Faction myFaction = me.getFaction();
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
if (you.getFaction() == myFaction) {
sendMessage(you.getName()+" is already a member of "+myFaction.getTag());
return;
}
myFaction.invites.remove(you.playerName);
Faction.save();
you.sendMessage(me.getNameAndRelevant(you)+Conf.colorSystem+" revoked your invitation to "+myFaction.getTag(you));
myFaction.sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" revoked "+you.getNameAndRelevant(me)+"'s"+Conf.colorSystem+" invitation.");
}
}

View File

@ -0,0 +1,41 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.struct.Role;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandDescription extends FBaseCommand {
public FCommandDescription() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("description");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Change the faction description";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
me.getFaction().setDescription(TextUtil.implode(parameters));
// Broadcast the description to everyone
for (FPlayer fplayer : FPlayer.getAllOnline()) {
fplayer.sendMessage("The faction "+fplayer.getRelationColor(me)+me.getFaction().getTag()+Conf.colorSystem+" changed their description to:");
fplayer.sendMessage(me.getFaction().getDescription());
}
}
}

View File

@ -0,0 +1,123 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandHelp extends FBaseCommand {
public FCommandHelp() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
optionalParameters.add("page");
permissions = "";
senderMustBePlayer = false;
helpDescription = "Display a help page";
}
public void perform() {
int page = 1;
if (parameters.size() > 0) {
try {
page = Integer.parseInt(parameters.get(0));
} catch (NumberFormatException e) {
// wasn't an integer
}
}
sendMessage(TextUtil.titleize("Factions Help ("+page+"/"+helpPages.size()+")"));
page -= 1;
if (page < 0 || page >= helpPages.size()) {
sendMessage("This page does not exist");
return;
}
sendMessage(helpPages.get(page));
}
//----------------------------------------------//
// Build the help pages
//----------------------------------------------//
public static ArrayList<ArrayList<String>> helpPages;
static {
helpPages = new ArrayList<ArrayList<String>>();
ArrayList<String> pageLines;
pageLines = new ArrayList<String>();
pageLines.add( new FCommandHelp().getUseageTemplate() );
pageLines.add( new FCommandList().getUseageTemplate() );
pageLines.add( new FCommandShow().getUseageTemplate() );
pageLines.add( new FCommandMap().getUseageTemplate() );
pageLines.add( new FCommandJoin().getUseageTemplate() );
pageLines.add( new FCommandLeave().getUseageTemplate() );
pageLines.add( new FCommandChat().getUseageTemplate() );
pageLines.add( new FCommandCreate().getUseageTemplate() );
pageLines.add( new FCommandTag().getUseageTemplate() );
pageLines.add( new FCommandDescription().getUseageTemplate() );
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( new FCommandOpen().getUseageTemplate() );
pageLines.add( new FCommandTitle().getUseageTemplate() );
pageLines.add( new FCommandInvite().getUseageTemplate() );
pageLines.add( new FCommandDeinvite().getUseageTemplate() );
pageLines.add( new FCommandClaim().getUseageTemplate() );
pageLines.add( new FCommandUnclaim().getUseageTemplate() );
pageLines.add( new FCommandKick().getUseageTemplate() );
pageLines.add( new FCommandMod().getUseageTemplate() );
pageLines.add( new FCommandAdmin().getUseageTemplate() );
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( new FCommandRelationAlly().getUseageTemplate() );
pageLines.add( new FCommandRelationNeutral().getUseageTemplate() );
pageLines.add( new FCommandRelationEnemy().getUseageTemplate() );
pageLines.add("");
pageLines.add(Conf.colorSystem+"Set the relation you WISH to have with another faction.");
pageLines.add(Conf.colorSystem+"Your default relation with other factions will be neutral.");
pageLines.add("");
pageLines.add(Conf.colorSystem+"If BOTH factions choose \"ally\" you will be allies.");
pageLines.add(Conf.colorSystem+"If ONE faction chooses \"enemy\" you will be enemies.");
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add(Conf.colorSystem+"You can never hurt members or allies.");
pageLines.add(Conf.colorSystem+"You can not hurt neutrals in their own territory.");
pageLines.add(Conf.colorSystem+"You can always hurt enemies and players without faction.");
pageLines.add("");
pageLines.add(Conf.colorSystem+"Damage from enemies is reduced in your own territory.");
pageLines.add(Conf.colorSystem+"When you die you lose power. It is restored over time.");
pageLines.add(Conf.colorSystem+"The power of a faction is the sum of all member power.");
pageLines.add(Conf.colorSystem+"The power of a faction determines how much land it can hold.");
pageLines.add(Conf.colorSystem+"You can claim land from factions with too little power.");
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add(Conf.colorSystem+"Only faction members can build and destroy in their own");
pageLines.add(Conf.colorSystem+"territory. Usage of the following items is also restricted:");
pageLines.add(Conf.colorSystem+"Door, Chest, Furnace and Dispenser.");
pageLines.add(" ");
pageLines.add(Conf.colorSystem+"Make sure to put pressure plates in front of doors for your");
pageLines.add(Conf.colorSystem+"guest visitors. Otherwise they can't get through. You can ");
pageLines.add(Conf.colorSystem+"also use this to create member only areas.");
pageLines.add(Conf.colorSystem+"As dispensers are protected, you can create traps without");
pageLines.add(Conf.colorSystem+"worrying about those arrows getting stolen.");
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( new FCommandVersion().getUseageTemplate() );
helpPages.add(pageLines);
}
}

View File

@ -0,0 +1,55 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandInvite extends FBaseCommand {
public FCommandInvite() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Invite a player";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
String playerName = parameters.get(0);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
Faction myFaction = me.getFaction();
if (you.getFaction() == myFaction) {
sendMessage(you.getName()+" is already a member of "+myFaction.getTag());
sendMessage("You might want to "+Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasKick.get(0)+Conf.colorParameter+" "+you.getName());
return;
}
myFaction.invites.add(you.playerName);
Faction.save();
you.sendMessage(me.getNameAndRelevant(you)+Conf.colorSystem+" invited you to "+myFaction.getTag(you));
myFaction.sendMessage(me.getNameAndRelevant(me)+Conf.colorSystem+" invited "+you.getNameAndRelevant(me)+Conf.colorSystem+" to your faction.");
}
}

View File

@ -6,7 +6,7 @@ import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer; import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction; import com.bukkit.mcteam.factions.Faction;
public class FCommandJoin extends FCommand { public class FCommandJoin extends FBaseCommand {
public FCommandJoin() { public FCommandJoin() {
requiredParameters = new ArrayList<String>(); requiredParameters = new ArrayList<String>();
@ -17,7 +17,6 @@ public class FCommandJoin extends FCommand {
senderMustBePlayer = true; senderMustBePlayer = true;
helpNameAndParams = "join [faction name]";
helpDescription = "Join a faction"; helpDescription = "Join a faction";
} }
@ -50,7 +49,7 @@ public class FCommandJoin extends FCommand {
me.resetFactionData(); me.resetFactionData();
me.factionId = faction.id; me.factionId = faction.id;
faction.deinvite(me); faction.invites.remove(me.playerName);
FPlayer.save(); FPlayer.save();
} }

View File

@ -0,0 +1,58 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
public class FCommandKick extends FBaseCommand {
public FCommandKick() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Kick a player from the faction";
}
public void perform() {
String playerName = parameters.get(0);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
Faction myFaction = me.getFaction();
if (you.getFaction() != myFaction) {
sendMessage(you.getNameAndRelevant(me)+Conf.colorSystem+" is not a member of "+myFaction.getTag(me));
return;
}
if (me == you) {
sendMessage("You cannot kick yourself.");
sendMessage("You might want to "+Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasLeave.get(0));
return;
}
if (you.role.value >= me.role.value) { // TODO add more informative messages.
sendMessage("Your rank is too low to kick this player.");
return;
}
myFaction.invites.remove(you.playerName);
you.resetFactionData();
FPlayer.save();
Faction.save();
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" kicked "+you.getNameAndRelevant(myFaction)+Conf.colorSystem+" from the faction! :O");
you.sendMessage(me.getNameAndRelevant(you)+Conf.colorSystem+" kicked you from "+myFaction.getTag(you)+Conf.colorSystem+"! :O");
}
}

View File

@ -7,7 +7,7 @@ import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction; import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role; import com.bukkit.mcteam.factions.struct.Role;
public class FCommandLeave extends FCommand { public class FCommandLeave extends FBaseCommand {
public FCommandLeave() { public FCommandLeave() {
requiredParameters = new ArrayList<String>(); requiredParameters = new ArrayList<String>();
@ -17,13 +17,11 @@ public class FCommandLeave extends FCommand {
senderMustBePlayer = true; senderMustBePlayer = true;
helpNameAndParams = "leave";
helpDescription = "Leave your faction"; helpDescription = "Leave your faction";
} }
public void perform() { public void perform() {
if ( ! me.hasFaction()) { if ( ! assertHasFaction()) {
sendMessage("You are not member of any faction.");
return; return;
} }

View File

@ -0,0 +1,89 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandList extends FBaseCommand {
public FCommandList() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
optionalParameters.add("page");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Show a list of the factions";
}
// TODO put the 0 faction at the highest position
public void perform() {
ArrayList<Faction> FactionList = new ArrayList<Faction>(Faction.getAll());
int page = 1;
if (parameters.size() > 0) {
try {
page = Integer.parseInt(parameters.get(0));
} catch (NumberFormatException e) {
// wasn't an integer
}
}
page -= 1;
// Sort by total followers first
Collections.sort(FactionList, new Comparator<Faction>(){
@Override
public int compare(Faction f1, Faction f2) {
if (f1.id == 0)
return 1;
else if (f2.id == 0)
return -1;
else if (f1.getFPlayers().size() < f2.getFPlayers().size())
return 1;
else if (f1.getFPlayers().size() > f2.getFPlayers().size())
return -1;
return 0;
}
});
// Then sort by how many members are online now
Collections.sort(FactionList, new Comparator<Faction>(){
@Override
public int compare(Faction f1, Faction f2) {
if (f1.getFPlayersWhereOnline(true).size() < f2.getFPlayersWhereOnline(true).size())
return 1;
else if (f1.getFPlayersWhereOnline(true).size() > f2.getFPlayersWhereOnline(true).size())
return -1;
return 0;
}
});
int maxPage = (int)Math.floor((double)FactionList.size() / 9D);
if (page < 0 || page > maxPage) {
sendMessage("The faction list is only " + (maxPage+1) + " page(s) long");
return;
}
String header = "Faction List";
if (maxPage > 1) header += " (page " + (page+1) + " of " + (maxPage+1) + ")";
sendMessage(TextUtil.titleize(header));
int maxPos = (page+1) * 9;
if (maxPos > FactionList.size()) maxPos = FactionList.size();
for (int pos = page * 9; pos < maxPos; pos++) {
Faction faction = FactionList.get(pos);
if (faction.id == 0) {
sendMessage(faction.getTag(me)+Conf.colorSystem+" "+faction.getFPlayersWhereOnline(true).size() + " online");
} else {
sendMessage(faction.getTag(me)+Conf.colorSystem+" "+faction.getFPlayersWhereOnline(true).size()+"/"+faction.getFPlayers().size()+" online, "+faction.getLandRounded()+"/"+faction.getPowerRounded()+"/"+faction.getPowerMaxRounded());
}
}
}
}

View File

@ -0,0 +1,47 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Board;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FLocation;
public class FCommandMap extends FBaseCommand {
public FCommandMap() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
optionalParameters.add("on|off");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Show territory map, set optional auto update";
}
public void perform() {
if (parameters.size() > 0) {
String mapAutoUpdating = parameters.get(0);
if (Conf.aliasTrue.contains(mapAutoUpdating.toLowerCase())) {
// Turn on
me.setMapAutoUpdating(true);
sendMessage("Map auto update ENABLED.");
// And show the map once
showMap();
} else {
// Turn off
me.setMapAutoUpdating(false);
sendMessage("Map auto update DISABLED.");
}
} else {
showMap();
}
}
public void showMap() {
sendMessage(Board.getMap(me.getFaction(), new FLocation(me), me.getPlayer().getLocation().getYaw()));
}
}

View File

@ -0,0 +1,63 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandMod extends FBaseCommand {
public FCommandMod() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Give or revoke moderator rights";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.ADMIN)) {
return;
}
String playerName = parameters.get(0);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
Faction myFaction = me.getFaction();
if (you.getFaction() != myFaction) {
sendMessage(you.getNameAndRelevant(me)+Conf.colorSystem+" is not a member in your faction.");
return;
}
if (you == me) {
sendMessage("The target player musn't be yourself.");
return;
}
if (you.role == Role.MODERATOR) {
// Revoke
you.role = Role.NORMAL;
myFaction.sendMessage(you.getNameAndRelevant(myFaction)+Conf.colorSystem+" is no longer moderator in your faction.");
} else {
// Give
you.role = Role.MODERATOR;
myFaction.sendMessage(you.getNameAndRelevant(myFaction)+Conf.colorSystem+" was promoted to moderator in your faction.");
}
}
}

View File

@ -0,0 +1,46 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandOpen extends FBaseCommand {
public FCommandOpen() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
permissions = "";
senderMustBePlayer = true;
helpDescription = "Switch if invitation is required to join";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
Faction myFaction = me.getFaction();
myFaction.setOpen( ! me.getFaction().getOpen());
String open = myFaction.getOpen() ? "open" : "closed";
// Inform
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" changed the faction to "+open);
for (Faction faction : Faction.getAll()) {
if (faction.id == me.factionId) {
continue;
}
faction.sendMessage(Conf.colorSystem+"The faction "+myFaction.getTag(faction)+Conf.colorSystem+" is now "+open);
}
}
}

View File

@ -0,0 +1,11 @@
package com.bukkit.mcteam.factions.commands;
import com.bukkit.mcteam.factions.struct.Relation;
public class FCommandRelationAlly extends FRelationCommand {
public void perform() {
relation(Relation.ALLY, parameters.get(0));
}
}

View File

@ -0,0 +1,11 @@
package com.bukkit.mcteam.factions.commands;
import com.bukkit.mcteam.factions.struct.Relation;
public class FCommandRelationEnemy extends FRelationCommand {
public void perform() {
relation(Relation.ENEMY, parameters.get(0));
}
}

View File

@ -0,0 +1,11 @@
package com.bukkit.mcteam.factions.commands;
import com.bukkit.mcteam.factions.struct.Relation;
public class FCommandRelationNeutral extends FRelationCommand {
public void perform() {
relation(Relation.NEUTRAL, parameters.get(0));
}
}

View File

@ -0,0 +1,117 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import java.util.Collection;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Relation;
import com.bukkit.mcteam.factions.struct.Role;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandShow extends FBaseCommand {
public FCommandShow() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
optionalParameters.add("faction tag");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Show faction information";
}
public void perform() {
Faction faction;
if (parameters.size() > 0) {
faction = findFaction(parameters.get(0), true);
} else {
faction = me.getFaction();
}
Collection<FPlayer> admins = faction.getFPlayersWhereRole(Role.ADMIN);
Collection<FPlayer> mods = faction.getFPlayersWhereRole(Role.MODERATOR);
Collection<FPlayer> normals = faction.getFPlayersWhereRole(Role.NORMAL);
sendMessage(TextUtil.titleize(faction.getTag(me)));
sendMessage(Conf.colorChrome+"Description: "+Conf.colorSystem+faction.getDescription());
if (faction.id == 0) {
return;
}
if(faction.getOpen()) {
sendMessage(Conf.colorChrome+"Joining: "+Conf.colorSystem+"no invitation is needed");
} else {
sendMessage(Conf.colorChrome+"Joining: "+Conf.colorSystem+"invitation is required");
}
sendMessage(Conf.colorChrome+"Land / Power / Maxpower: "+Conf.colorSystem+ faction.getLandRounded()+" / "+faction.getPowerRounded()+" / "+faction.getPowerMaxRounded());
String listpart;
// List relation
String allyList = Conf.colorChrome+"Allies: ";
String enemyList = Conf.colorChrome+"Enemies: ";
for (Faction otherFaction : Faction.getAll()) {
if (otherFaction == faction) {
continue;
}
listpart = otherFaction.getTag(me)+Conf.colorSystem+", ";
if (otherFaction.getRelation(faction) == Relation.ALLY) {
allyList += listpart;
} else if (otherFaction.getRelation(faction) == Relation.ENEMY) {
enemyList += listpart;
}
}
if (allyList.endsWith(", ")) {
allyList = allyList.substring(0, allyList.length()-2);
}
if (enemyList.endsWith(", ")) {
enemyList = enemyList.substring(0, enemyList.length()-2);
}
sendMessage(allyList);
sendMessage(enemyList);
// List the members...
String onlineList = Conf.colorChrome+"Members online: ";
String offlineList = Conf.colorChrome+"Members offline: ";
for (FPlayer follower : admins) {
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
if (follower.isOnline()) {
onlineList += listpart;
} else {
offlineList += listpart;
}
}
for (FPlayer follower : mods) {
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
if (follower.isOnline()) {
onlineList += listpart;
} else {
offlineList += listpart;
}
}
for (FPlayer follower : normals) {
listpart = follower.getNameAndTitle(me)+Conf.colorSystem+", ";
if (follower.isOnline()) {
onlineList += listpart;
} else {
offlineList += listpart;
}
}
if (onlineList.endsWith(", ")) {
onlineList = onlineList.substring(0, onlineList.length()-2);
}
if (offlineList.endsWith(", ")) {
offlineList = offlineList.substring(0, offlineList.length()-2);
}
sendMessage(onlineList);
sendMessage(offlineList);
}
}

View File

@ -0,0 +1,63 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandTag extends FBaseCommand {
public FCommandTag() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("faction tag");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Change the faction tag";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
String tag = parameters.get(0);
// TODO does not first test cover selfcase?
if (Faction.isTagTaken(tag) && ! TextUtil.getComparisonString(tag).equals(me.getFaction().getComparisonTag())) {
sendMessage("That tag is already taken");
return;
}
ArrayList<String> errors = new ArrayList<String>();
errors.addAll(Faction.validateTag(tag));
if (errors.size() > 0) {
sendMessage(errors);
return;
}
Faction myFaction = me.getFaction();
String oldtag = myFaction.getTag();
myFaction.setTag(tag);
// Inform
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" changed your faction tag to "+Conf.colorMember+myFaction.getTag());
for (Faction faction : Faction.getAll()) {
if (faction.id == me.factionId) {
continue;
}
faction.sendMessage(Conf.colorSystem+"The faction "+me.getRelationColor(faction)+oldtag+Conf.colorSystem+" chainged their name to "+myFaction.getTag(faction));
}
}
}

View File

@ -0,0 +1,50 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FPlayer;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.util.TextUtil;
public class FCommandTitle extends FBaseCommand {
public FCommandTitle() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("player name");
optionalParameters.add("title");
permissions = "";
senderMustBePlayer = true;
helpDescription = "Set or remove a players title";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
String playerName = parameters.get(0);
parameters.remove(0);
String title = TextUtil.implode(parameters);
FPlayer you = findFPlayer(playerName, false);
if (you == null) {
return;
}
if ( ! canIAdministerYou(me, you)) {
return;
}
you.setTitle(title);
// Inform
Faction myFaction = me.getFaction();
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" changed a title: "+you.getNameAndRelevant(myFaction));
}
}

View File

@ -0,0 +1,47 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Board;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.FLocation;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Role;
public class FCommandUnclaim extends FBaseCommand {
public FCommandUnclaim() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
permissions = "";
senderMustBePlayer = true;
helpDescription = "Unclaim the land where you are standing";
}
public void perform() {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
Faction myFaction = me.getFaction();
FLocation flocation = new FLocation(me);
Faction otherFaction = Board.getFactionAt(flocation);
if ( myFaction != otherFaction) {
sendMessage("You don't own this land.");
return;
}
Board.removeAt(flocation);
myFaction.sendMessage(me.getNameAndRelevant(myFaction)+Conf.colorSystem+" unclaimed some land.");
}
}

View File

@ -0,0 +1,24 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import com.bukkit.mcteam.factions.Factions;
public class FCommandVersion extends FBaseCommand {
public FCommandVersion() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
permissions = "";
senderMustBePlayer = false;
helpDescription = "Which version are you using?";
}
public void perform() {
sendMessage("You are running "+Factions.instance.getDescription().getFullName());
}
}

View File

@ -0,0 +1,61 @@
package com.bukkit.mcteam.factions.commands;
import java.util.ArrayList;
import org.bukkit.ChatColor;
import com.bukkit.mcteam.factions.Conf;
import com.bukkit.mcteam.factions.Faction;
import com.bukkit.mcteam.factions.struct.Relation;
import com.bukkit.mcteam.factions.struct.Role;
public class FRelationCommand extends FBaseCommand {
public FRelationCommand() {
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
requiredParameters.add("faction tag");
helpDescription = "Declare your factions relation wish to another faction";
permissions = "";
senderMustBePlayer = true;
}
public void relation(Relation whishedRelation, String otherFactionName) {
if ( ! assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR)) {
return;
}
Faction myFaction = me.getFaction();
Faction otherFaction = findFaction(otherFactionName, false);
if (otherFaction == null) {
return;
}
if (otherFaction.id == 0) {
sendMessage("Nope! You can't :) The default faction is not a real faction.");
return;
}
if (otherFaction == myFaction) {
sendMessage("Nope! You can't declare a relation to yourself :)");
return;
}
myFaction.setRelationWish(otherFaction, whishedRelation);
Relation currentRelation = myFaction.getRelation(otherFaction);
ChatColor currentRelationColor = currentRelation.getColor();
if (whishedRelation == currentRelation) {
otherFaction.sendMessage(Conf.colorSystem+"Your faction is now "+currentRelationColor+whishedRelation.toString()+Conf.colorSystem+" to "+currentRelationColor+myFaction.getTag());
myFaction.sendMessage(Conf.colorSystem+"Your faction is now "+currentRelationColor+whishedRelation.toString()+Conf.colorSystem+" to "+currentRelationColor+otherFaction.getTag());
} else {
otherFaction.sendMessage(currentRelationColor+myFaction.getTag()+Conf.colorSystem+ " wishes to be your "+whishedRelation.getColor()+whishedRelation.toString());
otherFaction.sendMessage(Conf.colorSystem+"Type "+Conf.colorCommand+Conf.aliasBase.get(0)+" "+whishedRelation+" "+myFaction.getTag()+Conf.colorSystem+" to accept.");
myFaction.sendMessage(currentRelationColor+otherFaction.getTag()+Conf.colorSystem+ " were informed that you wish to be "+whishedRelation.getColor()+whishedRelation);
}
}
}

View File

@ -1,4 +1,4 @@
package com.bukkit.mcteam.factions; package com.bukkit.mcteam.factions.entities;
import java.util.*; import java.util.*;
@ -8,7 +8,7 @@ import com.bukkit.mcteam.factions.entities.*;
import com.bukkit.mcteam.factions.struct.*; import com.bukkit.mcteam.factions.struct.*;
import com.bukkit.mcteam.factions.util.*; import com.bukkit.mcteam.factions.util.*;
public class Commands { public class CommandsOld {
public static ArrayList<ArrayList<String>> helpPages; public static ArrayList<ArrayList<String>> helpPages;
//----------------------------------------------// //----------------------------------------------//
@ -18,7 +18,6 @@ public class Commands {
static { static {
helpPages = new ArrayList<ArrayList<String>>(); helpPages = new ArrayList<ArrayList<String>>();
ArrayList<String> pageLines; ArrayList<String> pageLines;
pageLines = new ArrayList<String>(); pageLines = new ArrayList<String>();
pageLines.add(TextUtil.commandHelp(Conf.aliasHelp, "*[page]", "Display a help page")); pageLines.add(TextUtil.commandHelp(Conf.aliasHelp, "*[page]", "Display a help page"));
@ -313,7 +312,7 @@ public class Commands {
me.sendMessage(Conf.colorSystem+"Now update your faction description. Use:"); me.sendMessage(Conf.colorSystem+"Now update your faction description. Use:");
me.sendMessage(Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasDescription.get(0)+" "+"[description]"); me.sendMessage(Conf.colorCommand+Conf.aliasBase.get(0)+" "+Conf.aliasDescription.get(0)+" "+"[description]");
} }
*/
public static void tag(FPlayer me, String tag) { public static void tag(FPlayer me, String tag) {
ArrayList<String> errors = new ArrayList<String>(); ArrayList<String> errors = new ArrayList<String>();
@ -356,8 +355,7 @@ public class Commands {
int page = 1; int page = 1;
try { try {
page = Integer.parseInt(inPage); page = Integer.parseInt(inPage);
} } catch (NumberFormatException e) {
catch (NumberFormatException e) {
// wasn't an integer // wasn't an integer
} }
page -= 1; page -= 1;
@ -833,7 +831,7 @@ public class Commands {
public static void version(FPlayer me) { public static void version(FPlayer me) {
me.sendMessage(Conf.colorSystem+"You are running "+Factions.instance.getDescription().getFullName()); me.sendMessage(Conf.colorSystem+"You are running "+Factions.instance.getDescription().getFullName());
} }*/
} }

View File

@ -1,4 +1,4 @@
package com.bukkit.mcteam.factions; package com.bukkit.mcteam.factions.entities;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;

View File

@ -38,7 +38,7 @@ public class TextUtil {
return implode(list, " "); return implode(list, " ");
} }
public static String commandHelp(List<String> aliases, String param, String desc) { /*public static String commandHelp(List<String> aliases, String param, String desc) {
ArrayList<String> parts = new ArrayList<String>(); ArrayList<String> parts = new ArrayList<String>();
parts.add(Conf.colorCommand+Conf.aliasBase.get(0)); parts.add(Conf.colorCommand+Conf.aliasBase.get(0));
parts.add(TextUtil.implode(aliases, ", ")); parts.add(TextUtil.implode(aliases, ", "));
@ -50,7 +50,7 @@ public class TextUtil {
} }
//Log.debug(TextUtil.implode(parts, " ")); //Log.debug(TextUtil.implode(parts, " "));
return TextUtil.implode(parts, " "); return TextUtil.implode(parts, " ");
} }*/
public static String getMaterialName(Material material) { public static String getMaterialName(Material material) {
String ret = material.toString(); String ret = material.toString();