From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
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 fa576096e908f8fbdbef53e1bd91215ac9e73ed6..98263d896f316983609432c45b85401a2692432d 100644
--- a/src/main/java/org/bukkit/Chunk.java
+++ b/src/main/java/org/bukkit/Chunk.java
@@ -1,6 +1,8 @@
 package org.bukkit;
 
 import java.util.Collection;
+import java.util.function.Predicate;
+
 import org.bukkit.block.Block;
 import org.bukkit.block.BlockState;
 import org.bukkit.block.data.BlockData;
@@ -103,13 +105,36 @@ public interface Chunk extends PersistentDataHolder {
     @NotNull
     Entity[] getEntities();
 
+    // Paper start
     /**
      * Get a list of all tile entities in the chunk.
      *
      * @return The tile entities.
      */
     @NotNull
-    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.
+     */
+    @NotNull
+    BlockState[] getTileEntities(boolean useSnapshot);
+
+    /**
+     * Get a list of all tile entities that match a given predicate in the chunk.
+     *
+     * @param blockPredicate The predicate of blocks to return tile entities for
+     * @param useSnapshot Take snapshots or direct references
+     * @return The tile entities.
+     */
+    @NotNull
+    Collection<BlockState> getTileEntities(@NotNull Predicate<Block> blockPredicate, boolean useSnapshot);
+    // Paper end
 
     /**
      * Checks if the chunk is loaded.
