package net.minecraft.command.type.custom.nbt;
import java.util.Set;
import java.util.regex.Matcher;
import net.minecraft.command.ParsingUtilities;
import net.minecraft.command.SyntaxErrorException;
import net.minecraft.command.completion.ITabCompletion;
import net.minecraft.command.completion.TCDSet;
import net.minecraft.command.completion.TabCompletionData;
import net.minecraft.command.parser.CompletionParser.CompletionData;
import net.minecraft.command.parser.MatcherRegistry;
import net.minecraft.command.parser.Parser;
import net.minecraft.command.type.base.ExCustomCompletable;
import net.minecraft.command.type.custom.nbt.NBTDescriptor.Compound;
import net.minecraft.command.type.custom.nbt.ParserNBTCompound.CompoundData;
public class TypeNBTPair extends ExCustomCompletable<Void, CompoundData>
{
private final Compound descriptor;
public static final MatcherRegistry keyMatcher = new MatcherRegistry("\\G\\s*+([\\w-]*+)\\s*+:");
public TypeNBTPair(final Compound descriptor)
{
this.descriptor = descriptor;
}
@Override
public Void iParse(final Parser parser, final CompoundData parserData) throws SyntaxErrorException
{
final Matcher m = parser.getMatcher(keyMatcher);
if (!parser.findInc(m))
throw parser.SEE("Missing tag name ");
ParsingUtilities.terminateCompletion(parser);
final String name = m.group(1);
parserData.name = name;
this.descriptor.getSubDescriptor(name).getTagParser().parse(parser, parserData);
return null;
}
@Override
public void complete(final TCDSet tcDataSet, final Parser parser, final int startIndex, final CompletionData cData, final CompoundData parserData)
{
final Set<String> keySet = parserData.keySet();
for (final ITabCompletion tc : this.descriptor.getKeyCompletions())
if (!keySet.contains(tc.name))
TabCompletionData.addToSet(tcDataSet, startIndex, cData, tc);
}
}