diff --git a/Spigot-API-Patches/Additional-Block-Material-API-s.patch b/Spigot-API-Patches/Additional-Block-Material-API-s.patch
new file mode 100644
index 0000000000..79c613671c
--- /dev/null
+++ b/Spigot-API-Patches/Additional-Block-Material-API-s.patch
@@ -0,0 +1,57 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Wed, 30 Dec 2020 17:27:27 -0500
+Subject: [PATCH] Additional Block Material API's
+
+Faster version for isSolid() that utilizes NMS's state for isSolid instead of the slower
+process to do this in the Bukkit API
+
+Adds API for buildable, replaceable, burnable too.
+
+diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/block/Block.java
++++ b/src/main/java/org/bukkit/block/Block.java
+@@ -0,0 +0,0 @@ public interface Block extends Metadatable {
+      */
+     boolean isLiquid();
+ 
++    // Paper start
++    /**
++     * Check if this block is solid
++     * <p>
++     * Determined by Minecraft, typically a block a player can use to place a new block to build things.
++     * An example of a non buildable block would be liquids, flowers, or fire
++     *
++     * @return true if block is buildable
++     */
++    boolean isBuildable();
++    /**
++     * Check if this block is burnable
++     * <p>
++     * Determined by Minecraft, typically a block that fire can destroy (Wool, Wood)
++     *
++     * @return true if block is burnable
++     */
++    boolean isBurnable();
++    /**
++     * Check if this block is replaceable
++     * <p>
++     * Determined by Minecraft, representing a block that is not AIR that you can still place a new block at, such as flowers.
++     * @return true if block is replaceable
++     */
++    boolean isReplaceable();
++    /**
++     * Check if this block is solid
++     * <p>
++     * Determined by Minecraft, typically a block a player can stand on and can't be passed through.
++     *
++     * This API is faster than accessing Material#isSolid as it avoids a material lookup and switch statement.
++     * @return true if block is solid
++     */
++    boolean isSolid();
++    // Paper end
++
+     /**
+      * Gets the temperature of this block.
+      * <p>
diff --git a/Spigot-Server-Patches/Additional-Block-Material-API-s.patch b/Spigot-Server-Patches/Additional-Block-Material-API-s.patch
new file mode 100644
index 0000000000..969de70cfa
--- /dev/null
+++ b/Spigot-Server-Patches/Additional-Block-Material-API-s.patch
@@ -0,0 +1,40 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Wed, 30 Dec 2020 19:43:01 -0500
+Subject: [PATCH] Additional Block Material API's
+
+Faster version for isSolid() that utilizes NMS's state for isSolid instead of the slower
+process to do this in the Bukkit API
+
+Adds API for buildable, replaceable, burnable too.
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+@@ -0,0 +0,0 @@ public class CraftBlock implements Block {
+         return getNMS().getMaterial().isLiquid();
+     }
+ 
++    // Paper start
++    @Override
++    public boolean isBuildable() {
++        return getNMS().getMaterial().isBuildable();
++    }
++    @Override
++    public boolean isBurnable() {
++        return getNMS().getMaterial().isBurnable();
++    }
++    @Override
++    public boolean isReplaceable() {
++        return getNMS().getMaterial().isReplaceable();
++    }
++    @Override
++    public boolean isSolid() {
++        return getNMS().getMaterial().isSolid();
++    }
++    // Paper end
++
+     @Override
+     public PistonMoveReaction getPistonMoveReaction() {
+         return PistonMoveReaction.getById(getNMS().getPushReaction().ordinal());