package net.minecraft.command.construction; import net.minecraft.command.ParsingUtilities; import net.minecraft.command.SyntaxErrorException; import net.minecraft.command.arg.ArgWrapper; import net.minecraft.command.arg.TypedWrapper; import net.minecraft.command.arg.TypedWrapper.Getter; import net.minecraft.command.descriptors.SelectorDescriptorDefault.DefaultParserData; import net.minecraft.command.type.management.TypeID; public abstract class SelectorConstructable { public abstract ArgWrapper<?> construct(DefaultParserData parserData) throws SyntaxErrorException; public static TypedWrapper<?> getParam(final int index, final DefaultParserData parserData) { return index < parserData.unnamedParams.size() ? parserData.unnamedParams.get(index) : null; } public static TypedWrapper<?> getParam(final int index, final String name, final DefaultParserData parserData) { if (name != null) { final TypedWrapper<?> ret = parserData.namedParams.get(name.toLowerCase()); if (ret != null) return ret; } return getParam(index, parserData); } public static <T> Getter<T> getParam(final TypeID<T> type, final int index, final String name, final DefaultParserData parserData) { return ParsingUtilities.get(type, getParam(index, name, parserData)); } public static <T> Getter<T> getParam(final TypeID<T> type, final int index, final DefaultParserData parserData) { return ParsingUtilities.get(type, getParam(index, parserData)); } public static <T> Getter<T> getParam(final TypeID<T> type, final String name, final DefaultParserData parserData) { return ParsingUtilities.get(type, parserData.namedParams.get(name.toLowerCase())); } public static TypedWrapper<?> getRequiredParam(final int index, final String name, final DefaultParserData parserData) throws SyntaxErrorException { final TypedWrapper<?> ret = getParam(index, name, parserData); if (ret != null) return ret; throw parserData.parser.SEE("Missing parameter for selector: " + (name != null ? name : index), false); } public static TypedWrapper<?> getRequiredParam(final int index, final DefaultParserData parserData) throws SyntaxErrorException { final TypedWrapper<?> ret = getParam(index, parserData); if (ret != null) return ret; throw parserData.parser.SEE("Missing parameter for selector: " + index, false); } public static TypedWrapper<?> getRequiredParam(final String name, final DefaultParserData parserData) throws SyntaxErrorException { final TypedWrapper<?> ret = parserData.namedParams.get(name.toLowerCase()); if (ret != null) return ret; throw parserData.parser.SEE("Missing parameter for selector: " + name, false); } public static <T> Getter<T> getRequiredParam(final TypeID<T> type, final int index, final String name, final DefaultParserData parserData) throws SyntaxErrorException { return getRequiredParam(index, name, parserData).get(type); } public static <T> Getter<T> getRequiredParam(final TypeID<T> type, final int index, final DefaultParserData parserData) throws SyntaxErrorException { return getRequiredParam(index, parserData).get(type); } public static <T> Getter<T> getRequiredParam(final TypeID<T> type, final String name, final DefaultParserData parserData) throws SyntaxErrorException { return getRequiredParam(name, parserData).get(type); } }