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