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 {
}
}
}