diff --git a/src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java b/src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java index a81fb98bb..9af540cc3 100644 --- a/src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java +++ b/src/main/java/world/bentobox/bentobox/hooks/MultiverseCoreHook.java @@ -21,14 +21,27 @@ public class MultiverseCoreHook extends Hook { super("Multiverse-Core", Material.COMPASS); } - public void registerWorld(World world) { - // Only register generator if one is defined in the addon (is not null) - String generator = BentoBox.getInstance().getIWM().getAddon(world).map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false) ? " -g " + BentoBox.getInstance().getName() : ""; - String cmd1 = MULTIVERSE_IMPORT + world.getName() + " " + world.getEnvironment().name().toLowerCase() + generator; - String cmd2 = MULTIVERSE_SET_GENERATOR + BentoBox.getInstance().getName() + " " + world.getName(); - Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd1); - if (!generator.isEmpty()) { - // Register the generator + /** + * Register the world with Multiverse + * @param world - world to register + * @param islandWorld - if true, then this is an island world + */ + public void registerWorld(World world, boolean islandWorld) { + if (islandWorld) { + // Only register generator if one is defined in the addon (is not null) + String generator = BentoBox.getInstance().getIWM().getAddon(world).map(gm -> gm.getDefaultWorldGenerator(world.getName(), "") != null).orElse(false) ? " -g " + BentoBox.getInstance().getName() : ""; + String cmd1 = MULTIVERSE_IMPORT + world.getName() + " " + world.getEnvironment().name().toLowerCase() + generator; + String cmd2 = MULTIVERSE_SET_GENERATOR + BentoBox.getInstance().getName() + " " + world.getName(); + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd1); + if (!generator.isEmpty()) { + // Register the generator + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd2); + } + } else { + // Set the generator to null - this will remove any previous registration + String cmd1 = MULTIVERSE_IMPORT + world.getName() + " " + world.getEnvironment().name().toLowerCase(); + String cmd2 = MULTIVERSE_SET_GENERATOR + "null " + world.getName(); + Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd1); Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), cmd2); } } diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java index c06bc219e..b47af1e61 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java @@ -47,12 +47,12 @@ public class IslandWorldManager { public void registerWorldsToMultiverse() { gameModes.values().stream().distinct().forEach(gm -> { - registerToMultiverse(gm.getOverWorld()); - if (gm.getWorldSettings().isNetherGenerate() && gm.getWorldSettings().isNetherIslands()) { - registerToMultiverse(gm.getNetherWorld()); + registerToMultiverse(gm.getOverWorld(), true); + if (gm.getWorldSettings().isNetherGenerate()) { + registerToMultiverse(gm.getNetherWorld(), gm.getWorldSettings().isNetherIslands()); } - if (gm.getWorldSettings().isEndGenerate() && gm.getWorldSettings().isEndIslands()) { - registerToMultiverse(gm.getEndWorld()); + if (gm.getWorldSettings().isEndGenerate()) { + registerToMultiverse(gm.getEndWorld(), gm.getWorldSettings().isEndIslands()); } }); } @@ -61,14 +61,15 @@ public class IslandWorldManager { * Registers a world with Multiverse if Multiverse is available. * * @param world the World to register + * @param islandWorld true if this is an island world */ - private void registerToMultiverse(@NonNull World world) { + private void registerToMultiverse(@NonNull World world, boolean islandWorld) { if (plugin.getHooks() != null) { plugin.getHooks().getHook("Multiverse-Core").ifPresent(hook -> { if (Bukkit.isPrimaryThread()) { - ((MultiverseCoreHook) hook).registerWorld(world); + ((MultiverseCoreHook) hook).registerWorld(world, islandWorld); } else { - Bukkit.getScheduler().runTask(plugin, () -> ((MultiverseCoreHook) hook).registerWorld(world)); + Bukkit.getScheduler().runTask(plugin, () -> ((MultiverseCoreHook) hook).registerWorld(world, islandWorld)); } }); } @@ -151,7 +152,7 @@ public class IslandWorldManager { // Add worlds to map gameModes.put(world, gameMode); // Call Multiverse - registerToMultiverse(world); + registerToMultiverse(world, true); if (settings.isNetherGenerate()) { if (!Bukkit.getAllowNether()) { // Warn the users that players might not be able to teleport to these worlds later on @@ -162,7 +163,7 @@ public class IslandWorldManager { gameModes.put(gameMode.getNetherWorld(), gameMode); if (settings.isNetherIslands()) { - registerToMultiverse(gameMode.getNetherWorld()); + registerToMultiverse(gameMode.getNetherWorld(), true); } } if (settings.isEndGenerate()) { @@ -174,8 +175,8 @@ public class IslandWorldManager { } gameModes.put(gameMode.getEndWorld(), gameMode); - if (settings.isEndGenerate()) { - registerToMultiverse(gameMode.getEndWorld()); + if (settings.isEndIslands()) { + registerToMultiverse(gameMode.getEndWorld(), true); } }