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