StartSlumberSystem class

Пакет: com.hypixel.hytale.builtin.beds.sleep.systems.world

Файл: com/hypixel/hytale/builtin/beds/sleep/systems/world/StartSlumberSystem.java

extends: DelayedSystem<EntityStore>

Поля (28)

МодификаторыТипИмя
Instant var10
float var11
World var2
long var2
World var2
PlayerSomnolence var2
PlayerSomnolence var2
Collection var3
LocalDateTime var3
Collection var3
PlayerSleep var3
PlayerSleep var3
SleepConfig var4
int var4
long var4
float var5
float var5
WorldSomnolence var6
Ref var6
LocalDateTime var6
var6
double var6
Ref var6
WorldSleep var7
PlayerRef var7
WorldTimeResource var8
Instant var9
Instant var9

Методы (14)

МодификаторыВозвратСигнатура
static boolean canNotifyOthersAboutTryingToSleepboolean canNotifyOthersAboutTryingToSleep(@Nonnull ComponentAccessor<EntityStore> var0, @Nullable Ref<EntityStore> var1)
private void checkIfEveryoneIsReadyToSleepvoid checkIfEveryoneIsReadyToSleep(@Nonnull Store<EntityStore> var1)
static float computeIrlSecondsfloat computeIrlSeconds(@Nonnull Instant var0, @Nonnull Instant var1)
private Instant computeWakeupInstantInstant computeWakeupInstant(@Nonnull Instant var1, float var2)
for for(PlayerRef var5 : var3)
if if(var7 == WorldSleep.Awake.INSTANCE)
if if(var7 != null)
if if(var2 == null)
if if(var2 == null)
private boolean isEveryoneReadyToSleepboolean isEveryoneReadyToSleep(@Nonnull ComponentAccessor<EntityStore> var1)
static boolean isReadyToSleepboolean isReadyToSleep(@Nonnull ComponentAccessor<EntityStore> var0, @Nullable Ref<EntityStore> var1)
abstract super super(0.3F)
return switchreturn switch(var3)
return switchreturn switch(var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.beds.sleep.systems.world;

class="kw">import com.hypixel.hytale.builtin.beds.sleep.components.PlayerSleep;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.components.PlayerSomnolence;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSleep;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSlumber;
class="kw">import com.hypixel.hytale.builtin.beds.sleep.resources.WorldSomnolence;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.system.DelayedSystem;
class="kw">import com.hypixel.hytale.protocol.SoundCategory;
class="kw">import com.hypixel.hytale.server.core.asset.type.gameplay.sleep.SleepConfig;
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.SoundUtil;
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.Duration;
class="kw">import java.time.Instant;
class="kw">import java.time.LocalDateTime;
class="kw">import java.time.ZoneOffset;
class="kw">import java.util.Collection;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class StartSlumberSystem class="kw">extends DelayedSystem<EntityStore> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final Duration NODDING_OFF_DURATION = Duration.ofMillis(3200L);
   class="kw">private class="kw">static class="kw">final float SYSTEM_INTERVAL_S = 0.3F;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, PlayerSomnolence> playerSomnolenceComponentType;
   @Nonnull
   class="kw">private class="kw">final ResourceType<EntityStore, WorldSomnolence> worldSomnolenceResourceType;
   @Nonnull
   class="kw">private class="kw">final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceType;

   class="kw">public StartSlumberSystem(
      @Nonnull ComponentType<EntityStore, PlayerSomnolence> var1,
      @Nonnull ResourceType<EntityStore, WorldSomnolence> var2,
      @Nonnull ResourceType<EntityStore, WorldTimeResource> var3
   ) {
      super(0.3F);
      this.playerSomnolenceComponentType = var1;
      this.worldSomnolenceResourceType = var2;
      this.worldTimeResourceType = var3;
   }

   @Override
   class="kw">public void delayedTick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
      this.checkIfEveryoneIsReadyToSleep(var3);
   }

   class="kw">private void checkIfEveryoneIsReadyToSleep(@Nonnull Store<EntityStore> var1) {
      World var2 = var1.getExternalData().getWorld();
      Collection var3 = var2.getPlayerRefs();
      if (!var3.isEmpty()) {
         if (!CanSleepInWorld.check(var2).isNegative()) {
            SleepConfig var4 = var2.getGameplayConfig().getWorldConfig().getSleepConfig();
            float var5 = var4.getWakeUpHour();
            WorldSomnolence var6 = var1.getResource(this.worldSomnolenceResourceType);
            WorldSleep var7 = var6.getState();
            if (var7 == WorldSleep.Awake.INSTANCE) {
               if (this.isEveryoneReadyToSleep(var1)) {
                  WorldTimeResource var8 = var1.getResource(this.worldTimeResourceType);
                  Instant var9 = var8.getGameTime();
                  Instant var10 = this.computeWakeupInstant(var9, var5);
                  float var11 = computeIrlSeconds(var9, var10);
                  var6.setState(new WorldSlumber(var9, var10, var11));
                  var1.forEachEntityParallel(this.playerSomnolenceComponentType, (var3x, var4x, var5x) -> {
                     Ref var6 = var4x.getReferenceTo(var3x);
                     var5x.putComponent(var6, this.playerSomnolenceComponentType, PlayerSleep.Slumber.createComponent(var8));
                     PlayerRef var7 = var4x.getComponent(var3x, PlayerRef.getComponentType());
                     if (var7 != null) {
                        SoundUtil.playSoundEvent2dToPlayer(var7, var4.getSounds().getSuccessIndex(), SoundCategory.UI);
                     }
                  });
                  var6.resetNotificationCooldown();
               }
            }
         }
      }
   }

   class="kw">private Instant computeWakeupInstant(@Nonnull Instant var1, float var2) {
      LocalDateTime var3 = LocalDateTime.ofInstant(var1, ZoneOffset.UTC);
      int var4 = (int)var2;
      float var5 = var2 - var4;
      LocalDateTime var6 = var3.toLocalDate().atTime(var4, (int)(var5 * 60.0F));
      if (!var3.isBefore(var6)) {
         var6 = var6.plusDays(1L);
      }

      class="kw">return var6.toInstant(ZoneOffset.UTC);
   }

   class="kw">private class="kw">static float computeIrlSeconds(@Nonnull Instant var0, @Nonnull Instant var1) {
      long var2 = Duration.between(var0, var1).toMillis();
      long var4 = TimeUnit.MILLISECONDS.toHours(var2);
      double var6 = Math.max(3.0, var4 / 6.0);
      class="kw">return (float)Math.ceil(var6);
   }

   class="kw">private boolean isEveryoneReadyToSleep(@Nonnull ComponentAccessor<EntityStore> var1) {
      World var2 = var1.getExternalData().getWorld();
      Collection var3 = var2.getPlayerRefs();
      if (var3.isEmpty()) {
         class="kw">return false;
      }

      for (PlayerRef var5 : var3) {
         Ref var6 = var5.getReference();
         if (var6 != null && var6.isValid() && !isReadyToSleep(var1, var6)) {
            class="kw">return false;
         }
      }

      class="kw">return true;
   }

   class="kw">public class="kw">static boolean isReadyToSleep(@Nonnull ComponentAccessor<EntityStore> var0, @Nullable Ref<EntityStore> var1) {
      if (var1 != null && var1.isValid()) {
         PlayerSomnolence var2 = var0.getComponent(var1, PlayerSomnolence.getComponentType());
         if (var2 == null) {
            class="kw">return false;
         }

         PlayerSleep var3 = var2.getSleepState();

         class="kw">return class="kw">switch (var3) {
            case PlayerSleep.FullyAwake var6 -> false;
            case PlayerSleep.NoddingOff var7 -> {
               Instant var9 = var7.realTimeStart().plus(NODDING_OFF_DURATION);
               yield Instant.now().isAfter(var9);
            }
            case PlayerSleep.Slumber var8 -> true;
            class="kw">default -> throw new MatchException(null, null);
         };
      } else {
         class="kw">return true;
      }
   }

   class="kw">public class="kw">static boolean canNotifyOthersAboutTryingToSleep(@Nonnull ComponentAccessor<EntityStore> var0, @Nullable Ref<EntityStore> var1) {
      if (var1 != null && var1.isValid()) {
         PlayerSomnolence var2 = var0.getComponent(var1, PlayerSomnolence.getComponentType());
         if (var2 == null) {
            class="kw">return false;
         }

         PlayerSleep var3 = var2.getSleepState();

         class="kw">return class="kw">switch (var3) {
            case PlayerSleep.FullyAwake var6 -> false;
            case PlayerSleep.NoddingOff var7 -> true;
            case PlayerSleep.Slumber var8 -> true;
            class="kw">default -> throw new MatchException(null, null);
         };
      } else {
         class="kw">return true;
      }
   }
}