package net.minecraft.command.arg; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; import net.minecraft.command.arg.TypedWrapper.Getter; import net.minecraft.command.type.management.TypeID; public abstract class CommandArg<T> implements Processable { /** * DO NOT modify the return value in any way! */ public abstract T eval(ICommandSender sender) throws CommandException; public final Processable processable() { return new Processable() { @Override public void process(final ICommandSender sender) throws CommandException { CommandArg.this.eval(sender); } }; } public static <T> T eval(final CommandArg<T> toEval, final ICommandSender sender) throws CommandException { return toEval == null ? null : toEval.eval(sender); } public static <T> T get(final Getter<T> getter) throws CommandException { return getter == null ? null : getter.get(); } @Override public void process(final ICommandSender sender) throws CommandException { this.eval(sender); } public ArgWrapper<T> wrap(final TypeID<T> type) { return ArgWrapper.create(type, this); } public static abstract class Primitive<T> extends CommandArg<T> implements Getter<T> { } }