hytale-server/com/hypixel/hytale/server/npc/util/expression/Scope.java

81 lines
2.2 KiB
Java

package com.hypixel.hytale.server.npc.util.expression;
import java.util.function.BooleanSupplier;
import java.util.function.DoubleSupplier;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public interface Scope {
Supplier<String> getStringSupplier(String var1);
DoubleSupplier getNumberSupplier(String var1);
BooleanSupplier getBooleanSupplier(String var1);
Supplier<String[]> getStringArraySupplier(String var1);
Supplier<double[]> getNumberArraySupplier(String var1);
Supplier<boolean[]> getBooleanArraySupplier(String var1);
Scope.Function getFunction(String var1);
default String getString(String name) {
return this.getStringSupplier(name).get();
}
default double getNumber(String name) {
return this.getNumberSupplier(name).getAsDouble();
}
default boolean getBoolean(String name) {
return this.getBooleanSupplier(name).getAsBoolean();
}
default String[] getStringArray(String name) {
return this.getStringArraySupplier(name).get();
}
default double[] getNumberArray(String name) {
return this.getNumberArraySupplier(name).get();
}
default boolean[] getBooleanArray(String name) {
return this.getBooleanArraySupplier(name).get();
}
boolean isConstant(String var1);
@Nullable
ValueType getType(String var1);
@Nonnull
static String encodeFunctionName(@Nonnull String name, @Nonnull ValueType[] values) {
StringBuilder stringBuilder = new StringBuilder(name).append('@');
for (int i = 0; i < values.length; i++) {
stringBuilder.append(encodeType(values[i]));
}
return stringBuilder.toString();
}
static char encodeType(@Nonnull ValueType type) {
return switch (type) {
case NUMBER -> 'n';
case STRING -> 's';
case BOOLEAN -> 'b';
case NUMBER_ARRAY -> 'N';
case STRING_ARRAY -> 'S';
case BOOLEAN_ARRAY -> 'B';
default -> throw new IllegalStateException("Type cannot be encoded for function name: " + type);
};
}
@FunctionalInterface
public interface Function {
void call(ExecutionContext var1, int var2);
}
}