SpawnStatsCommand class
Пакет: com.hypixel.hytale.server.spawning.commands
Файл: com/hypixel/hytale/server/spawning/commands/SpawnStatsCommand.java
extends: AbstractWorldCommand
Поля (37)
| Модификаторы | Тип | Имя |
|---|---|---|
|
int |
var10 |
|
String |
var10 |
|
SpawnMarkerEntity |
var10 |
|
AtomicInteger |
var11 |
|
Object2IntMap |
var11 |
|
AtomicInteger |
var12 |
|
Object2IntOpenHashMap |
var13 |
|
AtomicInteger |
var14 |
|
Object2IntOpenHashMap |
var15 |
|
HashMap |
var16 |
|
StringBuilder |
var17 |
|
int |
var3 |
|
WorldSpawnData |
var4 |
|
int |
var4 |
|
ChunkEnvironmentSpawnData |
var4 |
|
String |
var4 |
|
|
var4 |
|
|
var4 |
|
AtomicInteger |
var5 |
|
String |
var5 |
|
double |
var5 |
|
NPCEntity |
var5 |
|
boolean |
var6 |
|
Store |
var6 |
|
SpawnMarkerEntity |
var6 |
|
NPCEntity |
var6 |
|
double[] |
var7 |
|
int |
var7 |
|
AtomicInteger |
var7 |
|
SpawnMarkerReference |
var7 |
|
String |
var8 |
|
int |
var8 |
|
AtomicInteger |
var8 |
|
String |
var8 |
|
int |
var9 |
|
int |
var9 |
|
Ref |
var9 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
for for(int var5 = 0; var5 < var3x.size() |
|
|
if if(var6) |
abstract |
|
super super("stats", "server.commands.spawning.stats.desc") |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.commands;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.Message;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandContext;
class="kw">import com.hypixel.hytale.server.core.command.system.arguments.system.FlagArg;
class="kw">import com.hypixel.hytale.server.core.command.system.basecommands.AbstractWorldCommand;
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.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.components.SpawnMarkerReference;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.spawning.SpawnRejection;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import com.hypixel.hytale.server.spawning.world.ChunkEnvironmentSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.ChunkSpawnData;
class="kw">import com.hypixel.hytale.server.spawning.world.component.WorldSpawnData;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.util.HashMap;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class SpawnStatsCommand class="kw">extends AbstractWorldCommand {
@Nonnull
class="kw">private class="kw">final FlagArg environmentsArg = this.withFlagArg("environments", "server.commands.spawning.stats.arg.environments.desc");
@Nonnull
class="kw">private class="kw">final FlagArg markersArg = this.withFlagArg("markers", "server.commands.spawning.stats.arg.markers.desc");
@Nonnull
class="kw">private class="kw">final FlagArg verboseArg = this.withFlagArg("verbose", "server.commands.spawning.stats.arg.verbose.desc");
class="kw">public SpawnStatsCommand() {
super("stats", "server.commands.spawning.stats.desc");
}
@Override
class="kw">protected void execute(@Nonnull CommandContext var1, @Nonnull World var2, @Nonnull Store<EntityStore> var3) {
if (this.environmentsArg.get(var1)) {
WorldSpawnData var4 = var3.getResource(WorldSpawnData.getResourceType());
AtomicInteger var5 = new AtomicInteger();
boolean var6 = this.verboseArg.get(var1);
var4.forEachEnvironmentSpawnData(
var3x -> {
if (var6 || var3x.hasNPCs() && var3x.getExpectedNPCs() != 0.0) {
int var4 = var3x.getEnvironmentIndex();
String var5 = Environment.getAssetMap().getAsset(var4).getId();
Store var6 = var2.getChunkStore().getStore();
double[] var7 = new double[]{0.0};
var3x.getChunkRefList().forEach(var3xx -> {
ChunkEnvironmentSpawnData var4 = var6.getComponent((Ref<ChunkStore>)var3xx, ChunkSpawnData.getComponentType())
.getEnvironmentSpawnData(var4);
var7[0] += var4.getExpectedNPCs();
});
String var8 = String.format(
"Environment: %-30s Exp %6.2f Act %4d Blk %s Chunk exp: %6.2f",
var5,
var3x.getExpectedNPCs(),
var3x.getActualNPCs(),
var3x.getSegmentCount(),
var7[0]
);
((HytaleLogger.Api)NPCPlugin.get().getLogger().atInfo()).log("%s", var8);
var3x.forEachNpcStat(
(var1x, var2x) -> {
int var3 = var2x.getSpansTried();
double var5 = var3 > 0 ? MathUtil.percent(var3 - var2x.getSpansSuccess(), var3) : 0.0;
String var4;
if (var6) {
int var7 = var2x.getSuccessfulJobCount();
int var8 = var2x.getSuccessfulJobTotalBudget();
int var9 = var2x.getFailedJobCount();
int var10 = var2x.getFailedJobTotalBudget();
var4 = String.format(
" NPC: %-30s Exp %6.2f Act %4d | Spns %8d: Succ %4d Lgt %5.1f Blk %5.1f Pos %5.1f Geo %5.1f Bre %5.1f Oth %5.1f | Fail%% %5.1f | Spwnbl %s | Succ Job Bgt %6d Avg Bgt %6.2f | Fail Jobs %6d Bgt %6d Avg Bgt %6.2f ",
NPCPlugin.get().getName(var1x),
var2x.getExpected(),
var2x.getActual(),
var3,
var2x.getSpansSuccess(),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.OUTSIDE_LIGHT_RANGE), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.INVALID_SPAWN_BLOCK), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.NO_POSITION), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.INVALID_POSITION), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.NOT_BREATHABLE), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.OTHER), var3),
var5,
!var2x.isUnspawnable(),
var8,
var7 > 0 ? (double)var8 / var7 : 0.0,
var9,
var10,
var9 > 0 ? (double)var10 / var9 : 0.0
);
} else {
var4 = String.format(
" NPC: %-30s Exp %6.2f Act %4d | Spns %8d: Succ %4d Lgt %5.1f Blk %5.1f Pos %5.1f Geo %5.1f Bre %5.1f Oth %5.1f | Fail%% %5.1f | Spwnbl %s ",
NPCPlugin.get().getName(var1x),
var2x.getExpected(),
var2x.getActual(),
var3,
var2x.getSpansSuccess(),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.OUTSIDE_LIGHT_RANGE), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.INVALID_SPAWN_BLOCK), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.NO_POSITION), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.INVALID_POSITION), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.NOT_BREATHABLE), var3),
MathUtil.percent(var2x.getRejectionCount(SpawnRejection.OTHER), var3),
var5,
!var2x.isUnspawnable()
);
}
NPCPlugin.get().getLogger().at(var5 < 60.0 ? Level.INFO : Level.WARNING).log("%s", var4);
}
);
} else {
var5.getAndIncrement();
}
}
);
AtomicInteger var7 = new AtomicInteger();
AtomicInteger var8 = new AtomicInteger();
var3.forEachEntityParallel(NPCEntity.getComponentType(), (var2x, var3x, var4x) -> {
var8.getAndIncrement();
NPCEntity var5 = var3x.getComponent(var2x, NPCEntity.getComponentType());
if (var5.getEnvironment() != Integer.MIN_VALUE && var5.getSpawnConfiguration() != Integer.MIN_VALUE) {
var7.getAndIncrement();
}
});
int var9 = var4.getTotalSpawnJobsCompleted();
String var10 = String.format(
"Total: Exp %.2f Exp-Empty %.2f Act %d Job Pending Act %d Tracked %d Total %d Unspawnable %s AvgSegCount %s Chunks %s Filtered empty envs %d Active Jobs %d Total Jobs Run %d Avg Job Budget %.2f",
var4.getExpectedNPCs(),
var4.getExpectedNPCsInEmptyEnvironments(),
var4.getActualNPCs(),
var4.getTrackedCountFromJobs(),
var7.get(),
var8.get(),
var4.isUnspawnable(),
var4.averageSegmentCount(),
var4.getChunkCount(),
var5.get(),
var4.getActiveSpawnJobs(),
var9,
var9 > 0 ? (double)var4.getTotalSpawnJobBudgetUsed() / var9 : 0.0
);
((HytaleLogger.Api)NPCPlugin.get().getLogger().atInfo()).log("%s", var10);
}
if (this.markersArg.get(var1)) {
AtomicInteger var11 = new AtomicInteger();
AtomicInteger var12 = new AtomicInteger();
Object2IntOpenHashMap var13 = new Object2IntOpenHashMap();
var3.forEachChunk(SpawnMarkerEntity.getComponentType(), (var3x, var4x) -> {
for (int var5 = 0; var5 < var3x.size(); var5++) {
SpawnMarkerEntity var6 = var3x.getComponent(var5, SpawnMarkerEntity.getComponentType());
var11.getAndIncrement();
var13.mergeInt(var6.getSpawnMarkerId(), 1, Integer::sum);
if (var6.getSpawnCount() == 0) {
var12.getAndIncrement();
}
}
});
AtomicInteger var14 = new AtomicInteger();
Object2IntOpenHashMap var15 = new Object2IntOpenHashMap();
HashMap var16 = new HashMap<>();
var3.forEachChunk(Archetype.of(NPCEntity.getComponentType(), SpawnMarkerReference.getComponentType()), (var3x, var4x) -> {
for (int var5 = 0; var5 < var3x.size(); var5++) {
NPCEntity var6 = var3x.getComponent(var5, NPCEntity.getComponentType());
SpawnMarkerReference var7 = var3x.getComponent(var5, SpawnMarkerReference.getComponentType());
var14.getAndIncrement();
String var8 = var6.getRoleName();
var15.mergeInt(var8, 1, Integer::sum);
Ref var9 = var7.getReference().getEntity(var4x);
SpawnMarkerEntity var10 = var4x.getComponent(var9, SpawnMarkerEntity.getComponentType());
Object2IntMap var11 = var16.computeIfAbsent(var10.getSpawnMarkerId(), var0x -> new Object2IntOpenHashMap());
var11.mergeInt(var8, 1, Integer::sum);
}
});
StringBuilder var17 = new StringBuilder();
var17.append("Markers: ").append(var11.get()).append(" (With zero spawns: ").append(var12.get()).append(")\nSpawned NPCs: ").append(var14.get());
var15.object2IntEntrySet().fastForEach(var1x -> var17.append("\n ").append((String)var1x.getKey()).append(": ").append(var1x.getIntValue()));
var17.append("\nRoles by marker type:");
var16.forEach((var2x, var3x) -> {
var17.append("\n ").append(var2x).append(" (Instances: ").append(var13.getInt(var2x)).append(")");
var3x.object2IntEntrySet().forEach(var1x -> var17.append("\n ").append((String)var1x.getKey()).append(": ").append(var1x.getIntValue()));
});
((HytaleLogger.Api)NPCPlugin.get().getLogger().atInfo()).log("%s", var17.toString());
}
var1.sendMessage(Message.translation("server.commands.spawning.stats.results"));
}
}