Scope enum

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

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

Поля (1)

МодификаторыТипИмя
PER_PLAYER, WHOLE_VOLUME

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
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.server.core.entity.UUIDComponent;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;

class="kw">public class CooldownCondition class="kw">extends TriggerCondition {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<CooldownCondition> CODEC = BuilderCodec.builder(CooldownCondition.class, CooldownCondition::new, BASE_CODEC)
      .append(new KeyedCodec<>("Cooldown", Codec.FLOAT, false), (var0, var1) -> var0.cooldown = var1, var0 -> var0.cooldown)
      .add()
      .append(
         new KeyedCodec<>("Scope", new EnumCodec<>(CooldownCondition.Scope.class, EnumCodec.EnumStyle.LEGACY), false),
         (var0, var1) -> var0.scope = var1,
         var0 -> var0.scope
      )
      .add()
      .build();
   class="kw">private float cooldown;
   @Nonnull
   class="kw">private CooldownCondition.Scope scope = CooldownCondition.Scope.PER_PLAYER;
   @Nonnull
   class="kw">private class="kw">final class="kw">transient Map<String, Long> lastVolumeActivationNanos = new ConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final class="kw">transient Map<CooldownCondition.VolumeEntityKey, Long> lastEntityActivationNanos = new ConcurrentHashMap<>();

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

   @Nonnull
   class="kw">public class="kw">static CooldownCondition create(@Nonnull TriggerEventType var0, float var1) {
      class="kw">return create(var0, var1, CooldownCondition.Scope.PER_PLAYER);
   }

   @Nonnull
   class="kw">public class="kw">static CooldownCondition create(@Nonnull TriggerEventType var0, float var1, @Nonnull CooldownCondition.Scope var2) {
      CooldownCondition var3 = new CooldownCondition();
      var3.setEventType(var0);
      var3.cooldown = var1;
      var3.scope = var2;
      class="kw">return var3;
   }

   @Override
   class="kw">public boolean test(@Nonnull TriggerContext var1) {
      if (this.cooldown <= 0.0F) {
         class="kw">return true;
      }

      long var2 = System.nanoTime();
      long var4 = TimeUnit.MILLISECONDS.toNanos((long)(this.cooldown * 1000.0F));
      String var6 = var1.getVolume().getId();
      if (this.scope == CooldownCondition.Scope.WHOLE_VOLUME) {
         Long var9 = this.lastVolumeActivationNanos.get(var6);
         if (var9 != null && var2 - var9 < var4) {
            class="kw">return false;
         }

         this.lastVolumeActivationNanos.put(var6, var2);
         class="kw">return true;
      } else {
         UUIDComponent var7 = var1.getStore().getComponent(var1.getEntityRef(), UUIDComponent.getComponentType());
         if (var7 == null) {
            class="kw">return false;
         }

         UUID var8 = var7.getUuid();
         class="kw">return this.testForEntity(var6, var8, var2);
      }
   }

   boolean testForEntity(@Nonnull String var1, @Nonnull UUID var2, long var3) {
      if (this.cooldown <= 0.0F) {
         class="kw">return true;
      }

      long var5 = TimeUnit.MILLISECONDS.toNanos((long)(this.cooldown * 1000.0F));
      CooldownCondition.VolumeEntityKey var7 = new CooldownCondition.VolumeEntityKey(var1, var2);
      if (this.scope == CooldownCondition.Scope.WHOLE_VOLUME) {
         Long var9 = this.lastVolumeActivationNanos.get(var1);
         if (var9 != null && var3 - var9 < var5) {
            class="kw">return false;
         }

         this.lastVolumeActivationNanos.put(var1, var3);
         class="kw">return true;
      } else {
         this.lastEntityActivationNanos.entrySet().removeIf(var4 -> var3 - var4.getValue() >= var5);
         Long var8 = this.lastEntityActivationNanos.get(var7);
         if (var8 != null && var3 - var8 < var5) {
            class="kw">return false;
         }

         this.lastEntityActivationNanos.put(var7, var3);
         class="kw">return true;
      }
   }

   class="kw">public enum Scope {
      PER_PLAYER,
      WHOLE_VOLUME;

      Scope() {
      }
   }

   class="kw">private record VolumeEntityKey(@Nonnull String volumeId, @Nonnull UUID entityUuid) {
      class="kw">private VolumeEntityKey {
      }
   }
}