Skip to content

Commit 52c712c

Browse files
authored
Merge pull request #474 from BentoBoxWorld/copilot/add-nexo-block-support
Add Nexo custom block support
2 parents a450c6a + 932ee9f commit 52c712c

4 files changed

Lines changed: 111 additions & 0 deletions

File tree

pom.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<!-- More visible way how to change dependency versions -->
5959
<bentobox.version>3.10.0</bentobox.version>
6060
<items-adder.version>4.0.10</items-adder.version>
61+
<nexo.version>1.8.0</nexo.version>
6162
<level.version>2.6.2</level.version>
6263
<bank.version>1.3.0</bank.version>
6364
<!-- Revision variable removes warning about dynamic version -->
@@ -151,6 +152,13 @@
151152
<releases><enabled>true</enabled></releases>
152153
<snapshots><enabled>false</enabled></snapshots>
153154
</repository>
155+
<!-- Nexo API -->
156+
<repository>
157+
<id>nexomc</id>
158+
<url>https://repo.nexomc.com/releases/</url>
159+
<releases><enabled>true</enabled></releases>
160+
<snapshots><enabled>false</enabled></snapshots>
161+
</repository>
154162
<!-- General Maven public mirror -->
155163
<repository>
156164
<id>codemc-repo</id>
@@ -251,6 +259,18 @@
251259
<version>${items-adder.version}</version>
252260
<scope>provided</scope>
253261
</dependency>
262+
<dependency>
263+
<groupId>com.nexomc</groupId>
264+
<artifactId>nexo</artifactId>
265+
<version>${nexo.version}</version>
266+
<scope>provided</scope>
267+
<exclusions>
268+
<exclusion>
269+
<groupId>*</groupId>
270+
<artifactId>*</artifactId>
271+
</exclusion>
272+
</exclusions>
273+
</dependency>
254274
</dependencies>
255275

256276
<build>

src/main/java/world/bentobox/aoneblock/AOneBlock.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
import world.bentobox.aoneblock.listeners.InfoListener;
2525
import world.bentobox.aoneblock.listeners.ItemsAdderListener;
2626
import world.bentobox.aoneblock.listeners.JoinLeaveListener;
27+
import world.bentobox.aoneblock.listeners.NexoListener;
2728
import world.bentobox.aoneblock.listeners.NoBlockHandler;
2829
import world.bentobox.aoneblock.listeners.StartSafetyListener;
2930
import world.bentobox.aoneblock.oneblocks.OneBlockCustomBlockCreator;
3031
import world.bentobox.aoneblock.oneblocks.OneBlocksManager;
3132
import world.bentobox.aoneblock.oneblocks.customblock.ItemsAdderCustomBlock;
33+
import world.bentobox.aoneblock.oneblocks.customblock.NexoCustomBlock;
3234
import world.bentobox.aoneblock.requests.IslandStatsHandler;
3335
import world.bentobox.aoneblock.requests.LocationStatsHandler;
3436
import world.bentobox.bentobox.api.addons.GameModeAddon;
@@ -53,6 +55,8 @@ public class AOneBlock extends GameModeAddon {
5355
private static final String THE_END = "_the_end";
5456
/** Whether ItemsAdder is present on the server */
5557
private boolean hasItemsAdder = false;
58+
/** Whether Nexo is present on the server */
59+
private boolean hasNexo = false;
5660

5761
/** The addon settings */
5862
private Settings settings;
@@ -116,6 +120,13 @@ public void onLoad() {
116120
OneBlockCustomBlockCreator.register("itemsadder", ItemsAdderCustomBlock::fromMap);
117121
hasItemsAdder = true;
118122
}
123+
// Check if Nexo exists, if yes register listener
124+
if (Bukkit.getPluginManager().getPlugin("Nexo") != null) {
125+
registerListener(new NexoListener(this));
126+
OneBlockCustomBlockCreator.register(NexoCustomBlock::fromId);
127+
OneBlockCustomBlockCreator.register("nexo", NexoCustomBlock::fromMap);
128+
hasNexo = true;
129+
}
119130
// Save the default config from config.yml
120131
saveDefaultConfig();
121132
// Load settings from config.yml. This will check if there are any issues with
@@ -398,6 +409,13 @@ public boolean hasItemsAdder() {
398409
return hasItemsAdder;
399410
}
400411

412+
/**
413+
* @return true if Nexo is on the server
414+
*/
415+
public boolean hasNexo() {
416+
return hasNexo;
417+
}
418+
401419
/**
402420
* Set the addon's world. Used only for testing.
403421
* @param world world
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package world.bentobox.aoneblock.listeners;
2+
3+
import org.bukkit.event.EventHandler;
4+
import org.bukkit.event.Listener;
5+
6+
import com.nexomc.nexo.api.events.NexoItemsLoadedEvent;
7+
import world.bentobox.aoneblock.AOneBlock;
8+
9+
/**
10+
* Handles NexoItemsLoadedEvent which is fired when Nexo loads or reloads its data
11+
*/
12+
public class NexoListener implements Listener {
13+
14+
private final AOneBlock addon;
15+
16+
public NexoListener(AOneBlock addon) {
17+
this.addon = addon;
18+
}
19+
20+
/**
21+
* Handle NexoItemsLoadedEvent then reload the addon if it gets triggered
22+
* @param e - NexoItemsLoadedEvent
23+
*/
24+
@EventHandler
25+
public void onLoad(NexoItemsLoadedEvent e) {
26+
addon.loadData();
27+
}
28+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package world.bentobox.aoneblock.oneblocks.customblock;
2+
3+
import java.util.Map;
4+
import java.util.Objects;
5+
import java.util.Optional;
6+
7+
import org.bukkit.Material;
8+
import org.bukkit.block.Block;
9+
10+
import com.nexomc.nexo.api.NexoBlocks;
11+
import world.bentobox.aoneblock.AOneBlock;
12+
import world.bentobox.aoneblock.oneblocks.OneBlockCustomBlock;
13+
import world.bentobox.bentobox.BentoBox;
14+
15+
public class NexoCustomBlock implements OneBlockCustomBlock {
16+
private final String itemId;
17+
18+
public NexoCustomBlock(String itemId) {
19+
this.itemId = itemId;
20+
}
21+
22+
public static Optional<NexoCustomBlock> fromId(String id) {
23+
if (NexoBlocks.isCustomBlock(id)) {
24+
return Optional.of(new NexoCustomBlock(id));
25+
}
26+
return Optional.empty();
27+
}
28+
29+
public static Optional<NexoCustomBlock> fromMap(Map<?, ?> map) {
30+
return Optional
31+
.ofNullable(Objects.toString(map.get("id"), null))
32+
.flatMap(NexoCustomBlock::fromId);
33+
}
34+
35+
@Override
36+
public void execute(AOneBlock addon, Block block) {
37+
try {
38+
block.setType(Material.AIR);
39+
NexoBlocks.place(itemId, block.getLocation());
40+
} catch (Exception e) {
41+
BentoBox.getInstance().logError("Could not place Nexo block " + itemId + ": " + e.getMessage());
42+
block.setType(Material.STONE);
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)