No More ZCore

This commit is contained in:
Olof Larsson 2013-04-16 11:27:03 +02:00
parent e874ea60df
commit 97a2ed1fd8
26 changed files with 97 additions and 676 deletions

View File

@ -155,7 +155,7 @@ public enum FPerm
// TODO: Create better description messages like: "You must at least be officer".
boolean ret = hostFaction.getPermittedRelations(this).contains(rel);
if (rpSubject instanceof FPlayer && ret == false && ((FPlayer)rpSubject).hasAdminMode()) ret = true;
if (rpSubject instanceof FPlayer && ret == false && ((FPlayer)rpSubject).isUsingAdminMode()) ret = true;
if (!ret && informIfNot && rpSubject instanceof FPlayer)
{
@ -163,7 +163,7 @@ public enum FPerm
fplayer.msg(errorpattern, hostFaction.describeTo(fplayer, true), this.getDescription());
if (Perm.ADMIN.has(fplayer.getPlayer()))
{
fplayer.msg("<i>You can bypass by using " + Factions.get().cmdBase.cmdFactionsAdmin.getUseageTemplate(false));
fplayer.msg("<i>You can bypass by using " + Factions.get().getOuterCmdFactions().cmdFactionsAdmin.getUseageTemplate(false));
}
}
return ret;

View File

@ -123,9 +123,9 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
public Faction getAutoClaimFor() { return autoClaimFor; }
public void setAutoClaimFor(Faction faction) { this.autoClaimFor = faction; }
private transient boolean hasAdminMode = false;
public boolean hasAdminMode() { return this.hasAdminMode; }
public void setHasAdminMode(boolean val) { this.hasAdminMode = val; }
private transient boolean usingAdminMode = false;
public boolean isUsingAdminMode() { return this.usingAdminMode; }
public void setUsingAdminMode(boolean val) { this.usingAdminMode = val; }
// FIELD: loginPvpDisabled
private transient boolean loginPvpDisabled;
@ -490,7 +490,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
public void leave(boolean makePay)
{
Faction myFaction = this.getFaction();
makePay = makePay && Econ.shouldBeUsed() && ! this.hasAdminMode();
makePay = makePay && Econ.shouldBeUsed() && ! this.isUsingAdminMode();
if (myFaction == null)
{
@ -575,7 +575,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
{
error = Txt.parse("<b>Sorry, this world has land claiming disabled.");
}
else if (this.hasAdminMode())
else if (this.isUsingAdminMode())
{
return true;
}
@ -610,7 +610,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
else if
(
ConfServer.claimsMustBeConnected
&& ! this.hasAdminMode()
&& ! this.isUsingAdminMode()
&& myFaction.getLandRoundedInWorld(ps.getWorld()) > 0
&& !BoardColl.get().isConnectedPs(ps, myFaction)
&& (!ConfServer.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())
@ -655,7 +655,7 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
// TODO: Add flag no costs??
// if economy is enabled and they're not on the bypass list, make sure they can pay
boolean mustPay = Econ.shouldBeUsed() && ! this.hasAdminMode();
boolean mustPay = Econ.shouldBeUsed() && ! this.isUsingAdminMode();
double cost = 0.0;
EconomyParticipator payee = null;
if (mustPay)

View File

@ -1,9 +1,5 @@
package com.massivecraft.factions;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import com.massivecraft.factions.adapters.BoardAdapter;
import com.massivecraft.factions.adapters.BoardMapAdapter;
import com.massivecraft.factions.adapters.FFlagAdapter;
@ -26,11 +22,8 @@ import com.massivecraft.factions.listeners.FactionsPlayerListener;
import com.massivecraft.factions.util.AutoLeaveTask;
import com.massivecraft.factions.util.EconLandRewardTask;
import com.massivecraft.factions.util.LazyLocation;
import com.massivecraft.factions.zcore.MPlugin;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import com.massivecraft.mcore.MPlugin;
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
@ -48,6 +41,10 @@ public class Factions extends MPlugin
// FIELDS
// -------------------------------------------- //
// Commands
private CmdFactions outerCmdFactions;
public CmdFactions getOuterCmdFactions() { return this.outerCmdFactions; }
// Listeners
public FactionsPlayerListener playerListener;
public FactionsChatListener chatListener;
@ -59,10 +56,6 @@ public class Factions extends MPlugin
private Integer AutoLeaveTask = null;
private Integer econLandRewardTaskID = null;
// Commands
public CmdFactions cmdBase;
public CmdFactionsAutoHelp cmdAutoHelp;
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@ -75,14 +68,14 @@ public class Factions extends MPlugin
// Load Server Config
ConfServer.get().load();
// Load Conf from disk
// Initialize Collections
FPlayerColl.get().init();
FactionColl.get().init();
BoardColl.get().init();
// Add Base Commands
this.cmdAutoHelp = new CmdFactionsAutoHelp();
this.cmdBase = new CmdFactions();
// Commands
this.outerCmdFactions = new CmdFactions();
this.outerCmdFactions.register(this);
EssentialsFeatures.setup();
SpoutFeatures.setup();
@ -125,17 +118,15 @@ public class Factions extends MPlugin
@Override
public GsonBuilder getGsonBuilder()
{
return new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
return super.getGsonBuilder()
.registerTypeAdapter(LazyLocation.class, new LazyLocationAdapter())
.registerTypeAdapter(TerritoryAccess.class, TerritoryAccessAdapter.get())
.registerTypeAdapter(Board.class, BoardAdapter.get())
.registerTypeAdapter(Board.MAP_TYPE, BoardMapAdapter.get())
.registerTypeAdapter(Rel.class, new RelAdapter())
.registerTypeAdapter(FPerm.class, new FPermAdapter())
.registerTypeAdapter(FFlag.class, new FFlagAdapter());
.registerTypeAdapter(FFlag.class, new FFlagAdapter())
;
}
@Override
@ -187,13 +178,6 @@ public class Factions extends MPlugin
}
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] split)
{
this.cmdBase.execute(sender, new ArrayList<String>(Arrays.asList(split)));
return true;
}
// -------------------------------------------- //
// Functions for other plugins to hook into
// -------------------------------------------- //

View File

@ -2,6 +2,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.mcore.cmd.arg.ARBoolean;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
public class CmdFactionsAdmin extends FCommand
@ -18,9 +19,12 @@ public class CmdFactionsAdmin extends FCommand
@Override
public void perform()
{
fme.setHasAdminMode(this.argAsBool(0, ! fme.hasAdminMode()));
Boolean target = this.arg(0, ARBoolean.get(), !fme.isUsingAdminMode());
if (target == null) return;
if ( fme.hasAdminMode())
fme.setUsingAdminMode(target);
if ( fme.isUsingAdminMode())
{
fme.msg("<i>You have enabled admin bypass mode.");
Factions.get().log(fme.getName() + " has ENABLED admin bypass mode.");

View File

@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPerm;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
@ -21,7 +22,7 @@ public class CmdFactionsAutoClaim extends FCommand
@Override
public void perform()
{
Faction forFaction = this.argAsFaction(0, myFaction);
Faction forFaction = this.arg(0, ARFaction.get(), myFaction);
if (forFaction == null || forFaction == fme.getAutoClaimFor())
{
fme.setAutoClaimFor(null);

View File

@ -28,7 +28,7 @@ public class CmdFactionsClaim extends FCommand
@Override
public void perform()
{
Faction forFaction = this.arg(0, ARFaction.get());
final Faction forFaction = this.arg(0, ARFaction.get());
if (forFaction == null) return;
Integer radius = this.arg(1, ARInteger.get(), 1);

View File

@ -15,7 +15,6 @@ import com.massivecraft.factions.Rel;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.event.FactionCreateEvent;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
public class CmdFactionsCreate extends FCommand
{
@ -91,7 +90,7 @@ public class CmdFactionsCreate extends FCommand
follower.msg("%s<i> created a new faction %s", fme.describeTo(follower, true), faction.getTag(follower));
}
msg("<i>You should now: %s", p.cmdBase.cmdFactionsDescription.getUseageTemplate());
msg("<i>You should now: %s", Factions.get().getOuterCmdFactions().cmdFactionsDescription.getUseageTemplate());
if (ConfServer.logFactionCreate)
Factions.get().log(fme.getName()+" created a new faction: "+tag);

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFPlayer;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
@ -31,7 +32,7 @@ public class CmdFactionsDeinvite extends FCommand
if (you.getFaction() == myFaction)
{
msg("%s<i> is already a member of %s", you.getName(), myFaction.getTag());
msg("<i>You might want to: %s", p.cmdBase.cmdFactionsKick.getUseageTemplate(false));
msg("<i>You might want to: %s", Factions.get().getOuterCmdFactions().cmdFactionsKick.getUseageTemplate(false));
return;
}

View File

@ -3,7 +3,9 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FFlag;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFFlag;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.mcore.cmd.arg.ARBoolean;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
import com.massivecraft.mcore.util.Txt;
@ -37,8 +39,9 @@ public class CmdFactionsFlag extends FCommand
return;
}
FFlag flag = this.argAsFactionFlag(1);
FFlag flag = this.arg(1, ARFFlag.get());
if (flag == null) return;
if ( ! this.argIsSet(2))
{
msg(Txt.titleize("Flag for " + faction.describeTo(fme, true)));
@ -46,7 +49,7 @@ public class CmdFactionsFlag extends FCommand
return;
}
Boolean targetValue = this.argAsBool(2);
Boolean targetValue = this.arg(2, ARBoolean.get());
if (targetValue == null) return;
// Do the sender have the right to change flags?

View File

@ -13,6 +13,7 @@ import com.massivecraft.factions.FFlag;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayerColl;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.Rel;
import com.massivecraft.factions.integration.EssentialsFeatures;
@ -53,7 +54,7 @@ public class CmdFactionsHome extends FCommand
if ( ! myFaction.hasHome())
{
fme.msg("<b>Your faction does not have a home. " + (fme.getRole().isLessThan(Rel.OFFICER) ? "<i> Ask your leader to:" : "<i>You should:"));
fme.sendMessage(p.cmdBase.cmdFactionsSethome.getUseageTemplate());
fme.sendMessage(Factions.get().getOuterCmdFactions().cmdFactionsSethome.getUseageTemplate());
return;
}

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.ConfServer;
import com.massivecraft.factions.FPerm;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFPlayer;
import com.massivecraft.factions.cmd.arg.ARFaction;
@ -33,7 +34,7 @@ public class CmdFactionsInvite extends FCommand
if (you.getFaction() == myFaction)
{
msg("%s<i> is already a member of %s", you.getName(), myFaction.getTag());
msg("<i>You might want to: " + p.cmdBase.cmdFactionsKick.getUseageTemplate(false));
msg("<i>You might want to: " + Factions.get().getOuterCmdFactions().cmdFactionsKick.getUseageTemplate(false));
return;
}

View File

@ -66,7 +66,7 @@ public class CmdFactionsJoin extends FCommand
return;
}
if( ! (faction.isOpen() || faction.isInvited(fplayer) || fme.hasAdminMode() || Perm.JOIN_ANY.has(sender, false)))
if( ! (faction.isOpen() || faction.isInvited(fplayer) || fme.isUsingAdminMode() || Perm.JOIN_ANY.has(sender, false)))
{
msg("<i>This faction requires invitation.");
if (samePlayer)

View File

@ -34,11 +34,11 @@ public class CmdFactionsKick extends FCommand
if (fme == you)
{
msg("<b>You cannot kick yourself.");
msg("<i>You might want to: %s", p.cmdBase.cmdFactionsLeave.getUseageTemplate(false));
msg("<i>You might want to: %s", Factions.get().getOuterCmdFactions().cmdFactionsLeave.getUseageTemplate(false));
return;
}
if (you.getRole() == Rel.LEADER && !(this.senderIsConsole || fme.hasAdminMode()))
if (you.getRole() == Rel.LEADER && !(this.senderIsConsole || fme.isUsingAdminMode()))
{
msg("<b>The leader can not be kicked.");
return;

View File

@ -38,7 +38,7 @@ public class CmdFactionsLeader extends FCommand
FPlayer targetFactionCurrentLeader = targetFaction.getFPlayerLeader();
// We now have fplayer and the target faction
if (this.senderIsConsole || fme.hasAdminMode() || Perm.LEADER_ANY.has(sender, false))
if (this.senderIsConsole || fme.isUsingAdminMode() || Perm.LEADER_ANY.has(sender, false))
{
// Do whatever you wish
}

View File

@ -3,6 +3,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.BoardColl;
import com.massivecraft.factions.ConfServer;
import com.massivecraft.factions.Perm;
import com.massivecraft.mcore.cmd.arg.ARBoolean;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
import com.massivecraft.mcore.cmd.req.ReqIsPlayer;
import com.massivecraft.mcore.ps.PS;
@ -23,9 +24,16 @@ public class CmdFactionsMap extends FCommand
@Override
public void perform()
{
if (this.argIsSet(0))
if (!this.argIsSet(0))
{
if (this.argAsBool(0, ! fme.isMapAutoUpdating()))
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(ConfServer.econCostMap, "to show the map", "for showing the map")) return;
showMap();
return;
}
if (this.arg(0, ARBoolean.get(), !fme.isMapAutoUpdating()))
{
// Turn on
@ -45,14 +53,6 @@ public class CmdFactionsMap extends FCommand
msg("<i>Map auto update <red>DISABLED.");
}
}
else
{
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(ConfServer.econCostMap, "to show the map", "for showing the map")) return;
showMap();
}
}
public void showMap()
{

View File

@ -4,7 +4,10 @@ import com.massivecraft.factions.FPerm;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.Rel;
import com.massivecraft.factions.cmd.arg.ARFPerm;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.factions.cmd.arg.ARRel;
import com.massivecraft.mcore.cmd.arg.ARBoolean;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
import com.massivecraft.mcore.util.Txt;
@ -40,8 +43,9 @@ public class CmdFactionsPerm extends FCommand
return;
}
FPerm perm = this.argAsFactionPerm(1);
FPerm perm = this.arg(1, ARFPerm.get());
if (perm == null) return;
if ( ! this.argIsSet(2))
{
msg(Txt.titleize("Perm for " + faction.describeTo(fme, true)));
@ -53,10 +57,10 @@ public class CmdFactionsPerm extends FCommand
// Do the sender have the right to change perms for this faction?
if ( ! FPerm.PERMS.has(sender, faction, true)) return;
Rel rel = this.argAsRel(2);
Rel rel = this.arg(2, ARRel.get());
if (rel == null) return;
Boolean val = this.argAsBool(3, null);
Boolean val = this.arg(3, ARBoolean.get(), null);
if (val == null) return;
// Do the change

View File

@ -4,6 +4,9 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFPlayer;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.mcore.cmd.arg.ARDouble;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
public class CmdFactionsPowerBoost extends FCommand
@ -35,32 +38,29 @@ public class CmdFactionsPowerBoost extends FCommand
return;
}
Double targetPower = this.argAsDouble(2);
if (targetPower == null)
{
msg("<b>You must specify a valid numeric value for the power bonus/penalty amount.");
return;
}
Double targetPower = this.arg(2, ARDouble.get());
if (targetPower == null) return;
String target;
if (doPlayer)
{
FPlayer targetPlayer = this.argAsBestFPlayerMatch(1);
FPlayer targetPlayer = this.arg(1, ARFPlayer.getStartAny());
if (targetPlayer == null) return;
targetPlayer.setPowerBoost(targetPower);
target = "Player \""+targetPlayer.getName()+"\"";
}
else
{
Faction targetFaction = this.argAsFaction(1);
Faction targetFaction = this.arg(1, ARFaction.get());
if (targetFaction == null) return;
targetFaction.setPowerBoost(targetPower);
target = "Faction \""+targetFaction.getTag()+"\"";
}
msg("<i>"+target+" now has a power bonus/penalty of "+targetPower+" to min and max power levels.");
if (!senderIsConsole)
Factions.get().log(fme.getName()+" has set the power bonus/penalty for "+target+" to "+targetPower+".");
}
}

View File

@ -4,6 +4,7 @@ import com.massivecraft.factions.BoardColl;
import com.massivecraft.factions.ConfServer;
import com.massivecraft.factions.FPerm;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.Perm;
import com.massivecraft.factions.cmd.arg.ARFaction;
import com.massivecraft.mcore.cmd.req.ReqHasPerm;
@ -40,7 +41,7 @@ public class CmdFactionsSethome extends FCommand
// Can the player set the faction home HERE?
if
(
! fme.hasAdminMode()
! fme.isUsingAdminMode()
&&
ConfServer.homesMustBeInClaimedTerritory
&&
@ -57,7 +58,7 @@ public class CmdFactionsSethome extends FCommand
faction.setHome(me.getLocation());
faction.msg("%s<i> set the home for your faction. You can now use:", fme.describeTo(myFaction, true));
faction.sendMessage(p.cmdBase.cmdFactionsHome.getUseageTemplate());
faction.sendMessage(Factions.get().getOuterCmdFactions().cmdFactionsHome.getUseageTemplate());
if (faction != myFaction)
{
fme.msg("<b>You have set the home for the "+faction.getTag(fme)+"<i> faction.");

View File

@ -64,7 +64,7 @@ public abstract class FCommand extends MCommand
// if economy is enabled and they're not on the bypass list, make 'em pay; returns true unless person can't afford the cost
public boolean payForCommand(double cost, String toDoThis, String forDoingThis)
{
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.hasAdminMode()) return true;
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isUsingAdminMode()) return true;
if(ConfServer.bankEnabled && ConfServer.bankFactionPaysCosts && fme.hasFaction())
return Econ.modifyMoney(myFaction, -cost, toDoThis, forDoingThis);
@ -75,7 +75,7 @@ public abstract class FCommand extends MCommand
// 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;
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isUsingAdminMode()) return true;
if(ConfServer.bankEnabled && ConfServer.bankFactionPaysCosts && fme.hasFaction())
return Econ.hasAtLeast(myFaction, cost, toDoThis);

View File

@ -90,7 +90,7 @@ public class Econ
if (fI == null) return true;
// Bypassing players can do any kind of transaction
if (i instanceof FPlayer && ((FPlayer)i).hasAdminMode()) return true;
if (i instanceof FPlayer && ((FPlayer)i).isUsingAdminMode()) return true;
// You can deposit to anywhere you feel like. It's your loss if you can't withdraw it again.
if (i == you) return true;

View File

@ -88,7 +88,7 @@ public class FactionsBlockListener implements Listener
if (ConfServer.playersWhoBypassAllProtection.contains(name)) return true;
FPlayer me = FPlayer.get(name);
if (me.hasAdminMode()) return true;
if (me.isUsingAdminMode()) return true;
PS ps = PS.valueOf(location);
Faction factionHere = BoardColl.get().getFactionAt(ps);

View File

@ -205,7 +205,7 @@ public class FactionsPlayerListener implements Listener
if (ConfServer.playersWhoBypassAllProtection.contains(name)) return true;
FPlayer me = FPlayerColl.get().get(name);
if (me.hasAdminMode()) return true;
if (me.isUsingAdminMode()) return true;
if (Const.MATERIALS_EDIT_TOOLS.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
return true;
}
@ -215,7 +215,7 @@ public class FactionsPlayerListener implements Listener
if (ConfServer.playersWhoBypassAllProtection.contains(name)) return true;
FPlayer me = FPlayerColl.get().get(name);
if (me.hasAdminMode()) return true;
if (me.isUsingAdminMode()) return true;
Location loc = block.getLocation();
Material material = block.getType();
@ -293,7 +293,7 @@ public class FactionsPlayerListener implements Listener
FPlayer me = FPlayerColl.get().get(player);
// With adminmode no commands are denied.
if (me.hasAdminMode()) return;
if (me.isUsingAdminMode()) return;
// The full command is converted to lowercase and does include the slash in the front
String fullCmd = event.getMessage().toLowerCase();

View File

@ -1,9 +0,0 @@
package com.massivecraft.factions.zcore;
public enum CommandVisibility
{
VISIBLE, // Visible commands are visible to anyone. Even those who don't have permission to use it or is of invalid sender type.
SECRET, // Secret commands are visible only to those who can use the command. These commands are usually some kind of admin commands.
INVISIBLE, // Invisible commands are invisible to everyone, even those who can use the command.
;
}

View File

@ -1,11 +0,0 @@
package com.massivecraft.factions.zcore;
public class Lang
{
public static final String permForbidden = "<b>You don't have permission to %s.";
public static final String permDoThat = "do that";
public static final String commandSenderMustBePlayer = "<b>This command can only be used by ingame players.";
public static final String commandToFewArgs = "<b>Too few arguments. <i>Use like this:";
public static final String commandToManyArgs = "<b>Strange argument \"<p>%s<b>\". <i>Use the command like this:";
}

View File

@ -1,469 +0,0 @@
package com.massivecraft.factions.zcore;
import java.util.*;
import java.util.Map.Entry;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.massivecraft.factions.zcore.MCommand;
import com.massivecraft.factions.zcore.MPlugin;
import com.massivecraft.mcore.util.PermUtil;
import com.massivecraft.mcore.util.Txt;
public abstract class MCommand<T extends MPlugin>
{
public T p;
// The sub-commands to this command
public List<MCommand<?>> subCommands;
public void addSubCommand(MCommand<?> subCommand)
{
subCommand.commandChain.addAll(this.commandChain);
subCommand.commandChain.add(this);
this.subCommands.add(subCommand);
}
// The different names this commands will react to
public List<String> aliases;
// Information on the args
public List<String> requiredArgs;
public LinkedHashMap<String, String> optionalArgs;
public boolean errorOnToManyArgs = true;
// FIELD: Help Short
// This field may be left blank and will in such case be loaded from the permissions node instead.
// Thus make sure the permissions node description is an action description like "eat hamburgers" or "do admin stuff".
private String helpShort;
public void setHelpShort(String val) { this.helpShort = val; }
public String getHelpShort()
{
if (this.helpShort == null)
{
String pdesc = PermUtil.getDescription(permission);
if (pdesc != null)
{
return pdesc;
}
return "*info unavailable*";
}
return this.helpShort;
}
public List<String> helpLong;
public CommandVisibility visibility;
// Some information on permissions
public boolean senderMustBePlayer;
public String permission;
// Information available on execution of the command
public CommandSender sender; // Will always be set
public Player me; // Will only be set when the sender is a player
public boolean senderIsConsole;
public List<String> args; // Will contain the arguments, or and empty list if there are none.
public List<MCommand<?>> commandChain = new ArrayList<MCommand<?>>(); // The command chain used to execute this command
public MCommand(T p)
{
this.p = p;
this.permission = null;
this.subCommands = new ArrayList<MCommand<?>>();
this.aliases = new ArrayList<String>();
this.requiredArgs = new ArrayList<String>();
this.optionalArgs = new LinkedHashMap<String, String>();
this.helpShort = null;
this.helpLong = new ArrayList<String>();
this.visibility = CommandVisibility.VISIBLE;
}
// The commandChain is a list of the parent command chain used to get to this command.
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain)
{
// Set the execution-time specific variables
this.sender = sender;
if (sender instanceof Player)
{
this.me = (Player)sender;
this.senderIsConsole = false;
}
else
{
this.me = null;
this.senderIsConsole = true;
}
this.args = args;
this.commandChain = commandChain;
// Is there a matching sub command?
if (args.size() > 0 )
{
for (MCommand<?> subCommand: this.subCommands)
{
if (subCommand.aliases.contains(args.get(0)))
{
args.remove(0);
commandChain.add(this);
subCommand.execute(sender, args, commandChain);
return;
}
}
}
if ( ! validCall(this.sender, this.args)) return;
if ( ! this.isEnabled()) return;
perform();
}
public void execute(CommandSender sender, List<String> args)
{
execute(sender, args, new ArrayList<MCommand<?>>());
}
// This is where the command action is performed.
public abstract void perform();
// -------------------------------------------- //
// Call Validation
// -------------------------------------------- //
/**
* In this method we validate that all prerequisites to perform this command has been met.
*/
// TODO: There should be a boolean for silence
public boolean validCall(CommandSender sender, List<String> args)
{
if ( ! validSenderType(sender, true))
{
return false;
}
if ( ! validSenderPermissions(sender, true))
{
return false;
}
if ( ! validArgs(args, sender))
{
return false;
}
return true;
}
public boolean isEnabled()
{
return true;
}
public boolean validSenderType(CommandSender sender, boolean informSenderIfNot)
{
if (this.senderMustBePlayer && ! (sender instanceof Player))
{
if (informSenderIfNot)
{
msg(Lang.commandSenderMustBePlayer);
}
return false;
}
return true;
}
public boolean validSenderPermissions(CommandSender sender, boolean informSenderIfNot)
{
if (this.permission == null) return true;
return PermUtil.has(sender, this.permission, informSenderIfNot);
}
public boolean validArgs(List<String> args, CommandSender sender)
{
if (args.size() < this.requiredArgs.size())
{
if (sender != null)
{
msg(Lang.commandToFewArgs);
sender.sendMessage(this.getUseageTemplate());
}
return false;
}
if (args.size() > this.requiredArgs.size() + this.optionalArgs.size() && this.errorOnToManyArgs)
{
if (sender != null)
{
// Get the to many string slice
List<String> theToMany = args.subList(this.requiredArgs.size() + this.optionalArgs.size(), args.size());
msg(Lang.commandToManyArgs, Txt.implode(theToMany, " "));
sender.sendMessage(this.getUseageTemplate());
}
return false;
}
return true;
}
public boolean validArgs(List<String> args)
{
return this.validArgs(args, null);
}
// -------------------------------------------- //
// Help and Usage information
// -------------------------------------------- //
public String getUseageTemplate(List<MCommand<?>> commandChain, boolean addShortHelp)
{
StringBuilder ret = new StringBuilder();
ret.append(Txt.parse("<c>"));
ret.append('/');
for (MCommand<?> mc : commandChain)
{
ret.append(Txt.implode(mc.aliases, ","));
ret.append(' ');
}
ret.append(Txt.implode(this.aliases, ","));
List<String> args = new ArrayList<String>();
for (String requiredArg : this.requiredArgs)
{
args.add("<"+requiredArg+">");
}
for (Entry<String, String> optionalArg : this.optionalArgs.entrySet())
{
String val = optionalArg.getValue();
if (val == null)
{
val = "";
}
else
{
val = "="+val;
}
args.add("["+optionalArg.getKey()+val+"]");
}
if (args.size() > 0)
{
ret.append(Txt.parse("<p> "));
ret.append(Txt.implode(args, " "));
}
if (addShortHelp)
{
ret.append(Txt.parse(" <i>"));
ret.append(this.getHelpShort());
}
return ret.toString();
}
public String getUseageTemplate(boolean addShortHelp)
{
return getUseageTemplate(this.commandChain, addShortHelp);
}
public String getUseageTemplate()
{
return getUseageTemplate(false);
}
// -------------------------------------------- //
// Message Sending Helpers
// -------------------------------------------- //
public void msg(String str, Object... args)
{
sender.sendMessage(Txt.parse(str, args));
}
public void sendMessage(String msg)
{
sender.sendMessage(msg);
}
public void sendMessage(List<String> msgs)
{
for(String msg : msgs)
{
this.sendMessage(msg);
}
}
// -------------------------------------------- //
// Argument Readers
// -------------------------------------------- //
// Is set? ======================
public boolean argIsSet(int idx)
{
if (this.args.size() < idx+1)
{
return false;
}
return true;
}
// STRING ======================
public String argAsString(int idx, String def)
{
if (this.args.size() < idx+1)
{
return def;
}
return this.args.get(idx);
}
public String argAsString(int idx)
{
return this.argAsString(idx, null);
}
// INT ======================
public Integer strAsInt(String str, Integer def)
{
if (str == null) return def;
try
{
Integer ret = Integer.parseInt(str);
return ret;
}
catch (Exception e)
{
return def;
}
}
public Integer argAsInt(int idx, Integer def)
{
return strAsInt(this.argAsString(idx), def);
}
public Integer argAsInt(int idx)
{
return this.argAsInt(idx, null);
}
// Double ======================
public Double strAsDouble(String str, Double def)
{
if (str == null) return def;
try
{
Double ret = Double.parseDouble(str);
return ret;
}
catch (Exception e)
{
return def;
}
}
public Double argAsDouble(int idx, Double def)
{
return strAsDouble(this.argAsString(idx), def);
}
public Double argAsDouble(int idx)
{
return this.argAsDouble(idx, null);
}
// TODO: Go through the str conversion for the other arg-readers as well.
// Boolean ======================
public Boolean strAsBool(String str)
{
str = str.toLowerCase();
if (str.startsWith("y") || str.startsWith("t") || str.startsWith("on") || str.startsWith("+") || str.startsWith("1"))
{
return true;
}
return false;
}
public Boolean argAsBool(int idx, Boolean def)
{
String str = this.argAsString(idx);
if (str == null) return def;
return strAsBool(str);
}
public Boolean argAsBool(int idx)
{
return this.argAsBool(idx, false);
}
// PLAYER ======================
public Player strAsPlayer(String name, Player def, boolean msg)
{
Player ret = def;
if (name != null)
{
Player player = Bukkit.getServer().getPlayer(name);
if (player != null)
{
ret = player;
}
}
if (msg && ret == null)
{
this.msg("<b>No player \"<p>%s<b>\" could not be found.", name);
}
return ret;
}
public Player argAsPlayer(int idx, Player def, boolean msg)
{
return this.strAsPlayer(this.argAsString(idx), def, msg);
}
public Player argAsPlayer(int idx, Player def)
{
return this.argAsPlayer(idx, def, true);
}
public Player argAsPlayer(int idx)
{
return this.argAsPlayer(idx, null);
}
// BEST PLAYER MATCH ======================
public Player strAsBestPlayerMatch(String name, Player def, boolean msg)
{
Player ret = def;
if (name != null)
{
List<Player> players = Bukkit.getServer().matchPlayer(name);
if (players.size() > 0)
{
ret = players.get(0);
}
}
if (msg && ret == null)
{
this.msg("<b>No player match found for \"<p>%s<b>\".", name);
}
return ret;
}
public Player argAsBestPlayerMatch(int idx, Player def, boolean msg)
{
return this.strAsBestPlayerMatch(this.argAsString(idx), def, msg);
}
public Player argAsBestPlayerMatch(int idx, Player def)
{
return this.argAsBestPlayerMatch(idx, def, true);
}
public Player argAsBestPlayerMatch(int idx)
{
return this.argAsPlayer(idx, null);
}
}

View File

@ -1,89 +0,0 @@
package com.massivecraft.factions.zcore;
import java.lang.reflect.Modifier;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import com.massivecraft.mcore.util.Txt;
import com.massivecraft.mcore.xlib.gson.Gson;
import com.massivecraft.mcore.xlib.gson.GsonBuilder;
public abstract class MPlugin extends JavaPlugin
{
// Persist related
public Gson gson;
// -------------------------------------------- //
// ENABLE
// -------------------------------------------- //
private long timeEnableStart;
public boolean preEnable()
{
log("=== ENABLE START ===");
timeEnableStart = System.currentTimeMillis();
// Ensure basefolder exists!
this.getDataFolder().mkdirs();
this.gson = this.getGsonBuilder().create();
return true;
}
public void postEnable()
{
log("=== ENABLE DONE (Took "+(System.currentTimeMillis()-timeEnableStart)+"ms) ===");
}
public void onDisable()
{
log("Disabled");
}
public void suicide()
{
log("Now I suicide!");
this.getServer().getPluginManager().disablePlugin(this);
}
// -------------------------------------------- //
// Some inits...
// You are supposed to override these in the plugin if you aren't satisfied with the defaults
// The goal is that you always will be satisfied though.
// -------------------------------------------- //
public GsonBuilder getGsonBuilder()
{
return new GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.serializeNulls()
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE);
}
// -------------------------------------------- //
// LOGGING
// -------------------------------------------- //
public void log(Object msg)
{
log(Level.INFO, msg);
}
public void log(String str, Object... args)
{
log(Level.INFO, Txt.parse(str, args));
}
public void log(Level level, String str, Object... args)
{
log(level, Txt.parse(str, args));
}
public void log(Level level, Object msg)
{
Bukkit.getLogger().log(level, "["+this.getDescription().getFullName()+"] "+msg);
}
}