package net.minecraft.command.legacy;
import java.util.List;
import java.util.Set;
import net.minecraft.command.ParsingUtilities;
import net.minecraft.command.SyntaxErrorException;
import net.minecraft.command.completion.DataRequest;
import net.minecraft.command.completion.TCDSet;
import net.minecraft.command.completion.TabCompletionData.Weighted;
import net.minecraft.command.legacy.LegacyCommand.LegacyParserData;
import net.minecraft.command.parser.CompletionParser.CompletionData;
import net.minecraft.command.parser.Parser;
import net.minecraft.command.type.base.ExCustomCompletable;
/**
* Legacy support
*/
@Deprecated
public class TypeLegacyArg extends ExCustomCompletable<Void, LegacyParserData>
{
private TypeLegacyArg()
{
}
public static final TypeLegacyArg parser = new TypeLegacyArg();
@Override
public Void iParse(final Parser parser, final LegacyParserData parserData) throws SyntaxErrorException
{
if (!parser.find(ParsingUtilities.spaceMatcher))
{
parserData.argString = null;
return null;
}
int startIndex = parser.getIndex();
final StringBuilder sb = new StringBuilder();
int backslashCount = 0;
outerLoop: while (!parser.endReached())
{
final char nextChar = parser.consumeNextChar();
switch (nextChar)
{
case '\\':
++backslashCount;
continue;
case '0':
sb.append(parser.toParse, startIndex, parser.getIndex() - (3 + backslashCount) / 2);
startIndex = parser.getIndex() - 1;
if (backslashCount % 2 == 1)
break outerLoop;
default:
backslashCount = 0;
}
}
sb.append(parser.toParse, startIndex, parser.getIndex());
parserData.argString = sb.toString();
return null;
}
@Override
public void complete(final TCDSet tcDataSet, final Parser parser, final int startIndex, final CompletionData cData, final LegacyParserData parserData)
{
final String[] args = parserData.argString != null ? LegacyCommand.dropFirstString(parserData.argString.split(" ", -1)) : new String[0];
tcDataSet.add(new DataRequest()
{
private List<String> completions;
@Override
public void process()
{
this.completions = parserData.command.addTabCompletionOptions(cData.sender, args, cData.hovered);
}
@Override
public void createCompletions(final Set<Weighted> tcDataSet)
{
if (this.completions == null)
return;
final int oldLen = args.length > 0 ? args[args.length - 1].length() : 0;
for (final String completion : this.completions)
tcDataSet.add(new Weighted(completion, parser.getIndex(), parser.getIndex(), completion.substring(oldLen), parser.getIndex() + completion.length() - oldLen, 0));
}
});
}
}