PaperMC/Spigot-Server-Patches/0133-Provide-E-TE-Chunk-count-stat-methods.patch
Shane Freeder 0ea3083817
Updated Upstream (Bukkit/CraftBukkit)
Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
1e843b72 #510: Add NamespacedKey#fromString() to fetch from user input
a4d18241 #581: Add methods to modify despawn delay for wandering villagers

CraftBukkit Changes:
0cd8f19f #802: Add methods to modify despawn delay for wandering villagers
d5c5d998 SPIGOT-6362: ConcurrentModificationException: null --> Server Crash
8c7d69fe SPIGOT-5228: Entities that are removed during chunk unloads are not properly removed from the chunk.
2021-02-16 17:13:49 +00:00

61 lines
2.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 7 Jan 2017 15:24:46 -0500
Subject: [PATCH] Provide E/TE/Chunk count stat methods
Provides counts without the ineffeciency of using .getEntities().size()
which creates copy of the collections.
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 539bc756b5341e60266d6505d81778748cd5f475..e42f27bb10b6ee279555cfee3c90a88fccad9d65 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -281,6 +281,48 @@ public class CraftWorld implements World {
private int waterAmbientSpawn = -1;
private int ambientSpawn = -1;
+ // Paper start - Provide fast information methods
+ public int getEntityCount() {
+ int ret = 0;
+ for (net.minecraft.server.Entity entity : world.entitiesById.values()) {
+ if (entity.isChunkLoaded()) {
+ ++ret;
+ }
+ }
+ return ret;
+ }
+ public int getTileEntityCount() {
+ // We don't use the full world tile entity list, so we must iterate chunks
+ Long2ObjectLinkedOpenHashMap<PlayerChunk> chunks = world.getChunkProvider().playerChunkMap.visibleChunks;
+ int size = 0;
+ for (net.minecraft.server.PlayerChunk playerchunk : chunks.values()) {
+ net.minecraft.server.Chunk chunk = playerchunk.getChunk();
+ if (chunk == null) {
+ continue;
+ }
+ size += chunk.tileEntities.size();
+ }
+ return size;
+ }
+ public int getTickableTileEntityCount() {
+ return world.tileEntityListTick.size();
+ }
+ public int getChunkCount() {
+ int ret = 0;
+
+ for (PlayerChunk chunkHolder : world.getChunkProvider().playerChunkMap.visibleChunks.values()) {
+ if (chunkHolder.getChunk() != null) {
+ ++ret;
+ }
+ }
+
+ return ret;
+ }
+ public int getPlayerCount() {
+ return world.players.size();
+ }
+ // Paper end
+
private static final Random rand = new Random();
public CraftWorld(WorldServer world, ChunkGenerator gen, Environment env) {