diff --git a/src/com/massivecraft/massivecore/cmd/arg/ARNullable.java b/src/com/massivecraft/massivecore/cmd/arg/ARNullable.java index 664b9556..4d4f7212 100644 --- a/src/com/massivecraft/massivecore/cmd/arg/ARNullable.java +++ b/src/com/massivecraft/massivecore/cmd/arg/ARNullable.java @@ -1,44 +1,106 @@ package com.massivecraft.massivecore.cmd.arg; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + import org.bukkit.command.CommandSender; import com.massivecraft.massivecore.MassiveCore; import com.massivecraft.massivecore.MassiveException; +import com.massivecraft.massivecore.collections.MassiveList; -public class ARNullable extends ARWrapper +public class ARNullable extends ARAbstract { // -------------------------------------------- // // FIELDS // -------------------------------------------- // protected AR innerArgReader; - @Override public AR getInnerArgReader() { return this.innerArgReader; } + public AR getInnerArgReader() { return this.innerArgReader; } + + protected Collection nulls; + public Collection getNulls() { return this.nulls; } // -------------------------------------------- // - // INSTANCE & CONSTRUCT + // INSTANCE // -------------------------------------------- // + public static ARNullable get(AR inner, Collection nulls) + { + return new ARNullable(inner, nulls); + } + + public static ARNullable get(AR inner, String... nulls) + { + return new ARNullable(inner, nulls); + } + public static ARNullable get(AR inner) { return new ARNullable(inner); } + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public ARNullable(AR inner, Collection nulls) + { + if (inner == null) throw new NullPointerException("inner"); + if (nulls == null) nulls = Collections.emptySet(); + + this.innerArgReader = inner; + } + + public ARNullable(AR inner, String... nulls) + { + this(inner, Arrays.asList(nulls)); + } + public ARNullable(AR inner) { - if (inner == null) throw new IllegalArgumentException("inner param is null"); - this.innerArgReader = inner; + this(inner, MassiveCore.NOTHING_REMOVE); } // -------------------------------------------- // // OVERRIDE // -------------------------------------------- // + @Override + public String getTypeName() + { + return this.getInnerArgReader().getTypeName(); + } + @Override public T read(String arg, CommandSender sender) throws MassiveException { - if (MassiveCore.NOTHING_REMOVE.contains(arg)) return null; + // Null? + if (this.getNulls().contains(arg)) return null; + // Inner return this.getInnerArgReader().read(arg, sender); } + + @Override + public Collection getTabList(CommandSender sender, String arg) + { + // Create Ret + List ret = new MassiveList(this.getNulls()); + + // Fill Ret + ret.addAll(this.getInnerArgReader().getTabList(sender, arg)); + + // Return Ret + return ret; + } + + @Override + public boolean allowSpaceAfterTab() + { + return this.getInnerArgReader().allowSpaceAfterTab(); + } }