From 8147d0ec71fc9cd511f8c9dae3e8173c435c5ae8 Mon Sep 17 00:00:00 2001 From: Aikar <aikar@aikar.co> 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. --- .../Additional-Block-Material-API-s.patch | 57 +++++++++++++++++++ .../Additional-Block-Material-API-s.patch | 40 +++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 Spigot-API-Patches/Additional-Block-Material-API-s.patch create mode 100644 Spigot-Server-Patches/Additional-Block-Material-API-s.patch 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());