fromMap(Map, ?> map) {
+ return Optional
+ .ofNullable(Objects.toString(map.get("id"), null))
+ .flatMap(CraftEngineCustomBlock::fromId);
+ }
+
+ @Override
+ public void execute(AOneBlock addon, Block block) {
+ try {
+ block.setType(Material.AIR);
+ CraftEngineBlocks.place(block.getLocation(), Key.of(blockId), false);
+ } catch (Exception e) {
+ BentoBox.getInstance().logError("Could not place CraftEngine block " + blockId + ": " + e.getMessage());
+ block.setType(Material.STONE);
+ }
+ }
+}
diff --git a/src/test/java/world/bentobox/aoneblock/oneblocks/customblock/CraftEngineCustomBlockTest.java b/src/test/java/world/bentobox/aoneblock/oneblocks/customblock/CraftEngineCustomBlockTest.java
new file mode 100644
index 0000000..cd35d31
--- /dev/null
+++ b/src/test/java/world/bentobox/aoneblock/oneblocks/customblock/CraftEngineCustomBlockTest.java
@@ -0,0 +1,30 @@
+package world.bentobox.aoneblock.oneblocks.customblock;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit tests for {@link CraftEngineCustomBlock#fromMap(Map)}.
+ *
+ * Because CraftEngine is an optional runtime dependency, the {@code fromId}
+ * path cannot be exercised without a live server. These tests cover the
+ * map-parsing entry point and the factory registration in
+ * {@link world.bentobox.aoneblock.oneblocks.OneBlockCustomBlockCreator}.
+ */
+class CraftEngineCustomBlockTest {
+
+ @Test
+ void fromMapReturnsEmptyWhenIdMissing() {
+ Map map = new LinkedHashMap<>();
+ map.put("type", "craftengine");
+ // no "id" key
+
+ var result = CraftEngineCustomBlock.fromMap(map);
+
+ assertTrue(result.isEmpty(), "Should return empty when 'id' is missing");
+ }
+}
From 0419455884b5a57113b2ee5fb682c183b11278f0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 9 Apr 2026 12:46:53 +0000
Subject: [PATCH 3/4] Fix comment wording in CraftEngineListener
Agent-Logs-Url: https://github.com/BentoBoxWorld/AOneBlock/sessions/98ee3d0c-05a3-457b-8bce-42c0463fde3a
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
---
.../world/bentobox/aoneblock/listeners/CraftEngineListener.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/world/bentobox/aoneblock/listeners/CraftEngineListener.java b/src/main/java/world/bentobox/aoneblock/listeners/CraftEngineListener.java
index a1d1738..4b57bbb 100644
--- a/src/main/java/world/bentobox/aoneblock/listeners/CraftEngineListener.java
+++ b/src/main/java/world/bentobox/aoneblock/listeners/CraftEngineListener.java
@@ -18,7 +18,7 @@ public CraftEngineListener(AOneBlock addon) {
}
/**
- * Handle CraftEngineReloadEvent then reload the addon if it gets triggered
+ * Handle CraftEngineReloadEvent and reload the addon when triggered
* @param e - CraftEngineReloadEvent
*/
@EventHandler
From 1a48e8a8f4ab1e0234c1dec8d7bc813a6dfdffa5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 11 Apr 2026 17:48:32 +0000
Subject: [PATCH 4/4] Add craft-engine-core dependency to fix compilation
errors
The craft-engine-bukkit API references types from craft-engine-core
(Key, CustomBlock), so both modules are needed on the compile classpath.
Agent-Logs-Url: https://github.com/BentoBoxWorld/AOneBlock/sessions/02b4b996-4f28-499b-accc-6899a91de52a
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
---
pom.xml | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/pom.xml b/pom.xml
index 475c154..41d58a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -279,6 +279,18 @@
+
+ net.momirealms
+ craft-engine-core
+ ${craftengine.version}
+ provided
+
+
+ *
+ *
+
+
+
net.momirealms
craft-engine-bukkit