SpawnMarkerBlockStateSystems class

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

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

Поля (45)

МодификаторыТипИмя
final HytaleLogger LOGGER
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
private final ComponentType<ChunkStore, SpawnMarkerBlock> componentType
private final ComponentType<EntityStore, SpawnMarkerBlockReference> componentType
private final ComponentType<ChunkStore, SpawnMarkerBlock> componentType
private final Query<EntityStore> query
private final Query<ChunkStore> query
return
BlockType var10
SpawnMarkerBlock var11
Ref var11
SpawnMarkerBlock.Data var12
WorldChunk var12
SpawnMarker var13
Ref var13
Vector3i var14
Ref var14
Vector3i var15
Ref var15
Vector3i var16
SpawnMarkerEntity var17
Holder var18
Vector3d var19
Store var2
UUIDComponent var20
Model var21
Ref var22
PersistentRef var23
Ref var3
BlockSection var5
SpawnMarkerBlock var5
ChunkSection var6
PersistentRef var6
SpawnMarkerBlockReference var6
SpawnMarkerBlock var6
int var7
World var7
Vector3i var7
BlockModule.BlockStateInfo var7
int var8
ChunkStore var8
Ref var8
int var9
long var9
Ref var9

Методы (27)

МодификаторыВозвратСигнатура
public AddOrRemovepublic AddOrRemove(ComponentType<ChunkStore, SpawnMarkerBlock> var1)
public SpawnMarkerAddedFromExternalpublic SpawnMarkerAddedFromExternal(ComponentType<EntityStore, SpawnMarkerBlockReference> var1)
public SpawnMarkerTickHeartbeatpublic SpawnMarkerTickHeartbeat(ComponentType<EntityStore, SpawnMarkerBlockReference> var1)
public TickHeartbeatpublic TickHeartbeat(ComponentType<ChunkStore, SpawnMarkerBlock> var1)
static void createMarkervoid createMarker(@Nonnull Ref<ChunkStore> var0, @Nonnull SpawnMarkerBlock var1, @Nonnull BlockModule.BlockStateInfo var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var5 != null)
if if(var6 != null)
if if(var11 != null)
if if(var12 != null)
if if(var13 == null)
if if(var16 != null)
if if(var2 == RemoveReason.REMOVE)
if if(var6 == null)
if if(var3 != null)
if if(var12 != null)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
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);
         }
      }
   }
}