package net.minecraft.command.type.custom;
import net.minecraft.command.ParsingUtilities;
import net.minecraft.command.ParsingUtilities.PrimitiveCallback;
import net.minecraft.command.SyntaxErrorException;
import net.minecraft.command.arg.ArgWrapper;
import net.minecraft.command.collections.TypeIDs;
import net.minecraft.command.parser.Context;
import net.minecraft.command.parser.MatcherRegistry;
import net.minecraft.command.parser.Parser;
import net.minecraft.command.type.CTypeParse;
import net.minecraft.command.type.management.Converter;
import net.minecraft.command.type.management.TypeID;
public final class ParserName extends CTypeParse<String>
{
public static final ParserName parser = new ParserName();
private final MatcherRegistry m;
private final String error;
private final TypeID<String> target;
public static final PrimitiveCallback<String> callback = ParsingUtilities.callbackNonImmediate(ParsingUtilities.idStringConverter);
public ParserName(final MatcherRegistry m, final String contentName, final TypeID<String> target)
{
this.m = m;
this.error = "Expected " + contentName + " around index ";
this.target = target;
}
public ParserName(final MatcherRegistry m, final TypeID<String> target)
{
this.m = m;
this.error = "Expected identifier around index ";
this.target = target;
}
public ParserName(final MatcherRegistry m)
{
this(m, TypeIDs.String);
}
public ParserName(final TypeID<String> target)
{
this(ParsingUtilities.stringMatcher, target);
}
public ParserName(final MatcherRegistry m, final String contentName)
{
this(m, contentName, TypeIDs.String);
}
public ParserName(final String contentName, final TypeID<String> target)
{
this(ParsingUtilities.stringMatcher, contentName, target);
}
public ParserName(final String contentName)
{
this(contentName, TypeIDs.String);
}
private ParserName()
{
this(ParsingUtilities.stringMatcher);
}
@Override
public ArgWrapper<String> iParse(final Parser parser, final Context context) throws SyntaxErrorException
{
final ArgWrapper<String> ret = ParsingUtilities.parseString(parser, context, this.target, this.m, callback);
if (ret != null)
return ret;
throw parser.SEE(this.error);
}
public static class CustomType<T> extends CTypeParse<T>
{
private final MatcherRegistry m;
private final String error;
private final TypeID<T> target;
private final Converter<String, T, ?> converter;
private final PrimitiveCallback<T> callback;
public CustomType(final MatcherRegistry m, final String contentName, final TypeID<T> target, final Converter<String, T, ? super SyntaxErrorException> converter)
{
this(m, contentName, target, converter, false);
}
public CustomType(final String contentName, final TypeID<T> target, final Converter<String, T, ? super SyntaxErrorException> converter)
{
this(ParsingUtilities.stringMatcher, contentName, target, converter);
}
public CustomType(final MatcherRegistry m, final String contentName, final TypeID<T> target, final Converter<String, T, ?> converter, final PrimitiveCallback<T> callback)
{
this.m = m;
this.error = "Expected " + contentName + " ";
this.target = target;
this.converter = converter;
this.callback = callback;
}
public CustomType(final String contentName, final TypeID<T> target, final Converter<String, T, ?> converter, final PrimitiveCallback<T> callback)
{
this(ParsingUtilities.stringMatcher, contentName, target, converter, callback);
}
public CustomType(final MatcherRegistry m, final String contentName, final TypeID<T> target, final Converter<String, T, ? super SyntaxErrorException> converter, final boolean immediate)
{
this(m, contentName, target, converter,
immediate ? ParsingUtilities.callbackImmediate(converter) : ParsingUtilities.callbackNonImmediate(converter));
}
public CustomType(final String contentName, final TypeID<T> target, final Converter<String, T, ? super SyntaxErrorException> converter, final boolean immediate)
{
this(ParsingUtilities.stringMatcher, contentName, target, converter, immediate);
}
@Override
public ArgWrapper<T> iParse(final Parser parser, final Context context) throws SyntaxErrorException
{
final ArgWrapper<T> ret = ParsingUtilities.parseString(parser, context, this.target, this.converter, this.m, this.callback);
if (ret != null)
return ret;
throw parser.SEE(this.error);
}
}
}