UpdateWorldSlumberSystem class

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

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

extends: TickingSystem<EntityStore>

Поля (18)

МодификаторыТипИмя
float var1
boolean var10
WorldTimeResource var11
Instant var12
long var2
World var2
Collection var3
World var4
PlayerSomnolence var4
long var4
WorldSomnolence var5
Ref var5
MountedComponent var6
Ref var6
PlayerSomnolence var7
boolean var8
PlayerSleep var8
boolean var9

Методы (5)

МодификаторыВозвратСигнатура
for for(PlayerRef var5 : var3)
if if(var10)
if if(var7 == null)
if if(var8 instanceof PlayerSleep.FullyAwake)
static boolean isSomeoneAwakeboolean isSomeoneAwake(@Nonnull ComponentAccessor<EntityStore> var0, @Nonnull ComponentType<EntityStore, PlayerSomnolence> var1)

Исходный код

Показать/скрыть
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.builtin.mounts.MountedComponent;
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.tick.TickingSystem;
class="kw">import com.hypixel.hytale.protocol.MountController;
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.Duration;
class="kw">import java.time.Instant;
class="kw">import java.util.Collection;
class="kw">import javax.annotation.Nonnull;

class="kw">public class UpdateWorldSlumberSystem class="kw">extends TickingSystem<EntityStore> {
   @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;
   @Nonnull
   class="kw">private class="kw">final ComponentType<EntityStore, MountedComponent> mountedComponentType;

   class="kw">public UpdateWorldSlumberSystem(
      @Nonnull ComponentType<EntityStore, PlayerSomnolence> var1,
      @Nonnull ResourceType<EntityStore, WorldSomnolence> var2,
      @Nonnull ResourceType<EntityStore, WorldTimeResource> var3,
      @Nonnull ComponentType<EntityStore, MountedComponent> var4
   ) {
      this.playerSomnolenceComponentType = var1;
      this.worldSomnolenceResourceType = var2;
      this.worldTimeResourceType = var3;
      this.mountedComponentType = var4;
   }

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
      World var4 = var3.getExternalData().getWorld();
      WorldSomnolence var5 = var3.getResource(this.worldSomnolenceResourceType);
      if (var5.getState() class="kw">instanceof WorldSlumber var7) {
         var7.incrementProgressSeconds(var1);
         boolean var8 = var7.getProgressSeconds() >= var7.getIrlDurationSeconds();
         boolean var9 = isSomeoneAwake(var3, this.playerSomnolenceComponentType);
         boolean var10 = var8 || var9;
         if (var10) {
            var5.setState(WorldSleep.Awake.INSTANCE);
            WorldTimeResource var11 = var3.getResource(this.worldTimeResourceType);
            Instant var12 = computeWakeupTime(var7);
            var11.setGameTime(var12, var4, var3);
            var3.forEachEntityParallel(this.playerSomnolenceComponentType, (var1x, var2x, var3x) -> {
               PlayerSomnolence var4 = var2x.getComponent(var1x, this.playerSomnolenceComponentType);
               assert var4 != null;
               if (var4.getSleepState() class="kw">instanceof PlayerSleep.Slumber) {
                  Ref var5 = var2x.getReferenceTo(var1x);
                  var3x.putComponent(var5, this.playerSomnolenceComponentType, PlayerSomnolence.AWAKE);
                  MountedComponent var6 = var2x.getComponent(var1x, this.mountedComponentType);
                  if (var6 != null && var6.getControllerType() == MountController.BlockMount) {
                     var3x.tryRemoveComponent(var5, this.mountedComponentType);
                  }
               }
            });
         }
      }
   }

   @Nonnull
   class="kw">private class="kw">static Instant computeWakeupTime(@Nonnull WorldSlumber var0) {
      float var1 = var0.getProgressSeconds() / var0.getIrlDurationSeconds();
      long var2 = Duration.between(var0.getStartInstant(), var0.getTargetInstant()).toNanos();
      long var4 = (long)((float)var2 * var1);
      class="kw">return var0.getStartInstant().plusNanos(var4);
   }

   class="kw">private class="kw">static boolean isSomeoneAwake(@Nonnull ComponentAccessor<EntityStore> var0, @Nonnull ComponentType<EntityStore, PlayerSomnolence> var1) {
      World var2 = var0.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()) {
            PlayerSomnolence var7 = var0.getComponent(var6, var1);
            if (var7 == null) {
               class="kw">return true;
            }

            PlayerSleep var8 = var7.getSleepState();
            if (var8 class="kw">instanceof PlayerSleep.FullyAwake) {
               class="kw">return true;
            }
         }
      }

      class="kw">return false;
   }
}