SensorDroppedItem class
Пакет: com.hypixel.hytale.server.npc.corecomponents.items
Файл: com/hypixel/hytale/server/npc/corecomponents/items/SensorDroppedItem.java
extends: SensorBase
Поля (11)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ComponentType<EntityStore, TransformComponent> |
TRANSFORM_COMPONENT_TYPE |
|
Attitude |
var10 |
|
String[] |
var3 |
|
TransformComponent |
var4 |
|
Vector3d |
var5 |
|
HeadRotation |
var6 |
|
TransformComponent |
var6 |
|
Ref |
var7 |
|
Vector3d |
var7 |
|
ItemComponent |
var8 |
|
ItemStack |
var9 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
protected |
boolean |
filterItemboolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3) |
|
|
if if(var7 == null) |
|
|
if if(this.viewCone > 0.0F) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.items;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.server.core.asset.type.attitude.Attitude;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
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.items.builders.BuilderSensorDroppedItem;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.PositionCache;
class="kw">import com.hypixel.hytale.server.npc.role.support.WorldSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.EntityPositionProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.util.InventoryHelper;
class="kw">import com.hypixel.hytale.server.npc.util.NPCPhysicsMath;
class="kw">import java.util.EnumSet;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class SensorDroppedItem class="kw">extends SensorBase {
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
@Nullable
class="kw">protected class="kw">final List<String> items;
@Nonnull
class="kw">protected class="kw">final EnumSet<Attitude> attitudes;
class="kw">protected class="kw">final double range;
class="kw">protected class="kw">final float viewCone;
class="kw">protected class="kw">final boolean hasLineOfSight;
class="kw">protected float heading;
class="kw">protected class="kw">final EntityPositionProvider positionProvider = new EntityPositionProvider();
class="kw">public SensorDroppedItem(@Nonnull BuilderSensorDroppedItem var1, @Nonnull BuilderSupport var2) {
super(var1);
String[] var3 = var1.getItems(var2);
this.items = var3 != null ? List.of(var3) : null;
this.attitudes = var1.getAttitudes(var2);
this.range = var1.getRange(var2);
this.viewCone = var1.getViewSectorRadians(var2);
this.hasLineOfSight = var1.getHasLineOfSight(var2);
}
@Override
class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
var1.getPositionCache().requireDroppedItemDistance(this.range);
}
@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)) {
this.positionProvider.clear();
class="kw">return false;
} else {
HeadRotation var6 = var5.getComponent(var1, HeadRotation.getComponentType());
assert var6 != null;
this.heading = var6.getRotation().yaw();
Ref var7 = var2.getPositionCache()
.getClosestDroppedItemInRange(var1, 0.0, this.range, (var1x, var2x, var3x) -> var1x.filterItem(var1, var2x, var3x), this, var5);
if (var7 == null) {
this.positionProvider.clear();
class="kw">return false;
} else {
this.positionProvider.setTarget(var7, var5);
class="kw">return true;
}
}
}
@Override
class="kw">public InfoProvider getSensorInfo() {
class="kw">return this.positionProvider;
}
class="kw">protected boolean filterItem(@Nonnull Ref<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull ComponentAccessor<EntityStore> var3) {
if (!var2.isValid()) {
class="kw">return false;
}
if (this.viewCone > 0.0F) {
TransformComponent var4 = var3.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
assert var4 != null;
Vector3d var5 = var4.getPosition();
TransformComponent var6 = var3.getComponent(var2, TRANSFORM_COMPONENT_TYPE);
assert var6 != null;
Vector3d var7 = var6.getPosition();
if (!NPCPhysicsMath.inViewSector(var5.x(), var5.z(), this.heading, this.viewCone, var7.x(), var7.z())) {
class="kw">return false;
}
}
if (this.hasLineOfSight && !PositionCache.get(var1, var3).hasLineOfSight(var1, var2, var3)) {
class="kw">return false;
}
if (this.items == null && this.attitudes.isEmpty()) {
class="kw">return true;
}
ItemComponent var8 = var3.getComponent(var2, ItemComponent.getComponentType());
assert var8 != null;
ItemStack var9 = var8.getItemStack();
if (InventoryHelper.matchesItem(this.items, var9)) {
class="kw">return true;
}
Attitude var10 = WorldSupport.get(var1, var3).getItemAttitude(var9);
class="kw">return var10 != null && this.attitudes.contains(var10);
}
}