WorldSpawnData class
Пакет: com.hypixel.hytale.server.spawning.world.component
Файл: com/hypixel/hytale/server/spawning/world/component/WorldSpawnData.java
implements: Resource<EntityStore>
Поля (15)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
break |
|
private final long |
chunkIndex |
|
private final int |
environmentIndex |
|
ObjectIterator |
var1 |
|
ObjectIterator |
var1 |
|
WorldEnvironmentSpawnData |
var2 |
|
WorldEnvironmentSpawnData |
var2 |
|
WorldEnvironmentSpawnData |
var3 |
|
WorldTimeResource |
var4 |
|
EnvironmentSpawnParameters |
var4 |
|
WorldEnvironmentSpawnData |
var4 |
|
WorldEnvironmentSpawnData |
var6 |
|
int |
var7 |
|
Environment |
var8 |
Методы (33)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
UnspawnableEntrypublic UnspawnableEntry(int var1, long var2) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not implemented!") |
public |
void |
addCompletedSpawnJobvoid addCompletedSpawnJob(int var1) |
public |
void |
adjustActiveSpawnJobsvoid adjustActiveSpawnJobs(int var1, int var2) |
public |
void |
adjustChunkCountvoid adjustChunkCount(int var1) |
public |
void |
adjustSegmentCountvoid adjustSegmentCount(int var1) |
public |
double |
averageSegmentCountdouble averageSegmentCount() |
public |
void |
forEachEnvironmentSpawnDatavoid forEachEnvironmentSpawnData(Consumer<WorldEnvironmentSpawnData> var1) |
public |
int |
getActiveSpawnJobsint getActiveSpawnJobs() |
public |
int |
getActualNPCsint getActualNPCs() |
public |
int |
getChunkCountint getChunkCount() |
|
public long |
getChunkIndexpublic long getChunkIndex() |
|
public int |
getEnvironmentIndexpublic int getEnvironmentIndex() |
public |
double |
getExpectedNPCsdouble getExpectedNPCs() |
public |
double |
getExpectedNPCsInEmptyEnvironmentsdouble getExpectedNPCsInEmptyEnvironments() |
static |
ResourceType<EntityStore, WorldSpawnData> |
getResourceTypeResourceType<EntityStore, WorldSpawnData> getResourceType() |
public |
int |
getTotalSpawnJobBudgetUsedint getTotalSpawnJobBudgetUsed() |
public |
int |
getTotalSpawnJobsCompletedint getTotalSpawnJobsCompleted() |
public |
int |
getTrackedCountFromJobsint getTrackedCountFromJobs() |
public |
WorldEnvironmentSpawnData |
getWorldEnvironmentSpawnDataWorldEnvironmentSpawnData getWorldEnvironmentSpawnData(int var1) |
public |
int[] |
getWorldEnvironmentSpawnDataIndexesint[] getWorldEnvironmentSpawnDataIndexes() |
public |
boolean |
hasUnprocessedUnspawnableChunksboolean hasUnprocessedUnspawnableChunks() |
|
|
if if(var4 == null) |
|
|
if if(var2 >= 0 && var1 >= 0) |
|
|
if if(var1 >= 0 && var2 >= 0) |
|
|
if if(var4 == null) |
public |
boolean |
isUnspawnableboolean isUnspawnable() |
public |
void |
queueUnspawnableChunkvoid queueUnspawnableChunk(int var1, long var2) |
public |
void |
recalculateWorldCountvoid recalculateWorldCount() |
public |
void |
setUnspawnablevoid setUnspawnable(boolean var1) |
public |
boolean |
trackNPCboolean trackNPC(int var1, int var2, int var3, @Nonnull World var4, @Nonnull ComponentAccessor<EntityStore> var5) |
public |
boolean |
untrackNPCboolean untrackNPC(int var1, int var2, int var3) |
public |
void |
updateSpawnabilityvoid updateSpawnability() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.world.component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Resource;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.iterator.SpiralIterator;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
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.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.world.WorldEnvironmentSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.manager.EnvironmentSpawnParameters;
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.objects.ObjectIterator;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class WorldSpawnData class="kw">implements Resource<EntityStore> {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final Int2ObjectMap<WorldEnvironmentSpawnData> worldEnvironmentSpawnData = new Int2ObjectOpenHashMap();
class="kw">private class="kw">final ArrayDeque<WorldSpawnData.UnspawnableEntry> unspawnableProcessingQueue = new ArrayDeque<>();
class="kw">private int actualNPCs;
class="kw">private double expectedNPCs;
class="kw">private double expectedNPCsInEmptyEnvironments;
class="kw">private boolean unspawnable;
class="kw">private int chunkCount;
class="kw">private int segmentCount;
class="kw">private int activeSpawnJobs;
class="kw">private int trackedCountFromJobs;
class="kw">private int totalSpawnJobBudgetUsed;
class="kw">private int totalSpawnJobsCompleted;
class="kw">private class="kw">final SpiralIterator spiralIterator = new SpiralIterator();
class="kw">public WorldSpawnData() {
}
class="kw">public class="kw">static ResourceType<EntityStore, WorldSpawnData> getResourceType() {
class="kw">return SpawningPlugin.get().getWorldSpawnDataResourceType();
}
class="kw">public int getActualNPCs() {
class="kw">return this.actualNPCs;
}
class="kw">public double getExpectedNPCs() {
class="kw">return this.expectedNPCs;
}
class="kw">public double getExpectedNPCsInEmptyEnvironments() {
class="kw">return this.expectedNPCsInEmptyEnvironments;
}
class="kw">public boolean isUnspawnable() {
class="kw">return this.unspawnable;
}
class="kw">public void setUnspawnable(boolean var1) {
this.unspawnable = var1;
}
class="kw">public int getChunkCount() {
class="kw">return this.chunkCount;
}
class="kw">public void adjustChunkCount(int var1) {
this.chunkCount += var1;
}
class="kw">public void adjustSegmentCount(int var1) {
this.segmentCount += var1;
}
@Nonnull
class="kw">public SpiralIterator getSpiralIterator() {
class="kw">return this.spiralIterator;
}
class="kw">public double averageSegmentCount() {
class="kw">return this.chunkCount == 0 ? 0.0 : (double)this.segmentCount / this.chunkCount;
}
class="kw">public int getActiveSpawnJobs() {
class="kw">return this.activeSpawnJobs;
}
class="kw">public void adjustActiveSpawnJobs(int var1, int var2) {
this.activeSpawnJobs += var1;
this.trackedCountFromJobs += var2;
}
class="kw">public int getTrackedCountFromJobs() {
class="kw">return this.trackedCountFromJobs;
}
class="kw">public int getTotalSpawnJobBudgetUsed() {
class="kw">return this.totalSpawnJobBudgetUsed;
}
class="kw">public int getTotalSpawnJobsCompleted() {
class="kw">return this.totalSpawnJobsCompleted;
}
class="kw">public void addCompletedSpawnJob(int var1) {
this.totalSpawnJobBudgetUsed += var1;
this.totalSpawnJobsCompleted++;
}
class="kw">public WorldEnvironmentSpawnData getWorldEnvironmentSpawnData(int var1) {
class="kw">return (WorldEnvironmentSpawnData)this.worldEnvironmentSpawnData.get(var1);
}
@Nonnull
class="kw">public WorldEnvironmentSpawnData getOrCreateWorldEnvironmentSpawnData(int var1, @Nonnull World var2, @Nonnull ComponentAccessor<EntityStore> var3) {
WorldTimeResource var4 = var3.getResource(WorldTimeResource.getResourceType());
class="kw">return (WorldEnvironmentSpawnData)this.worldEnvironmentSpawnData.computeIfAbsent(var1, var2x -> {
WorldEnvironmentSpawnData var3 = new WorldEnvironmentSpawnData(var2x);
EnvironmentSpawnParameters var4 = SpawningPlugin.get().getWorldEnvironmentSpawnParameters(var2x);
if (var4 == null) {
Environment var8 = Environment.getAssetMap().getAsset(var2x);
LOGGER.at(Level.WARNING).log("No environment data found for '%s' [%s] but used in chunk", var8 == null ? null : var8.getId(), var2x);
class="kw">return var3;
}
for (WorldSpawnWrapper var6 : var4.getSpawnWrappers()) {
var3.updateNPCs(var6, var2);
}
int var7 = var4.getMoonPhase();
var3.recalculateWeight(var7);
var3.resetUnspawnable();
class="kw">return var3;
});
}
class="kw">public int[] getWorldEnvironmentSpawnDataIndexes() {
class="kw">return this.worldEnvironmentSpawnData.keySet().toIntArray();
}
class="kw">public void updateSpawnability() {
this.unspawnable = true;
ObjectIterator var1 = this.worldEnvironmentSpawnData.values().iterator();
while (var1.hasNext()) {
WorldEnvironmentSpawnData var2 = (WorldEnvironmentSpawnData)var1.next();
if (!var2.isUnspawnable()) {
this.unspawnable = false;
break;
}
}
}
class="kw">public void forEachEnvironmentSpawnData(Consumer<WorldEnvironmentSpawnData> var1) {
this.worldEnvironmentSpawnData.values().forEach(var1);
}
class="kw">public boolean trackNPC(int var1, int var2, int var3, @Nonnull World var4, @Nonnull ComponentAccessor<EntityStore> var5) {
if (var2 >= 0 && var1 >= 0) {
WorldEnvironmentSpawnData var6 = this.getOrCreateWorldEnvironmentSpawnData(var1, var4, var5);
var6.trackSpawn(var2, var3);
this.actualNPCs += var3;
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public boolean untrackNPC(int var1, int var2, int var3) {
if (var1 >= 0 && var2 >= 0) {
WorldEnvironmentSpawnData var4 = (WorldEnvironmentSpawnData)this.worldEnvironmentSpawnData.get(var1);
if (var4 == null) {
LOGGER.at(Level.WARNING)
.log(
"Removing NPC %s from environment %s which is not contained in the world environment spawn data",
NPCPlugin.get().getName(var2),
Environment.getAssetMap().getAsset(var1).getId()
);
class="kw">return false;
} else {
var4.trackDespawn(var2, var3);
this.actualNPCs -= var3;
class="kw">return true;
}
} else {
class="kw">return false;
}
}
class="kw">public void recalculateWorldCount() {
this.actualNPCs = 0;
this.expectedNPCs = 0.0;
this.expectedNPCsInEmptyEnvironments = 0.0;
ObjectIterator var1 = this.worldEnvironmentSpawnData.values().iterator();
while (var1.hasNext()) {
WorldEnvironmentSpawnData var2 = (WorldEnvironmentSpawnData)var1.next();
this.actualNPCs = this.actualNPCs + var2.getActualNPCs();
if (var2.hasNPCs()) {
this.expectedNPCs = this.expectedNPCs + var2.getExpectedNPCs();
} else {
this.expectedNPCsInEmptyEnvironments = this.expectedNPCsInEmptyEnvironments + var2.getExpectedNPCs();
}
}
}
class="kw">public void queueUnspawnableChunk(int var1, long var2) {
this.unspawnableProcessingQueue.add(new WorldSpawnData.UnspawnableEntry(var1, var2));
}
class="kw">public boolean hasUnprocessedUnspawnableChunks() {
class="kw">return !this.unspawnableProcessingQueue.isEmpty();
}
@Nullable
class="kw">public WorldSpawnData.UnspawnableEntry nextUnspawnableChunk() {
class="kw">return this.unspawnableProcessingQueue.isEmpty() ? null : this.unspawnableProcessingQueue.poll();
}
@Override
class="kw">public Resource<EntityStore> clone() {
throw new UnsupportedOperationException("Not implemented!");
}
class="kw">public class="kw">static class UnspawnableEntry {
class="kw">private class="kw">final int environmentIndex;
class="kw">private class="kw">final long chunkIndex;
class="kw">public UnspawnableEntry(int var1, long var2) {
this.environmentIndex = var1;
this.chunkIndex = var2;
}
class="kw">public int getEnvironmentIndex() {
class="kw">return this.environmentIndex;
}
class="kw">public long getChunkIndex() {
class="kw">return this.chunkIndex;
}
}
}