TickHeartbeat class

Пакет: com.hypixel.hytale.server.spawning.blockstates

Файл: com/hypixel/hytale/server/spawning/blockstates/SpawnMarkerBlockStateSystems.java

extends: EntityTickingSystem<ChunkStore>

Поля (7)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, SpawnMarkerBlock> componentType
private final Query<ChunkStore> query
SpawnMarkerBlock var6
BlockModule.BlockStateInfo var7
Ref var8
Ref var9

Методы (3)

МодификаторыВозвратСигнатура
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
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.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.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.nameplate.Nameplate;
class="kw">import com.hypixel.hytale.server.core.entity.reference.PersistentRef;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.FromPrefab;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.FromWorldGen;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HiddenFromAdventurePlayers;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PersistentModel;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
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.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class SpawnMarkerBlockStateSystems {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

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

   class="kw">private class="kw">static void createMarker(
      @Nonnull Ref<ChunkStore> var0,
      @Nonnull SpawnMarkerBlock var1,
      @Nonnull BlockModule.BlockStateInfo var2,
      @Nonnull Store<EntityStore> var3,
      @Nonnull CommandBuffer<ChunkStore> var4
   ) {
      if (var2.getSectionRef().isValid()) {
         BlockSection var5 = var4.getComponent(var2.getSectionRef(), BlockSection.getComponentType());
         if (var5 != null) {
            ChunkSection var6 = var4.getComponent(var2.getSectionRef(), ChunkSection.getComponentType());
            if (var6 != null) {
               int var7 = ChunkUtil.xFromIndex(var2.getIndex());
               int var8 = ChunkUtil.yFromIndex(var2.getIndex());
               int var9 = ChunkUtil.zFromIndex(var2.getIndex());
               BlockType var10 = BlockType.getAssetMap().getAsset(var5.get(var7, var8, var9));
               if (var10 != null && var10.getBlockEntity() != null) {
                  SpawnMarkerBlock var11 = var10.getBlockEntity().getComponent(SpawnMarkerBlock.getComponentType());
                  if (var11 != null) {
                     SpawnMarkerBlock.Data var12 = var11.getConfig();
                     if (var12 != null) {
                        SpawnMarker var13 = SpawnMarker.getAssetMap().getAsset(var12.getSpawnMarker());
                        if (var13 == null) {
                           LOGGER.at(Level.SEVERE).log("Marker %s does not exist!", var12.getSpawnMarker());
                           var4.removeEntity(var0, RemoveReason.REMOVE);
                        } else {
                           Vector3i var14 = new Vector3i(
                              ChunkUtil.worldCoordFromLocalCoord(var6.getX(), var7),
                              ChunkUtil.worldCoordFromLocalCoord(var6.getY(), var8),
                              ChunkUtil.worldCoordFromLocalCoord(var6.getZ(), var9)
                           );
                           Vector3i var15 = new Vector3i(var14);
                           Vector3i var16 = var12.getMarkerOffset();
                           if (var16 != null) {
                              var14.add(var16);
                           }

                           SpawnMarkerEntity var17 = new SpawnMarkerEntity();
                           var17.setSpawnMarker(var13);
                           Holder var18 = EntityStore.REGISTRY.newHolder();
                           var18.addComponent(SpawnMarkerEntity.getComponentType(), var17);
                           var18.addComponent(SpawnMarkerBlockReference.getComponentType(), new SpawnMarkerBlockReference(var15));
                           Vector3d var19 = Vector3iUtil.toVector3d(var14);
                           var19.add(0.5, 0.0, 0.5);
                           var18.addComponent(Nameplate.getComponentType(), new Nameplate(var13.getId()));
                           var18.addComponent(TransformComponent.getComponentType(), new TransformComponent(var19, Rotation3f.IDENTITY));
                           UUIDComponent var20 = var18.ensureAndGetComponent(UUIDComponent.getComponentType());
                           Model var21 = SpawnMarkerEntity.getModel(var13);
                           var18.addComponent(ModelComponent.getComponentType(), new ModelComponent(var21));
                           var18.addComponent(PersistentModel.getComponentType(), new PersistentModel(var21.toReference()));
                           var18.ensureComponent(HiddenFromAdventurePlayers.getComponentType());
                           Ref var22 = var3.addEntity(var18, AddReason.SPAWN);
                           PersistentRef var23 = new PersistentRef();
                           var23.setEntity(var22, var20.getUuid());
                           var1.setSpawnMarkerReference(var23);
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class AddOrRemove class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, SpawnMarkerBlock> componentType;

      class="kw">public AddOrRemove(ComponentType<ChunkStore, SpawnMarkerBlock> var1) {
         this.componentType = var1;
      }

      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return this.componentType;
      }

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

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         if (var2 == RemoveReason.REMOVE) {
            SpawnMarkerBlock var5 = var3.getComponent(var1, this.componentType);
            PersistentRef var6 = var5.getSpawnMarkerReference();
            if (var6 == null) {
               class="kw">return;
            }

            World var7 = var3.getExternalData().getWorld();
            var7.execute(() -> {
               Store var2 = var7.getEntityStore().getStore();
               Ref var3 = var6.getEntity(var2);
               if (var3 != null) {
                  var2.removeEntity(var3, RemoveReason.REMOVE);
               }
            });
         }
      }
   }

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

      class="kw">public SpawnMarkerAddedFromExternal(ComponentType<EntityStore, SpawnMarkerBlockReference> var1) {
         this.query = Query.and(var1, Query.or(FromWorldGen.getComponentType(), FromPrefab.getComponentType()));
      }

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

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

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

   class="kw">public class="kw">static class SpawnMarkerTickHeartbeat class="kw">extends EntityTickingSystem<EntityStore> {
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerBlockReference> componentType;

      class="kw">public SpawnMarkerTickHeartbeat(ComponentType<EntityStore, SpawnMarkerBlockReference> var1) {
         this.componentType = var1;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return false;
      }

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         SpawnMarkerBlockReference var6 = var3.getComponent(var2, this.componentType);
         Vector3i var7 = var6.getBlockPosition();
         ChunkStore var8 = var4.getExternalData().getWorld().getChunkStore();
         long var9 = ChunkUtil.indexChunkFromBlock(var7.x, var7.z);
         Ref var11 = var8.getChunkReference(var9);
         WorldChunk var12 = var11 != null && var11.isValid() ? var8.getStore().getComponent(var11, WorldChunk.getComponentType()) : null;
         if (var12 != null) {
            Ref var13 = var12.getBlockComponentEntity(var7.x, var7.y, var7.z);
            if (var13 != null && var13.getStore().getComponent(var13, SpawnMarkerBlock.getComponentType()) == null) {
               Ref var14 = var3.getReferenceTo(var2);
               var5.removeEntity(var14, RemoveReason.REMOVE);
               SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Removing block spawn marker due to blockstate mismatch: %s", var14);
            } else {
               var6.refreshOriginLostTimeout();
            }
         } else if (var6.tickOriginLostTimeout(var1)) {
            Ref var15 = var3.getReferenceTo(var2);
            var5.removeEntity(var15, RemoveReason.REMOVE);
            SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Removing block spawn marker due to origin chunk being unloaded: %s", var15);
         }
      }
   }

   class="kw">public class="kw">static class TickHeartbeat class="kw">extends EntityTickingSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, SpawnMarkerBlock> componentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public TickHeartbeat(ComponentType<ChunkStore, SpawnMarkerBlock> var1) {
         this.componentType = var1;
         this.query = Query.and(var1, this.blockStateInfoComponentType);
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return false;
      }

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

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
         SpawnMarkerBlock var6 = var3.getComponent(var2, this.componentType);
         assert var6 != null;
         BlockModule.BlockStateInfo var7 = var3.getComponent(var2, this.blockStateInfoComponentType);
         assert var7 != null;
         if (var6.getSpawnMarkerReference() == null) {
            Ref var8 = var3.getReferenceTo(var2);
            SpawnMarkerBlockStateSystems.createMarker(var8, var6, var7, var4.getExternalData().getWorld().getEntityStore().getStore(), var5);
         }

         if (var6.getSpawnMarkerReference().getEntity(var4.getExternalData().getWorld().getEntityStore().getStore()) != null) {
            var6.refreshMarkerLostTimeout();
         } else if (var6.tickMarkerLostTimeout(var1)) {
            Ref var9 = var3.getReferenceTo(var2);
            SpawnMarkerBlockStateSystems.LOGGER.at(Level.SEVERE).log("Creating new spawn marker due to desync with entity: %s", var9);
            SpawnMarkerBlockStateSystems.createMarker(var9, var6, var7, var4.getExternalData().getWorld().getEntityStore().getStore(), var5);
         }
      }
   }
}