TimeEffect class
Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin
Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/TimeEffect.java
extends: TriggerEffect
Поля (11)
| Модификаторы | Тип | Имя |
|---|---|---|
|
PAUSE,
RESUME, |
SET |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
Store |
var2 |
|
World |
var3 |
|
WorldTimeResource |
var4 |
|
TimeEffect.Mode |
var5 |
|
Ref |
var5 |
|
PlayerRef |
var6 |
Методы (14)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
Mode Mode() |
private |
void |
applyPlayerOnlyvoid applyPlayerOnly(@Nonnull TriggerContext var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldTimeResource var3, @Nonnull TimeEffect.Mode var4) |
private |
void |
applyServerWidevoid applyServerWide(@Nonnull World var1, @Nonnull WorldTimeResource var2, @Nonnull Store<EntityStore> var3, @Nonnull TimeEffect.Mode var4) |
|
|
if if(var3 != null) |
|
|
if if(var4 != null) |
|
|
if if(this.playerOnly) |
|
|
if if(var5 != null) |
|
|
if if(var6 != null) |
static |
void |
setPausedvoid setPaused(@Nonnull World var0, boolean var1) |
abstract |
|
setPaused setPaused(var1, true) |
abstract |
|
setPaused setPaused(var1, false) |
|
|
switch switch(var4) |
|
|
switch switch(var4) |
private |
double |
targetDayProgressdouble targetDayProgress() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
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.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.InstantData;
class="kw">import com.hypixel.hytale.protocol.packets.world.ClearEditorTimeOverride;
class="kw">import com.hypixel.hytale.protocol.packets.world.UpdateEditorTimeOverride;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.time.Instant;
class="kw">import javax.annotation.Nonnull;
class="kw">public class TimeEffect class="kw">extends TriggerEffect {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<TimeEffect> CODEC = BuilderCodec.builder(TimeEffect.class, TimeEffect::new, BASE_CODEC)
.append(new KeyedCodec<>("Mode", new EnumCodec<>(TimeEffect.Mode.class), false), (var0, var1) -> var0.mode = var1, var0 -> var0.mode)
.add()
.append(new KeyedCodec<>("TargetHour", Codec.FLOAT, false), (var0, var1) -> var0.targetHour = var1, var0 -> var0.targetHour)
.add()
.append(new KeyedCodec<>("DurationSeconds", Codec.FLOAT, false), (var0, var1) -> var0.durationSeconds = var1, var0 -> var0.durationSeconds)
.add()
.append(new KeyedCodec<>("Forward", Codec.BOOLEAN, false), (var0, var1) -> var0.forward = var1, var0 -> var0.forward)
.add()
.append(new KeyedCodec<>("PauseOnComplete", Codec.BOOLEAN, false), (var0, var1) -> var0.pauseOnComplete = var1, var0 -> var0.pauseOnComplete)
.add()
.append(new KeyedCodec<>("PlayerOnly", Codec.BOOLEAN, false), (var0, var1) -> var0.playerOnly = var1, var0 -> var0.playerOnly)
.add()
.build();
@Nonnull
class="kw">private TimeEffect.Mode mode = TimeEffect.Mode.SET;
class="kw">private float targetHour = 0.0F;
class="kw">private float durationSeconds = 0.0F;
class="kw">private boolean forward = true;
class="kw">private boolean pauseOnComplete = false;
class="kw">private boolean playerOnly = false;
class="kw">public TimeEffect() {
}
@Override
class="kw">public void execute(@Nonnull TriggerContext var1) {
Store var2 = var1.getStore();
World var3 = var2.getExternalData().getWorld();
if (var3 != null) {
WorldTimeResource var4 = var2.getResource(WorldTimeResource.getResourceType());
if (var4 != null) {
TimeEffect.Mode var5 = this.mode == null ? TimeEffect.Mode.SET : this.mode;
if (this.playerOnly) {
this.applyPlayerOnly(var1, var2, var4, var5);
} else {
this.applyServerWide(var3, var4, var2, var5);
}
}
}
}
class="kw">private void applyServerWide(@Nonnull World var1, @Nonnull WorldTimeResource var2, @Nonnull Store<EntityStore> var3, @Nonnull TimeEffect.Mode var4) {
class="kw">switch (var4) {
case PAUSE:
setPaused(var1, true);
break;
case RESUME:
var2.cancelInterpolation();
setPaused(var1, false);
break;
case SET:
var2.startDayTimeInterpolation(this.targetDayProgress(), this.durationSeconds, this.forward, this.pauseOnComplete, var1, var3);
}
}
class="kw">private void applyPlayerOnly(@Nonnull TriggerContext var1, @Nonnull Store<EntityStore> var2, @Nonnull WorldTimeResource var3, @Nonnull TimeEffect.Mode var4) {
Ref var5 = var1.getEntityRef();
if (var5 != null) {
PlayerRef var6 = var2.getComponent(var5, PlayerRef.getComponentType());
if (var6 != null) {
class="kw">switch (var4) {
case PAUSE:
var6.getPacketHandler().write(new UpdateEditorTimeOverride(toInstantData(var3.getGameTime()), true));
break;
case RESUME:
var6.getPacketHandler().write(new ClearEditorTimeOverride());
break;
case SET:
var6.getPacketHandler()
.write(new UpdateEditorTimeOverride(toInstantData(var3.dayProgressToInstant(this.targetDayProgress())), this.pauseOnComplete));
}
}
}
}
class="kw">private double targetDayProgress() {
class="kw">return MathUtil.clamp(this.targetHour, 0.0, WorldTimeResource.HOURS_PER_DAY) / WorldTimeResource.HOURS_PER_DAY;
}
@Nonnull
class="kw">private class="kw">static InstantData toInstantData(@Nonnull Instant var0) {
class="kw">return new InstantData(var0.getEpochSecond(), var0.getNano());
}
class="kw">private class="kw">static void setPaused(@Nonnull World var0, boolean var1) {
if (var0.getWorldConfig().isGameTimePaused() != var1) {
var0.getWorldConfig().setGameTimePaused(var1);
var0.getWorldConfig().markChanged();
}
}
class="kw">public enum Mode {
PAUSE,
RESUME,
SET;
Mode() {
}
}
}