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