From 47b2eeccb44228616e6dff2fccd5c81c6b80ed38 Mon Sep 17 00:00:00 2001 From: Magnus Ulf Date: Sat, 24 Jan 2015 22:13:28 +0100 Subject: [PATCH] ArgReaders use exceptions Now null checks for arguments is no longer required. A few arg readers was also improved slightly. --- .../massivecore/cmd/MassiveCommand.java | 37 ++++++---- .../cmd/MassiveCommandException.java | 43 +++++++++++ .../cmd/arg/ARAbstractPrimitive.java | 10 +-- .../massivecore/cmd/arg/ARAbstractSelect.java | 16 +++-- .../massivecore/cmd/arg/ARChatColor.java | 2 - .../massivecore/cmd/arg/ARList.java | 18 ++--- .../massivecore/cmd/arg/ARMaterial.java | 17 +++-- .../massivecore/cmd/arg/ARMillisDiff.java | 10 +-- .../massivecore/cmd/arg/ARPermission.java | 14 ++-- .../cmd/arg/ARSenderIdAbstract.java | 17 ++--- .../massivecore/cmd/arg/ARSet.java | 26 +++---- .../massivecore/cmd/arg/ARSound.java | 14 ++-- .../massivecore/cmd/arg/ARSoundEffect.java | 9 +-- .../massivecore/cmd/arg/ARSoundEffects.java | 13 ++-- .../massivecore/cmd/arg/ARString.java | 12 ++-- .../massivecore/cmd/arg/ARUniverse.java | 14 ++-- .../massivecore/cmd/arg/ARWorld.java | 26 +++---- .../massivecore/cmd/arg/ARWorldId.java | 6 +- .../massivecore/cmd/arg/ARWorldType.java | 2 +- .../massivecore/cmd/arg/ArgReader.java | 10 +-- .../cmd/arg/ArgReaderAbstract.java | 8 ++- .../massivecore/cmd/arg/ArgResult.java | 72 ------------------- .../massivecore/CmdMassiveCoreHearsound.java | 5 +- 23 files changed, 194 insertions(+), 207 deletions(-) create mode 100644 src/com/massivecraft/massivecore/cmd/MassiveCommandException.java delete mode 100644 src/com/massivecraft/massivecore/cmd/arg/ArgResult.java diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java b/src/com/massivecraft/massivecore/cmd/MassiveCommand.java index 56e74efb..01d8306f 100644 --- a/src/com/massivecraft/massivecore/cmd/MassiveCommand.java +++ b/src/com/massivecraft/massivecore/cmd/MassiveCommand.java @@ -1,7 +1,14 @@ package com.massivecraft.massivecore.cmd; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -10,7 +17,6 @@ import org.bukkit.plugin.Plugin; import com.massivecraft.massivecore.Lang; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.cmd.arg.ArgReader; -import com.massivecraft.massivecore.cmd.arg.ArgResult; import com.massivecraft.massivecore.cmd.req.Req; import com.massivecraft.massivecore.cmd.req.ReqHasPerm; import com.massivecraft.massivecore.mixin.Mixin; @@ -336,6 +342,12 @@ public class MassiveCommand if ( ! isValidCall(this.sender, this.getArgs())) return; perform(); } + catch (MassiveCommandException ex) + { + // Sometimes arg readers (or commands themself) + // throw exceptions, to stop executing and notify the user. + Mixin.msgOne(sender, ex.getErrorMsgs()); + } finally { // Unset Sender Variables @@ -360,7 +372,7 @@ public class MassiveCommand } // This is where the command action is performed. - public void perform() + public void perform() throws MassiveCommandException { // Per default we just act as the help command! List commandChain = new ArrayList(this.getCommandChain()); @@ -608,13 +620,13 @@ public class MassiveCommand return this.getArgs().get(idx); } - public T arg(int idx, ArgReader argReader) + public T arg(int idx, ArgReader argReader) throws MassiveCommandException { String str = this.arg(idx); return this.arg(str, argReader); } - public T arg(int idx, ArgReader argReader, T defaultNotSet) + public T arg(int idx, ArgReader argReader, T defaultNotSet) throws MassiveCommandException { String str = this.arg(idx); return this.arg(str, argReader, defaultNotSet); @@ -631,13 +643,13 @@ public class MassiveCommand return Txt.implode(this.getArgs().subList(from, to), " "); } - public T argConcatFrom(int idx, ArgReader argReader) + public T argConcatFrom(int idx, ArgReader argReader) throws MassiveCommandException { String str = this.argConcatFrom(idx); return this.arg(str, argReader); } - public T argConcatFrom(int idx, ArgReader argReader, T defaultNotSet) + public T argConcatFrom(int idx, ArgReader argReader, T defaultNotSet) throws MassiveCommandException { String str = this.argConcatFrom(idx); return this.arg(str, argReader, defaultNotSet); @@ -645,19 +657,18 @@ public class MassiveCommand // Core & Other - public T arg(ArgReader argReader) + public T arg(ArgReader argReader) throws MassiveCommandException { return this.arg(null, argReader); } - public T arg(String str, ArgReader argReader) + public T arg(String str, ArgReader argReader) throws MassiveCommandException { - ArgResult result = argReader.read(str, this.sender); - if (result.hasErrors()) this.msg(result.getErrors()); - return result.getResult(); + T result = argReader.read(str, this.sender); + return result; } - public T arg(String str, ArgReader argReader, T defaultNotSet) + public T arg(String str, ArgReader argReader, T defaultNotSet) throws MassiveCommandException { if (str == null) return defaultNotSet; return this.arg(str, argReader); diff --git a/src/com/massivecraft/massivecore/cmd/MassiveCommandException.java b/src/com/massivecraft/massivecore/cmd/MassiveCommandException.java new file mode 100644 index 00000000..094448f5 --- /dev/null +++ b/src/com/massivecraft/massivecore/cmd/MassiveCommandException.java @@ -0,0 +1,43 @@ +package com.massivecraft.massivecore.cmd; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class MassiveCommandException extends RuntimeException +{ + // -------------------------------------------- // + // CONSTANTS + // -------------------------------------------- // + + private static final long serialVersionUID = 1L; + + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private List errorMsgs = new ArrayList(); + public List getErrorMsgs() { return this.errorMsgs; } + public void setErrorMsgs(List msgs) { this.errorMsgs = msgs; } + public void addErrorMsg(String msg) { this.errorMsgs.add(msg); } + + // -------------------------------------------- // + // CONSTRUCTORS + // -------------------------------------------- // + + public MassiveCommandException() + { + + } + + public MassiveCommandException(String msg) + { + this.errorMsgs.add(msg); + } + + public MassiveCommandException(Collection msgs) + { + this.errorMsgs.addAll(msgs); + } + +} diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARAbstractPrimitive.java b/src/com/massivecraft/massivecore/cmd/arg/ARAbstractPrimitive.java index de8bb86f..3a09600b 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARAbstractPrimitive.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARAbstractPrimitive.java @@ -2,6 +2,8 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public abstract class ARAbstractPrimitive extends ArgReaderAbstract { // -------------------------------------------- // @@ -16,17 +18,17 @@ public abstract class ARAbstractPrimitive extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public T read(String arg, CommandSender sender) { - ArgResult result = new ArgResult(); + T result; try { - result.setResult(this.convert(arg)); + result = this.convert(arg); } catch (Exception e) { - result.getErrors().add("Invalid "+this.typename()+" \""+arg+"\"."); + throw new MassiveCommandException("Invalid " + this.typename() + " \"" + arg + "\"."); } return result; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARAbstractSelect.java b/src/com/massivecraft/massivecore/cmd/arg/ARAbstractSelect.java index 863c0263..b374e5d8 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARAbstractSelect.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARAbstractSelect.java @@ -4,6 +4,7 @@ import java.util.Collection; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.util.Txt; public abstract class ARAbstractSelect extends ArgReaderAbstract @@ -22,25 +23,28 @@ public abstract class ARAbstractSelect extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public T read(String arg, CommandSender sender) { - ArgResult result = new ArgResult(this.select(arg, sender)); + T result = this.select(arg, sender); - if (!result.hasResult()) + if (result == null) { - result.getErrors().add("No "+this.typename()+" matches \""+arg+"\"."); + MassiveCommandException errors = new MassiveCommandException(); + errors.addErrorMsg("No " + this.typename() + " matches \""+arg+"\"."); if (this.canList(sender)) { Collection names = this.altNames(sender); if (names.size() == 0) { - result.getErrors().add("Note: There is no "+this.typename()+" available."); + errors.addErrorMsg("Note: There is no "+this.typename()+" available."); } else { - result.getErrors().add("Use "+Txt.implodeCommaAndDot(names, "%s", ", ", " or ", ".")); + errors.addErrorMsg("Use "+Txt.implodeCommaAndDot(names, "%s", ", ", " or ", ".")); } } + + throw errors; } return result; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARChatColor.java b/src/com/massivecraft/massivecore/cmd/arg/ARChatColor.java index 539aaabe..0ee06f33 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARChatColor.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARChatColor.java @@ -35,8 +35,6 @@ public class ARChatColor extends ARAbstractSelect for (ChatColor cc : ChatColor.values()) { - - String ccstr = getToCompare(cc.name()); if ( ! ccstr.equals(arg)) continue; ret = cc; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARList.java b/src/com/massivecraft/massivecore/cmd/arg/ARList.java index f3962b57..11a87169 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARList.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARList.java @@ -34,32 +34,22 @@ public class ARList extends ArgReaderAbstract> // NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false). @Override - public ArgResult> read(String arg, CommandSender sender) + public List read(String arg, CommandSender sender) { // Split into inner args String[] innerArgs = arg.split("\\s+"); // Create Ret - ArgResult> ret = new ArgResult>(); - List result = new ArrayList(); + List ret = new ArrayList(); // For Each for (String innerArg : innerArgs) { - ArgResult innerArgResult = this.getInnerArgReader().read(innerArg, sender); + T innerArgResult = this.getInnerArgReader().read(innerArg, sender); - if (innerArgResult.hasErrors()) - { - ret.setErrors(innerArgResult.getErrors()); - return ret; - } - - result.add(innerArgResult.getResult()); + ret.add(innerArgResult); } - // Set Result - ret.setResult(result); - // Return Ret return ret; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARMaterial.java b/src/com/massivecraft/massivecore/cmd/arg/ARMaterial.java index fff2f4fe..bb6c01c0 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARMaterial.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARMaterial.java @@ -3,6 +3,8 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.Material; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public class ARMaterial extends ArgReaderAbstract { // -------------------------------------------- // @@ -17,15 +19,18 @@ public class ARMaterial extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public Material read(String arg, CommandSender sender) { - ArgResult result = new ArgResult(Material.matchMaterial(arg)); - if (!result.hasResult()) + Material ret = Material.matchMaterial(arg); + if (ret == null) { - result.getErrors().add("No material matches "+arg+"."); - result.getErrors().add("Suggestion: http://www.minecraftwiki.net/wiki/Data_values"); + MassiveCommandException errors = new MassiveCommandException(); + errors.addErrorMsg("No material matches "+arg+"."); + errors.addErrorMsg("Suggestion: http://www.minecraftwiki.net/wiki/Data_values"); + throw errors; } - return result; + + return ret; } } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARMillisDiff.java b/src/com/massivecraft/massivecore/cmd/arg/ARMillisDiff.java index 385a5380..d9d094e7 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARMillisDiff.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARMillisDiff.java @@ -2,6 +2,7 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.util.TimeDiffUtil; import com.massivecraft.massivecore.util.Txt; @@ -19,17 +20,18 @@ public class ARMillisDiff extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public Long read(String arg, CommandSender sender) { - ArgResult ret = new ArgResult(); + Long ret; try { - ret.setResult(TimeDiffUtil.millis(arg)); + ret = TimeDiffUtil.millis(arg); } catch (Exception e) { - ret.setErrors(Txt.parse("")+e.getMessage()); + throw new MassiveCommandException(Txt.parse("") + e.getMessage()); } + return ret; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARPermission.java b/src/com/massivecraft/massivecore/cmd/arg/ARPermission.java index 2dfc5178..060f1c1d 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARPermission.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARPermission.java @@ -4,6 +4,8 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.permissions.Permission; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public class ARPermission extends ArgReaderAbstract { // -------------------------------------------- // @@ -18,20 +20,20 @@ public class ARPermission extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public Permission read(String arg, CommandSender sender) { - ArgResult ret = new ArgResult(); + Permission ret = null; for (Permission permission : Bukkit.getPluginManager().getPermissions()) { - if (!permission.getName().equals(arg)) continue; - ret.setResult(permission); + if ( ! permission.getName().equals(arg)) continue; + ret = permission; break; } - if (!ret.hasResult()) + if (ret == null) { - ret.setErrors("No permission with the name \""+arg+"\" was found."); + throw new MassiveCommandException("No permission with the name \"" + arg + "\" was found."); } return ret; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSenderIdAbstract.java b/src/com/massivecraft/massivecore/cmd/arg/ARSenderIdAbstract.java index 0bdfd2e4..96c0e608 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARSenderIdAbstract.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSenderIdAbstract.java @@ -4,6 +4,7 @@ import java.util.Collection; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.store.SenderIdSource; import com.massivecraft.massivecore.util.IdUtil; @@ -43,23 +44,23 @@ public abstract class ARSenderIdAbstract extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public T read(String arg, CommandSender sender) { // Create Ret - ArgResult ret = new ArgResult(); + T ret; // arg --> senderId String senderId = this.getSenderIdFor(arg); + // All of our subclasses return null if senderId is null + // Thus we don't need to check for that being null, but only check ret // Populate Ret - if (senderId == null) + ret = this.getResultForSenderId(senderId); + + if (ret == null) { // No alternatives found - ret.setErrors("No player matches \""+arg+"\"."); - } - else - { - ret.setResult(this.getResultForSenderId(senderId)); + throw new MassiveCommandException("No player matches \""+arg+"\"."); } // Return Ret diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSet.java b/src/com/massivecraft/massivecore/cmd/arg/ARSet.java index 0bd9c23e..64cdddd8 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARSet.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSet.java @@ -40,34 +40,28 @@ public class ARSet extends ArgReaderAbstract> // NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false). @Override - public ArgResult> read(String arg, CommandSender sender) + public Set read(String arg, CommandSender sender) { // Split into inner args String[] innerArgs = arg.split("\\s+"); // Create Ret - ArgResult> ret = new ArgResult>(); - Set result = new LinkedHashSet(); + Set ret = new LinkedHashSet(); + + boolean duplicates = false; // For Each for (String innerArg : innerArgs) { - ArgResult innerArgResult = this.getInnerArgReader().read(innerArg, sender); + T innerArgResult = this.getInnerArgReader().read(innerArg, sender); - if (innerArgResult.hasErrors()) - { - ret.setErrors(innerArgResult.getErrors()); - return ret; - } - - if (warnOnDuplicates && ! result.add(innerArgResult.getResult())) - { - sender.sendMessage(Txt.parse("An argument was passed in twice and got removed.")); - } + duplicates = ( ! ret.add(innerArgResult) || duplicates); } - // Set Result - ret.setResult(result); + if (warnOnDuplicates && duplicates) + { + sender.sendMessage(Txt.parse("Some duplicate arguments were removed")); + } // Return Ret return ret; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSound.java b/src/com/massivecraft/massivecore/cmd/arg/ARSound.java index 2e238f30..a54c7a57 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARSound.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSound.java @@ -3,6 +3,8 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.Sound; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public class ARSound extends ArgReaderAbstract { // -------------------------------------------- // @@ -17,13 +19,15 @@ public class ARSound extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public Sound read(String arg, CommandSender sender) { - ArgResult result = new ArgResult(getSoundFromString(arg)); - if (!result.hasResult()) + Sound result = getSoundFromString(arg); + if (result == null) { - result.getErrors().add("No sound matches \""+arg+"\"."); - result.getErrors().add("https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/Sound.java"); + MassiveCommandException errors = new MassiveCommandException(); + errors.addErrorMsg("No sound matches \""+arg+"\"."); + errors.addErrorMsg("https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/Sound.java"); + throw errors; } return result; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffect.java b/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffect.java index 6ade1ce1..ec93df70 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffect.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffect.java @@ -3,6 +3,7 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.SoundEffect; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.util.Txt; public class ARSoundEffect extends ArgReaderAbstract @@ -19,17 +20,17 @@ public class ARSoundEffect extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public SoundEffect read(String arg, CommandSender sender) { - ArgResult ret = new ArgResult(); + SoundEffect ret; try { - ret.setResult(SoundEffect.valueOf(arg)); + ret = SoundEffect.valueOf(arg); } catch (Exception e) { - ret.setErrors(Txt.parse("") + e.getMessage()); + throw new MassiveCommandException(Txt.parse("") + e.getMessage()); } return ret; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffects.java b/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffects.java index 709c3b60..05b6a598 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffects.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSoundEffects.java @@ -7,8 +7,13 @@ import java.util.List; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.SoundEffect; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.util.Txt; +/** + * @deprecated use ARList + */ +@Deprecated public class ARSoundEffects extends ArgReaderAbstract> { // -------------------------------------------- // @@ -23,9 +28,9 @@ public class ARSoundEffects extends ArgReaderAbstract> // -------------------------------------------- // @Override - public ArgResult> read(String arg, CommandSender sender) + public List read(String arg, CommandSender sender) { - ArgResult> ret = new ArgResult>(); + List ret = new ArrayList(); List result = new ArrayList(); arg = arg.trim(); @@ -37,11 +42,11 @@ public class ARSoundEffects extends ArgReaderAbstract> { result.add(SoundEffect.valueOf(soundString)); } - ret.setResult(result); + ret = result; } catch (Exception e) { - ret.setErrors(Txt.parse("") + e.getMessage()); + throw new MassiveCommandException(Txt.parse("") + e.getMessage()); } return ret; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARString.java b/src/com/massivecraft/massivecore/cmd/arg/ARString.java index d69a8923..4c6a1e85 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARString.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARString.java @@ -1,6 +1,8 @@ package com.massivecraft.massivecore.cmd.arg; -public class ARString extends ARAbstractPrimitive +import org.bukkit.command.CommandSender; + +public class ARString extends ArgReaderAbstract { // -------------------------------------------- // // INSTANCE & CONSTRUCT @@ -12,15 +14,9 @@ public class ARString extends ARAbstractPrimitive // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // - - @Override - public String typename() - { - return "string"; - } @Override - public String convert(String arg) throws Exception + public String read(String arg, CommandSender sender) { return arg; } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARUniverse.java b/src/com/massivecraft/massivecore/cmd/arg/ARUniverse.java index cc8376d6..fbbb37f7 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARUniverse.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARUniverse.java @@ -6,6 +6,7 @@ import java.util.Collection; import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.Multiverse; +import com.massivecraft.massivecore.cmd.MassiveCommandException; import com.massivecraft.massivecore.util.Txt; public class ARUniverse extends ArgReaderAbstract @@ -31,20 +32,21 @@ public class ARUniverse extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public String read(String arg, CommandSender sender) { - ArgResult result = new ArgResult(); + String result = new String(); if (multiverse.containsUniverse(arg)) { - result.setResult(arg); + result = arg; } else { - result.getErrors().add("No universe \""+arg+"\" exists in multiverse "+this.multiverse.getId()+"."); - + MassiveCommandException errors = new MassiveCommandException(); + errors.addErrorMsg("No universe \"" + arg + "\" exists in multiverse " + this.multiverse.getId() + "."); Collection names = new ArrayList(multiverse.getUniverses()); - result.getErrors().add("Use "+Txt.implodeCommaAndDot(names, "%s", ", ", " or ", ".")); + errors.addErrorMsg("Use " + Txt.implodeCommaAndDot(names, "%s", ", ", " or ", ".")); + throw errors; } return result; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARWorld.java b/src/com/massivecraft/massivecore/cmd/arg/ARWorld.java index 0b8c8fc9..4fc65d0c 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARWorld.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARWorld.java @@ -4,6 +4,8 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public class ARWorld extends ArgReaderAbstract { // -------------------------------------------- // @@ -18,27 +20,19 @@ public class ARWorld extends ArgReaderAbstract // -------------------------------------------- // @Override - public ArgResult read(String arg, CommandSender sender) + public World read(String arg, CommandSender sender) { - ArgResult ret = new ArgResult(); + World ret; - ArgResult inner = ARWorldId.get().read(arg, sender); - if (inner.hasErrors()) - { - ret.setErrors(inner.getErrors()); - return ret; - } + String inner = ARWorldId.get().read(arg, sender); - String worldId = inner.getResult(); + String worldId = inner; - World world = Bukkit.getWorld(worldId); - if (world == null) + ret = Bukkit.getWorld(worldId); + + if (ret == null) { - ret.setErrors("The world could not be found."); - } - else - { - ret.setResult(world); + throw new MassiveCommandException("The world could not be found."); } return ret; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARWorldId.java b/src/com/massivecraft/massivecore/cmd/arg/ARWorldId.java index f8a6d598..42493694 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARWorldId.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARWorldId.java @@ -33,13 +33,13 @@ public class ARWorldId extends ARAbstractSelect for (String worldId : visibleWorldIds) { - if (!Mixin.canSeeWorld(sender, worldId)) continue; + if ( ! Mixin.canSeeWorld(sender, worldId)) continue; if (arg.equalsIgnoreCase(worldId)) return worldId; } for (String worldId : visibleWorldIds) { - if (!Mixin.canSeeWorld(sender, worldId)) continue; + if ( ! Mixin.canSeeWorld(sender, worldId)) continue; for (String worldAlias : Mixin.getWorldAliases(worldId)) { if (arg.equalsIgnoreCase(worldAlias)) return worldId; @@ -55,7 +55,7 @@ public class ARWorldId extends ARAbstractSelect List ret = new ArrayList(); for (String worldId : Mixin.getWorldIds()) { - if (!Mixin.canSeeWorld(sender, worldId)) continue; + if ( ! Mixin.canSeeWorld(sender, worldId)) continue; ret.add(Mixin.getWorldDisplayName(worldId)); } return ret; diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARWorldType.java b/src/com/massivecraft/massivecore/cmd/arg/ARWorldType.java index 3b7b6c3b..ca3e763e 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARWorldType.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARWorldType.java @@ -39,7 +39,7 @@ public class ARWorldType extends ARAbstractSelect arg = arg.replace(".", ""); arg = arg.replace("normal", ""); arg = arg.replace("default", ""); - arg = arg.replace("large", ""); + arg = arg.replace("biomes", ""); if (arg.equals("")) { diff --git a/src/com/massivecraft/massivecore/cmd/arg/ArgReader.java b/src/com/massivecraft/massivecore/cmd/arg/ArgReader.java index 0751535b..2409473e 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ArgReader.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ArgReader.java @@ -2,10 +2,12 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public interface ArgReader { - public ArgResult read(String arg, CommandSender sender); - public ArgResult read(CommandSender sender); - public ArgResult read(String arg); - public ArgResult read(); + public T read(String arg, CommandSender sender) throws MassiveCommandException; + public T read(CommandSender sender) throws MassiveCommandException; + public T read(String arg) throws MassiveCommandException; + public T readArg() throws MassiveCommandException; } \ No newline at end of file diff --git a/src/com/massivecraft/massivecore/cmd/arg/ArgReaderAbstract.java b/src/com/massivecraft/massivecore/cmd/arg/ArgReaderAbstract.java index 8e35f228..26ba3e36 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ArgReaderAbstract.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ArgReaderAbstract.java @@ -2,6 +2,8 @@ package com.massivecraft.massivecore.cmd.arg; import org.bukkit.command.CommandSender; +import com.massivecraft.massivecore.cmd.MassiveCommandException; + public abstract class ArgReaderAbstract implements ArgReader { // -------------------------------------------- // @@ -9,19 +11,19 @@ public abstract class ArgReaderAbstract implements ArgReader // -------------------------------------------- // @Override - public ArgResult read(CommandSender sender) + public T read(CommandSender sender) throws MassiveCommandException { return this.read(null, sender); } @Override - public ArgResult read(String arg) + public T read(String arg) throws MassiveCommandException { return this.read(arg, null); } @Override - public ArgResult read() + public T readArg() throws MassiveCommandException { return this.read(null, null); } diff --git a/src/com/massivecraft/massivecore/cmd/arg/ArgResult.java b/src/com/massivecraft/massivecore/cmd/arg/ArgResult.java deleted file mode 100644 index 69dfc152..00000000 --- a/src/com/massivecraft/massivecore/cmd/arg/ArgResult.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.massivecraft.massivecore.cmd.arg; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ArgResult -{ - // -------------------------------------------- // - // FIELD: RESULT - // -------------------------------------------- // - - protected T result = null; - public T getResult() { return this.result; } - public void setResult(T result) { this.result = result; } - public boolean hasResult() { return this.getResult() != null; } - - // -------------------------------------------- // - // FIELD: ERRORS - // -------------------------------------------- // - - protected List errors = new ArrayList(); - public List getErrors() { return this.errors; } - - public void setErrors(List val) - { - if (val == null) - { - this.errors = new ArrayList(); - } - else - { - this.errors = val; - } - } - - public void setErrors(String... val) - { - this.setErrors(Arrays.asList(val)); - } - - public boolean hasErrors() - { - return this.errors.size() > 0; - } - - // -------------------------------------------- // - // CONSTRUCT - // -------------------------------------------- // - - public ArgResult() - { - - } - - public ArgResult(T result) - { - this.setResult(result); - } - - public ArgResult(T result, List errors) - { - this.setResult(result); - this.setErrors(errors); - } - - public ArgResult(T result, String... errors) - { - this.setResult(result); - this.setErrors(errors); - } -} \ No newline at end of file diff --git a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java b/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java index d1ec908b..a4f4e3d9 100644 --- a/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java +++ b/src/com/massivecraft/massivecore/cmd/massivecore/CmdMassiveCoreHearsound.java @@ -5,7 +5,8 @@ import java.util.List; import com.massivecraft.massivecore.MassiveCorePerm; import com.massivecraft.massivecore.SoundEffect; import com.massivecraft.massivecore.cmd.MassiveCommand; -import com.massivecraft.massivecore.cmd.arg.ARSoundEffects; +import com.massivecraft.massivecore.cmd.arg.ARList; +import com.massivecraft.massivecore.cmd.arg.ARSoundEffect; import com.massivecraft.massivecore.cmd.req.ReqHasPerm; import com.massivecraft.massivecore.cmd.req.ReqIsPlayer; @@ -37,7 +38,7 @@ public class CmdMassiveCoreHearsound extends MassiveCommand public void perform() { // Args - List soundEffects = this.argConcatFrom(0, ARSoundEffects.get()); + List soundEffects = this.argConcatFrom(0, ARList.get(ARSoundEffect.get())); if (soundEffects == null) return; // Apply