TriggerNpcMarkersEffect class

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

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

extends: TriggerEffect

Поля (13)

МодификаторыТипИмя
Vector3d var12
TriggerVolumeShape var13
int var14
Ref var16
SpawnMarkerEntity var17
TransformComponent var18
Store var2
SpatialResource var3
List var4
ReferenceArrayList var5
ReferenceOpenHashSet var6
double var7
int var9

Методы (5)

МодификаторыВозвратСигнатура
for for(VolumeEntry var11 : var4)
abstract for for(int var15 = 0; var15 < var5.size()
if if(var3 != null)
if if(var9 == 0)
static boolean matchesAreaboolean matchesArea(@Nonnull TriggerVolumeShape var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
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.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
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.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.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
class="kw">import java.util.List;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class TriggerNpcMarkersEffect class="kw">extends TriggerEffect {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<TriggerNpcMarkersEffect> CODEC = BuilderCodec.builder(
         TriggerNpcMarkersEffect.class, TriggerNpcMarkersEffect::new, BASE_CODEC
      )
      .append(new KeyedCodec<>("MarkerType", Codec.STRING, false), (var0, var1) -> var0.markerType = var1, var0 -> var0.markerType)
      .add()
      .append(new KeyedCodec<>("Range", Codec.DOUBLE, false), (var0, var1) -> var0.range = var1, var0 -> var0.range > 0.0 ? var0.range : null)
      .add()
      .append(new KeyedCodec<>("MatchTag", Codec.STRING, false), (var0, var1) -> var0.matchTag = var1, var0 -> var0.matchTag)
      .add()
      .append(new KeyedCodec<>("Radius", Codec.DOUBLE, false), (var0, var1) -> var0.radius = var1, var0 -> var0.radius > 0.0 ? var0.radius : null)
      .add()
      .append(new KeyedCodec<>("Center", new EnumCodec<>(TaggedVolumeEffectUtil.Center.class), false), (var0, var1) -> var0.center = var1, var0 -> var0.center)
      .add()
      .build();
   @Nullable
   class="kw">private String markerType;
   class="kw">private double range;
   @Nullable
   class="kw">private String matchTag;
   class="kw">private double radius;
   @Nonnull
   class="kw">private TaggedVolumeEffectUtil.Center center = TaggedVolumeEffectUtil.Center.VOLUME;

   class="kw">public TriggerNpcMarkersEffect() {
   }

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();
      SpatialResource var3 = var2.getResource(SpawningPlugin.get().getSpawnMarkerSpatialResource());
      if (var3 != null) {
         List var4 = this.resolveAreaVolumes(var1);
         if (var4.isEmpty()) {
            LOGGER.at(Level.FINE).log("TriggerNpcMarkers: no area volumes matched for volume '%s' (MatchTag: %s)", var1.getVolume().getId(), this.matchTag);
         } else {
            ReferenceArrayList var5 = new ReferenceArrayList();
            ReferenceOpenHashSet var6 = new ReferenceOpenHashSet();
            double var7 = this.range > 0.0 ? this.range * this.range : 0.0;
            int var9 = 0;

            for (VolumeEntry var11 : var4) {
               Vector3d var12 = var11.getPosition();
               TriggerVolumeShape var13 = var11.getShape();
               int var14 = (int)Math.ceil(Math.max(var13.getBoundingRadius(), this.range)) + 1;
               var5.clear();
               var3.getSpatialStructure().collect(var12, var14, var5);

               for (int var15 = 0; var15 < var5.size(); var15++) {
                  Ref var16 = (Ref<EntityStore>)var5.get(var15);
                  if (var16.isValid() && var6.add(var16)) {
                     SpawnMarkerEntity var17 = var2.getComponent(var16, SpawnMarkerEntity.getComponentType());
                     if (var17 != null && var17.isManualTrigger() && (this.markerType == null || this.markerType.equals(var17.getSpawnMarkerId()))) {
                        TransformComponent var18 = var2.getComponent(var16, TransformComponent.getComponentType());
                        if (var18 != null && matchesArea(var13, var12, var18.getPosition(), var7) && var17.trigger(var16, null, var2)) {
                           var9++;
                        }
                     }
                  }
               }
            }

            if (var9 == 0) {
               LOGGER.at(Level.FINE)
                  .log(
                     "TriggerNpcMarkers: no manual spawn markers matched in volume '%s'%s",
                     var1.getVolume().getId(),
                     this.markerType != null ? " (MarkerType filter: " + this.markerType + ")" : ""
                  );
            }
         }
      }
   }

   @Nonnull
   class="kw">private List<VolumeEntry> resolveAreaVolumes(@Nonnull TriggerContext var1) {
      class="kw">return this.matchTag != null && !this.matchTag.isBlank()
         ? TaggedVolumeEffectUtil.collectTargets(var1, this.matchTag, this.radius, this.center)
         : var1.getSpatialVolumes();
   }

   class="kw">private class="kw">static boolean matchesArea(@Nonnull TriggerVolumeShape var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3) {
      class="kw">return var0.contains(var1, var2) ? true : var3 > 0.0 && var1.distanceSquared(var2) <= var3;
   }
}