diff --git a/Spigot-Server-Patches/Don-t-toString-block-unless-actually-showing-the-mes.patch b/Spigot-Server-Patches/Don-t-toString-block-unless-actually-showing-the-mes.patch
new file mode 100644
index 0000000000..723be63975
--- /dev/null
+++ b/Spigot-Server-Patches/Don-t-toString-block-unless-actually-showing-the-mes.patch
@@ -0,0 +1,21 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Sat, 9 May 2020 13:54:25 -0400
+Subject: [PATCH] Don't toString block unless actually showing the message
+
+This is causing MASSIVE performance issues with hoppers and block states
+in general.
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
+@@ -0,0 +0,0 @@ public class CraftBlockEntityState<T extends TileEntity> extends CraftBlockState
+         // get tile entity from block:
+         CraftWorld world = (CraftWorld) this.getWorld();
+         this.tileEntity = tileEntityClass.cast(world.getHandle().getTileEntity(this.getPosition()));
+-        Preconditions.checkState(this.tileEntity != null, "Tile is null, asynchronous access? " + block);
++        if (tileEntity == null) Preconditions.checkState(false, "Tile is null, asynchronous access? " + block); // Paper - Don't toString block unless actually error'ing...
+ 
+         // Paper start
+         this.snapshotDisabled = DISABLE_SNAPSHOT;