From 910995d9b5400a8f255916a60e55f7e9bf621ee7 Mon Sep 17 00:00:00 2001 From: ulumulu1510 Date: Wed, 21 Jan 2015 18:21:45 +0100 Subject: [PATCH] Create ARSet --- .../massivecore/cmd/arg/ARSet.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/com/massivecraft/massivecore/cmd/arg/ARSet.java diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARSet.java b/src/com/massivecraft/massivecore/cmd/arg/ARSet.java new file mode 100644 index 00000000..0bd9c23e --- /dev/null +++ b/src/com/massivecraft/massivecore/cmd/arg/ARSet.java @@ -0,0 +1,76 @@ +package com.massivecraft.massivecore.cmd.arg; + +import java.util.LinkedHashSet; +import java.util.Set; + +import org.bukkit.command.CommandSender; + +import com.massivecraft.massivecore.util.Txt; + +public class ARSet extends ArgReaderAbstract> +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + protected ArgReader innerArgReader; + public ArgReader getInnerArgReader() { return this.innerArgReader; } + + protected boolean warnOnDuplicates; + public boolean getWarnOnDuplicate() { return warnOnDuplicates; } + + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + public static ARSet get(ArgReader innerArgReader, boolean warnOnDuplicates) + { + return new ARSet(innerArgReader, warnOnDuplicates); + } + + public ARSet(ArgReader innerArgReader, boolean warnOnDuplicates) + { + this.innerArgReader = innerArgReader; + this.warnOnDuplicates = warnOnDuplicates; + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + // NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false). + @Override + public ArgResult> read(String arg, CommandSender sender) + { + // Split into inner args + String[] innerArgs = arg.split("\\s+"); + + // Create Ret + ArgResult> ret = new ArgResult>(); + Set result = new LinkedHashSet(); + + // For Each + for (String innerArg : innerArgs) + { + ArgResult 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.")); + } + } + + // Set Result + ret.setResult(result); + + // Return Ret + return ret; + } + +}