Upstream has released updates that appears 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: fe0cadf0 Add BlockShearEntityEvent for Dispensers shearing Sheep 90e5cca3 SPIGOT-4892: Allow to set the currently viewed page of a book on a lectern inventory a30337f7 SPIGOT-4887: Villager level minimum is 1 d88d828c SPIGOT-4886: Villager type SNOWY should be named SNOW CraftBukkit Changes: 6ceffb0d SPIGOT-4895: Bed doesn't explode in Nether and The End ee881847 SPIGOT-4888: setSleepingIgnored resets the night even when there is no one in a bed 15e02b40 SPIGOT-4890: EntityDeathEvent fires twice when breaking an armor stand in survival mode b38a3c33 Add BlockShearEntityEvent for Dispensers shearing Sheep 70ebefca SPIGOT-4891: LecternInventory.getType() should return InventoryType.LECTERN 0036d1b7 SPIGOT-4887: Villager level minimum is 1
64 lines
2.7 KiB
Diff
64 lines
2.7 KiB
Diff
From 2c7c11780055e40e42eae8b6d6a5ab2f578bc92a 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/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index ff75bb3c6..5ed0fbe5a 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -51,7 +51,7 @@ import org.bukkit.event.weather.LightningStrikeEvent;
|
|
public class WorldServer extends World {
|
|
|
|
private static final Logger LOGGER = LogManager.getLogger();
|
|
- private final List<Entity> globalEntityList = Lists.newArrayList();
|
|
+ public final List<Entity> globalEntityList = Lists.newArrayList(); // Paper - private -> public
|
|
public final Int2ObjectMap<Entity> entitiesById = new Int2ObjectLinkedOpenHashMap();
|
|
private final Map<UUID, Entity> entitiesByUUID = Maps.newHashMap();
|
|
private final Queue<Entity> entitiesToAdd = Queues.newArrayDeque();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index b8de76007..c79b0f42a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -265,6 +265,35 @@ public class CraftWorld implements World {
|
|
private int waterAnimalSpawn = -1;
|
|
private int ambientSpawn = -1;
|
|
|
|
+ // Paper start - Provide fast information methods
|
|
+ // TODO review these changes
|
|
+ public int getEntityCount() {
|
|
+ return world.globalEntityList.size();
|
|
+ }
|
|
+ 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() {
|
|
+ return world.getChunkProvider().playerChunkMap.visibleChunks.size();
|
|
+ }
|
|
+ public int getPlayerCount() {
|
|
+ return world.players.size();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
private static final Random rand = new Random();
|
|
|
|
public CraftWorld(WorldServer world, ChunkGenerator gen, Environment env) {
|
|
--
|
|
2.21.0
|
|
|