From 7bfb781ff31b88e39a7f0116341ee3edbe5d6041 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 30 Dec 2020 19:43:45 -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 Material#isSolid uses a large switch statement which isn't as performant vs a simple boolean return Adds API for buildable, replaceable, burnable too. --- ...0247-Additional-Block-Material-API-s.patch | 57 +++++++++++++++++++ ...0626-Additional-Block-Material-API-s.patch | 40 +++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Spigot-API-Patches/0247-Additional-Block-Material-API-s.patch create mode 100644 Spigot-Server-Patches/0626-Additional-Block-Material-API-s.patch diff --git a/Spigot-API-Patches/0247-Additional-Block-Material-API-s.patch b/Spigot-API-Patches/0247-Additional-Block-Material-API-s.patch new file mode 100644 index 0000000000..87283b0984 --- /dev/null +++ b/Spigot-API-Patches/0247-Additional-Block-Material-API-s.patch @@ -0,0 +1,57 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +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 6933fd6ad353a2d008c4a64c52a64bf36bd8035c..0c72d00ad238ab69d7ae0941e3ecb6c86e71624d 100644 +--- a/src/main/java/org/bukkit/block/Block.java ++++ b/src/main/java/org/bukkit/block/Block.java +@@ -427,6 +427,42 @@ public interface Block extends Metadatable { + */ + boolean isLiquid(); + ++ // Paper start ++ /** ++ * Check if this block is solid ++ *

++ * 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 ++ *

++ * 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 ++ *

++ * 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 ++ *

++ * 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. + *

diff --git a/Spigot-Server-Patches/0626-Additional-Block-Material-API-s.patch b/Spigot-Server-Patches/0626-Additional-Block-Material-API-s.patch new file mode 100644 index 0000000000..8c1a7d4e84 --- /dev/null +++ b/Spigot-Server-Patches/0626-Additional-Block-Material-API-s.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +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 6fde449aca446001145e49b5859725f840cc317c..1a1445e31c94cd279fef8db8484c12b13649f6e4 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +@@ -620,6 +620,25 @@ 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());