TickingSystem class

Пакет: com.hypixel.hytale.server.core.modules.entity.player

Файл: com/hypixel/hytale/server/core/modules/entity/player/PlayerSavingSystems.java

extends: EntityTickingSystem<EntityStore>

implements: RunWhenPausedSystem<EntityStore>

Поля (22)

МодификаторыТипИмя
private final ResourceType<EntityStore, PlayerSavingSystems.SaveDataResource> dataResourceType
private final ComponentType<EntityStore, HeadRotation> headRotationComponentType
private final ComponentType<EntityStore, Player> playerComponentType
private final Query<EntityStore> query
private final ComponentType<EntityStore, TransformComponent> transformComponentType
Vector3d var10
Rotation3f var11
Vector3d var12
Rotation3f var13
InventoryComponent.Storage var14
InventoryComponent.Armor var15
InventoryComponent.Hotbar var16
InventoryComponent.Utility var17
InventoryComponent.Tool var18
InventoryComponent.Backpack var19
boolean var20
World var4
PlayerSavingSystems.SaveDataResource var5
Player var6
TransformComponent var7
HeadRotation var8
PlayerConfigData var9

Методы (5)

МодификаторыВозвратСигнатура
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var5.delay <= 0.0F)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void tickpublic void tick(float var1, int var2, @Nonnull Store<EntityStore> var3)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.player;

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.StoreSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.component.system.tick.RunWhenPausedSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerConfigData;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
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.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.ConcurrentLinkedDeque;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class PlayerSavingSystems {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final float PLAYER_SAVE_INTERVAL_SECONDS = 10.0F;

   class="kw">public PlayerSavingSystems() {
   }

   @Nonnull
   class="kw">private class="kw">static Holder<EntityStore> createShallowHolder(int var0, @Nonnull ArchetypeChunk<EntityStore> var1) {
      Archetype var2 = var1.getArchetype();
      Component[] var3 = new Component[var2.length()];

      for (int var4 = var2.getMinIndex(); var4 < var2.length(); var4++) {
         ComponentType var5 = var2.get(var4);
         if (var5 != null) {
            var3[var4] = var1.getComponent(var0, var5);
         }
      }

      class="kw">return EntityStore.REGISTRY.newHolder(var2, var3);
   }

   class="kw">public class="kw">static class EntityRemovedSystem class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;

      class="kw">public EntityRemovedSystem(@Nonnull ComponentType<EntityStore, Player> var1) {
         this.playerComponentType = var1;
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         if (var4.getWorldConfig().isSavingPlayers()) {
            Player var5 = var1.getComponent(this.playerComponentType);
            assert var5 != null;
            var5.saveConfig(var4, var1, true);
         }
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.playerComponentType;
      }
   }

   class="kw">public class="kw">static class SaveDataResource class="kw">implements Resource<EntityStore> {
      class="kw">private float delay = 10.0F;

      class="kw">public SaveDataResource() {
      }

      @Nonnull
      @Override
      class="kw">public Resource<EntityStore> clone() {
         PlayerSavingSystems.SaveDataResource var1 = new PlayerSavingSystems.SaveDataResource();
         var1.delay = this.delay;
         class="kw">return var1;
      }
   }

   class="kw">public class="kw">static class TickingSystem class="kw">extends EntityTickingSystem<EntityStore> class="kw">implements RunWhenPausedSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, PlayerSavingSystems.SaveDataResource> dataResourceType = this.registerResource(
         PlayerSavingSystems.SaveDataResource.class, PlayerSavingSystems.SaveDataResource::new
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, HeadRotation> headRotationComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public TickingSystem(@Nonnull ComponentType<EntityStore, Player> var1) {
         this.playerComponentType = var1;
         this.transformComponentType = TransformComponent.getComponentType();
         this.headRotationComponentType = HeadRotation.getComponentType();
         this.query = Archetype.of(var1, this.transformComponentType, this.headRotationComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
         World var4 = var3.getExternalData().getWorld();
         if (!var4.isSavingLocked() && var4.getWorldConfig().isSavingPlayers()) {
            PlayerSavingSystems.SaveDataResource var5 = var3.getResource(this.dataResourceType);
            var5.delay -= var1;
            if (var5.delay <= 0.0F) {
               var5.delay = 10.0F;
               var3.tick(this, var1, var2);
            }
         }
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         Player var6 = var3.getComponent(var2, this.playerComponentType);
         assert var6 != null;
         TransformComponent var7 = var3.getComponent(var2, this.transformComponentType);
         assert var7 != null;
         HeadRotation var8 = var3.getComponent(var2, this.headRotationComponentType);
         assert var8 != null;
         PlayerConfigData var9 = var6.getPlayerConfigData();
         Vector3d var10 = var7.getPosition();
         Rotation3f var11 = var8.getRotation();
         Vector3d var12 = var9.lastSavedPosition;
         Rotation3f var13 = var9.lastSavedRotation;
         InventoryComponent.Storage var14 = var3.getComponent(var2, InventoryComponent.Storage.getComponentType());
         InventoryComponent.Armor var15 = var3.getComponent(var2, InventoryComponent.Armor.getComponentType());
         InventoryComponent.Hotbar var16 = var3.getComponent(var2, InventoryComponent.Hotbar.getComponentType());
         InventoryComponent.Utility var17 = var3.getComponent(var2, InventoryComponent.Utility.getComponentType());
         InventoryComponent.Tool var18 = var3.getComponent(var2, InventoryComponent.Tool.getComponentType());
         InventoryComponent.Backpack var19 = var3.getComponent(var2, InventoryComponent.Backpack.getComponentType());
         boolean var20 = var9.consumeHasChanged();
         var20 |= var14 != null && var14.consumeNeedsSaving();
         var20 |= var15 != null && var15.consumeNeedsSaving();
         var20 |= var16 != null && var16.consumeNeedsSaving();
         var20 |= var17 != null && var17.consumeNeedsSaving();
         var20 |= var18 != null && var18.consumeNeedsSaving();
         var20 |= var19 != null && var19.consumeNeedsSaving();
         if (!var12.equals(var10) || !var13.equals(var11) || var20) {
            var12.set(var10);
            var13.set(var11);
            var6.saveConfig(var4.getExternalData().getWorld(), PlayerSavingSystems.createShallowHolder(var2, var3), false);
         }
      }
   }

   class="kw">public class="kw">static class WorldRemovedSystem class="kw">extends StoreSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> refComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public WorldRemovedSystem(@Nonnull ComponentType<EntityStore, Player> var1) {
         this.playerComponentType = var1;
         this.refComponentType = PlayerRef.getComponentType();
         this.query = Query.and(var1, this.refComponentType);
      }

      @Override
      class="kw">public void onSystemAddedToStore(@Nonnull Store<EntityStore> var1) {
      }

      @Override
      class="kw">public void onSystemRemovedFromStore(@Nonnull Store<EntityStore> var1) {
         if (var1.getExternalData().getWorld().getWorldConfig().isSavingPlayers()) {
            PlayerSavingSystems.LOGGER.at(Level.INFO).log("Saving Players...");
         } else {
            PlayerSavingSystems.LOGGER.at(Level.INFO).log("Disconnecting Players...");
         }

         ConcurrentLinkedDeque var2 = new ConcurrentLinkedDeque<>();
         var1.forEachEntityParallel(this.query, (var2x, var3, var4) -> {
            Player var5 = var3.getComponent(var2x, this.playerComponentType);
            assert var5 != null;
            PlayerRef var6 = var3.getComponent(var2x, this.refComponentType);
            assert var6 != null;
            World var7 = var4.getExternalData().getWorld();
            if (var7.getWorldConfig().isSavingPlayers()) {
               var2.add(var5.saveConfig(var7, PlayerSavingSystems.createShallowHolder(var2x, var3), true));
            }

            var6.getPacketHandler().disconnect(Message.translation("server.general.disconnect.stoppingWorld"));
         });
         CompletableFuture.allOf(var2.toArray(CompletableFuture[]::new)).join();
      }
   }
}