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