package net.minecraft.command.construction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.collections4.trie.PatriciaTrie;
import net.minecraft.command.IPermission;
import net.minecraft.command.descriptors.SelectorDescriptor;
import net.minecraft.command.type.IDataType;
import net.minecraft.command.type.management.TypeID;
public class SelectorConstructor
{
private final ArrayList<IDataType<?>> unnamedTypes = new ArrayList<>();
private final PatriciaTrie<IDataType<?>> namedTypes = new PatriciaTrie<>();
private final ArrayList<String> keyMapping = new ArrayList<>();
private final Set<TypeID<?>> resultTypes;
private final IPermission permission;
public SelectorConstructor(final IPermission permission, final TypeID<?>... resultTypes)
{
this.resultTypes = new HashSet<>(Arrays.asList(resultTypes));
this.permission = permission;
}
public final SelectorConstructor then(final IDataType<?> dataType)
{
this.unnamedTypes.add(dataType);
this.keyMapping.add(null);
return this;
}
public final SelectorConstructor named(final String name, final IDataType<?> dataType)
{
this.namedTypes.put(name, dataType);
return this;
}
public final SelectorConstructor then(final String name, final IDataType<?> dataType)
{
this.unnamedTypes.add(dataType);
this.namedTypes.put(name, dataType);
this.keyMapping.add(name.toLowerCase());
return this;
}
public SelectorDescriptor<?> construct(final SelectorConstructable constructable)
{
this.unnamedTypes.trimToSize();
this.keyMapping.trimToSize();
return new SelectorDescriptorConstructable(this.unnamedTypes, this.namedTypes, this.keyMapping, constructable, this.resultTypes, this.permission);
}
}