package net.minecraft.command.construction;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.command.collections.Completers;
import net.minecraft.command.completion.ProviderCompleter;
import net.minecraft.command.type.IComplete;
import net.minecraft.command.type.custom.json.JsonDescriptor;
import net.minecraft.command.type.custom.json.JsonDescriptor.DefaultElement;
import net.minecraft.command.type.custom.json.JsonDescriptor.Element;
import net.minecraft.command.type.custom.json.JsonDescriptor.TypedImplementation;
import net.minecraft.command.type.custom.json.ParserJsonArray;
import net.minecraft.command.type.custom.json.ParserJsonElement;
import net.minecraft.command.type.custom.json.ParserJsonObject;
public final class JsonConstructorArray extends TypedImplementation implements JsonDescriptor.Array, Element
{
private final ParserJsonElement elementParser = new ParserJsonElement(this, Completers.bracketCompleter);
private final List<Element> itemDescriptors = new ArrayList<>();
private final ParserJsonArray arrayParser = new ParserJsonArray(this);
public JsonConstructorArray(final Type... type)
{
super(type);
}
public JsonConstructorArray(final Element itemDescriptor, final Type... type)
{
super(type);
this.then(itemDescriptor);
}
public JsonConstructorArray(final IComplete completer, final Type... type)
{
super(type);
this.then(completer);
}
public JsonConstructorArray(final String[] completions, final Type... type)
{
super(type);
this.then(completions);
}
public final JsonConstructorArray then(final Element itemDescriptor)
{
this.itemDescriptors.add(itemDescriptor);
return this;
}
public final JsonConstructorArray then(final IComplete completer)
{
return this.then(new DefaultElement(completer));
}
public final JsonConstructorArray then(final String... completions)
{
return this.then(new ProviderCompleter(completions));
}
@Override
public ParserJsonElement getElementParser()
{
return this.elementParser;
}
@Override
public ParserJsonArray getArrayParser()
{
return this.arrayParser;
}
@Override
public ParserJsonObject getObjectParser()
{
return JsonDescriptor.defaultObject.getObjectParser();
}
@Override
public Element getElementDescriptor(final int index)
{
if (this.itemDescriptors.isEmpty())
return JsonDescriptor.defaultElement;
return this.itemDescriptors.get(Math.min(index, this.itemDescriptors.size() - 1));
}
}