WorldEventInitSystem class

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

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

extends: RefSystem<EntityStore>

Поля (13)

МодификаторыТипИмя
final HytaleLogger LOGGER
return
return
Stage var10
Stage var11
WorldEvent var12
WorldEventManager var5
WorldEvent var5
WorldEventStorage var6
ConditionManager var6
WorldEvent var7
WorldEventAsset var8
int var9

Методы (6)

МодификаторыВозвратСигнатура
if if(var2 == AddReason.SPAWN)
if if(var12 == null)
if if(var2 == AddReason.SPAWN)
if if(var2 == AddReason.LOAD)
if if(var7.restart)
if if(var2 == RemoveReason.REMOVE)

Исходный код

Показать/скрыть
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.condition.manager.ConditionManager;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Fork;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.Stage;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEvent;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.event.WorldEventAsset;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
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.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class WorldEventInitSystem class="kw">extends RefSystem<EntityStore> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">protected class="kw">final ComponentType<EntityStore, WorldEvent> eventComponent;
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, WorldEventManager> managerResource;
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, WorldEventStorage> storageResource;
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, ConditionManager> eventResource;

   class="kw">public WorldEventInitSystem(
      @Nonnull ComponentType<EntityStore, WorldEvent> var1,
      @Nonnull ResourceType<EntityStore, WorldEventManager> var2,
      @Nonnull ResourceType<EntityStore, WorldEventStorage> var3,
      @Nonnull ResourceType<EntityStore, ConditionManager> var4
   ) {
      this.eventComponent = var1;
      this.managerResource = var2;
      this.storageResource = var3;
      this.eventResource = var4;
   }

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

   @Override
   class="kw">public void onEntityAdded(
      @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
      WorldEventManager var5 = var3.getResource(this.managerResource);
      WorldEventStorage var6 = var3.getResource(this.storageResource);
      WorldEvent var7 = var3.getComponent(var1, this.eventComponent);
      assert var7 != null;
      WorldEventAsset var8 = WorldEventAsset.getAssetOrUnknown(var7.asset);
      if (var8 != WorldEventAsset.UNKNOWN && var8.valid()) {
         if (var2 == AddReason.SPAWN) {
            if (var5.get(var7.uuid) != null) {
               var4.tryRemoveEntity(var1, RemoveReason.REMOVE);
               ((HytaleLogger.Api)LOGGER.atFine()).log("Removed duplicate world-event entity for UUID: %s", var7.uuid);
               class="kw">return;
            }

            if (var8.instanceCountMax() != -1) {
               int var9 = var5.allOf(var7.asset).size();
               if (var9 >= var8.instanceCountMax()) {
                  var4.tryRemoveEntity(var1, RemoveReason.REMOVE);
                  ((HytaleLogger.Api)LOGGER.atFine())
                     .log("Removed world-event entity for asset: %s due to the max number of instances being reached: %d", var7.asset, var9);
                  class="kw">return;
               }
            }
         }

         WorldEvent var12 = var8.build(var7.uuid, var7.isTransient);
         if (var12 == null) {
            var4.tryRemoveEntity(var1, RemoveReason.REMOVE);
            ((HytaleLogger.Api)LOGGER.atFine()).log("Failed to build world-event: %s with asset: %s", var7.uuid, var7.asset);
         } else {
            Stage var10 = var7.stage;
            var7.init = true;
            var7.root = var12.root;
            var7.stage = var12.root;
            var7.requiredPlayerCount = var12.requiredPlayerCount;
            if (var2 == AddReason.SPAWN) {
               var7.repeatCount = var12.repeatCount;
            }

            if (var2 == AddReason.LOAD) {
               if (var7.restart) {
                  var7.restart = false;
                  var7.context.clear();
                  ((HytaleLogger.Api)LOGGER.atFine()).log("Restarting world-event: %s", var7.uuid);
               } else {
                  Stage var11 = Stage.walk(var12.root, var10, (var0, var1x) -> var0.id() == var1x.id() ? var0 : null);
                  if (var11 != null && Stage.merge(var11, var10)) {
                     var7.stage = var11;
                     ((HytaleLogger.Api)LOGGER.atFine()).log("Resuming world-event: %s at stage: %d", var7.asset, var11.id());
                  } else {
                     var7.context.clear(var4, var7);
                     ((HytaleLogger.Api)LOGGER.atFine()).log("Failed to resume world-event: %s at stage: %d. Restarting...", var7.asset, var10.id());
                  }
               }
            }

            if (var2 == AddReason.SPAWN && var8.isPersistent()) {
               var6.add(var7);
            }

            if (var2 == AddReason.LOAD && !var8.isPersistent()) {
               var6.remove(var7);
            }

            var5.register(var7);
            ((HytaleLogger.Api)LOGGER.atFine()).log("Loaded world event: %s, asset: %s", var7.uuid, var7.asset);
         }
      } else {
         var4.tryRemoveEntity(var1, RemoveReason.REMOVE);
         ((HytaleLogger.Api)LOGGER.atFine()).log("Removed world-event for invalid asset: %s", var7.asset);
      }
   }

   @Override
   class="kw">public void onEntityRemove(
      @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
      WorldEvent var5 = var4.getComponent(var1, this.eventComponent);
      assert var5 != null;
      ConditionManager var6 = var4.getResource(this.eventResource);

      for (Fork var10 : var5.stage.forks()) {
         var6.cancel(var10.conditions());
      }

      if (var2 == RemoveReason.REMOVE) {
         var5.context.clear(var4, var5);
         var4.getResource(this.storageResource).remove(var5);
         ((HytaleLogger.Api)LOGGER.atFine()).log("Removed world event: %s, asset: %s", var5.uuid, var5.asset);
      }

      var4.getResource(this.managerResource).unregister(var5);
   }
}