IntervalCondition class
Пакет: com.hypixel.hytale.builtin.adventure.worldevents.condition
Файл: com/hypixel/hytale/builtin/adventure/worldevents/condition/IntervalCondition.java
implements: EventCondition.Ticking
Поля (10)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<IntervalCondition.Config> |
CODEC |
|
protected static final Duration |
DEFAULT_DURATION |
|
protected static final IntervalCondition.Config |
EMPTY |
final |
String |
ID |
|
protected ContextKey |
intervalKey |
|
protected Duration |
intervalMax |
|
protected Duration |
intervalMin |
|
long |
var1 |
|
IntervalCondition |
var1 |
|
long |
var3 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
Configpublic Config() |
|
public EventCondition |
createpublic EventCondition create() |
|
|
if if(this.config.intervalKey != null) |
|
|
if if(this.config.intervalKey != null) |
|
|
if if(this.config.intervalKey != null) |
|
|
if if(var1 instanceof IntervalCondition var2) |
|
public long |
nextRandomSecondspublic long nextRandomSeconds() |
|
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.IntervalContext;
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.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 java.time.Duration;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class IntervalCondition class="kw">implements EventCondition.Ticking {
class="kw">public class="kw">static class="kw">final String ID = "IntervalCondition";
class="kw">public class="kw">static class="kw">final EventCondition.Type TYPE = new EventCondition.Type("IntervalCondition", 0.033333335F);
class="kw">public class="kw">static class="kw">final BuilderCodec<IntervalCondition> CODEC = BuilderCodec.builder(IntervalCondition.class, IntervalCondition::new)
.append(new KeyedCodec<>("RemainingSeconds", Codec.FLOAT), (var0, var1) -> var0.interval.setOrNull(var1), var0 -> var0.interval.getOrNull())
.documentation("The remaining seconds for the interval.")
.add()
.build();
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public IntervalCondition.Config config = IntervalCondition.Config.EMPTY;
@Nonnull
class="kw">public class="kw">final IntervalContext interval = new IntervalContext();
class="kw">public IntervalCondition() {
}
@Override
class="kw">public boolean test() {
class="kw">return this.interval.elapsed();
}
@Override
class="kw">public void reset() {
this.interval.reset();
}
@Override
class="kw">public void tick(float var1, @Nonnull Store<EntityStore> var2) {
this.interval.sub(var1);
}
@Override
class="kw">public boolean onStart(@Nonnull WorldEvent var1) {
if (this.interval.uninitialized()) {
this.interval.set((float)this.config.nextRandomSeconds());
}
if (this.config.intervalKey != null) {
var1.context.put(this.config.intervalKey, this.interval);
}
class="kw">return true;
}
@Override
class="kw">public boolean onComplete(@Nonnull WorldEvent var1) {
if (this.config.intervalKey != null) {
var1.context.remove(this.config.intervalKey, IntervalContext.class);
}
class="kw">return true;
}
@Override
class="kw">public void onCancel(@Nonnull WorldEvent var1) {
if (this.config.intervalKey != null) {
var1.context.remove(this.config.intervalKey, IntervalContext.class);
}
}
@Override
class="kw">public void merge(@Nonnull EventCondition var1) {
if (var1 class="kw">instanceof IntervalCondition var2) {
this.interval.set(var2.interval.get());
}
}
class="kw">public class="kw">static class Config class="kw">implements EventCondition.Config {
class="kw">public class="kw">static class="kw">final BuilderCodec<IntervalCondition.Config> CODEC = BuilderCodec.builder(IntervalCondition.Config.class, IntervalCondition.Config::new)
.documentation("A condition that completes after a configurable time interval.")
.<ContextKey>append(new KeyedCodec<>("IntervalKey", ContextKey.CODEC), (var0, var1) -> var0.intervalKey = var1, var0 -> var0.intervalKey)
.documentation("Define a variable name for this interval timer that other actions and conditions can refer to.")
.add()
.<Duration>append(new KeyedCodec<>("MinSeconds", Codec.DURATION_SECONDS), (var0, var1) -> var0.intervalMin = var1, var0 -> var0.intervalMin)
.documentation("The minimum duration of the interval in seconds.")
.add()
.<Duration>append(new KeyedCodec<>("MaxSeconds", Codec.DURATION_SECONDS), (var0, var1) -> var0.intervalMax = var1, var0 -> var0.intervalMax)
.documentation("The maximum duration of the interval in seconds.")
.add()
.build();
class="kw">protected class="kw">static class="kw">final IntervalCondition.Config EMPTY = new IntervalCondition.Config();
class="kw">protected class="kw">static class="kw">final Duration DEFAULT_DURATION = Duration.ofSeconds(0L);
@Nullable
class="kw">protected ContextKey intervalKey = null;
@Nonnull
class="kw">protected Duration intervalMin = DEFAULT_DURATION;
@Nonnull
class="kw">protected Duration intervalMax = DEFAULT_DURATION;
class="kw">public Config() {
}
class="kw">public long nextRandomSeconds() {
long var1 = this.intervalMin.toSeconds();
long var3 = this.intervalMax.toSeconds();
class="kw">return var1 >= var3 ? var3 : ThreadLocalRandom.current().nextLong(var1, var3 + 1L);
}
@Nonnull
@Override
class="kw">public EventCondition create() {
IntervalCondition var1 = new IntervalCondition();
var1.config = this;
class="kw">return var1;
}
@Override
class="kw">public void validate(@Nonnull Validator var1) {
if (this.intervalMin.toSeconds() > this.intervalMax.toSeconds()) {
((HytaleLogger.Api)IntervalCondition.LOGGER.atWarning()).log("IntervalCondition's min is greater than its max. It will be clamped to max.");
}
}
}
}