package wtf.hak.survivalfabric.utils; public class MathUtils { public static double clamp(double value, double min, double max) { return Math.max(min, Math.min(max, value)); } public static float clamp(float value, float min, float max) { return Math.max(min, Math.min(max, value)); } public static int clamp(int value, int min, int max) { return Math.max(min, Math.min(max, value)); } public static boolean hasSupportedOperator(String msg) { return msg.contains("+") || msg.contains("-") || msg.contains("*") || msg.contains("/"); } public static double evaluateExpression(String expression) { return evaluate(expression.replaceAll("\\s", ""), new int[]{0}); } public static double evaluate(String expr, int[] index) { double value = parseTerm(expr, index); while (index[0] < expr.length()) { char op = expr.charAt(index[0]); if (op != '+' && op != '-') break; index[0]++; double nextTerm = parseTerm(expr, index); value = (op == '+') ? value + nextTerm : value - nextTerm; } return value; } public static double parseTerm(String expr, int[] index) { double value = parseFactor(expr, index); while (index[0] < expr.length()) { char op = expr.charAt(index[0]); if (op != '*' && op != '/') break; index[0]++; double nextFactor = parseFactor(expr, index); value = (op == '*') ? value * nextFactor : value / nextFactor; } return value; } public static double parseFactor(String expr, int[] index) { if (expr.charAt(index[0]) == '(') { index[0]++; double value = evaluate(expr, index); index[0]++; // Skip closing ')' return value; } int start = index[0]; while (index[0] < expr.length() && (Character.isDigit(expr.charAt(index[0])) || expr.charAt(index[0]) == '.')) { index[0]++; } return Double.parseDouble(expr.substring(start, index[0])); } }