diff options
author | Luck <git@lucko.me> | 2022-11-26 23:00:53 +0000 |
---|---|---|
committer | Luck <git@lucko.me> | 2022-11-26 23:01:02 +0000 |
commit | 65f9460a1a27e930b3749525766fd44d57b65300 (patch) | |
tree | 8ddf02527b465bd63b768b5ca0c8ee448f272c67 /spark-bukkit/src/main | |
parent | dc52696138b2506b5a36e967b98af7e3f67ab0b0 (diff) | |
download | spark-65f9460a1a27e930b3749525766fd44d57b65300.tar.gz spark-65f9460a1a27e930b3749525766fd44d57b65300.tar.bz2 spark-65f9460a1a27e930b3749525766fd44d57b65300.zip |
Include player/entity/chunk counts in window statistics
Diffstat (limited to 'spark-bukkit/src/main')
-rw-r--r-- | spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitWorldInfoProvider.java | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitWorldInfoProvider.java b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitWorldInfoProvider.java index 79c2715..8f876cf 100644 --- a/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitWorldInfoProvider.java +++ b/spark-bukkit/src/main/java/me/lucko/spark/bukkit/BukkitWorldInfoProvider.java @@ -34,6 +34,21 @@ import java.util.ArrayList; import java.util.List; public class BukkitWorldInfoProvider implements WorldInfoProvider { + private static final boolean SUPPORTS_PAPER_COUNT_METHODS; + + static { + boolean supportsPaperCountMethods = false; + try { + World.class.getMethod("getEntityCount"); + World.class.getMethod("getTileEntityCount"); + World.class.getMethod("getChunkCount"); + supportsPaperCountMethods = true; + } catch (Exception e) { + // ignored + } + SUPPORTS_PAPER_COUNT_METHODS = supportsPaperCountMethods; + } + private final Server server; public BukkitWorldInfoProvider(Server server) { @@ -41,8 +56,33 @@ public class BukkitWorldInfoProvider implements WorldInfoProvider { } @Override - public Result<BukkitChunkInfo> poll() { - Result<BukkitChunkInfo> data = new Result<>(); + public CountsResult pollCounts() { + int players = this.server.getOnlinePlayers().size(); + int entities = 0; + int tileEntities = 0; + int chunks = 0; + + for (World world : this.server.getWorlds()) { + if (SUPPORTS_PAPER_COUNT_METHODS) { + entities += world.getEntityCount(); + tileEntities += world.getTileEntityCount(); + chunks += world.getChunkCount(); + } else { + entities += world.getEntities().size(); + Chunk[] chunksArray = world.getLoadedChunks(); + for (Chunk chunk : chunksArray) { + tileEntities += chunk.getTileEntities().length; + } + chunks += chunksArray.length; + } + } + + return new CountsResult(players, entities, tileEntities, chunks); + } + + @Override + public ChunksResult<BukkitChunkInfo> pollChunks() { + ChunksResult<BukkitChunkInfo> data = new ChunksResult<>(); for (World world : this.server.getWorlds()) { Chunk[] chunks = world.getLoadedChunks(); |