WorldEventStorageSystem class

Пакет: com.hypixel.hytale.builtin.adventure.worldevents.system

Файл: com/hypixel/hytale/builtin/adventure/worldevents/system/WorldEventStorageSystem.java

extends: TickingSystem<EntityStore>

Поля (21)

МодификаторыТипИмя
protected static final ThreadLocal<WorldEventStorageSystem.Collector> LOCAL
final HytaleLogger LOGGER
break
break
continue
protected final Map<UUID, Ref<EntityStore>> entities
protected final ComponentType<EntityStore, WorldEvent> eventComponent
protected final ObjectList<WorldEvent> events
protected final DynamicArray<Holder<EntityStore>> toAdd
protected final DynamicArray<Ref<EntityStore>> toRemove
WorldEvent var10
Ref var11
WorldEvent var12
ComponentRegistry.Data var15
ComponentRegistry.Data var16
Holder var17
WorldEventStorage var4
WorldEvent var4
World var5
int var7
int var8

Методы (7)

МодификаторыВозвратСигнатура
protected Collectorprotected Collector()
public void acceptpublic void accept(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull CommandBuffer<EntityStore> var3)
public void closepublic void close()
protected static void collectEventsprotected static void collectEvents(@Nonnull WorldEvent var0, @Nonnull WorldEventStorageSystem.Collector var1)
abstract for for(int var9 = 0; var9 < var6.events.size()
if if(var11 != null)
if if(var12 == var10)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.worldevents.system;

class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventManager;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventStorage;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventsPlugin;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEvent;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.util.DynamicArray;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.util.PrefabSnapshotUtil;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentRegistry;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
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.function.consumer.IntBiObjectConsumer;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectList;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import javax.annotation.Nonnull;

class="kw">public class WorldEventStorageSystem class="kw">extends TickingSystem<EntityStore> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, WorldEventManager> managerResourceType;
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, WorldEventStorage> storageResourceType;
   @Nonnull
   class="kw">protected class="kw">final ComponentType<EntityStore, WorldEvent> eventComponentType;
   @Nonnull
   class="kw">protected class="kw">final ComponentType<EntityStore, Intangible> intangibleComponentType;

   class="kw">public WorldEventStorageSystem(
      @Nonnull ResourceType<EntityStore, WorldEventManager> var1,
      @Nonnull ResourceType<EntityStore, WorldEventStorage> var2,
      @Nonnull ComponentType<EntityStore, WorldEvent> var3
   ) {
      this.managerResourceType = var1;
      this.storageResourceType = var2;
      this.eventComponentType = var3;
      this.intangibleComponentType = Intangible.getComponentType();
   }

   @Override
   class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
      WorldEventStorage var4 = var3.getResource(this.storageResourceType);
      World var5 = var3.getExternalData().getWorld();
      class="kw">switch (var4.consumeState()) {
         case SAVE: {
            ((HytaleLogger.Api)LOGGER.atFine()).log("Saving world-events storage to disk");
            ComponentRegistry.Data var16 = var3.getRegistry().getData();
            var3.getResourceStorage().save(var3, var16, this.storageResourceType, var4).whenCompleteAsync(var4::onCompleteSave, var5);
            break;
         }
         case LOAD: {
            ((HytaleLogger.Api)LOGGER.atFine()).log("Loading world-events storage from disk");
            ComponentRegistry.Data var15 = var3.getRegistry().getData();
            var3.getResourceStorage().load(var3, var15, this.storageResourceType).whenCompleteAsync(var4::onCompleteLoad, var5);
            break;
         }
         case LOADED:
            try (WorldEventStorageSystem.Collector var6 = WorldEventStorageSystem.Collector.LOCAL.get()) {
               var4.forEach(var6, WorldEventStorageSystem.Collector::collectEvents);
               var3.forEachEntityParallel(this.eventComponentType, var6);
               int var7 = 0;
               int var8 = 0;

               for (int var9 = 0; var9 < var6.events.size(); var9++) {
                  WorldEvent var10 = (WorldEvent)var6.events.get(var9);
                  Ref var11 = var6.entities.get(var10.uuid);
                  if (var11 != null) {
                     assert var11.isValid();
                     WorldEvent var12 = var3.getComponent(var11, this.eventComponentType);
                     assert var12 != null;
                     if (var12 == var10) {
                        class="kw">continue;
                     }

                     var12.uuid = WorldEvent.EMPTY_ID;
                     var6.toRemove.add(var11);
                     var10.restart = true;
                     var8++;
                  } else {
                     var7++;
                  }

                  Holder var17 = var3.getRegistry().newHolder();
                  var17.ensureComponentsSize(2);
                  var17.addComponent(this.eventComponentType, var10);
                  var17.addComponent(this.intangibleComponentType, Intangible.INSTANCE);
                  var6.toAdd.add(var17);
               }

               var3.removeEntities(var6.toRemove.array(), 0, var6.toRemove.size(), RemoveReason.REMOVE);
               var3.addEntities(var6.toAdd.array(), 0, var6.toAdd.size(), AddReason.LOAD);
               PrefabSnapshotUtil.cleanSnapshotsDir(var5, var3.getResource(this.managerResourceType));
               WorldEventsPlugin.loadGameplayWorldEvents(var5);
               ((HytaleLogger.Api)LOGGER.atFine()).log("Loaded world-event entities from storage. Loaded: %d, Reloaded: %d", var7, var8);
            }
      }
   }

   class="kw">protected class="kw">static class Collector class="kw">implements IntBiObjectConsumer<ArchetypeChunk<EntityStore>, CommandBuffer<EntityStore>>, AutoCloseable {
      class="kw">protected class="kw">static class="kw">final ThreadLocal<WorldEventStorageSystem.Collector> LOCAL = ThreadLocal.withInitial(WorldEventStorageSystem.Collector::new);
      @Nonnull
      class="kw">protected class="kw">final ObjectList<WorldEvent> events = new ObjectArrayList();
      @Nonnull
      class="kw">protected class="kw">final Map<UUID, Ref<EntityStore>> entities = new ConcurrentHashMap<>();
      @Nonnull
      class="kw">protected class="kw">final ComponentType<EntityStore, WorldEvent> eventComponent = WorldEvent.getComponentType();
      @Nonnull
      class="kw">protected class="kw">final DynamicArray<Ref<EntityStore>> toRemove = new DynamicArray<>(8, Ref[]::new);
      @Nonnull
      class="kw">protected class="kw">final DynamicArray<Holder<EntityStore>> toAdd = new DynamicArray<>(8, Holder[]::new);

      class="kw">protected Collector() {
      }

      class="kw">public void accept(int var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull CommandBuffer<EntityStore> var3) {
         WorldEvent var4 = var2.getComponent(var1, this.eventComponent);
         assert var4 != null;
         this.entities.put(var4.uuid, var2.getReferenceTo(var1));
      }

      @Override
      class="kw">public void close() {
         this.toAdd.clear();
         this.toRemove.clear();
         this.events.clear();
         this.entities.clear();
      }

      class="kw">protected class="kw">static void collectEvents(@Nonnull WorldEvent var0, @Nonnull WorldEventStorageSystem.Collector var1) {
         var1.events.add(var0);
      }
   }
}