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();
}
}
}