TriggerVolumeEntityQuery class

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/TriggerVolumeEntityQuery.java

Поля (20)

МодификаторыТипИмя
final double DEFAULT_ENTITY_HEIGHT
LinkedHashSet var1
ArrayList var10
Ref var10
List var11
TransformComponent var11
UUIDComponent var12
TriggerVolumeShape var14
Vector3d var15
NPCEntity var3
Vector3d var4
String var4
String var4
EntityModule var5
double var5
SpatialResource var6
SpatialResource var7
Vector3d var7
Set var8
HashSet var9

Методы (16)

МодификаторыВозвратСигнатура
static void collectFromSpatialvoid collectFromSpatial(@Nonnull Store<EntityStore> var0, @Nonnull SpatialResource<Ref<EntityStore>, EntityStore> var1, @Nonnull TriggerVolumeShape var2, @Nonnull Vector3d var3, boolean var4, @Nonnull Set<String> var5, @Nonnull HashSet<UUID> var6, @Nonnull List<Ref<EntityStore>> var7, @Nonnull List<Ref<EntityStore>> var8)
abstract collectFromSpatial collectFromSpatial(var0, var6, var14, var15, false, var8, var9, var10, var11)
abstract collectFromSpatial collectFromSpatial(var0, var7, var14, var15, true, var8, var9, var10, var11)
abstract return collectTargetsreturn collectTargets(var0, var1, true, false, var2)
static boolean containsEntityboolean containsEntity(@Nonnull TriggerVolumeShape var0, @Nonnull Vector3d var1, @Nonnull TransformComponent var2, @Nullable BoundingBox var3)
for for(VolumeEntry var13 : var1)
for for(String var3 : var0)
abstract for for(int var9 = 0; var9 < var8.size()
if if(var6 == null && var7 == null)
if if(var6 != null)
if if(var7 != null)
if if(var5 <= 0.0)
if if(var3 == null)
if if(var3 != null)
static boolean isLivingNpcboolean isLivingNpc(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull Set<String> var2)
static boolean isLivingPlayerboolean isLivingPlayer(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.shape.TriggerVolumeShape;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Collection;
class="kw">import java.util.HashSet;
class="kw">import java.util.LinkedHashSet;
class="kw">import java.util.List;
class="kw">import java.util.Locale;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class="kw">final class TriggerVolumeEntityQuery {
   class="kw">private class="kw">static class="kw">final double DEFAULT_ENTITY_HEIGHT = 1.8;
   class="kw">private class="kw">static class="kw">final ThreadLocal<Vector3d> THREAD_LOCAL_TEST_POINT = ThreadLocal.withInitial(Vector3d::new);

   class="kw">private TriggerVolumeEntityQuery() {
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> collectLivingNpcs(@Nonnull Store<EntityStore> var0, @Nonnull List<VolumeEntry> var1, @Nonnull Collection<String> var2) {
      class="kw">return collectTargets(var0, var1, true, false, var2);
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> collectTargets(
      @Nonnull Store<EntityStore> var0, @Nonnull List<VolumeEntry> var1, boolean var2, boolean var3, @Nonnull String var4
   ) {
      class="kw">return collectTargets(var0, var1, var2, var3, var4.isBlank() ? List.of() : List.of(var4));
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> collectTargets(
      @Nonnull Store<EntityStore> var0, @Nonnull List<VolumeEntry> var1, boolean var2, boolean var3, @Nonnull Collection<String> var4
   ) {
      EntityModule var5 = EntityModule.get();
      SpatialResource var6 = var2 ? var0.getResource(var5.getEntitySpatialResourceType()) : null;
      SpatialResource var7 = var3 ? var0.getResource(var5.getPlayerSpatialResourceType()) : null;
      if (var6 == null && var7 == null) {
         class="kw">return List.of();
      }

      Set var8 = normalizeRoleFilters(var4);
      HashSet var9 = new HashSet<>();
      ArrayList var10 = new ArrayList<>();
      List var11 = SpatialResource.getThreadLocalReferenceList();

      for (VolumeEntry var13 : var1) {
         TriggerVolumeShape var14 = var13.getShape();
         Vector3d var15 = var13.getPosition();
         if (var6 != null) {
            collectFromSpatial(var0, var6, var14, var15, false, var8, var9, var10, var11);
         }

         if (var7 != null) {
            collectFromSpatial(var0, var7, var14, var15, true, var8, var9, var10, var11);
         }
      }

      class="kw">return var10;
   }

   class="kw">private class="kw">static void collectFromSpatial(
      @Nonnull Store<EntityStore> var0,
      @Nonnull SpatialResource<Ref<EntityStore>, EntityStore> var1,
      @Nonnull TriggerVolumeShape var2,
      @Nonnull Vector3d var3,
      boolean var4,
      @Nonnull Set<String> var5,
      @Nonnull HashSet<UUID> var6,
      @Nonnull List<Ref<EntityStore>> var7,
      @Nonnull List<Ref<EntityStore>> var8
   ) {
      var8.clear();
      var1.getSpatialStructure().collect(var3, var2.getMaxDistanceFromOrigin(), var8);

      for (int var9 = 0; var9 < var8.size(); var9++) {
         Ref var10 = var8.get(var9);
         if (var4 ? isLivingPlayer(var0, var10) : isLivingNpc(var0, var10, var5)) {
            TransformComponent var11 = var0.getComponent(var10, TransformComponent.getComponentType());
            if (var11 != null && containsEntity(var2, var3, var11, var0.getComponent(var10, BoundingBox.getComponentType()))) {
               UUIDComponent var12 = var0.getComponent(var10, UUIDComponent.getComponentType());
               if (var12 != null && var6.add(var12.getUuid())) {
                  var7.add(var10);
               }
            }
         }
      }
   }

   class="kw">private class="kw">static boolean containsEntity(@Nonnull TriggerVolumeShape var0, @Nonnull Vector3d var1, @Nonnull TransformComponent var2, @Nullable BoundingBox var3) {
      Vector3d var4 = var2.getPosition();
      if (var0.contains(var1, var4)) {
         class="kw">return true;
      }

      double var5 = var3 != null ? var3.getBoundingBox().height() : 1.8;
      if (var5 <= 0.0) {
         class="kw">return false;
      }

      Vector3d var7 = THREAD_LOCAL_TEST_POINT.get();
      var7.set(var4.x(), var4.y() + var5 * 0.5, var4.z());
      if (var0.contains(var1, var7)) {
         class="kw">return true;
      }

      var7.set(var4.x(), var4.y() + var5, var4.z());
      class="kw">return var0.contains(var1, var7);
   }

   class="kw">private class="kw">static boolean isLivingNpc(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull Set<String> var2) {
      if (!var1.isValid()) {
         class="kw">return false;
      }

      NPCEntity var3 = var0.getComponent(var1, NPCEntity.getComponentType());
      if (var3 == null) {
         class="kw">return false;
      }

      if (var0.getComponent(var1, DeathComponent.getComponentType()) != null) {
         class="kw">return false;
      }

      if (var2.isEmpty()) {
         class="kw">return true;
      }

      String var4 = var3.getRoleName();
      class="kw">return var4 != null && var2.contains(var4.toLowerCase(Locale.ROOT));
   }

   @Nonnull
   class="kw">private class="kw">static Set<String> normalizeRoleFilters(@Nonnull Collection<String> var0) {
      if (var0.isEmpty()) {
         class="kw">return Set.of();
      }

      LinkedHashSet var1 = new LinkedHashSet<>(var0.size());

      for (String var3 : var0) {
         if (var3 != null) {
            String var4 = var3.trim();
            if (!var4.isEmpty()) {
               var1.add(var4.toLowerCase(Locale.ROOT));
            }
         }
      }

      class="kw">return var1;
   }

   class="kw">private class="kw">static boolean isLivingPlayer(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1) {
      if (!var1.isValid()) {
         class="kw">return false;
      } else {
         class="kw">return var0.getComponent(var1, PlayerRef.getComponentType()) == null ? false : var0.getComponent(var1, DeathComponent.getComponentType()) == null;
      }
   }
}