Result enum

Пакет: com.hypixel.hytale.server.spawning.controllers

Файл: com/hypixel/hytale/server/spawning/controllers/SpawnJobSystem.java

Поля (1)

МодификаторыТипИмя
SUCCESS, FAILED, TRY_AGAIN, PERMANENT_FAILURE, PENDING_SPAWN

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.controllers;

class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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 com.hypixel.hytale.server.spawning.ISpawnableWithModel;
class="kw">import com.hypixel.hytale.server.spawning.SpawningContext;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.jobs.SpawnJob;
class="kw">import java.util.List;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">abstract class SpawnJobSystem<J class="kw">extends SpawnJob, T class="kw">extends SpawnController<J>> class="kw">extends EntityTickingSystem<EntityStore> {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final int JOB_BUDGET = 64;

   class="kw">public SpawnJobSystem() {
   }

   class="kw">protected void tickSpawnJobs(@Nonnull T var1, @Nonnull Store<EntityStore> var2, @Nonnull CommandBuffer<EntityStore> var3) {
      World var4 = var2.getExternalData().getWorld();
      if (var4.getPlayerCount() != 0 && var4.getWorldConfig().isSpawningNPC() && !var1.isUnspawnable() && var4.getChunkStore().getStore().getEntityCount() != 0
         )
       {
         if (!(var1.getActualNPCs() > var1.getExpectedNPCs())) {
            int var5 = SpawningPlugin.get().getTickColumnBudget() / var4.getTps();

            try {
               while (var5 > 0 && var1.getActiveJobCount() != 0) {
                  int var6 = 0;

                  while (var6 >= 0 && var6 < var1.getActiveJobCount() && var5 > 0) {
                     SpawnJob var7 = var1.getSpawnJob(var6);
                     if (var7 != null) {
                        var7.setColumnBudget(Math.min(64, var5));
                        SpawnJobSystem.Result var8 = this.runJob(var1, var7, var3);
                        var5 -= var7.getBudgetUsed();
                        if (var8 != SpawnJobSystem.Result.TRY_AGAIN) {
                           List var9 = var1.getActiveJobs();
                           var6 = var9.indexOf(var7);
                           if (var6 != -1) {
                              var9.remove(var6);
                              if (var8 != SpawnJobSystem.Result.PENDING_SPAWN) {
                                 var1.addIdleJob(var7);
                              }
                           }
                        } else {
                           var6++;
                        }
                     } else {
                        var6 = -1;
                     }
                  }
               }
            } catch (Throwable var10) {
               ((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var10)).log("Failed to tick Spawn Jobs: ");
            }
         }
      }
   }

   class="kw">protected void onStartRun(@Nonnull J var1) {
      var1.setBudgetUsed(0);
   }

   class="kw">protected class="kw">abstract void onEndProbing(T var1, J var2, SpawnJobSystem.Result var3, ComponentAccessor<EntityStore> var4);

   class="kw">protected class="kw">abstract boolean pickSpawnPosition(T var1, J var2, CommandBuffer<EntityStore> var3);

   class="kw">protected class="kw">abstract SpawnJobSystem.Result trySpawn(T var1, J var2, CommandBuffer<EntityStore> var3);

   class="kw">protected class="kw">abstract SpawnJobSystem.Result spawn(World var1, T var2, J var3, CommandBuffer<EntityStore> var4);

   class="kw">protected SpawnJobSystem.Result endProbing(T var1, @Nonnull J var2, SpawnJobSystem.Result var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      if (!var2.isTerminated()) {
         this.onEndProbing(var1, var2, var3, var4);
         var2.reset();
         var2.setTerminated(true);
      }

      class="kw">return var3;
   }

   class="kw">private SpawnJobSystem.Result runJob(T var1, @Nonnull J var2, @Nonnull CommandBuffer<EntityStore> var3) {
      this.onStartRun(var2);
      if (var2.shouldTerminate()) {
         class="kw">return SpawnJobSystem.Result.FAILED;
      }

      ISpawnableWithModel var4;
      try {
         var4 = var2.getSpawnable();
      } catch (IllegalArgumentException var11) {
         this.endProbing(var1, var2, SpawnJobSystem.Result.PERMANENT_FAILURE, var3);
         throw var11;
      }

      if (var4 == null) {
         HytaleLogger.Api var13 = LOGGER.at(Level.FINEST);
         if (var13.isEnabled()) {
            var13.log("Spawn job %s: Terminated, spawnable %s gone", var2.getJobId(), var2.getSpawnableName());
         }

         class="kw">return this.endProbing(var1, var2, SpawnJobSystem.Result.FAILED, var3);
      } else {
         SpawningContext var5 = var2.getSpawningContext();
         if (!var5.setSpawnable(var4)) {
            HytaleLogger.Api var14 = LOGGER.at(Level.FINEST);
            if (var14.isEnabled()) {
               var14.log("Spawn job %s: Terminated, Unable to set spawnable %s", var2.getJobId(), var2.getSpawnableName());
            }

            class="kw">return this.endProbing(var1, var2, SpawnJobSystem.Result.FAILED, var3);
         } else {
            try {
               while (var2.budgetAvailable()) {
                  if (var2.shouldTerminate()) {
                     LOGGER.at(Level.FINEST).log("Spawn job %s: Terminated", var2.getJobId());
                     class="kw">return SpawnJobSystem.Result.FAILED;
                  }

                  if (!this.pickSpawnPosition(var1, var2, var3)) {
                     class="kw">return this.endProbing(var1, var2, SpawnJobSystem.Result.FAILED, var3);
                  }

                  SpawnJobSystem.Result var6 = this.trySpawn(var1, var2, var3);
                  if (var6 != SpawnJobSystem.Result.TRY_AGAIN) {
                     class="kw">return var6;
                  }
               }
            } class="kw">finally {
               var5.release();
            }

            class="kw">return SpawnJobSystem.Result.TRY_AGAIN;
         }
      }
   }

   class="kw">public enum Result {
      SUCCESS,
      FAILED,
      TRY_AGAIN,
      PERMANENT_FAILURE,
      PENDING_SPAWN;

      Result() {
      }
   }
}