package net.minecraft.command.type.management; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import net.minecraft.command.IPermission; import net.minecraft.command.SyntaxErrorException; import net.minecraft.command.completion.ITabCompletion; import net.minecraft.command.type.IParse; import net.minecraft.command.type.custom.TypeLabel; import net.minecraft.command.type.custom.TypeOperator; import net.minecraft.command.type.custom.TypeSelector; public abstract class CConvertable<T, W> extends Convertable<T, W, SyntaxErrorException> { public final IParse<W> selectorParser = new TypeSelector<>(this); public final IParse<W> labelParser = new TypeLabel<>(this); public final IParse<W> operatorParser = new TypeOperator<>(this); private final Map<ITabCompletion, IPermission> directSelectors = new HashMap<>(); private final Map<ITabCompletion, IPermission> possibleSelectors = new HashMap<>(); private final Map<ITabCompletion, IPermission> directOperators = new HashMap<>(); private final Map<ITabCompletion, IPermission> possibleOperators = new HashMap<>(); public CConvertable(final String name) { super(name); } @Override public void clear() { super.clear(); this.directSelectors.clear(); this.possibleSelectors.clear(); this.directOperators.clear(); this.possibleOperators.clear(); } public final void addSelector(final ITabCompletion selector, final IPermission permission) { this.directSelectors.put(selector, permission); this.possibleSelectors.put(selector, permission); for (final Convertable<?, ?, ?> convertable : this.convertableTo.keySet()) convertable.addPossibleSelector(selector, permission); } public final void addOperator(final ITabCompletion operator, final IPermission permission) { this.directOperators.put(operator, permission); this.possibleOperators.put(operator, permission); for (final Convertable<?, ?, ?> convertable : this.convertableTo.keySet()) convertable.addPossibleOperator(operator, permission); } public final Map<ITabCompletion, IPermission> getSelectorCompletions() { return this.possibleSelectors; } public final Map<ITabCompletion, IPermission> getOperatorCompletions() { return this.possibleOperators; } @Override public void addPossibleSelector(final ITabCompletion tc, final IPermission permission) { this.possibleSelectors.put(tc, permission); } @Override public void addPossibleOperator(final ITabCompletion tc, final IPermission permission) { this.possibleOperators.put(tc, permission); } @Override public void adjustCompletions(final Convertable<?, ?, ?> target) { for (final Entry<ITabCompletion, IPermission> selector : this.directSelectors.entrySet()) target.addPossibleSelector(selector.getKey(), selector.getValue()); for (final Entry<ITabCompletion, IPermission> operator : this.directOperators.entrySet()) target.addPossibleOperator(operator.getKey(), operator.getValue()); } }