CooldownCondition class

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

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

extends: TriggerCondition

Поля (12)

МодификаторыТипИмя
PER_PLAYER, WHOLE_VOLUME
long var2
CooldownCondition var3
long var4
long var5
String var6
UUIDComponent var7
CooldownCondition.VolumeEntityKey var7
UUID var8
Long var8
Long var9
Long var9

Методы (12)

МодификаторыВозвратСигнатура
Scope Scope()
private record VolumeEntityKeyrecord VolumeEntityKey(@Nonnull String volumeId, @Nonnull UUID entityUuid)
abstract return createreturn create(var0, var1, CooldownCondition.Scope.PER_PLAYER)
if if(this.cooldown <= 0.0F)
if if(this.scope == CooldownCondition.Scope.WHOLE_VOLUME)
if if(var9 != null && var2 - var9 < var4)
if if(var7 == null)
if if(this.cooldown <= 0.0F)
if if(this.scope == CooldownCondition.Scope.WHOLE_VOLUME)
if if(var9 != null && var3 - var9 < var5)
if if(var8 != null && var3 - var8 < var5)
boolean testForEntityboolean testForEntity(@Nonnull String var1, @Nonnull UUID var2, long var3)

Исходный код

Показать/скрыть
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 {
      }
   }
}