Skip to content

Commit 38e7f37

Browse files
authored
Merge pull request #2672 from benwoo1110/feat/multiverse-hook
Revamp Multiverse hook using api
2 parents 23d76c3 + 0c41b95 commit 38e7f37

File tree

5 files changed

+162
-74
lines changed

5 files changed

+162
-74
lines changed

pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,17 @@
161161
<id>MG-Dev Jenkins CI Maven Repository</id>
162162
<url>https://ci.mg-dev.eu/plugin/repository/everything</url>
163163
</repository>
164+
<!-- Used for Multiverse hook -->
165+
<repository>
166+
<id>multiverse-multiverse-releases</id>
167+
<name>Multiverse Repository</name>
168+
<url>https://repo.onarandombox.com/multiverse-releases</url>
169+
</repository>
170+
<repository>
171+
<id>multiverse-multiverse-snapshots</id>
172+
<name>Multiverse Repository</name>
173+
<url>https://repo.onarandombox.com/multiverse-snapshots</url>
174+
</repository>
164175
<!-- For MythicMobs -->
165176
<repository>
166177
<id>nexus</id>
@@ -304,6 +315,18 @@
304315
<version>5.3.5</version>
305316
<scope>provided</scope>
306317
</dependency>
318+
<dependency>
319+
<groupId>org.mvplugins.multiverse.core</groupId>
320+
<artifactId>multiverse-core</artifactId>
321+
<version>5.0.0-SNAPSHOT</version>
322+
<scope>provided</scope>
323+
</dependency>
324+
<dependency>
325+
<groupId>com.onarandombox.multiversecore</groupId>
326+
<artifactId>multiverse-core</artifactId>
327+
<version>4.3.16</version>
328+
<scope>provided</scope>
329+
</dependency>
307330
<!-- Shaded APIs -->
308331
<!--
309332
<dependency>

src/main/java/world/bentobox/bentobox/BentoBox.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
import world.bentobox.bentobox.hooks.FancyNpcsHook;
2828
import world.bentobox.bentobox.hooks.ItemsAdderHook;
2929
import world.bentobox.bentobox.hooks.MultipaperHook;
30-
import world.bentobox.bentobox.hooks.MultiverseCoreHook;
30+
import world.bentobox.bentobox.hooks.MultiverseCore4Hook;
31+
import world.bentobox.bentobox.hooks.MultiverseCore5Hook;
3132
import world.bentobox.bentobox.hooks.MyWorldsHook;
3233
import world.bentobox.bentobox.hooks.MythicMobsHook;
3334
import world.bentobox.bentobox.hooks.SlimefunHook;
@@ -233,7 +234,11 @@ private void completeSetup(long loadTime) {
233234

234235
// Register Multiverse hook - MV loads AFTER BentoBox
235236
// Make sure all worlds are already registered to Multiverse.
236-
hooksManager.registerHook(new MultiverseCoreHook());
237+
if (hasClass("org.mvplugins.multiverse.core.MultiverseCore")) {
238+
hooksManager.registerHook(new MultiverseCore5Hook());
239+
} else if (hasClass("com.onarandombox.MultiverseCore.MultiverseCore")) {
240+
hooksManager.registerHook(new MultiverseCore4Hook());
241+
}
237242
hooksManager.registerHook(new MyWorldsHook());
238243
islandWorldManager.registerWorldsToMultiverse(true);
239244

@@ -281,6 +286,15 @@ private void completeSetup(long loadTime) {
281286
}
282287
}
283288

289+
private boolean hasClass(String className) {
290+
try {
291+
Class.forName(className);
292+
return true;
293+
} catch (ClassNotFoundException e) {
294+
return false;
295+
}
296+
}
297+
284298
private void fireCriticalError(String message, String error) {
285299
logError("*****************CRITICAL ERROR!******************");
286300
logError(message);
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package world.bentobox.bentobox.hooks;
2+
3+
import com.onarandombox.MultiverseCore.MultiverseCore;
4+
import org.bukkit.Bukkit;
5+
import org.bukkit.Material;
6+
import org.bukkit.World;
7+
import world.bentobox.bentobox.BentoBox;
8+
import world.bentobox.bentobox.api.hooks.Hook;
9+
10+
public class MultiverseCore4Hook extends Hook implements WorldManagementHook {
11+
12+
public MultiverseCore4Hook() {
13+
super("Multiverse-Core", Material.COMPASS);
14+
}
15+
16+
/**
17+
* Register the world with Multiverse
18+
* @param world - world to register
19+
* @param islandWorld - if true, then this is an island world
20+
*/
21+
@Override
22+
public void registerWorld(World world, boolean islandWorld) {
23+
MultiverseCore core = (MultiverseCore) Bukkit.getPluginManager().getPlugin("Multiverse-Core");
24+
if (core == null) {
25+
return;
26+
}
27+
String generator = islandWorld ? getGenerator(world) : null;
28+
core.getMVWorldManager().addWorld(
29+
world.getName(),
30+
world.getEnvironment(),
31+
String.valueOf(world.getSeed()),
32+
world.getWorldType(),
33+
world.canGenerateStructures(),
34+
generator
35+
);
36+
core.getMVWorldManager().getMVWorld(world.getName()).setAutoLoad(false);
37+
}
38+
39+
private String getGenerator(World world) {
40+
return BentoBox.getInstance().getIWM().getAddon(world)
41+
.map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false)
42+
? BentoBox.getInstance().getName()
43+
: null;
44+
}
45+
46+
@Override
47+
public void unregisterWorld(World world) {
48+
MultiverseCore core = (MultiverseCore) Bukkit.getPluginManager().getPlugin("Multiverse-Core");
49+
if (core == null) {
50+
return;
51+
}
52+
core.getMVWorldManager().removeWorldFromConfig(world.getName());
53+
}
54+
55+
@Override
56+
public boolean hook() {
57+
return true; // The hook process shouldn't fail
58+
}
59+
60+
@Override
61+
public String getFailureCause() {
62+
return null; // The hook process shouldn't fail
63+
}
64+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package world.bentobox.bentobox.hooks;
2+
3+
import org.bukkit.Material;
4+
import org.bukkit.World;
5+
6+
import org.mvplugins.multiverse.core.MultiverseCoreApi;
7+
import org.mvplugins.multiverse.core.world.options.ImportWorldOptions;
8+
import world.bentobox.bentobox.BentoBox;
9+
import world.bentobox.bentobox.api.hooks.Hook;
10+
11+
/**
12+
* Provides implementation and interfacing to interact with Multiverse.
13+
*
14+
* @author Poslovitch
15+
*/
16+
public class MultiverseCore5Hook extends Hook implements WorldManagementHook {
17+
18+
public MultiverseCore5Hook() {
19+
super("Multiverse-Core", Material.COMPASS);
20+
}
21+
22+
/**
23+
* Register the world with Multiverse
24+
* @param world - world to register
25+
* @param islandWorld - if true, then this is an island world
26+
*/
27+
@Override
28+
public void registerWorld(World world, boolean islandWorld) {
29+
MultiverseCoreApi api = MultiverseCoreApi.get();
30+
String generator = islandWorld ? getGenerator(world) : null;
31+
api.getWorldManager().importWorld(ImportWorldOptions.worldName(world.getName())
32+
.environment(world.getEnvironment())
33+
.generator(generator))
34+
.peek(mvWorld -> mvWorld.setAutoLoad(false)); // Let BentoBox handle loading on startup
35+
}
36+
37+
private String getGenerator(World world) {
38+
return BentoBox.getInstance().getIWM().getAddon(world)
39+
.map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false)
40+
? BentoBox.getInstance().getName()
41+
: null;
42+
}
43+
44+
@Override
45+
public void unregisterWorld(World world) {
46+
MultiverseCoreApi api = MultiverseCoreApi.get();
47+
api.getWorldManager().getWorld(world.getName()).peek(api.getWorldManager()::removeWorld);
48+
}
49+
50+
@Override
51+
public boolean hook() {
52+
return true; // The hook process shouldn't fail
53+
}
54+
55+
@Override
56+
public String getFailureCause() {
57+
return null; // The hook process shouldn't fail
58+
}
59+
}

src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)