WorldEnvironmentSpawnData class

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

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

Поля (19)

МодификаторыТипИмя
final double K_COLUMNS
ObjectIterator var1
WorldNPCSpawnStat var2
ObjectIterator var2
double var2
Int2ObjectMap var3
WorldTimeResource var3
WorldNPCSpawnStat var3
var3
WorldNPCSpawnStat var3
WorldTimeResource var3
WorldTimeResource var3
WorldNPCSpawnStat var3
ObjectIterator var4
ObjectIterator var4
Entry var5
WorldNPCSpawnStat var5
WorldTimeResource var6
WorldNPCSpawnStat var7

Методы (29)

МодификаторыВозвратСигнатура
public void addChunkvoid addChunk(@Nonnull Ref<ChunkStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
public void addNPCvoid addNPC(int var1, @Nonnull WorldSpawnWrapper var2, @Nonnull RoleSpawnParameters var3, @Nonnull World var4, @Nonnull ComponentAccessor<EntityStore> var5)
public void adjustSegmentCountvoid adjustSegmentCount(int var1)
public void clearNPCsvoid clearNPCs()
for for(Ref var5 : this.chunkRefList)
public void forEachNpcStatvoid forEachNpcStat(@Nonnull IntObjectConsumer<WorldNPCSpawnStat> var1)
public int getActualNPCsint getActualNPCs()
public int getEnvironmentIndexint getEnvironmentIndex()
public double getExpectedNPCsdouble getExpectedNPCs()
public int getSegmentCountint getSegmentCount()
public boolean hasNPCsboolean hasNPCs()
if if(var7 != null)
if if(var3 == null)
public boolean isEmptyboolean isEmpty()
public boolean isFullyPopulatedboolean isFullyPopulated()
public boolean isUnspawnableboolean isUnspawnable()
public void recalculateWeightvoid recalculateWeight(int var1)
public void removeChunkvoid removeChunk(@Nonnull Ref<ChunkStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
public void removeNPCvoid removeNPC(int var1, @Nonnull ComponentAccessor<EntityStore> var2)
public void resetUnspawnablevoid resetUnspawnable()
public void setDensityvoid setDensity(double var1, @Nonnull Store<ChunkStore> var3)
public void setFullyPopulatedvoid setFullyPopulated(boolean var1)
public void setUnspawnablevoid setUnspawnable(boolean var1)
public double spawnWeightdouble spawnWeight()
public void trackDespawnvoid trackDespawn(int var1, int var2)
public void trackSpawnvoid trackSpawn(int var1, int var2)
public void updateExpectedNPCsvoid updateExpectedNPCs(int var1)
public void updateNPCsvoid updateNPCs(WorldSpawnWrapper var1, World var2)
public void updateSpawnStatsvoid updateSpawnStats(int var1, int var2, int var3, int var4, @Nonnull Object2IntMap<SpawnRejection> var5, boolean var6)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.function.consumer.IntObjectConsumer;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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.SpawnRejection;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawns.config.RoleSpawnParameters;
class="kw">import com.hypixel.hytale.server.spawning.world.component.ChunkSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.manager.WorldSpawnWrapper;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap.Entry;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class WorldEnvironmentSpawnData {
   class="kw">public class="kw">static class="kw">final double K_COLUMNS = 1024.0;
   class="kw">private class="kw">final int environmentIndex;
   class="kw">private double expectedNPCs;
   class="kw">private int actualNPCs;
   class="kw">private int segmentCount;
   class="kw">private double density;
   class="kw">private double sumOfWeights;
   class="kw">private boolean unspawnable;
   class="kw">private boolean fullyPopulated;
   @Nonnull
   class="kw">private class="kw">final Int2ObjectMap<WorldNPCSpawnStat> npcStatMap;
   @Nonnull
   class="kw">private class="kw">final List<Ref<ChunkStore>> chunkRefList;

   class="kw">public WorldEnvironmentSpawnData(int var1, double var2) {
      this.environmentIndex = var1;
      this.npcStatMap = new Int2ObjectOpenHashMap();
      this.chunkRefList = new ReferenceArrayList();
      this.density = var2;
      this.fullyPopulated = true;
   }

   class="kw">public WorldEnvironmentSpawnData(int var1) {
      this(var1, SpawningPlugin.get().getEnvironmentDensity(var1));
   }

   class="kw">public int getEnvironmentIndex() {
      class="kw">return this.environmentIndex;
   }

   class="kw">public int getSegmentCount() {
      class="kw">return this.segmentCount;
   }

   class="kw">public boolean isUnspawnable() {
      class="kw">return this.unspawnable;
   }

   class="kw">public void setUnspawnable(boolean var1) {
      this.unspawnable = var1;
   }

   class="kw">public double getExpectedNPCs() {
      class="kw">return this.expectedNPCs;
   }

   class="kw">public int getActualNPCs() {
      class="kw">return this.actualNPCs;
   }

   class="kw">public boolean isEmpty() {
      class="kw">return this.getSegmentCount() == 0;
   }

   class="kw">public boolean hasNPCs() {
      class="kw">return !this.npcStatMap.isEmpty();
   }

   @Nonnull
   class="kw">public Int2ObjectMap<WorldNPCSpawnStat> getNpcStatMap() {
      class="kw">return this.npcStatMap;
   }

   class="kw">public boolean isFullyPopulated() {
      class="kw">return this.fullyPopulated;
   }

   class="kw">public void setFullyPopulated(boolean var1) {
      this.fullyPopulated = var1;
   }

   @Nonnull
   class="kw">public List<Ref<ChunkStore>> getChunkRefList() {
      class="kw">return this.chunkRefList;
   }

   class="kw">public void adjustSegmentCount(int var1) {
      this.segmentCount += var1;
      this.expectedNPCs = this.segmentCount * this.density / 1024.0;
   }

   class="kw">public void forEachNpcStat(@Nonnull IntObjectConsumer<WorldNPCSpawnStat> var1) {
      this.npcStatMap.forEach(var1::accept);
   }

   class="kw">public void setDensity(double var1, @Nonnull Store<ChunkStore> var3) {
      this.density = var1;
      this.expectedNPCs = this.segmentCount * var1 / 1024.0;

      for (Ref var5 : this.chunkRefList) {
         var3.getComponent(var5, ChunkSpawnData.getComponentType()).getEnvironmentSpawnData(this.environmentIndex).updateDensity(var1);
      }
   }

   class="kw">public void updateNPCs(WorldSpawnWrapper var1, World var2) {
      Int2ObjectMap var3 = var1.getRoles();
      if (!var3.isEmpty()) {
         ObjectIterator var4 = var3.int2ObjectEntrySet().iterator();

         while (var4.hasNext()) {
            Entry var5 = (Entry<RoleSpawnParameters>)var4.next();
            if (!this.npcStatMap.containsKey(var5.getIntKey())) {
               this.npcStatMap.put(var5.getIntKey(), new WorldNPCSpawnStat(var5.getIntKey(), var1, (RoleSpawnParameters)var5.getValue(), var2));
            }
         }
      }
   }

   class="kw">public void clearNPCs() {
      this.npcStatMap.clear();
      this.sumOfWeights = 0.0;
      this.actualNPCs = 0;
      this.unspawnable = true;
   }

   class="kw">public void updateSpawnStats(int var1, int var2, int var3, int var4, @Nonnull Object2IntMap<SpawnRejection> var5, boolean var6) {
      WorldNPCSpawnStat var7 = (WorldNPCSpawnStat)this.npcStatMap.get(var1);
      if (var7 != null) {
         var7.updateSpawnStats(var2, var3, var4, var5, var6);
      }
   }

   class="kw">public void removeNPC(int var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      WorldTimeResource var3 = var2.getResource(WorldTimeResource.getResourceType());
      this.npcStatMap.remove(var1);
      this.recalculateWeight(var3.getMoonPhase());
   }

   class="kw">public void addNPC(
      int var1, @Nonnull WorldSpawnWrapper var2, @Nonnull RoleSpawnParameters var3, @Nonnull World var4, @Nonnull ComponentAccessor<EntityStore> var5
   ) {
      WorldTimeResource var6 = var5.getResource(WorldTimeResource.getResourceType());
      this.npcStatMap.computeIfAbsent(var1, var3x -> new WorldNPCSpawnStat(var3x, var2, var3, var4));
      this.recalculateWeight(var6.getMoonPhase());
      this.resetUnspawnable();
   }

   class="kw">public double spawnWeight() {
      class="kw">return Math.max(0.0, this.getExpectedNPCs() - this.getActualNPCs());
   }

   @Nullable
   class="kw">public WorldNPCSpawnStat pickRandomSpawnNPCStat(@Nonnull ComponentAccessor<EntityStore> var1) {
      class="kw">return RandomExtra.randomWeightedElement(this.npcStatMap.values(), var1x -> var1x.getMissingCount(var1));
   }

   class="kw">public void resetUnspawnable() {
      if (this.npcStatMap.isEmpty()) {
         this.unspawnable = true;
      } else {
         this.unspawnable = false;
         ObjectIterator var1 = this.npcStatMap.values().iterator();

         while (var1.hasNext()) {
            WorldNPCSpawnStat var2 = (WorldNPCSpawnStat)var1.next();
            var2.resetUnspawnable();
         }
      }
   }

   class="kw">public void trackSpawn(int var1, int var2) {
      WorldNPCSpawnStat var3 = (WorldNPCSpawnStat)this.npcStatMap.get(var1);
      if (var3 == null) {
         var3 = new WorldNPCSpawnStat.CountOnly(var1);
         this.npcStatMap.put(var1, var3);
      }

      var3.adjustActual(var2);
      this.actualNPCs += var2;
   }

   class="kw">public void trackDespawn(int var1, int var2) {
      WorldNPCSpawnStat var3 = (WorldNPCSpawnStat)this.npcStatMap.get(var1);
      if (var3 != null && var3.getActual() > 0) {
         var3.adjustActual(-var2);
         this.actualNPCs -= var2;
      }
   }

   class="kw">public void removeChunk(@Nonnull Ref<ChunkStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      WorldTimeResource var3 = var2.getResource(WorldTimeResource.getResourceType());
      this.chunkRefList.remove(var1);
      this.updateExpectedNPCs(var3.getMoonPhase());
   }

   class="kw">public void addChunk(@Nonnull Ref<ChunkStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      WorldTimeResource var3 = var2.getResource(WorldTimeResource.getResourceType());
      this.chunkRefList.add(var1);
      this.fullyPopulated = false;
      this.updateExpectedNPCs(var3.getMoonPhase());
      this.resetUnspawnable();
   }

   class="kw">public void recalculateWeight(int var1) {
      this.sumOfWeights = 0.0;
      ObjectIterator var2 = this.npcStatMap.values().iterator();

      while (var2.hasNext()) {
         WorldNPCSpawnStat var3 = (WorldNPCSpawnStat)var2.next();
         this.sumOfWeights = this.sumOfWeights + var3.getWeight(var1);
      }

      this.updateExpectedNPCs(var1);
   }

   class="kw">public void updateExpectedNPCs(int var1) {
      double var2 = this.sumOfWeights == 0.0 ? 0.0 : this.expectedNPCs / this.sumOfWeights;
      this.actualNPCs = 0;
      ObjectIterator var4 = this.npcStatMap.values().iterator();

      while (var4.hasNext()) {
         WorldNPCSpawnStat var5 = (WorldNPCSpawnStat)var4.next();
         var5.setExpected(var5.getWeight(var1) * var2);
         this.actualNPCs = this.actualNPCs + var5.getActual();
      }
   }
}