Config class

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

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

implements: EventCondition.Config

Поля (6)

МодификаторыТипИмя
public static final BuilderCodec<WorldClosedCondition.Config> CODEC
protected static final float DEFAULT_LOAD_TIMEOUT
protected static final WorldClosedCondition.Config EMPTY
protected float loadTimeoutSeconds
WorldClosedCondition var1
protected ContextKey worldKey

Методы (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.WorldContext;
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.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class WorldClosedCondition class="kw">implements EventCondition.Ticking {
   class="kw">public class="kw">static class="kw">final String ID = "WorldClosedCondition";
   class="kw">public class="kw">static class="kw">final EventCondition.Type TYPE = new EventCondition.Type("WorldClosedCondition", 2.0F);
   class="kw">public class="kw">static class="kw">final BuilderCodec<WorldClosedCondition> CODEC = BuilderCodec.builder(WorldClosedCondition.class, WorldClosedCondition::new).build();
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">protected WorldClosedCondition.Config config = WorldClosedCondition.Config.EMPTY;
   @Nullable
   class="kw">protected WorldContext world = null;
   class="kw">protected boolean isLoaded = false;
   class="kw">protected boolean wasLoaded = false;
   class="kw">protected float timeoutSeconds = Float.NaN;

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

   @Override
   class="kw">public boolean test() {
      class="kw">return !this.wasLoaded && !Float.isNaN(this.timeoutSeconds) && this.timeoutSeconds <= 0.0F || this.wasLoaded && !this.isLoaded;
   }

   @Override
   class="kw">public void reset() {
      this.wasLoaded = false;
      this.isLoaded = false;
      this.world = null;
      this.timeoutSeconds = Float.NaN;
   }

   @Override
   class="kw">public void tick(float var1, @Nonnull Store<EntityStore> var2) {
      if (this.world != null) {
         assert !Float.isNaN(this.timeoutSeconds) : "WorldClosedCondition.tick() called before onStart()";
         boolean var3 = this.world.getWorld() != null;
         this.wasLoaded |= var3;
         this.isLoaded = var3;
         this.timeoutSeconds -= var1;
      }
   }

   @Override
   class="kw">public boolean onStart(@Nonnull WorldEvent var1) {
      if (this.config.worldKey == null) {
         ((HytaleLogger.Api)LOGGER.atWarning()).log("Condition failed: worldKey not set");
         class="kw">return false;
      } else {
         this.timeoutSeconds = this.config.loadTimeoutSeconds;
         this.world = var1.context.get(this.config.worldKey, WorldContext.class);
         if (this.world == null) {
            ((HytaleLogger.Api)LOGGER.atWarning()).log("Condition failed: WorldContext missing for key: %s", this.config.worldKey.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<WorldClosedCondition.Config> CODEC = BuilderCodec.builder(
            WorldClosedCondition.Config.class, WorldClosedCondition.Config::new
         )
         .documentation("A condition that completes when a given world is closed and unloaded.")
         .<ContextKey>append(new KeyedCodec<>("WorldKey", ContextKey.CODEC), (var0, var1) -> var0.worldKey = var1, var0 -> var0.worldKey)
         .documentation("The variable name of the world to check is closed and unloaded.")
         .add()
         .<Float>append(new KeyedCodec<>("LoadTimeoutSeconds", Codec.FLOAT), (var0, var1) -> var0.loadTimeoutSeconds = var1, var0 -> var0.loadTimeoutSeconds)
         .documentation(
            "Initial amount of time to wait for the target world to load. This prevents the condition completing immediately when the world is slow to load."
         )
         .addValidator(Validators.greaterThanOrEqual(1.0F))
         .add()
         .build();
      class="kw">protected class="kw">static class="kw">final WorldClosedCondition.Config EMPTY = new WorldClosedCondition.Config();
      class="kw">protected class="kw">static class="kw">final float DEFAULT_LOAD_TIMEOUT = 10.0F;
      @Nullable
      class="kw">protected ContextKey worldKey = null;
      class="kw">protected float loadTimeoutSeconds = 10.0F;

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

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

      @Override
      class="kw">public void validate(@Nonnull Validator var1) {
         var1.addReferencedKey("WorldClosedCondition", "WorldKey", this.worldKey);
      }
   }
}