aboutsummaryrefslogtreecommitdiff
path: root/spark-bukkit/src/main
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2022-11-26 23:00:53 +0000
committerLuck <git@lucko.me>2022-11-26 23:01:02 +0000
commit65f9460a1a27e930b3749525766fd44d57b65300 (patch)
tree8ddf02527b465bd63b768b5ca0c8ee448f272c67 /spark-bukkit/src/main
parentdc52696138b2506b5a36e967b98af7e3f67ab0b0 (diff)
downloadspark-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.java44
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();