package net.minecraft.command.type.custom;
import java.util.Collection;
import java.util.HashSet;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import net.minecraft.command.collections.Parsers;
import net.minecraft.command.completion.DataRequest;
import net.minecraft.command.completion.TCDSet;
import net.minecraft.command.parser.CompletionParser.CompletionData;
import net.minecraft.command.parser.Parser;
import net.minecraft.command.type.CDataType;
import net.minecraft.command.type.IComplete;
import net.minecraft.command.type.base.CompoundType;
import net.minecraft.scoreboard.IScoreObjectiveCriteria;
import net.minecraft.scoreboard.ScoreObjective;
import net.minecraft.server.MinecraftServer;
public final class TypeScoreObjective extends CompoundType<ScoreObjective>
{
private TypeScoreObjective(final IComplete completer)
{
super(Parsers.scoreObjective, completer);
}
private TypeScoreObjective(final Predicate<ScoreObjective> filter)
{
super(Parsers.scoreObjective, getCompleter(filter));
}
public static final IComplete completer = getCompleter(Predicates.<ScoreObjective> alwaysTrue());
public static final IComplete writeableCompleter = getCompleter(new Predicate<ScoreObjective>()
{
@Override
public boolean apply(final ScoreObjective objective)
{
return !objective.getCriteria().isReadOnly();
}
});
public static final CDataType<ScoreObjective> type = new TypeScoreObjective(completer);
public static final CDataType<ScoreObjective> typeWriteable = new TypeScoreObjective(writeableCompleter);
public static final CDataType<ScoreObjective> typeTrigger = new TypeScoreObjective(new Predicate<ScoreObjective>()
{
@Override
public boolean apply(final ScoreObjective objective)
{
return objective.getCriteria() == IScoreObjectiveCriteria.field_178791_c;
}
});
public static final CDataType<String> typeWriteableString = new CompoundType<>(new ParserName("score name"), writeableCompleter);
private static IComplete getCompleter(final Predicate<ScoreObjective> filter)
{
return new IComplete()
{
@Override
public void complete(final TCDSet tcDataSet, final Parser parser, final int startIndex, final CompletionData cData)
{
tcDataSet.add(new DataRequest.SimpleAdd(startIndex, cData)
{
@Override
public void process()
{
final Collection<?> objectives = MinecraftServer.getServer().worldServerForDimension(0).getScoreboard().getScoreObjectives();
this.tcSet = new HashSet<>(objectives.size());
for (final Object objective : objectives)
if (filter.apply((ScoreObjective) objective))
this.tcSet.add(((ScoreObjective) objective).getDisplayName());
}
});
}
};
}
}