Mode enum

Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/TimeEffect.java

Поля (1)

МодификаторыТипИмя
PAUSE, RESUME, SET

Исходный код

Показать/скрыть
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() {
      }
   }
}