ChunkSpawningSystems class

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

Файл: com/hypixel/hytale/server/spawning/world/system/ChunkSpawningSystems.java

Поля (46)

МодификаторыТипИмя
final HytaleLogger LOGGER
private static final HytaleLogger LOGGER
private final ComponentType<ChunkStore, ChunkSpawnData> chunkSpawnDataComponentType
private final ComponentType<ChunkStore, ChunkSpawnData> chunkSpawnDataComponentType
private final ComponentType<ChunkStore, ChunkSpawnedNPCData> chunkSpawnedNPCDataComponentType
private final ComponentType<ChunkStore, ChunkSpawnedNPCData> chunkSpawnedNPCDataComponentType
WorldEnvironmentSpawnData var10
Store var10
ChunkEnvironmentSpawnData var11
Entry var11
int var12
int var12
Environment var13
ChunkEnvironmentSpawnData var13
String var14
WorldEnvironmentSpawnData var14
int var15
HytaleLogger.Api var16
Environment var17
var17
World var19
EnvironmentColumn var4
ChunkSpawnData var5
Int2ObjectMap var5
WorldSpawnData var5
WorldSpawnData var5
WorldSpawnData var5
World var6
WorldChunk var6
WorldChunk var6
WorldChunk var6
Store var7
ChunkSpawnData var7
var7
int var7
ObjectIterator var8
ObjectIterator var8
var8
ChunkEnvironmentSpawnData var8
var8
Entry var9
Entry var9
private final ComponentType<ChunkStore, WorldChunk> worldChunkComponentType
private final ComponentType<ChunkStore, WorldChunk> worldChunkComponentType
private final ResourceType<EntityStore, WorldSpawnData> worldSpawnDataResourceType
private final ResourceType<EntityStore, WorldSpawnData> worldSpawnDataResourceType

Методы (25)

МодификаторыВозвратСигнатура
public ChunkRefAddedpublic ChunkRefAdded(ResourceType<EntityStore, WorldSpawnData> var1, ComponentType<ChunkStore, ChunkSpawnData> var2, ComponentType<ChunkStore, ChunkSpawnedNPCData> var3)
public TickingStatepublic TickingState(ResourceType<EntityStore, WorldSpawnData> var1, ComponentType<ChunkStore, ChunkSpawnData> var2, ComponentType<ChunkStore, ChunkSpawnedNPCData> var3)
public ComponentType<ChunkStore, NonTicking<ChunkStore>> componentTypepublic ComponentType<ChunkStore, NonTicking<ChunkStore>> componentType()
for for(int var2 = 0; var2 < 32; var2++)
for for(int var3 = 0; var3 < 32; var3++)
abstract for for(int var6 = var4.indexOf(0)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var5 == null)
if if(var10 != null)
if if(var7 == null)
if if(var8 == null)
if if(var0 > 0)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull NonTicking<ChunkStore> var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onComponentRemovedpublic void onComponentRemoved(@Nonnull Ref<ChunkStore> var1, @Nonnull NonTicking<ChunkStore> var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onComponentSetpublic void onComponentSet(@Nonnull Ref<ChunkStore> var1, NonTicking<ChunkStore> var2, @Nonnull NonTicking<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
static void preprocessChunkvoid preprocessChunk(@Nonnull ChunkSpawnData var0, @Nonnull WorldChunk var1)
abstract preprocessChunk preprocessChunk(var7, var2)
static void preprocessColumnvoid preprocessColumn(@Nonnull ChunkSpawnData var0, @Nonnull WorldChunk var1, int var2, int var3)
abstract preprocessColumn preprocessColumn(var0, var1, var2, var3)
static boolean processStartedChunkboolean processStartedChunk(@Nonnull Ref<ChunkStore> var0, @Nonnull Store<ChunkStore> var1, @Nonnull WorldChunk var2, @Nonnull WorldSpawnData var3, @Nonnull ComponentType<ChunkStore, ChunkSpawnData> var4, @Nonnull ComponentType<ChunkStore, ChunkSpawnedNPCData> var5, @Nonnull CommandBuffer<ChunkStore> var6)
static boolean processStoppedChunkboolean processStoppedChunk(@Nonnull Ref<ChunkStore> var0, @Nonnull Store<ChunkStore> var1, @Nonnull WorldSpawnData var2, @Nonnull ComponentType<ChunkStore, ChunkSpawnData> var3, @Nonnull CommandBuffer<ChunkStore> var4)
static void updateChunkCountvoid updateChunkCount(int var0, @Nonnull WorldSpawnData var1)

Исходный код

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

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.NonTicking;
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.RefChangeSystem;
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.asset.type.environment.config.Environment;
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.environment.EnvironmentColumn;
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.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.world.ChunkEnvironmentSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.WorldEnvironmentSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.ChunkSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.ChunkSpawnedNPCData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.WorldSpawnData;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class ChunkSpawningSystems {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final Query<ChunkStore> QUERY = Archetype.of(WorldChunk.getComponentType(), ChunkSpawnData.getComponentType());
   class="kw">private class="kw">static class="kw">final Query<ChunkStore> TICKING_QUERY = Query.and(Query.not(ChunkStore.REGISTRY.getNonTickingComponentType()), QUERY);

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

   class="kw">protected class="kw">static boolean processStoppedChunk(
      @Nonnull Ref<ChunkStore> var0,
      @Nonnull Store<ChunkStore> var1,
      @Nonnull WorldSpawnData var2,
      @Nonnull ComponentType<ChunkStore, ChunkSpawnData> var3,
      @Nonnull CommandBuffer<ChunkStore> var4
   ) {
      ChunkSpawnData var5 = var1.getComponent(var0, var3);
      if (var5 == null) {
         class="kw">return false;
      }

      var4.removeComponent(var0, var3);
      if (!var5.isStarted()) {
         class="kw">return false;
      }

      World var6 = var1.getExternalData().getWorld();
      Store var7 = var6.getEntityStore().getStore();
      ObjectIterator var8 = Int2ObjectMaps.fastIterator(var5.getChunkEnvironmentSpawnDataMap());

      while (var8.hasNext()) {
         Entry var9 = (Entry<ChunkEnvironmentSpawnData>)var8.next();
         WorldEnvironmentSpawnData var10 = var2.getWorldEnvironmentSpawnData(var9.getIntKey());
         if (var10 != null) {
            ChunkEnvironmentSpawnData var11 = (ChunkEnvironmentSpawnData)var9.getValue();
            if (!var11.wasProcessedAsUnspawnable()) {
               int var12 = -var11.getSegmentCount();
               var10.adjustSegmentCount(var12);
               if (var10.getSegmentCount() < 0) {
                  Environment var13 = Environment.getAssetMap().getAsset(var10.getEnvironmentIndex());
                  String var14 = var13 != null ? var13.getId() : null;
                  LOGGER.at(Level.SEVERE).log("Block count for environment %s dropped below 0 to %s", var14, var10.getSegmentCount());
               }

               var2.adjustSegmentCount(var12);
            }

            var10.removeChunk(var0, var7);
         }
      }

      class="kw">return true;
   }

   class="kw">protected class="kw">static boolean processStartedChunk(
      @Nonnull Ref<ChunkStore> var0,
      @Nonnull Store<ChunkStore> var1,
      @Nonnull WorldChunk var2,
      @Nonnull WorldSpawnData var3,
      @Nonnull ComponentType<ChunkStore, ChunkSpawnData> var4,
      @Nonnull ComponentType<ChunkStore, ChunkSpawnedNPCData> var5,
      @Nonnull CommandBuffer<ChunkStore> var6
   ) {
      ChunkSpawnData var7 = var1.getComponent(var0, var4);
      if (var7 == null) {
         var7 = new ChunkSpawnData();
         var6.putComponent(var0, var4, var7);
      }

      var6.ensureComponent(var0, var5);
      if (var7.isStarted()) {
         class="kw">return false;
      }

      ObjectIterator var8 = Int2ObjectMaps.fastIterator(var7.getChunkEnvironmentSpawnDataMap());

      while (var8.hasNext()) {
         Entry var9 = (Entry<ChunkEnvironmentSpawnData>)var8.next();
         ((ChunkEnvironmentSpawnData)var9.getValue()).init(var9.getIntKey(), var2);
      }

      preprocessChunk(var7, var2);
      var7.setStarted(true);
      World var19 = var1.getExternalData().getWorld();
      Store var10 = var19.getEntityStore().getStore();
      var8 = Int2ObjectMaps.fastIterator(var7.getChunkEnvironmentSpawnDataMap());

      while (var8.hasNext()) {
         Entry var11 = (Entry<ChunkEnvironmentSpawnData>)var8.next();
         int var12 = var11.getIntKey();
         ChunkEnvironmentSpawnData var13 = (ChunkEnvironmentSpawnData)var11.getValue();
         var13.updateDensity(SpawningPlugin.get().getEnvironmentDensity(var12));
         WorldEnvironmentSpawnData var14 = var3.getOrCreateWorldEnvironmentSpawnData(var12, var19, var10);
         int var15 = var13.getSegmentCount();
         var14.adjustSegmentCount(var15);
         var3.adjustSegmentCount(var15);
         var14.addChunk(var0, var10);
         HytaleLogger.Api var16 = LOGGER.at(Level.FINER);
         if (var16.isEnabled()) {
            Environment var17 = Environment.getAssetMap().getAsset(var12);
            var16.log(
               "   Add chunk [%s/%s] to env=%s, exp=%s, act=%s, blks=%s",
               var2.getX(),
               var2.getZ(),
               var17 == null ? null : var17.getId(),
               var14.getExpectedNPCs(),
               var14.getActualNPCs(),
               var14.getSegmentCount()
            );
         }
      }

      class="kw">return true;
   }

   class="kw">private class="kw">static void preprocessChunk(@Nonnull ChunkSpawnData var0, @Nonnull WorldChunk var1) {
      for (int var2 = 0; var2 < 32; var2++) {
         for (int var3 = 0; var3 < 32; var3++) {
            preprocessColumn(var0, var1, var2, var3);
         }
      }
   }

   class="kw">private class="kw">static void preprocessColumn(@Nonnull ChunkSpawnData var0, @Nonnull WorldChunk var1, int var2, int var3) {
      EnvironmentColumn var4 = var1.getBlockChunk().getEnvironmentColumn(var2, var3);
      Int2ObjectMap var5 = var0.getChunkEnvironmentSpawnDataMap();

      for (int var6 = var4.indexOf(0); var6 < var4.size() && var4.getValueMin(var6) <= 320; var6++) {
         int var7 = var4.getValue(var6);
         ChunkEnvironmentSpawnData var8 = (ChunkEnvironmentSpawnData)var5.get(var7);
         if (var8 == null) {
            var8 = new ChunkEnvironmentSpawnData();
            var8.init(var7, var1);
            var5.put(var7, var8);
         }

         var8.registerSegment(var2, var3);
      }
   }

   class="kw">protected class="kw">static void updateChunkCount(int var0, @Nonnull WorldSpawnData var1) {
      if (var0 > 0) {
         var1.setUnspawnable(false);
      }

      var1.adjustChunkCount(var0);
      var1.recalculateWorldCount();
   }

   class="kw">public class="kw">static class ChunkRefAdded class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">final ResourceType<EntityStore, WorldSpawnData> worldSpawnDataResourceType;
      class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSpawnData> chunkSpawnDataComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSpawnedNPCData> chunkSpawnedNPCDataComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, WorldChunk> worldChunkComponentType;

      class="kw">public ChunkRefAdded(
         ResourceType<EntityStore, WorldSpawnData> var1, ComponentType<ChunkStore, ChunkSpawnData> var2, ComponentType<ChunkStore, ChunkSpawnedNPCData> var3
      ) {
         this.worldSpawnDataResourceType = var1;
         this.chunkSpawnDataComponentType = var2;
         this.chunkSpawnedNPCDataComponentType = var3;
         this.worldChunkComponentType = WorldChunk.getComponentType();
      }

      @Nonnull
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return ChunkSpawningSystems.TICKING_QUERY;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         WorldSpawnData var5 = var3.getExternalData().getWorld().getEntityStore().getStore().getResource(this.worldSpawnDataResourceType);
         WorldChunk var6 = var3.getComponent(var1, this.worldChunkComponentType);
         if (ChunkSpawningSystems.processStartedChunk(var1, var3, var6, var5, this.chunkSpawnDataComponentType, this.chunkSpawnedNPCDataComponentType, var4)) {
            ChunkSpawningSystems.LOGGER.at(Level.FINE).log("Adding chunk [%s/%s]", var6.getX(), var6.getZ());
            ChunkSpawningSystems.updateChunkCount(1, var5);
         }
      }

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

   class="kw">public class="kw">static class TickingState class="kw">extends RefChangeSystem<ChunkStore, NonTicking<ChunkStore>> {
      class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
      class="kw">private class="kw">final ResourceType<EntityStore, WorldSpawnData> worldSpawnDataResourceType;
      class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSpawnData> chunkSpawnDataComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSpawnedNPCData> chunkSpawnedNPCDataComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, WorldChunk> worldChunkComponentType;

      class="kw">public TickingState(
         ResourceType<EntityStore, WorldSpawnData> var1, ComponentType<ChunkStore, ChunkSpawnData> var2, ComponentType<ChunkStore, ChunkSpawnedNPCData> var3
      ) {
         this.worldSpawnDataResourceType = var1;
         this.chunkSpawnDataComponentType = var2;
         this.chunkSpawnedNPCDataComponentType = var3;
         this.worldChunkComponentType = WorldChunk.getComponentType();
      }

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

      @Nonnull
      @Override
      class="kw">public ComponentType<ChunkStore, NonTicking<ChunkStore>> componentType() {
         class="kw">return ChunkStore.REGISTRY.getNonTickingComponentType();
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull NonTicking<ChunkStore> var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         WorldSpawnData var5 = var3.getExternalData().getWorld().getEntityStore().getStore().getResource(this.worldSpawnDataResourceType);
         WorldChunk var6 = var3.getComponent(var1, this.worldChunkComponentType);
         if (ChunkSpawningSystems.processStoppedChunk(var1, var3, var5, this.chunkSpawnDataComponentType, var4)) {
            LOGGER.at(Level.FINE).log("Removing chunk [%s/%s]", var6.getX(), var6.getZ());
            ChunkSpawningSystems.updateChunkCount(-1, var5);
         }
      }

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

      class="kw">public void onComponentRemoved(
         @Nonnull Ref<ChunkStore> var1, @Nonnull NonTicking<ChunkStore> var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         WorldSpawnData var5 = var3.getExternalData().getWorld().getEntityStore().getStore().getResource(this.worldSpawnDataResourceType);
         WorldChunk var6 = var3.getComponent(var1, this.worldChunkComponentType);
         if (ChunkSpawningSystems.processStartedChunk(var1, var3, var6, var5, this.chunkSpawnDataComponentType, this.chunkSpawnedNPCDataComponentType, var4)) {
            LOGGER.at(Level.FINE).log("Adding chunk [%s/%s]", var6.getX(), var6.getZ());
            ChunkSpawningSystems.updateChunkCount(1, var5);
         }
      }
   }
}