BuilderSystem class

Пакет: com.hypixel.hytale.builtin.encountermanager

Файл: com/hypixel/hytale/builtin/encountermanager/EncounterManagerSystems.java

extends: HolderSystem<EntityStore>

Поля (12)

МодификаторыТипИмя
private final Set<Dependency<EntityStore>> dependencies
private final ComponentType<EntityStore, EncounterManager> encounterComponentType
private final Query<EntityStore> query
return
BuilderInfo var13
BuilderSupport var14
EncounterManager var4
NPCPlugin var5
BuilderManager var6
int var7
var7
String var8

Методы (5)

МодификаторыВозвратСигнатура
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var7 == Integer.MIN_VALUE)
public void onEntityAddpublic void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3)
public void onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
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.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.TickingSystem;
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.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.ModelSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.Teleport;
class="kw">import com.hypixel.hytale.server.core.modules.entity.teleport.TeleportSystems;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
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.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.Instruction;
class="kw">import com.hypixel.hytale.server.npc.role.support.DebugSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.PositionCache;
class="kw">import com.hypixel.hytale.server.npc.role.support.StateSupport;
class="kw">import com.hypixel.hytale.server.npc.systems.BlackboardSystems;
class="kw">import com.hypixel.hytale.server.npc.systems.PositionCacheSystems;
class="kw">import com.hypixel.hytale.server.npc.systems.RoleSystems;
class="kw">import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
class="kw">import com.hypixel.hytale.server.spawning.SpawnLineage;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class EncounterManagerSystems {
   class="kw">private class="kw">static class="kw">final ThreadLocal<List<Ref<EntityStore>>> ENTITY_LIST = ThreadLocal.withInitial(ReferenceArrayList::new);

   class="kw">private EncounterManagerSystems() {
   }

   class="kw">public class="kw">static class ActivateSystem class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, EncounterManagerSystems.BuilderSystem.class));

      class="kw">public ActivateSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.encounterComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return Query.and(this.encounterComponentType, StateSupport.getComponentType(), DebugSupport.getComponentType(), PositionCache.getComponentType());
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         EncounterManager var4 = var1.getComponent(this.encounterComponentType);
         assert var4 != null;
         if (var4.isBuilt()) {
            ExecutionSupport var5 = ExecutionSupport.acquire();
            var5.populateFromHolder(var1);

            try {
               var5.getStateSupport().activate();
               DebugSupport var6 = var5.getDebugSupport();
               var6.setDebugFlags(var6.getDebugFlags());
               var5.getPositionCache().reset(true);
               Instruction var7 = var4.getRootInstruction();
               assert var7 != null;
               PositionCacheSystems.registerInstructionsWithCache(var5, var7, null, null, null);
            } class="kw">finally {
               var5.clearForReuse();
            }
         }
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
         PositionCache var4 = var1.getComponent(PositionCache.getComponentType());
         assert var4 != null;
         var4.reset(false);
      }
   }

   class="kw">public class="kw">static class BuilderSystem class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemDependency<>(Order.BEFORE, ModelSystems.ModelSpawned.class),
         new SystemDependency<>(Order.BEFORE, BlackboardSystems.SubscriptionLifecycleSystem.class)
      );
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public BuilderSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.encounterComponentType = var1;
         this.query = Archetype.of(var1, TransformComponent.getComponentType());
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

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

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         EncounterManager var4 = var1.getComponent(this.encounterComponentType);
         assert var4 != null;
         if (!var4.isBuilt()) {
            NPCPlugin var5 = NPCPlugin.get();
            BuilderManager var6 = var5.getBuilderManager();
            int var7 = var4.getEncounterIndex();
            if (var7 == Integer.MIN_VALUE) {
               String var8 = var4.getEncounterId();
               var7 = var8 != null ? var5.getIndex(var8) : Integer.MIN_VALUE;
            }

            BuilderInfo var13 = var7 >= 0 ? var6.tryGetBuilderInfo(var7) : null;
            if (var13 != null && var13.getBuilder().category() == EncounterManager.class && var13.getBuilder() class="kw">instanceof EncounterBuilder var9) {
               var4.setEncounterIndex(var7);
               BuilderSupport var14 = new BuilderSupport(var6, var1, new ExecutionContext(), var13.getBuilder(), null);

               try {
                  var9.createAndAttach(var1, var14);
               } catch (RuntimeException var12) {
                  ((HytaleLogger.Api)var5.getLogger().at(Level.SEVERE).withCause(var12)).log("Failed to build encounter manager '%s'", var4.getEncounterId());
                  class="kw">return;
               }

               if (!var1.getArchetype().contains(SpawnLineage.getComponentType())) {
                  var1.addComponent(SpawnLineage.getComponentType(), new SpawnLineage(UUID.randomUUID().toString()));
               }

               var4.spawned(var1);
            } else {
               var5.getLogger().at(Level.SEVERE).log("Encounter manager references unknown or invalid asset '%s'", var4.getEncounterId());
            }
         }
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
      }
   }

   class="kw">public class="kw">static class EnsureEntityComponents class="kw">extends HolderSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public EnsureEntityComponents(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.query = var1;
      }

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

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3) {
         Archetype var4 = var1.getArchetype();
         assert var4 != null;
         ComponentType var5 = NetworkId.getComponentType();
         if (!var4.contains(var5)) {
            var1.addComponent(var5, new NetworkId(var3.getExternalData().takeNextNetworkId()));
         }

         var1.ensureComponent(Intangible.getComponentType());
         var1.ensureComponent(PrefabCopyableComponent.getComponentType());
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3) {
      }
   }

   class="kw">public class="kw">static class LifecycleSystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, EncounterManagerSystems.BuilderSystem.class));

      class="kw">public LifecycleSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.encounterComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

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

      @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
      ) {
         EncounterManager var5 = var3.getComponent(var1, this.encounterComponentType);
         assert var5 != null;
         if (var5.isBuilt()) {
            class="kw">switch (var2) {
               case REMOVE:
               case BUILDER_TOOLS_UNDO:
                  var5.removed(var1, var4);
                  if (var5.isCleanupOnRemove()) {
                     removeLineage(var1, var5, var2, var3, var4);
                  }
                  break;
               case UNLOAD:
                  var5.unloaded(var1, var4);
            }
         }
      }

      class="kw">private class="kw">static void removeLineage(
         @Nonnull Ref<EntityStore> var0,
         @Nonnull EncounterManager var1,
         @Nonnull RemoveReason var2,
         @Nonnull Store<EntityStore> var3,
         @Nonnull CommandBuffer<EntityStore> var4
      ) {
         ComponentType var5 = SpawnLineage.getComponentType();
         SpawnLineage var6 = var3.getComponent(var0, var5);
         String var7 = var6 != null ? var6.getLineageId() : null;
         if (var7 != null) {
            ComponentType var8 = Player.getComponentType();
            int[] var9 = new int[]{0};
            var3.forEachChunk(var5, (var7x, var8x) -> {
               if (!var7x.getArchetype().contains(var8)) {
                  for (int var9 = 0; var9 < var7x.size(); var9++) {
                     SpawnLineage var10 = var7x.getComponent(var9, var5);
                     if (var10 != null && var7.equals(var10.getLineageId())) {
                        Ref var11 = var7x.getReferenceTo(var9);
                        if (!var11.equals(var0)) {
                           var4.tryRemoveEntity(var11, var2);
                           var9[0]++;
                        }
                     }
                  }
               }
            });
            NPCPlugin.get()
               .getLogger()
               .at(Level.FINE)
               .log("Encounter manager '%s' cleanup queued %d entities of lineage %s for removal", var1.getEncounterId(), var9[0], var7);
         }
      }
   }

   class="kw">public class="kw">static class TeleportSystem class="kw">extends RefChangeSystem<EntityStore, Teleport> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, Teleport> teleportComponentType = Teleport.getComponentType();
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, TeleportSystems.MoveSystem.class));

      class="kw">public TeleportSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.encounterComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

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

      @Nonnull
      @Override
      class="kw">public ComponentType<EntityStore, Teleport> componentType() {
         class="kw">return this.teleportComponentType;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull Teleport var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         EncounterManager var5 = var4.getComponent(var1, this.encounterComponentType);
         assert var5 != null;
         if (var5.isBuilt()) {
            World var6 = var3.getExternalData().getWorld();
            World var7 = var2.getWorld();
            var5.teleported(var1, var4, var6, var7 == null ? var6 : var7);
         }
      }

      class="kw">public void onComponentSet(
         @Nonnull Ref<EntityStore> var1, Teleport var2, @Nonnull Teleport var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
      }

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

   class="kw">public class="kw">static class TickSystem class="kw">extends TickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, EncounterManager> encounterComponentType;
      @Nonnull
      class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(
         new SystemDependency<>(Order.AFTER, PositionCacheSystems.UpdateSystem.class),
         new SystemDependency<>(Order.AFTER, RoleSystems.MarkedTargetRebindSystem.class),
         new SystemDependency<>(Order.BEFORE, RoleSystems.WorldSupportTickSystem.class),
         new SystemDependency<>(Order.BEFORE, RoleSystems.EntitySupportTickSystem.class),
         new SystemDependency<>(Order.BEFORE, RoleSystems.PositionCacheClearSystem.class),
         new SystemDependency<>(Order.BEFORE, RoleSystems.StateSupportUpdateSystem.class),
         new SystemDependency<>(Order.BEFORE, RoleSystems.MarkedEntitySupportPostSystem.class)
      );

      class="kw">public TickSystem(@Nonnull ComponentType<EntityStore, EncounterManager> var1) {
         this.encounterComponentType = var1;
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return this.dependencies;
      }

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull Store<EntityStore> var3) {
         List var4 = EncounterManagerSystems.ENTITY_LIST.get();
         var3.forEachChunk(this.encounterComponentType, (var1x, var2x) -> {
            for (int var3 = 0; var3 < var1x.size(); var3++) {
               var4.add(var1x.getReferenceTo(var3));
            }
         });

         for (Ref var6 : var4) {
            if (var6.isValid()) {
               EncounterManager var7 = var3.getComponent(var6, this.encounterComponentType);
               assert var7 != null;
               if (var7.isBuilt()) {
                  try {
                     var7.tick(var6, var1, var3);
                  } catch (IllegalArgumentException | IllegalStateException var9) {
                     ((HytaleLogger.Api)NPCPlugin.get().getLogger().at(Level.SEVERE).withCause(var9))
                        .log("Failed to tick encounter manager '%s'", var7.getEncounterId());
                     var3.removeEntity(var6, RemoveReason.REMOVE);
                  }
               }
            }
         }

         var4.clear();
      }
   }
}