Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
<bentobox.version>3.13.0</bentobox.version>
<items-adder.version>4.0.10</items-adder.version>
<nexo.version>1.8.0</nexo.version>
<craftengine.version>0.0.67</craftengine.version>
<level.version>2.6.2</level.version>
<bank.version>1.3.0</bank.version>
<!-- Revision variable removes warning about dynamic version -->
Expand Down Expand Up @@ -159,6 +160,13 @@
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
<!-- CraftEngine API -->
<repository>
<id>momirealms-releases</id>
<url>https://repo.momirealms.net/releases/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>false</enabled></snapshots>
</repository>
<!-- General Maven public mirror -->
<repository>
<id>codemc-repo</id>
Expand Down Expand Up @@ -271,6 +279,30 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.momirealms</groupId>
<artifactId>craft-engine-core</artifactId>
<version>${craftengine.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.momirealms</groupId>
<artifactId>craft-engine-bukkit</artifactId>
<version>${craftengine.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/world/bentobox/aoneblock/AOneBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@
import world.bentobox.aoneblock.listeners.BossBarListener;
import world.bentobox.aoneblock.listeners.HoloListener;
import world.bentobox.aoneblock.listeners.InfoListener;
import world.bentobox.aoneblock.listeners.CraftEngineListener;
import world.bentobox.aoneblock.listeners.ItemsAdderListener;
import world.bentobox.aoneblock.listeners.JoinLeaveListener;
import world.bentobox.aoneblock.listeners.NexoListener;
import world.bentobox.aoneblock.listeners.NoBlockHandler;
import world.bentobox.aoneblock.listeners.StartSafetyListener;
import world.bentobox.aoneblock.oneblocks.OneBlockCustomBlockCreator;
import world.bentobox.aoneblock.oneblocks.OneBlocksManager;
import world.bentobox.aoneblock.oneblocks.customblock.CraftEngineCustomBlock;
import world.bentobox.aoneblock.oneblocks.customblock.ItemsAdderCustomBlock;
import world.bentobox.aoneblock.oneblocks.customblock.NexoCustomBlock;
import world.bentobox.aoneblock.requests.IslandStatsHandler;
Expand Down Expand Up @@ -57,6 +59,8 @@ public class AOneBlock extends GameModeAddon {
private boolean hasItemsAdder = false;
/** Whether Nexo is present on the server */
private boolean hasNexo = false;
/** Whether CraftEngine is present on the server */
private boolean hasCraftEngine = false;

/** The addon settings */
private Settings settings;
Expand Down Expand Up @@ -127,6 +131,13 @@ public void onLoad() {
OneBlockCustomBlockCreator.register("nexo", NexoCustomBlock::fromMap);
hasNexo = true;
}
// Check if CraftEngine exists, if yes register listener
if (Bukkit.getPluginManager().getPlugin("CraftEngine") != null) {
registerListener(new CraftEngineListener(this));
OneBlockCustomBlockCreator.register(CraftEngineCustomBlock::fromId);
OneBlockCustomBlockCreator.register("craftengine", CraftEngineCustomBlock::fromMap);
hasCraftEngine = true;
}
// Save the default config from config.yml
saveDefaultConfig();
// Load settings from config.yml. This will check if there are any issues with
Expand Down Expand Up @@ -416,6 +427,13 @@ public boolean hasNexo() {
return hasNexo;
}

/**
* @return true if CraftEngine is on the server
*/
public boolean hasCraftEngine() {
return hasCraftEngine;
}

/**
* Set the addon's world. Used only for testing.
* @param world world
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package world.bentobox.aoneblock.listeners;

import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

import net.momirealms.craftengine.bukkit.api.event.CraftEngineReloadEvent;
import world.bentobox.aoneblock.AOneBlock;

/**
* Handles CraftEngineReloadEvent which is fired when CraftEngine loads or reloads its data
*/
public class CraftEngineListener implements Listener {

private final AOneBlock addon;

public CraftEngineListener(AOneBlock addon) {
this.addon = addon;
}

/**
* Handle CraftEngineReloadEvent and reload the addon when triggered
* @param e - CraftEngineReloadEvent
*/
@EventHandler
public void onReload(CraftEngineReloadEvent e) {
addon.loadData();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package world.bentobox.aoneblock.oneblocks.customblock;

import java.util.Map;
import java.util.Objects;
import java.util.Optional;

import org.bukkit.Material;
import org.bukkit.block.Block;

import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks;
import net.momirealms.craftengine.core.block.CustomBlock;
import net.momirealms.craftengine.core.util.Key;
import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.aoneblock.oneblocks.OneBlockCustomBlock;
import world.bentobox.bentobox.BentoBox;

public class CraftEngineCustomBlock implements OneBlockCustomBlock {
private final String blockId;

public CraftEngineCustomBlock(String blockId) {
this.blockId = blockId;
}

public static Optional<CraftEngineCustomBlock> fromId(String id) {
CustomBlock block = CraftEngineBlocks.byId(Key.of(id));
if (block != null) {
return Optional.of(new CraftEngineCustomBlock(id));
}
return Optional.empty();
}

public static Optional<CraftEngineCustomBlock> 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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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)}.
* <p>
* 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<String, Object> 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");
}
}
Loading