65 lines
2.1 KiB
Java
65 lines
2.1 KiB
Java
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]));
|
|
}
|
|
}
|