From 5c2752129d9561f1af5aea42a4982c78c0da4ca6 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Sat, 2 Mar 2013 16:29:20 +0100 Subject: [PATCH] Improving command requirement Req --- src/com/massivecraft/mcore/cmd/MCommand.java | 18 ++++----- .../mcore/cmd/req/{IReq.java => Req.java} | 8 ++-- .../mcore/cmd/req/ReqAbstract.java | 22 +++++++++++ .../mcore/cmd/req/ReqHasPerm.java | 37 +++++++++++-------- .../mcore/cmd/req/ReqIsPlayer.java | 30 +++++++++------ 5 files changed, 75 insertions(+), 40 deletions(-) rename src/com/massivecraft/mcore/cmd/req/{IReq.java => Req.java} (55%) create mode 100644 src/com/massivecraft/mcore/cmd/req/ReqAbstract.java diff --git a/src/com/massivecraft/mcore/cmd/MCommand.java b/src/com/massivecraft/mcore/cmd/MCommand.java index be658656..38fc74e7 100644 --- a/src/com/massivecraft/mcore/cmd/MCommand.java +++ b/src/com/massivecraft/mcore/cmd/MCommand.java @@ -13,7 +13,7 @@ import com.massivecraft.mcore.MCore; import com.massivecraft.mcore.MPlugin; import com.massivecraft.mcore.cmd.arg.ArgReader; import com.massivecraft.mcore.cmd.arg.ArgResult; -import com.massivecraft.mcore.cmd.req.IReq; +import com.massivecraft.mcore.cmd.req.Req; import com.massivecraft.mcore.cmd.req.ReqHasPerm; import com.massivecraft.mcore.mixin.Mixin; import com.massivecraft.mcore.util.BukkitCommandUtil; @@ -72,11 +72,11 @@ public abstract class MCommand // FIELD: requirements // All these requirements must be met for the command to be executable; - protected List requirements; - public List getRequirements() { return this.requirements; } - public void getRequirements(List requirements) { this.requirements = requirements; } + protected List requirements; + public List getRequirements() { return this.requirements; } + public void getRequirements(List requirements) { this.requirements = requirements; } - public void addRequirements(IReq... requirements) { this.requirements.addAll(Arrays.asList(requirements)); } + public void addRequirements(Req... requirements) { this.requirements.addAll(Arrays.asList(requirements)); } // FIELD: desc // This field may be left blank and will in such case be loaded from the permissions node instead. @@ -110,7 +110,7 @@ public abstract class MCommand { if (this.descPermission != null) return this.descPermission; // Otherwise we try to find one. - for (IReq req : this.requirements) + for (Req req : this.requirements) { if ( ! (req instanceof ReqHasPerm)) continue; return ((ReqHasPerm)req).getPerm(); @@ -211,7 +211,7 @@ public abstract class MCommand this.requiredArgs = new ArrayList(); this.optionalArgs = new LinkedHashMap(); - this.requirements = new ArrayList(); + this.requirements = new ArrayList(); this.errorOnToManyArgs = true; @@ -300,9 +300,9 @@ public abstract class MCommand public boolean requirementsAreMet(CommandSender sender, boolean informSenderIfNot) { - for (IReq req : this.getRequirements()) + for (Req req : this.getRequirements()) { - if ( ! req.test(sender, this)) + if ( ! req.apply(sender, this)) { if (informSenderIfNot) { diff --git a/src/com/massivecraft/mcore/cmd/req/IReq.java b/src/com/massivecraft/mcore/cmd/req/Req.java similarity index 55% rename from src/com/massivecraft/mcore/cmd/req/IReq.java rename to src/com/massivecraft/mcore/cmd/req/Req.java index 7caf1661..85e34b31 100644 --- a/src/com/massivecraft/mcore/cmd/req/IReq.java +++ b/src/com/massivecraft/mcore/cmd/req/Req.java @@ -2,13 +2,15 @@ package com.massivecraft.mcore.cmd.req; import org.bukkit.command.CommandSender; +import com.massivecraft.mcore.Predictate; import com.massivecraft.mcore.cmd.MCommand; -public interface IReq +public interface Req extends Predictate { - // This just tests wether the requirement is met or not. - public boolean test(CommandSender sender, MCommand command); + public boolean apply(CommandSender sender, MCommand command); // This just composes the error message and does NOT test the requirement at all. + + public String createErrorMessage(CommandSender sender); public String createErrorMessage(CommandSender sender, MCommand command); } diff --git a/src/com/massivecraft/mcore/cmd/req/ReqAbstract.java b/src/com/massivecraft/mcore/cmd/req/ReqAbstract.java new file mode 100644 index 00000000..21c4de41 --- /dev/null +++ b/src/com/massivecraft/mcore/cmd/req/ReqAbstract.java @@ -0,0 +1,22 @@ +package com.massivecraft.mcore.cmd.req; + +import java.io.Serializable; + +import org.bukkit.command.CommandSender; + +public abstract class ReqAbstract implements Req, Serializable +{ + private static final long serialVersionUID = 1L; + + @Override + public boolean apply(CommandSender sender) + { + return this.apply(sender, null); + } + + @Override + public String createErrorMessage(CommandSender sender) + { + return this.createErrorMessage(sender, null); + } +} diff --git a/src/com/massivecraft/mcore/cmd/req/ReqHasPerm.java b/src/com/massivecraft/mcore/cmd/req/ReqHasPerm.java index bc374094..d443c50c 100644 --- a/src/com/massivecraft/mcore/cmd/req/ReqHasPerm.java +++ b/src/com/massivecraft/mcore/cmd/req/ReqHasPerm.java @@ -5,32 +5,37 @@ import org.bukkit.command.CommandSender; import com.massivecraft.mcore.cmd.MCommand; import com.massivecraft.mcore.util.PermUtil; -public class ReqHasPerm implements IReq +public class ReqHasPerm extends ReqAbstract { - private String perm; - public String getPerm() { return this.perm; } - public void setPerm(String perm) { this.perm = perm; } + private static final long serialVersionUID = 1L; - public ReqHasPerm(String perm) - { - this.perm = perm; - } + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static ReqHasPerm get(String perm) { return new ReqHasPerm(perm); } + public ReqHasPerm(String perm) { this.perm = perm; } + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private final String perm; + public String getPerm() { return this.perm; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // @Override - public boolean test(CommandSender sender, MCommand command) + public boolean apply(CommandSender sender, MCommand command) { return sender.hasPermission(this.perm); } - + @Override public String createErrorMessage(CommandSender sender, MCommand command) { return PermUtil.getForbiddenMessage(this.perm); } - - public static ReqHasPerm get(String perm) - { - return new ReqHasPerm(perm); - } - } diff --git a/src/com/massivecraft/mcore/cmd/req/ReqIsPlayer.java b/src/com/massivecraft/mcore/cmd/req/ReqIsPlayer.java index 83c88f3b..d6ce5879 100644 --- a/src/com/massivecraft/mcore/cmd/req/ReqIsPlayer.java +++ b/src/com/massivecraft/mcore/cmd/req/ReqIsPlayer.java @@ -1,30 +1,36 @@ package com.massivecraft.mcore.cmd.req; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import com.massivecraft.mcore.Lang; import com.massivecraft.mcore.cmd.MCommand; +import com.massivecraft.mcore.util.SenderUtil; -public class ReqIsPlayer implements IReq +public class ReqIsPlayer extends ReqAbstract { + private static final long serialVersionUID = 1L; + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static ReqIsPlayer i = new ReqIsPlayer(); + public static ReqIsPlayer get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + @Override - public boolean test(CommandSender sender, MCommand command) + public boolean apply(CommandSender sender, MCommand command) { - return sender instanceof Player; + return SenderUtil.isPlayer(sender); } - + @Override public String createErrorMessage(CommandSender sender, MCommand command) { return Lang.commandSenderMustBePlayer; } - // -------------------------------------------- // - // INSTANCE - // -------------------------------------------- // - - public static ReqIsPlayer i = new ReqIsPlayer(); - public static ReqIsPlayer get() { return i; } - }