--- a/net/minecraft/world/level/block/state/BlockState.java
+++ b/net/minecraft/world/level/block/state/BlockState.java
@@ -10,6 +_,17 @@
 public class BlockState extends BlockBehaviour.BlockStateBase {
     public static final Codec<BlockState> CODEC = codec(BuiltInRegistries.BLOCK.byNameCodec(), Block::defaultBlockState).stable();
 
+    // Paper start - optimise getType calls
+    org.bukkit.@org.jspecify.annotations.Nullable Material cachedMaterial;
+
+    public final org.bukkit.Material getBukkitMaterial() {
+        if (this.cachedMaterial == null) {
+            this.cachedMaterial = org.bukkit.craftbukkit.block.CraftBlockType.minecraftToBukkit(this.getBlock());
+        }
+        return this.cachedMaterial;
+    }
+    // Paper end - optimise getType calls
+
     public BlockState(Block owner, Reference2ObjectArrayMap<Property<?>, Comparable<?>> values, MapCodec<BlockState> propertiesCodec) {
         super(owner, values, propertiesCodec);
     }
