Factions/src/com/massivecraft/factions/cmd/FCommand.java

449 lines
10 KiB
Java
Raw Normal View History

2011-10-09 21:57:43 +02:00
package com.massivecraft.factions.cmd;
2011-10-08 23:22:02 +02:00
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
2013-04-09 13:15:25 +02:00
import com.massivecraft.factions.ConfServer;
2011-10-08 23:22:02 +02:00
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FFlag;
import com.massivecraft.factions.FPerm;
2011-10-08 23:22:02 +02:00
import com.massivecraft.factions.FPlayer;
2013-04-09 13:22:23 +02:00
import com.massivecraft.factions.FPlayerColl;
2011-10-08 23:22:02 +02:00
import com.massivecraft.factions.Faction;
2013-04-09 12:58:39 +02:00
import com.massivecraft.factions.FactionColl;
2013-04-09 13:00:09 +02:00
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Rel;
2011-10-08 23:22:02 +02:00
import com.massivecraft.factions.zcore.MCommand;
2013-04-09 13:00:09 +02:00
public abstract class FCommand extends MCommand<Factions>
2011-10-08 23:22:02 +02:00
{
2011-10-09 21:57:43 +02:00
public boolean disableOnLock;
2011-10-08 23:22:02 +02:00
public FPlayer fme;
2011-10-09 18:35:39 +02:00
public Faction myFaction;
2013-04-10 10:00:40 +02:00
// TODO: All these are "command reqs"
2011-10-08 23:22:02 +02:00
public boolean senderMustBeMember;
2011-10-23 17:55:53 +02:00
public boolean senderMustBeOfficer;
public boolean senderMustBeLeader;
2011-10-08 23:22:02 +02:00
public boolean isMoneyCommand;
2011-10-08 23:22:02 +02:00
public FCommand()
{
super(Factions.get());
2011-10-09 21:57:43 +02:00
// Due to safety reasons it defaults to disable on lock.
disableOnLock = true;
// The money commands must be disabled if money should not be used.
isMoneyCommand = false;
2011-10-08 23:22:02 +02:00
senderMustBeMember = false;
2011-10-23 17:55:53 +02:00
senderMustBeOfficer = false;
senderMustBeLeader = false;
2011-10-08 23:22:02 +02:00
}
@Override
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain)
{
if (sender instanceof Player)
{
2013-04-09 13:22:23 +02:00
this.fme = FPlayerColl.i.get((Player)sender);
2011-10-09 18:35:39 +02:00
this.myFaction = this.fme.getFaction();
2011-10-08 23:22:02 +02:00
}
else
{
this.fme = null;
2011-10-09 18:35:39 +02:00
this.myFaction = null;
2011-10-08 23:22:02 +02:00
}
super.execute(sender, args, commandChain);
}
2011-10-09 21:57:43 +02:00
@Override
public boolean isEnabled()
{
if (p.getLocked() && this.disableOnLock)
{
2011-10-10 13:40:24 +02:00
msg("<b>Factions was locked by an admin. Please try again later.");
2011-10-09 21:57:43 +02:00
return false;
}
2013-04-09 13:15:25 +02:00
if (this.isMoneyCommand && ! ConfServer.econEnabled)
{
msg("<b>Faction economy features are disabled on this server.");
return false;
}
2013-04-09 13:15:25 +02:00
if (this.isMoneyCommand && ! ConfServer.bankEnabled)
{
msg("<b>The faction bank system is disabled on this server.");
return false;
}
2011-10-09 21:57:43 +02:00
return true;
}
2011-10-08 23:22:02 +02:00
@Override
public boolean validSenderType(CommandSender sender, boolean informSenderIfNot)
{
boolean superValid = super.validSenderType(sender, informSenderIfNot);
if ( ! superValid) return false;
2011-10-23 17:55:53 +02:00
if ( ! (this.senderMustBeMember || this.senderMustBeOfficer || this.senderMustBeLeader)) return true;
2011-10-08 23:22:02 +02:00
if ( ! (sender instanceof Player)) return false;
2013-04-09 13:22:23 +02:00
FPlayer fplayer = FPlayerColl.i.get((Player)sender);
2011-10-08 23:22:02 +02:00
if ( ! fplayer.hasFaction())
{
sender.sendMessage(p.txt.parse("<b>You are not member of any faction."));
return false;
}
2011-10-23 17:55:53 +02:00
if (this.senderMustBeOfficer && ! fplayer.getRole().isAtLeast(Rel.OFFICER))
2011-10-08 23:22:02 +02:00
{
sender.sendMessage(p.txt.parse("<b>Only faction moderators can %s.", this.getHelpShort()));
2011-10-08 23:22:02 +02:00
return false;
}
2011-10-23 17:55:53 +02:00
if (this.senderMustBeLeader && ! fplayer.getRole().isAtLeast(Rel.LEADER))
2011-10-08 23:22:02 +02:00
{
sender.sendMessage(p.txt.parse("<b>Only faction admins can %s.", this.getHelpShort()));
2011-10-08 23:22:02 +02:00
return false;
}
return true;
}
// -------------------------------------------- //
// Assertions
// -------------------------------------------- //
2013-04-10 10:00:40 +02:00
// These are not used. Remove in the future if no need for them arises.
/*
public boolean assertHasFaction()
{
if (me == null) return true;
if ( ! fme.hasFaction())
{
sendMessage("You are not member of any faction.");
return false;
}
return true;
}
public boolean assertMinRole(Rel role)
{
if (me == null) return true;
2011-10-24 11:07:06 +02:00
if (fme.getRole().isLessThan(role))
{
2011-10-10 13:40:24 +02:00
msg("<b>You <h>must be "+role+"<b> to "+this.getHelpShort()+".");
return false;
}
return true;
2013-04-10 10:00:40 +02:00
}*/
2011-10-08 23:22:02 +02:00
// -------------------------------------------- //
// Argument Readers
// -------------------------------------------- //
2013-04-10 10:00:40 +02:00
// TODO: Convert these arg-readers to MCore ArgReaders.
// FPLAYER ======================
public FPlayer strAsFPlayer(String name, FPlayer def, boolean msg)
2011-10-08 23:22:02 +02:00
{
FPlayer ret = def;
if (name != null)
{
2013-04-09 13:22:23 +02:00
FPlayer fplayer = FPlayerColl.i.get(name);
2011-10-08 23:22:02 +02:00
if (fplayer != null)
{
ret = fplayer;
}
}
if (msg && ret == null)
{
this.msg("<b>No player \"<p>%s<b>\" could be found.", name);
2011-10-08 23:22:02 +02:00
}
return ret;
}
public FPlayer argAsFPlayer(int idx, FPlayer def, boolean msg)
{
return this.strAsFPlayer(this.argAsString(idx), def, msg);
}
2011-10-08 23:22:02 +02:00
public FPlayer argAsFPlayer(int idx, FPlayer def)
{
return this.argAsFPlayer(idx, def, true);
}
public FPlayer argAsFPlayer(int idx)
{
return this.argAsFPlayer(idx, null);
}
// BEST FPLAYER MATCH ======================
public FPlayer strAsBestFPlayerMatch(String name, FPlayer def, boolean msg)
2011-10-08 23:22:02 +02:00
{
FPlayer ret = def;
if (name != null)
{
2013-04-09 13:22:23 +02:00
FPlayer fplayer = FPlayerColl.i.getBestIdMatch(name);
2011-10-08 23:22:02 +02:00
if (fplayer != null)
{
ret = fplayer;
}
}
if (msg && ret == null)
{
this.msg("<b>No player match found for \"<p>%s<b>\".", name);
2011-10-08 23:22:02 +02:00
}
return ret;
}
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def, boolean msg)
{
return this.strAsBestFPlayerMatch(this.argAsString(idx), def, msg);
}
2011-10-08 23:22:02 +02:00
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def)
{
return this.argAsBestFPlayerMatch(idx, def, true);
}
public FPlayer argAsBestFPlayerMatch(int idx)
{
return this.argAsBestFPlayerMatch(idx, null);
}
// FACTION ======================
public Faction strAsFaction(String name, Faction def, boolean msg)
2011-10-08 23:22:02 +02:00
{
Faction ret = def;
if (name != null)
{
2011-10-22 17:42:13 +02:00
Faction faction = null;
2011-10-22 17:42:13 +02:00
// First we try an exact match
if (faction == null)
{
2013-04-09 12:58:39 +02:00
faction = FactionColl.i.getByTag(name);
2011-10-22 17:42:13 +02:00
}
// Next we match faction tags
if (faction == null)
{
2013-04-09 12:58:39 +02:00
faction = FactionColl.i.getBestTagMatch(name);
2011-10-22 17:42:13 +02:00
}
// Next we match player names
if (faction == null)
2011-10-08 23:22:02 +02:00
{
2013-04-09 13:22:23 +02:00
FPlayer fplayer = FPlayerColl.i.getBestIdMatch(name);
if (fplayer != null)
{
faction = fplayer.getFaction();
}
2011-10-08 23:22:02 +02:00
}
if (faction != null)
2011-10-08 23:22:02 +02:00
{
ret = faction;
2011-10-08 23:22:02 +02:00
}
}
if (msg && ret == null)
{
this.msg("<b>The faction or player \"<p>%s<b>\" could not be found.", name);
2011-10-08 23:22:02 +02:00
}
return ret;
}
public Faction argAsFaction(int idx, Faction def, boolean msg)
{
return this.strAsFaction(this.argAsString(idx), def, msg);
}
2011-10-08 23:22:02 +02:00
public Faction argAsFaction(int idx, Faction def)
{
return this.argAsFaction(idx, def, true);
}
public Faction argAsFaction(int idx)
{
return this.argAsFaction(idx, null);
}
2011-10-23 20:50:49 +02:00
// FACTION FLAG ======================
public FFlag strAsFactionFlag(String name, FFlag def, boolean msg)
2011-10-23 20:50:49 +02:00
{
FFlag ret = def;
2011-10-23 20:50:49 +02:00
if (name != null)
{
FFlag flag = FFlag.parse(name);
2011-10-23 20:50:49 +02:00
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 FFlag argAsFactionFlag(int idx, FFlag def, boolean msg)
2011-10-23 20:50:49 +02:00
{
return this.strAsFactionFlag(this.argAsString(idx), def, msg);
}
public FFlag argAsFactionFlag(int idx, FFlag def)
2011-10-23 20:50:49 +02:00
{
return this.argAsFactionFlag(idx, def, true);
}
public FFlag argAsFactionFlag(int idx)
2011-10-23 20:50:49 +02:00
{
return this.argAsFactionFlag(idx, null);
}
// FACTION PERM ======================
2011-10-24 01:37:51 +02:00
public FPerm strAsFactionPerm(String name, FPerm def, boolean msg)
{
2011-10-24 01:37:51 +02:00
FPerm ret = def;
if (name != null)
{
2011-10-24 01:37:51 +02:00
FPerm perm = FPerm.parse(name);
if (perm != null)
{
ret = perm;
}
}
if (msg && ret == null)
{
this.msg("<b>The faction-perm \"<p>%s<b>\" could not be found.", name);
}
return ret;
}
2011-10-24 01:37:51 +02:00
public FPerm argAsFactionPerm(int idx, FPerm def, boolean msg)
{
return this.strAsFactionPerm(this.argAsString(idx), def, msg);
}
2011-10-24 01:37:51 +02:00
public FPerm argAsFactionPerm(int idx, FPerm def)
{
return this.argAsFactionPerm(idx, def, true);
}
2011-10-24 01:37:51 +02:00
public FPerm argAsFactionPerm(int idx)
{
return this.argAsFactionPerm(idx, null);
}
2012-05-09 06:29:52 +02:00
// FACTION REL ======================
public Rel strAsRel(String name, Rel def, boolean msg)
{
Rel ret = def;
if (name != null)
{
Rel perm = Rel.parse(name);
if (perm != null)
{
ret = perm;
}
}
if (msg && ret == null)
{
this.msg("<b>The role \"<p>%s<b>\" could not be found.", name);
}
return ret;
}
public Rel argAsRel(int idx, Rel def, boolean msg)
{
return this.strAsRel(this.argAsString(idx), def, msg);
}
public Rel argAsRel(int idx, Rel def)
{
return this.argAsRel(idx, def, true);
}
public Rel argAsRel(int idx)
{
return this.argAsRel(idx, null);
}
2011-10-23 20:50:49 +02:00
2011-10-08 23:22:02 +02:00
// -------------------------------------------- //
// Commonly used logic
// -------------------------------------------- //
public boolean canIAdministerYou(FPlayer i, FPlayer you)
{
if ( ! i.getFaction().equals(you.getFaction()))
{
2011-10-21 19:20:33 +02:00
i.sendMessage(p.txt.parse("%s <b>is not in the same faction as you.",you.describeTo(i, true)));
2011-10-08 23:22:02 +02:00
return false;
}
2011-10-24 11:07:06 +02:00
if (i.getRole().isMoreThan(you.getRole()) || i.getRole().equals(Rel.LEADER) )
2011-10-08 23:22:02 +02:00
{
return true;
}
if (you.getRole().equals(Rel.LEADER))
2011-10-08 23:22:02 +02:00
{
i.sendMessage(p.txt.parse("<b>Only the faction admin can do that."));
}
else if (i.getRole().equals(Rel.OFFICER))
2011-10-08 23:22:02 +02:00
{
if ( i == you )
{
return true; //Moderators can control themselves
}
else
{
i.sendMessage(p.txt.parse("<b>Moderators can't control each other..."));
}
}
else
{
i.sendMessage(p.txt.parse("<b>You must be a faction moderator to do that."));
}
return false;
}
// if economy is enabled and they're not on the bypass list, make 'em pay; returns true unless person can't afford the cost
2011-10-12 18:48:47 +02:00
public boolean payForCommand(double cost, String toDoThis, String forDoingThis)
2011-10-08 23:22:02 +02:00
{
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.hasAdminMode()) return true;
2011-10-08 23:22:02 +02:00
2013-04-09 13:15:25 +02:00
if(ConfServer.bankEnabled && ConfServer.bankFactionPaysCosts && fme.hasFaction())
return Econ.modifyMoney(myFaction, -cost, toDoThis, forDoingThis);
2011-10-12 17:25:01 +02:00
else
return Econ.modifyMoney(fme, -cost, toDoThis, forDoingThis);
}
// like above, but just make sure they can pay; returns true unless person can't afford the cost
public boolean canAffordCommand(double cost, String toDoThis)
{
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.hasAdminMode()) return true;
2013-04-09 13:15:25 +02:00
if(ConfServer.bankEnabled && ConfServer.bankFactionPaysCosts && fme.hasFaction())
return Econ.hasAtLeast(myFaction, cost, toDoThis);
2011-10-08 23:22:02 +02:00
else
return Econ.hasAtLeast(fme, cost, toDoThis);
2011-10-08 23:22:02 +02:00
}
}