package com.intellectualcrafters.plot.object; import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.commands.DebugExec; import com.intellectualcrafters.plot.commands.MainCommand; import javax.script.ScriptException; public abstract class Expression<T> { public abstract T evaluate(T arg); public static <U> Expression<U> constant(final U value) { return new Expression<U>() { @Override public U evaluate(U arg) { return value; } }; } public static Expression<Double> linearDouble(final Double value) { return new Expression<Double>() { @Override public Double evaluate(Double arg) { return (arg * value); } }; } public static Expression<Double> doubleExpression(final String expression) { try { return constant(Double.parseDouble(expression)); } catch (NumberFormatException ignore) {} if (expression.endsWith("*{arg}")) { try { return linearDouble(Double.parseDouble(expression.substring(0, expression.length() - 6))); } catch (NumberFormatException ignore) {} } return new Expression<Double>() { @Override public Double evaluate(Double arg) { DebugExec exec = (DebugExec) MainCommand.getInstance().getCommand(DebugExec.class); try { return (Double) exec.getEngine().eval(expression.replace("{arg}", "" + arg)); } catch (ScriptException e) { PS.debug("Invalid Expression: " + expression); e.printStackTrace(); } return 0d; } }; } }