package net.minecraft.command.type.metadata;
import net.minecraft.command.collections.MetaColl;
import net.minecraft.command.completion.TCDSet;
import net.minecraft.command.parser.CompletionParser.CompletionData;
import net.minecraft.command.parser.Parser;
import net.minecraft.command.type.IComplete;
import net.minecraft.command.type.IExComplete;
public class ICompletable
{
public static interface CompletionCallback
{
public void complete(TCDSet tcDataSet, Parser parser, CompletionData cData);
}
public static final MetaID<CompletionCallback> metaID = new MetaID<>(MetaColl.typeSPA);
private ICompletable()
{
}
public static class Default extends MetaEntry<CompletionCallback, Object>
{
private final IComplete target;
public Default(final IComplete target)
{
super(metaID);
this.target = target;
}
@Override
public CompletionCallback get(final Parser parser, final Object parserData)
{
return new CompletionCallback()
{
private final int index = parser.getIndex();
@Override
public void complete(final TCDSet tcDataSet, final Parser parser, final CompletionData cData)
{
Default.this.target.complete(tcDataSet, parser, this.index, cData);
}
};
}
}
public static class Capturing<D> extends MetaEntry<CompletionCallback, D>
{
private final IExComplete<D> target;
public Capturing(final IExComplete<D> target)
{
super(metaID);
this.target = target;
}
@Override
public CompletionCallback get(final Parser parser, final D parserData)
{
return new CompletionCallback()
{
private final int index = parser.getIndex();
@Override
public void complete(final TCDSet tcDataSet, final Parser parser, final CompletionData cData)
{
Capturing.this.target.complete(tcDataSet, parser, this.index, cData, parserData);
}
};
}
}
}