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