WorldEventTickSystem class

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

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

extends: ArchetypeTickingSystem<EntityStore>

Поля (13)

МодификаторыТипИмя
final HytaleLogger LOGGER
WorldEvent var10
Stage var11
Fork var12
boolean var13
boolean var19
int var3
Stage var4
int var5
boolean var5
WorldEventStorage var6
ConditionManager var7
Ref var9

Методы (19)

МодификаторыВозвратСигнатура
static void cancelFailedForksvoid cancelFailedForks(@Nonnull WorldEvent var0, @Nonnull Stage var1, @Nonnull Fork var2, @Nonnull ConditionManager var3)
abstract cancelFailedForks cancelFailedForks(var10, var11, var12, var7)
abstract for for(int var8 = 0; var8 < var2.size()
static void handleFailvoid handleFail(@Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull CommandBuffer<EntityStore> var2)
abstract handleFail handleFail(var9, var10, var4)
abstract handleFail handleFail(var0, var1, var4)
if if(var10.init)
if if(var12 != null)
if if(!var13)
if if(!var19)
if if(!var10.isTransient)
if if(!var5)
if if(var4 != null)
if if(var1.repeatCount != -1 && --var1.repeatCount <= 0)
if if(++var1.failCount < 5)
if if(var7 != var2)
static void initStagevoid initStage(@Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull Stage var2, @Nonnull ConditionManager var3, @Nonnull CommandBuffer<EntityStore> var4)
abstract initStage initStage(var9, var10, var11, var7, var4)
static boolean nextStageboolean nextStage(@Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull Fork var2, @Nonnull CommandBuffer<EntityStore> var3)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.WorldEventStorage;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.action.EventAction;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.component.EventEndEcsEvent;
class="kw">import com.hypixel.hytale.builtin.adventure.worldevents.condition.EventCondition;
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.component.ArchetypeChunk;
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.tick.ArchetypeTickingSystem;
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 WorldEventTickSystem class="kw">extends ArchetypeTickingSystem<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, WorldEventStorage> eventStorageResource;
   @Nonnull
   class="kw">protected class="kw">final ResourceType<EntityStore, ConditionManager> conditionManagerResource;

   class="kw">public WorldEventTickSystem(
      @Nonnull ComponentType<EntityStore, WorldEvent> var1,
      @Nonnull ResourceType<EntityStore, WorldEventStorage> var2,
      @Nonnull ResourceType<EntityStore, ConditionManager> var3
   ) {
      this.eventComponent = var1;
      this.eventStorageResource = var2;
      this.conditionManagerResource = var3;
   }

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

   @Override
   class="kw">public void tick(float var1, @Nonnull ArchetypeChunk<EntityStore> var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4) {
      int var5 = var3.getExternalData().getWorld().getNonSpectatorPlayerCount();
      WorldEventStorage var6 = var3.getResource(this.eventStorageResource);
      ConditionManager var7 = var3.getResource(this.conditionManagerResource);

      for (int var8 = 0; var8 < var2.size(); var8++) {
         Ref var9 = var2.getReferenceTo(var8);
         WorldEvent var10 = var2.getComponent(var8, this.eventComponent);
         assert var10 != null;
         if (var5 >= var10.requiredPlayerCount && !((var10.dt += var1) < 0.25F)) {
            var10.dt = 0.0F;
            Stage var11 = var10.stage;
            if (var10.init) {
               initStage(var9, var10, var11, var7, var4);
            } else {
               Fork var12 = selectFork(var11);
               if (var12 != null) {
                  cancelFailedForks(var10, var11, var12, var7);
                  boolean var13 = true;

                  for (EventCondition var17 : var12.conditions()) {
                     var13 &= var17.onComplete(var10);
                     var17.reset();
                  }

                  if (!var13) {
                     handleFail(var9, var10, var4);
                  } else {
                     boolean var19 = true;

                     for (EventAction var18 : var12.actions()) {
                        var19 &= var18.apply(var9, var4, var10);
                     }

                     if (!var19) {
                        handleFail(var9, var10, var4);
                     } else if (!nextStage(var9, var10, var12, var4)) {
                        var4.invoke(var9, new EventEndEcsEvent(var10, EventEndEcsEvent.Reason.SUCCESS));
                        if (!var10.isTransient) {
                           var6.addComplete(var10.uuid);
                        }

                        var4.tryRemoveEntity(var9, RemoveReason.REMOVE);
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">protected class="kw">static void initStage(
      @Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull Stage var2, @Nonnull ConditionManager var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
      boolean var5 = true;

      for (Fork var9 : var2.forks()) {
         for (EventCondition var13 : var9.conditions()) {
            var5 &= var13.onStart(var1);
         }
      }

      if (!var5) {
         handleFail(var0, var1, var4);
      } else {
         for (Fork var17 : var2.forks()) {
            var3.submit(var17.conditions());
         }

         var1.init = false;
      }
   }

   class="kw">protected class="kw">static boolean nextStage(@Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull Fork var2, @Nonnull CommandBuffer<EntityStore> var3) {
      Stage var4 = var2.next();
      if (var4 != null) {
         var1.init = true;
         var1.stage = var4;
         class="kw">return true;
      }

      if (var1.repeatCount != -1 && --var1.repeatCount <= 0) {
         class="kw">return false;
      }

      var1.init = true;
      var1.failCount = 0;
      var1.stage = var1.root;
      var1.context.clear(var3, var1);
      var3.invoke(var0, new EventEndEcsEvent(var1, EventEndEcsEvent.Reason.SUCCESS));
      class="kw">return true;
   }

   @Nullable
   class="kw">protected class="kw">static Fork selectFork(@Nonnull Stage var0) {
      label24:
      for (Fork var4 : var0.forks()) {
         for (EventCondition var8 : var4.conditions()) {
            if (!var8.test()) {
               class="kw">continue label24;
            }
         }

         class="kw">return var4;
      }

      class="kw">return null;
   }

   class="kw">protected class="kw">static void handleFail(@Nonnull Ref<EntityStore> var0, @Nonnull WorldEvent var1, @Nonnull CommandBuffer<EntityStore> var2) {
      int var3 = var1.stage.id();
      if (++var1.failCount < 5) {
         var1.init = true;
         var1.stage = var1.root;
         var1.context.clear(var2, var1);
         ((HytaleLogger.Api)LOGGER.atWarning()).log("Failed to initialize world-event at stage: %d. Resetting event. Fail count: %d", var3, var1.failCount);
      } else {
         var2.invoke(var0, new EventEndEcsEvent(var1, EventEndEcsEvent.Reason.FAIL));
         var2.tryRemoveEntity(var0, RemoveReason.REMOVE);
         ((HytaleLogger.Api)LOGGER.atWarning()).log("Failed to initialize world-event at stage: %d. Removing event entity", var3);
      }
   }

   class="kw">protected class="kw">static void cancelFailedForks(@Nonnull WorldEvent var0, @Nonnull Stage var1, @Nonnull Fork var2, @Nonnull ConditionManager var3) {
      for (Fork var7 : var1.forks()) {
         if (var7 != var2) {
            var3.cancel(var7.conditions());

            for (EventCondition var11 : var7.conditions()) {
               var11.onCancel(var0);
               var11.reset();
            }
         }
      }
   }
}