Config class

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

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

implements: EventCondition.Config

Поля (6)

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

Методы (2)

МодификаторыВозвратСигнатура
public EventCondition createpublic EventCondition create()
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);
      }
   }
}