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) {