EntityRemovalSystem class

Пакет: com.hypixel.hytale.server.core.entity

Файл: com/hypixel/hytale/server/core/entity/EntityRemovalSystem.java

extends: RefSystem<EntityStore>

Поля (7)

МодификаторыТипИмя
Ref var10
Dirty var11
CompletableFuture var12
CompletableFuture var13
ChunkStore var5
UUIDComponent var8
UUID var9

Методы (2)

МодификаторыВозвратСигнатура
if if(var2 == RemoveReason.REMOVE || var2 == RemoveReason.BUILDER_TOOLS_UNDO)
if if(var2x != null)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
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.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.IChunkSaver;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class EntityRemovalSystem class="kw">extends RefSystem<EntityStore> {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">private class="kw">static class="kw">final Query<EntityStore> QUERY = Query.and(
      UUIDComponent.getComponentType(), Query.not(EntityStore.REGISTRY.getNonSerializedComponentType()), Query.not(Player.getComponentType())
   );

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

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

   @Override
   class="kw">public void onEntityAdded(
      @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
   }

   @Override
   class="kw">public void onEntityRemove(
      @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
   ) {
      if (var2 == RemoveReason.REMOVE || var2 == RemoveReason.BUILDER_TOOLS_UNDO) {
         ChunkStore var5 = var3.getExternalData().getWorld().getChunkStore();
         if (var5.getSaver() class="kw">instanceof IChunkSaver.Cubic var7) {
            UUIDComponent var8 = var4.getComponent(var1, UUIDComponent.getComponentType());
            assert var8 != null;
            UUID var9 = var8.getUuid();
            Ref var10 = var3.getExternalData().getRefFromUUID(var9);
            if (var10 != null && !var10.equals(var1)) {
               LOGGER.at(Level.FINE).log("Skipping persisted entity removal for %s: the UUID maps to another live entity", var9);
            } else {
               Dirty var11 = var4.getComponent(var1, Dirty.getComponentType());
               CompletableFuture var12 = var11 == null ? null : var11.getSavingFuture();
               CompletableFuture var13 = var12 == null
                  ? var7.removeEntity(var9)
                  : var12.<Object>handle((var0, var1x) -> null).thenCompose(var2x -> var7.removeEntity(var9));
               var5.getStore().getResource(ChunkStore.SAVE_RESOURCE).pushSavingFuture(var13);
               var13.whenComplete((var1x, var2x) -> {
                  if (var2x != null) {
                     ((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var2x)).log("Failed to remove persisted entity %s:", var9);
                  }
               });
            }
         }
      }
   }
}