SensorBeacon class
Пакет: com.hypixel.hytale.server.npc.corecomponents.entity
Файл: com/hypixel/hytale/server/npc/corecomponents/entity/SensorBeacon.java
extends: SensorBase
Поля (8)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ComponentType<EntityStore, TransformComponent> |
TRANSFORM_COMPONENT_TYPE |
|
Vector3d |
var10 |
|
TransformComponent |
var11 |
|
Vector3d |
var12 |
|
BeaconSupport |
var6 |
|
Ref |
var7 |
|
Ref |
var8 |
|
TransformComponent |
var9 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
if if(var6 == null) |
|
|
if if(var7 == null) |
|
|
if if(this.targetSlot >= 0) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.entity;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.components.messaging.BeaconSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.SensorBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.entity.builders.BuilderSensorBeacon;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class SensorBeacon class="kw">extends SensorBase {
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
class="kw">protected class="kw">final int messageIndex;
class="kw">protected class="kw">final double range;
class="kw">protected class="kw">final int targetSlot;
class="kw">protected class="kw">final boolean consume;
class="kw">protected class="kw">final boolean rebind;
class="kw">private class="kw">final EntityPositionProvider positionProvider = new EntityPositionProvider();
class="kw">public SensorBeacon(@Nonnull BuilderSensorBeacon var1, @Nonnull BuilderSupport var2) {
super(var1);
this.messageIndex = var1.getMessageSlot(var2);
this.range = var1.getRange(var2);
this.targetSlot = var1.getTargetSlot(var2);
this.consume = var1.isConsume();
this.rebind = var1.isRebind();
}
@Override
class="kw">public boolean matches(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, double var3, @Nonnull Store<EntityStore> var5) {
if (!super.matches(var1, var2, var3, var5)) {
class="kw">return false;
}
BeaconSupport var6 = var5.getComponent(var1, BeaconSupport.getComponentType());
if (var6 == null) {
this.positionProvider.clear();
class="kw">return false;
}
if (!var6.isMessageQueued(this.messageIndex)) {
this.positionProvider.clear();
class="kw">return false;
}
Ref var7 = this.consume ? var6.pollMessage(this.messageIndex) : var6.peekMessage(this.messageIndex);
if (var7 == null) {
this.positionProvider.clear();
class="kw">return false;
}
Ref var8 = this.positionProvider.setTarget(var7, var5);
if (var8 != null && var8.isValid()) {
TransformComponent var9 = var5.getComponent(var8, TRANSFORM_COMPONENT_TYPE);
assert var9 != null;
Vector3d var10 = var9.getPosition();
TransformComponent var11 = var5.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
assert var11 != null;
Vector3d var12 = var11.getPosition();
if (var10.distanceSquared(var12) > this.range * this.range) {
this.positionProvider.clear();
class="kw">return false;
}
if (this.targetSlot >= 0) {
var2.getMarkedEntitySupport().setMarkedEntity(this.targetSlot, var8, this.rebind, var5);
}
if (var2.getDebugSupport().isDebugFlagSet(RoleDebugFlags.BeaconMessages)) {
((HytaleLogger.Api)NPCPlugin.get().getLogger().atInfo())
.log("ID %d received message '%s' with target ID %d", var1.getIndex(), var6.getMessageTextForIndex(this.messageIndex), var7.getIndex());
}
class="kw">return true;
} else {
this.positionProvider.clear();
class="kw">return false;
}
}
@Override
class="kw">public InfoProvider getSensorInfo() {
class="kw">return this.positionProvider;
}
}