package net.minecraft.command.arg; import java.util.Iterator; import java.util.List; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; public class CompoundArg<T> extends CommandArg<T> { protected final List<Processable> toProcess; protected final CommandArg<T> trailing; public CompoundArg(final List<Processable> toProcess, final CommandArg<T> trailing) { this.toProcess = toProcess; this.trailing = trailing; } @Override public T eval(final ICommandSender sender) throws CommandException { for (final Processable toProc : this.toProcess) toProc.process(sender); return this.trailing.eval(sender); } public static <T> CommandArg<T> create(final List<Processable> toProcess, final List<Boolean> ignoreErrors, final CommandArg<T> trailing) { if (toProcess.isEmpty()) return trailing; return new IgnoreErrors<>(toProcess, ignoreErrors, trailing); } public static <T> CommandArg<T> create(final List<Processable> toProcess, final CommandArg<T> trailing) { if (toProcess.isEmpty()) return trailing; return new CompoundArg<>(toProcess, trailing); } public static <T> ArgWrapper<T> create(final List<Processable> toProcess, final ArgWrapper<T> trailing) { if (toProcess.isEmpty()) return trailing; return new CompoundArg<>(toProcess, trailing.arg()).wrap(trailing.type); } public static class IgnoreErrors<T> extends CompoundArg<T> { final List<Boolean> ignoreErrors; private IgnoreErrors(final List<Processable> toProcess, final List<Boolean> ignoreErrors, final CommandArg<T> trailing) { super(toProcess, trailing); this.ignoreErrors = ignoreErrors; } @Override public T eval(final ICommandSender sender) throws CommandException { final Iterator<Boolean> it = this.ignoreErrors.iterator(); for (final Processable toProc : this.toProcess) if (it.next()) try { toProc.process(sender); } catch (final CommandException ex) { } else toProc.process(sender); return this.trailing.eval(sender); } } }