From 36e6c991af959188bbc84e92eaee7f20ffe10574 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 15 Aug 2018 01:20:40 -0400 Subject: [PATCH] Ability to get Tile Entities from chunks without snapshots Also make Timings use said new feature and not create snapshots on it reading data --- ...ile-Entities-from-a-chunk-without-sn.patch | 39 +++++++++++++++++++ ...hots-for-Timings-Tile-Entity-reports.patch | 22 +++++++++++ ...ile-Entities-from-a-chunk-without-sn.patch | 35 +++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 Spigot-API-Patches/0136-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch create mode 100644 Spigot-API-Patches/0137-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch create mode 100644 Spigot-Server-Patches/0337-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch diff --git a/Spigot-API-Patches/0136-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/Spigot-API-Patches/0136-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch new file mode 100644 index 000000000..2a0262739 --- /dev/null +++ b/Spigot-API-Patches/0136-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch @@ -0,0 +1,39 @@ +From cf321e2bc3a1fdb44194e62e0976849571f04387 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 15 Aug 2018 01:04:58 -0400 +Subject: [PATCH] Ability to get Tile Entities from a chunk without snapshots + + +diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java +index c75bce07a..dc847340f 100644 +--- a/src/main/java/org/bukkit/Chunk.java ++++ b/src/main/java/org/bukkit/Chunk.java +@@ -76,12 +76,24 @@ public interface Chunk { + */ + Entity[] getEntities(); + ++ // Paper start + /** + * Get a list of all tile entities in the chunk. + * + * @return The tile entities. + */ +- BlockState[] getTileEntities(); ++ default BlockState[] getTileEntities() { ++ return getTileEntities(true); ++ } ++ ++ /** ++ * Get a list of all tile entities in the chunk. ++ * ++ * @param useSnapshot Take snapshots or direct references ++ * @return The tile entities. ++ */ ++ BlockState[] getTileEntities(boolean useSnapshot); ++ // Paper end + + /** + * Checks if the chunk is loaded. +-- +2.18.0 + diff --git a/Spigot-API-Patches/0137-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch b/Spigot-API-Patches/0137-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch new file mode 100644 index 000000000..feaba9ddf --- /dev/null +++ b/Spigot-API-Patches/0137-Don-t-use-snapshots-for-Timings-Tile-Entity-reports.patch @@ -0,0 +1,22 @@ +From 65a6244ec0d4bddeda62628e2edc621f0f448ed9 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 15 Aug 2018 01:19:37 -0400 +Subject: [PATCH] Don't use snapshots for Timings Tile Entity reports + + +diff --git a/src/main/java/co/aikar/timings/TimingHistory.java b/src/main/java/co/aikar/timings/TimingHistory.java +index c2c2fb838..769facd80 100644 +--- a/src/main/java/co/aikar/timings/TimingHistory.java ++++ b/src/main/java/co/aikar/timings/TimingHistory.java +@@ -118,7 +118,7 @@ public class TimingHistory { + data.entityCounts.get(entity.getType()).increment(); + } + +- for (BlockState tileEntity : chunk.getTileEntities()) { ++ for (BlockState tileEntity : chunk.getTileEntities(false)) { + if (tileEntity == null) { + Bukkit.getLogger().warning("Null tileentity detected in chunk at position x: " + chunk.getX() + ", z: " + chunk.getZ()); + continue; +-- +2.18.0 + diff --git a/Spigot-Server-Patches/0337-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/Spigot-Server-Patches/0337-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch new file mode 100644 index 000000000..fe5951d7e --- /dev/null +++ b/Spigot-Server-Patches/0337-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch @@ -0,0 +1,35 @@ +From 80f6f47ba434a4b53b71411540bedeb56cdbf512 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 15 Aug 2018 01:16:34 -0400 +Subject: [PATCH] Ability to get Tile Entities from a chunk without snapshots + + +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +index 0a47353b48..3238ca7420 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +@@ -96,7 +96,12 @@ public class CraftChunk implements Chunk { + return entities; + } + ++ // Paper start + public BlockState[] getTileEntities() { ++ return getTileEntities(true); ++ } ++ public BlockState[] getTileEntities(boolean useSnapshot) { ++ // Paper end + int index = 0; + net.minecraft.server.Chunk chunk = getHandle(); + +@@ -108,7 +113,7 @@ public class CraftChunk implements Chunk { + } + + BlockPosition position = (BlockPosition) obj; +- entities[index++] = worldServer.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ()).getState(); ++ entities[index++] = worldServer.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ()).getState(useSnapshot); // Paper + } + + return entities; +-- +2.18.0 +