Create ARSet
This commit is contained in:
parent
76a98248a3
commit
910995d9b5
76
src/com/massivecraft/massivecore/cmd/arg/ARSet.java
Normal file
76
src/com/massivecraft/massivecore/cmd/arg/ARSet.java
Normal file
@ -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<T> extends ArgReaderAbstract<Set<T>>
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected ArgReader<T> innerArgReader;
|
||||
public ArgReader<T> getInnerArgReader() { return this.innerArgReader; }
|
||||
|
||||
protected boolean warnOnDuplicates;
|
||||
public boolean getWarnOnDuplicate() { return warnOnDuplicates; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static <T> ARSet<T> get(ArgReader<T> innerArgReader, boolean warnOnDuplicates)
|
||||
{
|
||||
return new ARSet<T>(innerArgReader, warnOnDuplicates);
|
||||
}
|
||||
|
||||
public ARSet(ArgReader<T> innerArgReader, boolean warnOnDuplicates)
|
||||
{
|
||||
this.innerArgReader = innerArgReader;
|
||||
this.warnOnDuplicates = warnOnDuplicates;
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
||||
// NOTE: Must be used with argConcatFrom and setErrorOnTooManyArgs(false).
|
||||
@Override
|
||||
public ArgResult<Set<T>> read(String arg, CommandSender sender)
|
||||
{
|
||||
// Split into inner args
|
||||
String[] innerArgs = arg.split("\\s+");
|
||||
|
||||
// Create Ret
|
||||
ArgResult<Set<T>> ret = new ArgResult<Set<T>>();
|
||||
Set<T> result = new LinkedHashSet<T>();
|
||||
|
||||
// For Each
|
||||
for (String innerArg : innerArgs)
|
||||
{
|
||||
ArgResult<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("<i>An argument was passed in twice and got removed."));
|
||||
}
|
||||
}
|
||||
|
||||
// Set Result
|
||||
ret.setResult(result);
|
||||
|
||||
// Return Ret
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user