ProximityCondition class

Пакет: com.hypixel.hytale.builtin.adventure.worldevents.condition

Файл: com/hypixel/hytale/builtin/adventure/worldevents/condition/ProximityCondition.java

implements: EventCondition.Ticking

Поля (9)

МодификаторыТипИмя
public static final BuilderCodec<ProximityCondition.Config> CODEC
protected static final ProximityCondition.Config EMPTY
final String ID
protected boolean invert
protected ContextKey locationKey
protected double radius
ProximityCondition var1
SpatialResource var3
List var4

Методы (6)

МодификаторыВозвратСигнатура
public Configpublic Config()
public EventCondition createpublic EventCondition create()
if if(!this.result && this.location != null)
if if(this.config.locationKey == null)
if if(this.location == null)
public void validatepublic void validate(@Nonnull Validator var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.ContextKey;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.context.LocationContext;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Validator;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEvent;
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.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.EntityModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
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 ProximityCondition class="kw">implements EventCondition.Ticking {
   class="kw">public class="kw">static class="kw">final String ID = "ProximityCondition";
   class="kw">public class="kw">static class="kw">final EventCondition.Type TYPE = new EventCondition.Type("ProximityCondition", 0.25F);
   class="kw">public class="kw">static class="kw">final BuilderCodec<ProximityCondition> CODEC = BuilderCodec.builder(ProximityCondition.class, ProximityCondition::new).build();
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">protected ProximityCondition.Config config = ProximityCondition.Config.EMPTY;
   @Nullable
   class="kw">protected LocationContext location = null;
   class="kw">protected boolean result = false;
   class="kw">protected class="kw">final Vector3d position = new Vector3d();

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

   @Override
   class="kw">public boolean test() {
      class="kw">return this.result;
   }

   @Override
   class="kw">public void reset() {
      this.result = false;
   }

   @Override
   class="kw">public void tick(float var1, @Nonnull Store<EntityStore> var2) {
      if (!this.result && this.location != null) {
         SpatialResource var3 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
         List var4 = SpatialResource.getThreadLocalReferenceList();
         var3.getSpatialStructure().collect(this.position.set(this.location.location()), this.config.radius, var4);
         this.result = var4.isEmpty() == this.config.invert;
      }
   }

   @Override
   class="kw">public boolean onStart(@Nonnull WorldEvent var1) {
      if (this.config.locationKey == null) {
         ((HytaleLogger.Api)LOGGER.atWarning()).log("Condition failed: locationKey is not set");
         class="kw">return false;
      } else {
         this.location = var1.context.get(this.config.locationKey, LocationContext.class);
         if (this.location == null) {
            ((HytaleLogger.Api)LOGGER.atWarning()).log("Condition failed: LocationContext missing for key: %s", this.config.locationKey.getName());
            class="kw">return false;
         } else {
            class="kw">return true;
         }
      }
   }

   class="kw">public class="kw">static class Config class="kw">implements EventCondition.Config {
      class="kw">public class="kw">static class="kw">final BuilderCodec<ProximityCondition.Config> CODEC = BuilderCodec.builder(ProximityCondition.Config.class, ProximityCondition.Config::new)
         .documentation("An event condition that completes once one or more players have entered proximity of a given location.")
         .<ContextKey>append(new KeyedCodec<>("LocationKey", ContextKey.CODEC), (var0, var1) -> var0.locationKey = var1, var0 -> var0.locationKey)
         .documentation("The variable name of the location to check player proximity to.")
         .add()
         .<Double>append(new KeyedCodec<>("Radius", Codec.DOUBLE), (var0, var1) -> var0.radius = var1, var0 -> var0.radius)
         .documentation("The radius around the location that one or more players must be within to complete the condition.")
         .add()
         .<Boolean>append(new KeyedCodec<>("Invert", Codec.BOOLEAN), (var0, var1) -> var0.invert = var1, var0 -> var0.invert)
         .documentation("Inverts the result so that it completes once there are no players within proximity of the location.")
         .add()
         .build();
      class="kw">protected class="kw">static class="kw">final ProximityCondition.Config EMPTY = new ProximityCondition.Config();
      @Nullable
      class="kw">protected ContextKey locationKey = null;
      class="kw">protected double radius = 10.0;
      class="kw">protected boolean invert = false;

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

      @Nonnull
      @Override
      class="kw">public EventCondition create() {
         ProximityCondition var1 = new ProximityCondition();
         var1.config = this;
         class="kw">return var1;
      }

      @Override
      class="kw">public void validate(@Nonnull Validator var1) {
         var1.addReferencedKey("ProximityCondition", "LocationKey", this.locationKey);
      }
   }
}