From 92951739fba09362dea7b9214baec52f0320d0de Mon Sep 17 00:00:00 2001 From: benwoo1110 <30431861+benwoo1110@users.noreply.github.com> Date: Thu, 18 Mar 2021 23:32:47 +0800 Subject: [PATCH] Remove ability to unload default worlds. --- .../MultiverseCore/api/MVWorldManager.java | 32 +++++++++++++++++++ .../MultiverseCore/utils/WorldManager.java | 31 +++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java index ce9b7263..9378465e 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java +++ b/src/main/java/com/onarandombox/MultiverseCore/api/MVWorldManager.java @@ -219,6 +219,38 @@ public interface MVWorldManager { */ boolean isMVWorld(World world); + /** + * Checks if a world name is the servers default world. + * + * Generally, default world is defined in level-name of server properties file along with + * it's 2 dimensions: [world]_nether, [world]_the_end. + * + * @param world The world to check. + * @return True if world name is a default world, else false. + */ + boolean isDefaultWorld(MultiverseWorld world); + + /** + * Checks if a world name is the servers default world. + * + * Generally, default world is defined in level-name of server properties file along with + * it's 2 dimensions: [world]_nether, [world]_the_end. + * + * @param worldName The name of the world to check. + * @return True if world name is a default world, else false. + */ + boolean isDefaultWorld(String worldName); + + /** + * Gets all the default world names of the server. + * + * Generally, default world is defined in level-name of server properties file along with + * it's 2 dimensions: [world]_nether, [world]_the_end. + * + * @return Collection of default world names. + */ + Collection getDefaultWorldNames(); + /** * Load the Worlds & Settings from the configuration file. * diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java index 61da1547..7065e752 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java @@ -40,6 +40,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; @@ -59,6 +60,7 @@ public class WorldManager implements MVWorldManager { private final WorldPurger worldPurger; private final Map worlds; private Map worldsFromTheConfig; + private Set defaultWorldNames; private FileConfiguration configWorlds = null; private Map defaultGens; private String firstSpawn; @@ -383,6 +385,11 @@ public class WorldManager implements MVWorldManager { */ @Override public boolean unloadWorld(String name, boolean unloadBukkit) { + if (this.isDefaultWorld(name)) { + Logging.warning("You cannot unload the default worlds."); + Logging.warning("Default worlds on your server are: %s", this.defaultWorldNames); + return false; + } if (this.worlds.containsKey(name)) { this.worldsFromTheConfig.get(name).cacheVirtualProperties(); if (unloadBukkit && this.unloadWorldFromBukkit(name, true)) { @@ -707,6 +714,7 @@ public class WorldManager implements MVWorldManager { public void loadDefaultWorlds() { this.ensureConfigIsPrepared(); List myWorlds = this.plugin.getServer().getWorlds(); + this.defaultWorldNames = new HashSet<>(myWorlds.size()); for (World w : myWorlds) { String name = w.getName(); if (!worldsFromTheConfig.containsKey(name)) { @@ -714,9 +722,15 @@ public class WorldManager implements MVWorldManager { if (this.defaultGens.containsKey(name)) { generator = this.defaultGens.get(name); } - this.addWorld(name, w.getEnvironment(), String.valueOf(w.getSeed()), w.getWorldType(), w.canGenerateStructures(), generator); + if (!this.addWorld(name, w.getEnvironment(), String.valueOf(w.getSeed()), w.getWorldType(), w.canGenerateStructures(), generator)) { + Logging.warning("Error loading default world '%s'!", w.getName()); + continue; + } } + this.defaultWorldNames.add(name); } + this.defaultWorldNames = Collections.unmodifiableSet(this.defaultWorldNames); + Logging.fine("Loaded default worlds: %s", this.defaultWorldNames); } private void ensureConfigIsPrepared() { @@ -726,6 +740,21 @@ public class WorldManager implements MVWorldManager { } } + @Override + public boolean isDefaultWorld(MultiverseWorld world) { + return world != null && this.isDefaultWorld(world.getName()); + } + + @Override + public boolean isDefaultWorld(String worldName) { + return this.defaultWorldNames != null && this.defaultWorldNames.contains(worldName); + } + + @Override + public Collection getDefaultWorldNames() { + return this.defaultWorldNames; + } + /** * {@inheritDoc} */