262 lines
6.4 KiB
Java
Raw Normal View History

2011-07-18 22:06:02 +02:00
package com.massivecraft.factions.commands;
2011-03-18 17:33:23 +01:00
import java.util.ArrayList;
import java.util.Arrays;
2011-07-30 20:17:00 -05:00
import java.util.Iterator;
2011-03-18 17:33:23 +01:00
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
2011-07-18 22:06:02 +02:00
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.TextUtil;
2011-03-18 17:33:23 +01:00
public class FBaseCommand {
public List<String> aliases;
2011-03-18 17:33:23 +01:00
public List<String> requiredParameters;
public List<String> optionalParameters;
public String helpNameAndParams;
public String helpDescription;
public CommandSender sender;
public boolean senderMustBePlayer;
public Player player;
2011-03-19 13:00:03 +01:00
public FPlayer me;
2011-03-18 17:33:23 +01:00
public List<String> parameters;
private static boolean lock = false;
2011-03-18 17:33:23 +01:00
public FBaseCommand() {
2011-03-23 17:39:56 +01:00
aliases = new ArrayList<String>();
2011-03-18 17:33:23 +01:00
requiredParameters = new ArrayList<String>();
optionalParameters = new ArrayList<String>();
2011-03-23 17:39:56 +01:00
senderMustBePlayer = true;
2011-03-18 17:33:23 +01:00
helpNameAndParams = "fail!";
helpDescription = "no description";
}
public List<String> getAliases() {
2011-03-18 17:33:23 +01:00
return aliases;
}
2011-03-23 17:39:56 +01:00
2011-03-18 17:33:23 +01:00
public void execute(CommandSender sender, List<String> parameters) {
this.sender = sender;
this.parameters = parameters;
if ( ! validateCall()) {
return;
}
if (sender instanceof Player) {
2011-03-18 17:33:23 +01:00
this.player = (Player)sender;
2011-03-19 13:00:03 +01:00
this.me = FPlayer.get(this.player);
2011-03-18 17:33:23 +01:00
}
perform();
}
public void perform() {
}
public void sendMessage(String message) {
sender.sendMessage(Conf.colorSystem+message);
}
public void sendMessage(List<String> messages) {
for(String message : messages) {
this.sendMessage(message);
}
}
public boolean validateCall() {
2011-03-23 17:39:56 +01:00
if ( this.senderMustBePlayer && ! (sender instanceof Player)) {
sendMessage("This command can only be used by ingame players.");
2011-03-18 17:33:23 +01:00
return false;
}
2011-03-23 17:39:56 +01:00
if( ! hasPermission(sender)) {
sendMessage("You lack the permissions to "+this.helpDescription.toLowerCase()+".");
2011-03-18 17:33:23 +01:00
return false;
}
// make sure player doesn't have their access to the command revoked
2011-07-30 20:17:00 -05:00
Iterator<String> iter = aliases.iterator();
while (iter.hasNext()) {
if (Factions.isCommandDisabled(sender, iter.next())) {
sendMessage("You lack the permissions to "+this.helpDescription.toLowerCase()+".");
return false;
}
2011-03-18 17:33:23 +01:00
}
if (parameters.size() < requiredParameters.size()) {
sendMessage("Usage: "+this.getUseageTemplate(false));
2011-03-18 17:33:23 +01:00
return false;
}
return true;
}
2011-03-23 17:39:56 +01:00
public boolean hasPermission(CommandSender sender) {
return Factions.hasPermParticipate(sender);
}
// -------------------------------------------- //
// Help and usage description
// -------------------------------------------- //
public String getUseageTemplate(boolean withDescription) {
String ret = "";
ret += Conf.colorCommand;
2011-03-23 17:39:56 +01:00
ret += Factions.instance.getBaseCommand()+ " " +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+"]");
}
ret += Conf.colorParameter;
ret += TextUtil.implode(parts, " ");
if (withDescription) {
ret += " "+Conf.colorSystem + this.helpDescription;
}
return ret;
}
public String getUseageTemplate() {
return getUseageTemplate(true);
}
// -------------------------------------------- //
// Assertions
// -------------------------------------------- //
public boolean assertHasFaction() {
if ( ! me.hasFaction()) {
sendMessage("You are not member of any faction.");
return false;
}
return true;
}
public boolean assertMinRole(Role role) {
2011-03-22 17:20:21 +01:00
if (me.getRole().value < role.value) {
sendMessage("You must be "+role+" to "+this.helpDescription+".");
return false;
}
return true;
}
2011-03-19 13:00:03 +01:00
// -------------------------------------------- //
// Commonly used logic
// -------------------------------------------- //
public FPlayer findFPlayer(String playerName, boolean defaultToMe) {
FPlayer fp = FPlayer.find(playerName);
if (fp == null) {
if (defaultToMe) {
return me;
}
sendMessage("The player \""+playerName+"\" could not be found");
}
return fp;
}
public FPlayer findFPlayer(String playerName) {
return findFPlayer(playerName, false);
}
public Faction findFaction(String factionName, boolean defaultToMine) {
// First we search player names
FPlayer fp = FPlayer.find(factionName);
if (fp != null) {
return fp.getFaction();
}
// Secondly we search faction names
Faction faction = Faction.findByTag(factionName);
if (faction != null) {
return faction;
}
if (defaultToMine && sender instanceof Player) {
2011-03-19 13:00:03 +01:00
return me.getFaction();
}
sendMessage(Conf.colorSystem+"No faction or player \""+factionName+"\" was found");
2011-03-19 13:00:03 +01:00
return null;
}
public Faction findFaction(String factionName) {
return findFaction(factionName, false);
}
public boolean canIAdministerYou(FPlayer i, FPlayer you) {
if ( ! i.getFaction().equals(you.getFaction())) {
i.sendMessage(you.getNameAndRelevant(i)+Conf.colorSystem+" is not in the same faction as you.");
return false;
}
2011-03-22 17:20:21 +01:00
if (i.getRole().value > you.getRole().value || i.getRole().equals(Role.ADMIN) ) {
2011-03-19 13:00:03 +01:00
return true;
}
2011-03-22 17:20:21 +01:00
if (you.getRole().equals(Role.ADMIN)) {
2011-03-19 13:00:03 +01:00
i.sendMessage(Conf.colorSystem+"Only the faction admin can do that.");
2011-03-22 17:20:21 +01:00
} else if (i.getRole().equals(Role.MODERATOR)) {
2011-03-19 13:00:03 +01:00
i.sendMessage(Conf.colorSystem+"Moderators can't control each other...");
} else {
i.sendMessage(Conf.colorSystem+"You must be a faction moderator to do that.");
}
return false;
}
public static final List<String> aliasTrue = new ArrayList<String>(Arrays.asList("true", "yes", "y", "ok", "on", "+"));
public static final List<String> aliasFalse = new ArrayList<String>(Arrays.asList("false", "no", "n", "off", "-"));
public boolean parseBool(String str) {
return aliasTrue.contains(str.toLowerCase());
}
public void setLock(boolean newLock) {
if( newLock ) {
sendMessage("Factions is now locked");
} else {
sendMessage("Factions in now unlocked");
}
lock = newLock;
}
public boolean isLocked() {
return lock;
}
public void sendLockMessage() {
me.sendMessage("Factions is locked. Please try again later");
}
2011-03-18 17:33:23 +01:00
}