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();
}
}
}