SensorEval class
Пакет: com.hypixel.hytale.server.npc.corecomponents.utility
Файл: com/hypixel/hytale/server/npc/corecomponents/utility/SensorEval.java
extends: SensorBase
Поля (5)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String |
expression |
|
ObjectArrayList |
var3 |
|
ExecutionContext |
var3 |
|
StdScope |
var4 |
|
ValueType |
var5 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Expression '" + this.expression + "' must return boolean value but is:" + var5) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Expression must return boolean value") |
abstract |
throw new |
RuntimeExceptionthrow new RuntimeException("Error evaluating '" + this.expression + "'", var6) |
protected |
ValueType |
compileValueType compile(@Nonnull String var1, StdScope var2, List<ExecutionContext.Instruction> var3) |
protected |
boolean |
evalBooleanboolean evalBoolean(StdScope var1, @Nonnull ExecutionContext.Instruction[] var2) |
|
|
if if(var5 != ValueType.BOOLEAN) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.utility;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.utility.builders.BuilderSensorEval;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.npc.util.expression.StdScope;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ValueType;
class="kw">import com.hypixel.hytale.server.npc.util.expression.compile.CompileContext;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">public class SensorEval class="kw">extends SensorBase {
class="kw">protected class="kw">final String expression;
@Nonnull
class="kw">protected class="kw">final CompileContext compileContext;
class="kw">protected ExecutionContext.Instruction[] instructions;
class="kw">protected boolean isValid;
class="kw">public SensorEval(@Nonnull BuilderSensorEval var1, @Nonnull BuilderSupport var2) {
super(var1);
this.expression = var1.getExpression();
this.compileContext = new CompileContext();
this.isValid = true;
try {
ObjectArrayList var3 = new ObjectArrayList();
StdScope var4 = var2.getSensorScope();
ValueType var5 = this.compile(this.expression, var4, var3);
if (var5 != ValueType.BOOLEAN) {
this.isValid = false;
throw new IllegalStateException("Expression '" + this.expression + "' must class="kw">return boolean value but is:" + var5);
}
this.instructions = (ExecutionContext.Instruction[])var3.toArray(ExecutionContext.Instruction[]::new);
} catch (RuntimeException var6) {
this.isValid = false;
throw new RuntimeException("Error evaluating '" + this.expression + "'", var6);
}
}
@Override
class="kw">public boolean matches(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
class="kw">return super.matches(var1, var2, var3, var5) && this.isValid && this.evalBoolean(var2.getEntitySupport().getSensorScope(), this.instructions);
}
@Override
class="kw">public InfoProvider getSensorInfo() {
class="kw">return null;
}
class="kw">protected ValueType compile(@Nonnull String var1, StdScope var2, List<ExecutionContext.Instruction> var3) {
class="kw">return this.compileContext.compile(var1, var2, true, var3);
}
class="kw">protected boolean evalBoolean(StdScope var1, @Nonnull ExecutionContext.Instruction[] var2) {
ExecutionContext var3 = this.compileContext.getExecutionContext();
if (var3.execute(var2, var1) != ValueType.BOOLEAN) {
throw new IllegalStateException("Expression must class="kw">return boolean value");
} else {
class="kw">return var3.popBoolean();
}
}
}