From 5bdbf9629968fc172263d583be8c905d2729d7ec Mon Sep 17 00:00:00 2001 From: tastybento Date: Tue, 21 Apr 2026 08:24:46 -0700 Subject: [PATCH] feat: add CraftEngine custom block support for island level calculation Adds CraftEngine block detection to processBlock() alongside ItemsAdder, Oraxen, and Nexo. CraftEngine blocks are counted using their native namespaced ID (e.g. mynamespace:my_block) and can be assigned point values in blockconfig.yml. Adds isCraftEngine() to Level and validates CE block IDs in BlockConfig.isOther(). Requires BentoBox 3.15.0-SNAPSHOT. Co-Authored-By: Claude Sonnet 4.6 --- pom.xml | 2 +- src/main/java/world/bentobox/level/Level.java | 8 ++++++++ .../bentobox/level/calculators/IslandLevelCalculator.java | 8 ++++++-- .../java/world/bentobox/level/config/BlockConfig.java | 7 ++++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 0f8a672..a1b0f1e 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ v1.21-SNAPSHOT 1.21.11-R0.1-SNAPSHOT - 3.14.1-SNAPSHOT + 3.15.0-SNAPSHOT 1.12.0 diff --git a/src/main/java/world/bentobox/level/Level.java b/src/main/java/world/bentobox/level/Level.java index 20f2094..4af0b59 100644 --- a/src/main/java/world/bentobox/level/Level.java +++ b/src/main/java/world/bentobox/level/Level.java @@ -515,4 +515,12 @@ public boolean isNexo() { && Bukkit.getPluginManager().isPluginEnabled("Nexo"); } + /** + * @return true if the CraftEngine plugin is hooked and not disabled in config + */ + public boolean isCraftEngine() { + return !getSettings().getDisabledPluginHooks().contains("CraftEngine") + && getPlugin().getHooks().getHook("CraftEngine").isPresent(); + } + } diff --git a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java index 0769a29..146540d 100644 --- a/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java +++ b/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java @@ -54,6 +54,7 @@ import us.lynuxcraft.deadsilenceiv.advancedchests.chest.gui.page.ChestPage; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.hooks.CraftEngineHook; import world.bentobox.bentobox.hooks.ItemsAdderHook; import world.bentobox.bentobox.hooks.OraxenHook; import world.bentobox.bentobox.util.Pair; @@ -562,11 +563,11 @@ private void processBlock(ChunkPair cp, int x, int y, int z, int globalX, int gl // Create a Location object only when needed for more complex checks. Location loc = null; - // === Custom Block Hooks (ItemsAdder, Oraxen, Nexo) === + // === Custom Block Hooks (ItemsAdder, Oraxen, Nexo, CraftEngine) === // These hooks can define custom blocks that override vanilla behavior. // They must be checked first. if (addon.isItemsAdder() || BentoBox.getInstance().getHooks().getHook("Oraxen").isPresent() - || addon.isNexo()) { + || addon.isNexo() || addon.isCraftEngine()) { loc = new Location(cp.world, globalX, y, globalZ); String customBlockId = null; if (addon.isItemsAdder()) { @@ -584,6 +585,9 @@ private void processBlock(ChunkPair cp, int x, int y, int z, int globalX, int gl customBlockId = "nexo:" + nexoMechanic.getItemID(); } } + if (customBlockId == null && addon.isCraftEngine()) { + customBlockId = CraftEngineHook.getBlockId(loc); + } if (customBlockId != null) { // If a custom block is found, count it and stop further processing for this block. diff --git a/src/main/java/world/bentobox/level/config/BlockConfig.java b/src/main/java/world/bentobox/level/config/BlockConfig.java index 2c9793a..62350c3 100644 --- a/src/main/java/world/bentobox/level/config/BlockConfig.java +++ b/src/main/java/world/bentobox/level/config/BlockConfig.java @@ -22,6 +22,7 @@ import com.nexomc.nexo.api.NexoItems; import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.hooks.CraftEngineHook; import world.bentobox.bentobox.hooks.ItemsAdderHook; import world.bentobox.bentobox.hooks.OraxenHook; import world.bentobox.level.Level; @@ -111,7 +112,11 @@ private boolean isOther(String key) { return NexoItems.exists(key.substring(5)); } // Check ItemsAdder - return addon.isItemsAdder() && ItemsAdderHook.isInRegistry(key); + if (addon.isItemsAdder() && ItemsAdderHook.isInRegistry(key)) { + return true; + } + // Check CraftEngine — block IDs are already namespaced (e.g. "mynamespace:my_block") + return addon.isCraftEngine() && CraftEngineHook.exists(key); } private boolean isSpawner(String key) {