SaveDataResource class

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

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

implements: Resource<EntityStore>

Поля (2)

МодификаторыТипИмя
private float delay
PlayerSavingSystems.SaveDataResource var1

Методы (1)

МодификаторыВозвратСигнатура
public Resource<EntityStore> clonepublic Resource<EntityStore> clone()

Исходный код

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