package net.minecraft.command.type.custom; import net.minecraft.command.SyntaxErrorException; import net.minecraft.command.arg.ArgWrapper; import net.minecraft.command.arg.PermissionWrapper; import net.minecraft.command.completion.TCDSet; import net.minecraft.command.parser.CacheID; import net.minecraft.command.parser.CompletionParser.CompletionData; import net.minecraft.command.parser.Context; import net.minecraft.command.parser.Parser; import net.minecraft.command.type.ICachedParse; import net.minecraft.command.type.base.CustomCompletable; import net.minecraft.command.type.management.CConvertable; public class TypeSelector<T> extends CustomCompletable<T> implements ICachedParse { private final CConvertable<?, T> target; public TypeSelector(final CConvertable<?, T> target) { this.target = target; } @Override public T iParse(final Parser parser, final Context context) throws SyntaxErrorException { return parser.parseCached(this, context, CacheID.selectorCache).convertTo(parser, this.target); } @Override public ArgWrapper<?> iCachedParse(final Parser parser, final Context context) throws SyntaxErrorException { return TypeUntypedSelector.parseName(parser).parse(parser); } @Override public void complete(final TCDSet tcDataSet, final Parser parser, final int startIndex, final CompletionData cData) { PermissionWrapper.complete(tcDataSet, startIndex, cData, this.target.getSelectorCompletions()); } }