();
- staticTimes.put("morning", "8:00");
- staticTimes.put("day", "12:00");
- staticTimes.put("noon", "12:00");
- staticTimes.put("midnight", "0:00");
- staticTimes.put("night", "20:00");
-
- // now set TIME_ALIASES to a "frozen" map
- TIME_ALIASES = Collections.unmodifiableMap(staticTimes);
+ public MVWorld(boolean fixSpawn) {
+ if (!fixSpawn) {
+ this.adjustSpawn = false;
+ }
}
- public MVWorld(World world, FileConfiguration config, MultiverseCore instance, Long seed, String generatorString, boolean fixSpawn) {
- this.config = config;
- this.plugin = instance;
+ /**
+ * Sets the CB-World.
+ *
+ * This is used to set some values after deserialization.
+ * @param cbWorld The new world.
+ * @param thePlugin The reference to the plugin.
+ */
+ public void init(World cbWorld, MultiverseCore thePlugin) {
+ this.plugin = thePlugin;
- // Set local values that CANNOT be changed by user
- this.world = world;
- this.name = world.getName();
- this.seed = seed;
- this.environment = world.getEnvironment();
- this.type = world.getWorldType();
+ // Weak reference so the CB-World can be unloaded even if this object still exists!
+ this.world = new WeakReference(cbWorld);
+ this.environment = cbWorld.getEnvironment();
+ this.seed = cbWorld.getSeed();
+ this.name = cbWorld.getName();
+ if (this.spawnLocation == null)
+ this.spawnLocation = new SpawnLocation(readSpawnFromWorld(cbWorld));
- // Initialize our lists
- this.initLists();
- worldSection = config.getConfigurationSection("worlds." + this.name);
- if (worldSection == null) {
- config.createSection("worlds." + this.name);
- worldSection = config.getConfigurationSection("worlds." + this.name);
- }
- // Write these files to the config (once it's saved)
- if (generatorString != null) {
- worldSection.set("generator", generatorString);
- }
- if (seed != null) {
- worldSection.set("seed", this.seed);
- }
- worldSection.set("environment", this.environment.toString());
-
- worldSection.set("type", this.type.toString());
-
- // Start NEW config awesomeness.
- ConfigPropertyFactory fac = new ConfigPropertyFactory(this.worldSection);
- this.propertyList = new HashMap>();
- // The format of these are either:
- // getNewProperty(name, defaultValue, helpText)
- // or
- // getNewProperty(name, defaultValue, yamlConfigNode, helpText)
- //
- // If the first type is used, name is used as the yamlConfigNode
- this.propertyList.put("hidden", fac.getNewProperty("hidden", false,
- "Sorry, 'hidden' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
- this.propertyList.put("alias", fac.getNewProperty("alias", "", "alias.name",
- "Alias must be a valid string."));
- this.propertyList.put("color", fac.getNewProperty("color", EnglishChatColor.WHITE, "alias.color",
- "Sorry, 'color' must either one of: " + EnglishChatColor.getAllColors()));
- this.propertyList.put("pvp", fac.getNewProperty("pvp", true, "pvp",
- "Sorry, 'pvp' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE
- + "or" + ChatColor.RED + " false" + ChatColor.WHITE + ".", "setActualPVP"));
- this.propertyList.put("scale", fac.getNewProperty("scale", this.getDefaultScale(this.environment), "scale",
- "Scale must be a positive double value. ex: " + ChatColor.GOLD + "2.3", "verifyScaleSetProperly"));
- this.propertyList.put("respawn", fac.getNewProperty("respawn", "", "respawnworld",
- "You must set this to the " + ChatColor.GOLD + " NAME" + ChatColor.RED + " not alias of a world."));
- this.propertyList.put("weather", fac.getNewProperty("weather", true, "allowweather",
- "Sorry, 'weather' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE
- + "or" + ChatColor.RED + " false" + ChatColor.WHITE + ".", "setActualWeather"));
- this.propertyList.put("difficulty", fac.getNewProperty("difficulty", Difficulty.EASY,
- "Difficulty must be set as one of the following: " + ChatColor.GREEN + "peaceful "
- + ChatColor.AQUA + "easy " + ChatColor.GOLD + "normal " + ChatColor.RED + "hard"));
- this.propertyList.put("animals", fac.getNewProperty("animals", true, "animals.spawn",
- "Sorry, 'animals' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE
- + "or" + ChatColor.RED + " false" + ChatColor.WHITE + ".", "syncMobs"));
- this.propertyList.put("monsters", fac.getNewProperty("monsters", true, "monsters.spawn",
- "Sorry, 'monsters' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE
- + "or" + ChatColor.RED + " false" + ChatColor.WHITE + ".", "syncMobs"));
- this.propertyList.put("currency", fac.getNewProperty("currency", -1, "entryfee.currency",
- "Currency must be an integer between -1 and the highest Minecraft item ID."));
- this.propertyList.put("price", fac.getNewProperty("price", 0.0, "entryfee.price",
- "Price must be a double value. ex: " + ChatColor.GOLD + "1.2" + ChatColor.WHITE
- + ". Set to a negative value to give players money for entering this world."));
- this.propertyList.put("hunger", fac.getNewProperty("hunger", true,
- "Sorry, 'hunger' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
- this.propertyList.put("autoheal", fac.getNewProperty("autoheal", true,
- "Sorry, 'autoheal' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
- this.propertyList.put("adjustspawn", fac.getNewProperty("adjustspawn", true,
- "Sorry, 'adjustspawn' must either be:" + ChatColor.GREEN + " true " + ChatColor.WHITE
- + "or" + ChatColor.RED + " false" + ChatColor.WHITE + "."));
- this.propertyList.put("portalform", fac.getNewProperty("portalform", AllowedPortalType.ALL,
- "Allow portal forming must be NONE, ALL, NETHER or END."));
- if (!fixSpawn) {
- this.setAdjustSpawn(false);
- }
- this.propertyList.put("gamemode", fac.getNewProperty("gamemode", GameMode.SURVIVAL,
- "GameMode must be set as one of the following: " + ChatColor.RED + "survival " + ChatColor.GREEN + "creative "));
- this.propertyList.put("memory", fac.getNewProperty("keepspawninmemory", true, "keepspawninmemory",
- "Sorry, 'memory' must either be:" + ChatColor.GREEN + " true "
- + ChatColor.WHITE + "or" + ChatColor.RED + " false" + ChatColor.WHITE + ".", "setActualKeepSpawnInMemory"));
- this.propertyList.put("spawn", fac.getNewProperty("spawn", this.world.getSpawnLocation(), "spawn",
- "There is no help available for this variable. Go bug Rigby90 about it.", "setActualKeepSpawnInMemory"));
- this.propertyList.put("autoload", fac.getNewProperty("autoload", true,
- "Set this to false ONLY if you don't want this world to load itself on server restart."));
- this.propertyList.put("bedrespawn", fac.getNewProperty("bedrespawn", true, "If a player dies in this world, shoudld they go to their bed?"));
- this.propertyList.put("time", fac.getNewProperty("time", "", "Set the time to whatever you want! (Will NOT freeze time)", "setActualTime", true));
- this.getKnownProperty("spawn", Location.class).setValue(this.readSpawnFromConfig(this.getCBWorld()));
-
-
- // Set aliases
- this.propertyAliases = new HashMap();
- this.propertyAliases.put("curr", "currency");
- this.propertyAliases.put("scaling", "scale");
- this.propertyAliases.put("aliascolor", "color");
- this.propertyAliases.put("heal", "autoheal");
- this.propertyAliases.put("storm", "weather");
- this.propertyAliases.put("spawnmemory", "memory");
- this.propertyAliases.put("mode", "gamemode");
- this.propertyAliases.put("diff", "difficulty");
-
- // Things I haven't converted yet.
- this.getMobExceptions();
- List tempWorldBlacklist = worldSection.getStringList("worldblacklist");
- if (tempWorldBlacklist != null)
- this.getWorldBlacklist().addAll(tempWorldBlacklist);
-
- // Enable and do the save.
- this.canSave = true;
- this.saveConfig();
+ this.initPerms();
+ }
+ /**
+ * Initializes permissions.
+ */
+ private void initPerms() {
this.permission = new Permission("multiverse.access." + this.getName(), "Allows access to " + this.getName(), PermissionDefault.OP);
// This guy is special. He shouldn't be added to any parent perms.
this.ignoreperm = new Permission("mv.bypass.gamemode." + this.getName(),
@@ -216,79 +495,104 @@ public class MVWorld implements MultiverseWorld {
} catch (IllegalArgumentException e) {
this.plugin.log(Level.FINER, "Permissions nodes were already added for " + this.name);
}
-
- // Sync all active settings.
- this.setActualPVP();
- this.verifyScaleSetProperly();
- this.setActualKeepSpawnInMemory();
- this.setActualDifficulty();
- this.setActualGameMode();
- this.setActualSpawn();
- this.syncMobs();
}
- /**
- * Used by the active PVP-property to set the "actual" PVP-property.
- * @return True if the property was successfully set.
- */
- public boolean setActualPVP() {
- // Set the PVP mode
- this.world.setPVP(this.getKnownProperty("pvp", Boolean.class).getValue());
- return true;
- }
-
- /**
- * Used by the active scale-property to set the "actual" scale-property.
- * @return True if the property was successfully set.
- */
- public boolean verifyScaleSetProperly() {
- // Ensure the scale is above 0
- if (this.getKnownProperty("scale", Double.class).getValue() <= 0) {
- // Disallow negative or 0 scalings.
- this.getKnownProperty("scale", Double.class).setValue(1.0);
- this.plugin.log(Level.WARNING, "Someone tried to set a scale <= 0, defaulting to 1.");
+ private Location readSpawnFromWorld(World w) {
+ Location location = w.getSpawnLocation();
+ // Set the worldspawn to our configspawn
+ BlockSafety bs = this.plugin.getBlockSafety();
+ // Verify that location was safe
+ if (!bs.playerCanSpawnHereSafely(location)) {
+ if (!this.getAdjustSpawn()) {
+ this.plugin.log(Level.FINE, "Spawn location from world.dat file was unsafe!!");
+ this.plugin.log(Level.FINE, "NOT adjusting spawn for '" + this.getAlias() + "' because you told me not to.");
+ this.plugin.log(Level.FINE, "To turn on spawn adjustment for this world simply type:");
+ this.plugin.log(Level.FINE, "/mvm set adjustspawn true " + this.getAlias());
+ return location;
+ }
+ // If it's not, find a better one.
+ SafeTTeleporter teleporter = this.plugin.getSafeTTeleporter();
+ this.plugin.log(Level.WARNING, "Spawn location from world.dat file was unsafe. Adjusting...");
+ this.plugin.log(Level.WARNING, "Original Location: " + plugin.getLocationManipulation().strCoordsRaw(location));
+ Location newSpawn = teleporter.getSafeLocation(location,
+ SPAWN_LOCATION_SEARCH_TOLERANCE, SPAWN_LOCATION_SEARCH_RADIUS);
+ // I think we could also do this, as I think this is what Notch does.
+ // Not sure how it will work in the nether...
+ //Location newSpawn = this.spawnLocation.getWorld().getHighestBlockAt(this.spawnLocation).getLocation();
+ if (newSpawn != null) {
+ this.plugin.log(Level.INFO, String.format("New Spawn for '%s' is located at: %s",
+ this.getName(), plugin.getLocationManipulation().locationToString(newSpawn)));
+ return newSpawn;
+ } else {
+ // If it's a standard end world, let's check in a better place:
+ Location newerSpawn;
+ newerSpawn = bs.getTopBlock(new Location(w, 0, 0, 0));
+ if (newerSpawn != null) {
+ this.plugin.log(Level.INFO, String.format("New Spawn for '%s' is located at: %s",
+ this.getName(), plugin.getLocationManipulation().locationToString(newerSpawn)));
+ return newerSpawn;
+ } else {
+ this.plugin.log(Level.SEVERE, "Safe spawn NOT found!!!");
+ }
+ }
}
- return true;
+ return location;
}
/**
- * Used by the active keepSpawnInMemory-property to set the "actual" property.
- * @return True if the property was successfully set.
+ * {@inheritDoc}
*/
- public boolean setActualKeepSpawnInMemory() {
- // Ensure the memory setting is correct
- this.getCBWorld().setKeepSpawnInMemory(this.getKnownProperty("memory", Boolean.class).getValue());
- return true;
+ @Override
+ protected void setDefaults() {
+ this.hidden = false;
+ this.alias = new String();
+ this.color = EnglishChatColor.WHITE;
+ this.scale = getDefaultScale(environment);
+ this.respawnWorld = new String();
+ this.allowWeather = true;
+ this.spawning = new SpawnSettings();
+ this.currency = -1;
+ this.price = 0D;
+ this.hunger = true;
+ this.autoHeal = true;
+ this.adjustSpawn = true;
+ this.portalForm = AllowedPortalType.ALL;
+ this.gameMode = GameMode.SURVIVAL;
+ this.spawnLocation = (world != null) ? new SpawnLocation(world.get().getSpawnLocation()) : null;
+ this.autoLoad = true;
+ this.bedRespawn = true;
+ this.worldBlacklist = new ArrayList();
}
/**
- * Used by the active difficulty-property to set the "actual" property.
- * @return True if the property was successfully set.
+ * getAliases().
+ * @return The alias-map.
+ * @see SerializationConfig
*/
- public boolean setActualDifficulty() {
- this.getCBWorld().setDifficulty(this.getKnownProperty("difficulty", Difficulty.class).getValue());
- return true;
+ protected static Map getAliases() {
+ Map aliases = new HashMap();
+ aliases.put("curr", "currency");
+ aliases.put("scaling", "scale");
+ aliases.put("aliascolor", "color");
+ aliases.put("heal", "autoHeal");
+ aliases.put("storm", "allowWeather");
+ aliases.put("weather", "allowWeather");
+ aliases.put("spawnmemory", "keepSpawnInMemory");
+ aliases.put("memory", "keepSpawnInMemory");
+ aliases.put("mode", "gameMode");
+ aliases.put("diff", "difficulty");
+ aliases.put("spawnlocation", "spawn");
+ return aliases;
}
- /**
- * Used by the active spawn-property to set the "actual" property.
- * @return True if the property was successfully set.
- */
- public boolean setActualSpawn() {
- // Set the spawn location
- Location spawnLocation = this.getKnownProperty("spawn", Location.class).getValue();
- this.getCBWorld().setSpawnLocation(spawnLocation.getBlockX(), spawnLocation.getBlockY(), spawnLocation.getBlockZ());
- return true;
- }
-
- private double getDefaultScale(Environment environment) {
+ private static double getDefaultScale(Environment environment) {
if (environment == Environment.NETHER) {
return 8.0; // SUPPRESS CHECKSTYLE: MagicNumberCheck
}
return 1.0;
}
- private void addToUpperLists(Permission permission) {
+ private void addToUpperLists(Permission perm) {
Permission all = this.plugin.getServer().getPluginManager().getPermission("multiverse.*");
Permission allWorlds = this.plugin.getServer().getPluginManager().getPermission("multiverse.access.*");
Permission allExemption = this.plugin.getServer().getPluginManager().getPermission("multiverse.exempt.*");
@@ -297,7 +601,7 @@ public class MVWorld implements MultiverseWorld {
allWorlds = new Permission("multiverse.access.*");
this.plugin.getServer().getPluginManager().addPermission(allWorlds);
}
- allWorlds.getChildren().put(permission.getName(), true);
+ allWorlds.getChildren().put(perm.getName(), true);
if (allExemption == null) {
allExemption = new Permission("multiverse.exempt.*");
this.plugin.getServer().getPluginManager().addPermission(allExemption);
@@ -314,283 +618,166 @@ public class MVWorld implements MultiverseWorld {
this.plugin.getServer().getPluginManager().recalculatePermissionDefaults(allWorlds);
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public World getCBWorld() {
+ return this.world.get();
+ }
+
/**
* {@inheritDoc}
*/
@Override
public String getColoredWorldString() {
- EnglishChatColor worldColor = this.getKnownProperty("color", EnglishChatColor.class).getValue();
- String alias = this.getKnownProperty("alias", String.class).getValue();
- if (worldColor == null) {
- this.setKnownProperty("color", "WHITE", null);
- return alias + ChatColor.WHITE;
- } else if (worldColor.getColor() == null) {
- return alias + ChatColor.WHITE;
- }
if (alias.length() == 0) {
alias = this.getName();
}
- return worldColor.getColor() + alias + ChatColor.WHITE;
- }
-
- // TODO: Migrate this method.
- private void getMobExceptions() {
- List temp;
- temp = this.worldSection.getStringList("animals.exceptions");
- // Add Animals to the exclusion list
- if (temp != null) {
- for (String s : temp) {
- this.masterList.get("animals").add(s.toUpperCase());
- }
- }
- temp = this.worldSection.getStringList("monsters.exceptions");
- // Add Monsters to the exclusion list
- if (temp != null) {
- for (String s : temp) {
- this.masterList.get("monsters").add(s.toUpperCase());
- }
+ if ((color == null) || (color.getColor() == null)) {
+ this.setPropertyValueUnchecked("color", EnglishChatColor.WHITE);
}
+ return color.getColor() + alias + ChatColor.WHITE;
}
/**
* {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
*/
@Override
- public World getCBWorld() {
- return this.world;
- }
-
- private void initLists() {
- this.masterList = new HashMap>();
- this.masterList.put("worldblacklist", new ArrayList());
- this.masterList.put("animals", new ArrayList());
- this.masterList.put("monsters", new ArrayList());
+ @Deprecated
+ public boolean clearList(String property) {
+ return clearVariable(property);
}
/**
* {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
*/
@Override
+ @Deprecated
public boolean clearVariable(String property) {
- if (this.masterList.keySet().contains(property)) {
- this.masterList.get(property).clear();
- } else {
+ List list = getOldAndEvilList(property);
+ if (list == null)
return false;
- }
- this.worldSection.set(property.toLowerCase(), new ArrayList());
- this.saveConfig();
+ list.clear();
return true;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean addToVariable(String property, String value) {
- property = property.toLowerCase();
- if (this.masterList.keySet().contains(property)) {
-
- if (property.equals("animals") || property.equals("monsters")) {
- this.masterList.get(property).add(value.toUpperCase());
- this.worldSection.set(property.toLowerCase() + ".exceptions", this.masterList.get(property));
- this.syncMobs();
- } else {
- this.masterList.get(property).add(value);
- this.worldSection.set(property.toLowerCase(), this.masterList.get(property));
- }
- saveConfig();
- return true;
- }
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean removeFromVariable(String property, String value) {
- property = property.toLowerCase();
- if (this.masterList.keySet().contains(property)) {
-
- if (property.equals("animals") || property.equals("monsters")) {
- this.masterList.get(property).remove(value.toUpperCase());
- this.worldSection.set(property + ".exceptions", this.masterList.get(property));
- this.syncMobs();
- } else {
- this.masterList.get(property).remove(value);
- this.worldSection.set(property, this.masterList.get(property));
- }
- saveConfig();
- return true;
- }
- return false;
- }
-
- /**
- * Ensure that the value of the animals and monsters config
- * properties are set in accordance with the current animals
- * and monsters in the world, respectively.
- */
- public void syncMobs() {
-
- if (this.getAnimalList().isEmpty()) {
- this.world.setSpawnFlags(this.world.getAllowMonsters(), this.getKnownProperty("animals", Boolean.class).getValue());
- } else {
- this.world.setSpawnFlags(this.world.getAllowMonsters(), true);
- }
- if (this.getMonsterList().isEmpty()) {
- this.world.setSpawnFlags(this.getKnownProperty("monsters", Boolean.class).getValue(), this.world.getAllowAnimals());
- } else {
- this.world.setSpawnFlags(true, this.world.getAllowAnimals());
- }
- this.plugin.getMVWorldManager().getTheWorldPurger().purgeWorld(this);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setKeepSpawnInMemory(boolean value) {
- this.getKnownProperty("memory", Boolean.class).setValue(value);
- saveConfig();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- // TODO: Provide better feedback
- public boolean setProperty(String name, String value, CommandSender sender) throws PropertyDoesNotExistException {
- if (!this.isValidPropertyName(name)) {
- throw new PropertyDoesNotExistException(name);
- }
- return this.setKnownProperty(name, value, sender) || this.setKnownProperty(this.propertyAliases.get(name), value, sender);
-
- }
-
- private boolean isValidPropertyName(String name) {
- return this.propertyList.containsKey(name) || this.propertyAliases.containsKey(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getPropertyValue(String name) throws PropertyDoesNotExistException {
- if (this.propertyList.containsKey(name)) {
- return this.getKnownProperty(name, Object.class).toString();
- }
- throw new PropertyDoesNotExistException(name);
- }
-
/**
* {@inheritDoc}
*
- * @deprecated Use {@link #getProperty(String, Class)} instead
+ * @deprecated This is deprecated.
*/
@Override
@Deprecated
- public MVConfigProperty> getProperty(String property) throws PropertyDoesNotExistException {
- return getProperty(property, Object.class);
+ public boolean addToVariable(String property, String value) {
+ List list = getOldAndEvilList(property);
+ if (list == null)
+ return false;
+ list.add(value);
+ return true;
}
/**
* {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
*/
@Override
- public MVConfigProperty getProperty(String name, Class expected) throws PropertyDoesNotExistException {
- MVConfigProperty p = this.getKnownProperty(name, expected);
- if (p == null) {
- throw new PropertyDoesNotExistException(name);
- }
- return p;
+ @Deprecated
+ public boolean removeFromVariable(String property, String value) {
+ List list = getOldAndEvilList(property);
+ if (list == null)
+ return false;
+ list.remove(value);
+ return true;
}
/**
- * This method should only be used from inside this class when it is KNOWN that the property exists.
- *
- * @param name The known name of a property
- * @param expected The Type of the expected value
- * @return The property object.
+ * @deprecated This is deprecated.
*/
- @SuppressWarnings("unchecked")
- private MVConfigProperty getKnownProperty(String name, Class expected) {
- try {
- if (this.propertyList.containsKey(name)) {
- return (MVConfigProperty) this.propertyList.get(name);
- } else if (this.propertyAliases.containsKey(name)) {
- // If the property was defined in the alias table, make sure to grab the actual name
- return (MVConfigProperty) this.propertyList.get(this.propertyAliases.get(name));
- }
- } catch (ClassCastException e) {
- return null;
- }
+ @Deprecated
+ private List getOldAndEvilList(String property) {
+ if (property.equalsIgnoreCase("worldblacklist"))
+ return this.worldBlacklist;
+ else if (property.equalsIgnoreCase("animals"))
+ return this.spawning.getAnimalSettings().getExceptions();
+ else if (property.equalsIgnoreCase("monsters"))
+ return this.spawning.getMonsterSettings().getExceptions();
return null;
}
/**
- * This method should only be used from inside this class when it is KNOWN that the property exists.
+ * {@inheritDoc}
*
- * @param name The known name of a property.
- * @param value The value that is trying to be set.
- * @param sender The person sending the command, MAY BE NULL.
- * @return True if the property was saved, false if not.
+ * @deprecated This is deprecated.
*/
- private boolean setKnownProperty(String name, String value, CommandSender sender) {
- MVConfigProperty> property;
- if (this.propertyList.containsKey(name)) {
- property = this.getKnownProperty(name, Object.class);
- } else if (this.propertyAliases.containsKey(name)) {
- return this.setKnownProperty(this.propertyAliases.get(name), value, sender);
- } else {
- return false;
- }
- // Only allow people to cancel events when they're not the initializations.
- if (this.canSave) {
- MVWorldPropertyChangeEvent propertyChangeEvent = new MVWorldPropertyChangeEvent(this, sender, name, value);
- this.plugin.getServer().getPluginManager().callEvent(propertyChangeEvent);
- if (propertyChangeEvent.isCancelled()) {
- this.plugin.log(Level.FINE, "Someone else cancelled the WorldPropertyChanged Event!!!");
- return false;
- }
- value = propertyChangeEvent.getNewValue();
- }
- if (property.parseValue(value)) {
- if (property instanceof MVActiveConfigProperty) {
- return this.setActiveProperty((MVActiveConfigProperty>) property);
- }
- this.saveConfig();
- return true;
- }
- return false;
+ @Override
+ @Deprecated
+ public com.onarandombox.MultiverseCore.configuration.MVConfigProperty getProperty(String property,
+ Class expected) throws PropertyDoesNotExistException {
+ throw new UnsupportedOperationException("'MVConfigProperty getProperty(String,Class)' is no longer supported!");
}
- private boolean setActiveProperty(MVActiveConfigProperty> property) {
+ /**
+ * {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
+ */
+ @Override
+ @Deprecated
+ public boolean setProperty(String name, String value, CommandSender sender) throws PropertyDoesNotExistException {
+ return this.setPropertyValue(name, value);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getPropertyValue(String property) throws PropertyDoesNotExistException {
try {
- if (property.getMethod() == null) {
- // This property did not have a method.
- this.saveConfig();
- return true;
- }
- Method method = this.getClass().getMethod(property.getMethod());
- Object returnVal = method.invoke(this);
- if (returnVal instanceof Boolean) {
- if ((Boolean) returnVal) {
- this.saveConfig();
- }
- return (Boolean) returnVal;
- } else {
- this.saveConfig();
- return true;
- }
- } catch (Exception e) {
- // TODO: I don't care about 3 catches,
- // TODO: I hate pokemon errors :/ - FernFerret
- e.printStackTrace();
- return false;
+ return this.getProperty(property, true);
+ } catch (NoSuchPropertyException e) {
+ throw new PropertyDoesNotExistException(property, e);
}
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean setPropertyValue(String property, String value) throws PropertyDoesNotExistException {
+ try {
+ return this.setProperty(property, value, true);
+ } catch (NoSuchPropertyException e) {
+ throw new PropertyDoesNotExistException(property, e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getPropertyHelp(String property) throws PropertyDoesNotExistException {
+ try {
+ return this.getPropertyDescription(property, true);
+ } catch (NoSuchPropertyException e) {
+ throw new PropertyDoesNotExistException(property, e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public WorldType getWorldType() {
+ // This variable is not settable in-game, therefore does not get a property.
+ return world.get().getWorldType();
+ }
+
/**
* {@inheritDoc}
*/
@@ -622,7 +809,7 @@ public class MVWorld implements MultiverseWorld {
* {@inheritDoc}
*/
@Override
- public void setSeed(Long seed) {
+ public void setSeed(long seed) {
// This variable is not settable in-game, therefore does not get a property.
this.seed = seed;
}
@@ -649,12 +836,10 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public String getAlias() {
- String alias = this.getKnownProperty("alias", String.class).getValue();
- if (alias == null || alias.length() == 0) {
+ if (this.alias == null || this.alias.length() == 0) {
return this.name;
}
- return alias;
-
+ return this.alias;
}
/**
@@ -662,7 +847,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setAlias(String alias) {
- this.setKnownProperty("alias", alias, null);
+ this.setPropertyValueUnchecked("alias", alias);
}
/**
@@ -670,7 +855,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean canAnimalsSpawn() {
- return this.getKnownProperty("animals", Boolean.class).getValue();
+ return this.spawning.getAnimalSettings().doSpawn();
}
/**
@@ -678,7 +863,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setAllowAnimalSpawn(boolean animals) {
- this.setKnownProperty("animals", animals + "", null);
+ this.setPropertyValueUnchecked("spawning.animals.spawn", animals);
}
/**
@@ -686,7 +871,8 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public List getAnimalList() {
- return this.masterList.get("animals");
+ // These don't fire events at the moment. Should they?
+ return this.spawning.getAnimalSettings().getExceptions();
}
/**
@@ -694,7 +880,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean canMonstersSpawn() {
- return this.getKnownProperty("monsters", Boolean.class).getValue();
+ return this.spawning.getMonsterSettings().doSpawn();
}
/**
@@ -702,7 +888,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setAllowMonsterSpawn(boolean monsters) {
- this.setKnownProperty("monsters", monsters + "", null);
+ this.setPropertyValueUnchecked("spawning.monsters.spawn", monsters);
}
/**
@@ -710,7 +896,8 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public List getMonsterList() {
- return this.masterList.get("monsters");
+ // These don't fire events at the moment. Should they?
+ return this.spawning.getMonsterSettings().getExceptions();
}
/**
@@ -718,7 +905,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean isPVPEnabled() {
- return this.getKnownProperty("pvp", Boolean.class).getValue();
+ return this.pvp.get();
}
/**
@@ -726,7 +913,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setPVPMode(boolean pvp) {
- this.setKnownProperty("pvp", pvp + "", null);
+ this.setPropertyValueUnchecked("pvp", pvp);
}
/**
@@ -734,7 +921,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean isHidden() {
- return this.getKnownProperty("hidden", Boolean.class).getValue();
+ return this.hidden;
}
/**
@@ -742,7 +929,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setHidden(boolean hidden) {
- this.setKnownProperty("hidden", hidden + "", null);
+ this.setPropertyValueUnchecked("hidden", hidden);
}
/**
@@ -750,7 +937,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public List getWorldBlacklist() {
- return this.masterList.get("worldblacklist");
+ return this.worldBlacklist;
}
/**
@@ -758,7 +945,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public double getScaling() {
- return this.getKnownProperty("scale", Double.class).getValue();
+ return this.scale;
}
/**
@@ -766,7 +953,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean setScaling(double scaling) {
- return this.setKnownProperty("scale", scaling + "", null);
+ return this.setPropertyValueUnchecked("scale", scaling);
}
/**
@@ -774,13 +961,16 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean setColor(String aliasColor) {
- return this.setKnownProperty("color", aliasColor, null);
+ return this.setPropertyUnchecked("color", aliasColor);
}
/**
* {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
*/
- @Override // TODO This method should be static. (Maybe EnglishChatColor would be a good place?)
+ @Override
+ @Deprecated
public boolean isValidAliasColor(String aliasColor) {
return (EnglishChatColor.fromString(aliasColor) != null);
}
@@ -790,22 +980,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public ChatColor getColor() {
- return this.getKnownProperty("color", EnglishChatColor.class).getValue().getColor();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean clearList(String property) {
- if (this.masterList.containsKey(property)) {
- this.masterList.get(property).clear();
- this.worldSection.set(property.toLowerCase(), this.masterList.get(property));
- this.syncMobs();
- saveConfig();
- return true;
- }
- return false;
+ return this.color.getColor();
}
/**
@@ -824,7 +999,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public World getRespawnToWorld() {
- return (this.plugin.getServer().getWorld(this.getKnownProperty("respawn", String.class).getValue()));
+ return this.plugin.getServer().getWorld(respawnWorld);
}
/**
@@ -833,7 +1008,7 @@ public class MVWorld implements MultiverseWorld {
@Override
public boolean setRespawnToWorld(String respawnToWorld) {
if (!this.plugin.getMVWorldManager().isMVWorld(respawnToWorld)) return false;
- return this.setKnownProperty("respawn", respawnToWorld, null);
+ return this.setPropertyValueUnchecked("respawnWorld", respawnToWorld);
}
/**
@@ -849,7 +1024,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public int getCurrency() {
- return this.getKnownProperty("curr", Integer.class).getValue();
+ return this.currency;
}
/**
@@ -857,7 +1032,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setCurrency(int currency) {
- this.setKnownProperty("curr", currency + "", null);
+ this.setPropertyValueUnchecked("currency", currency);
}
/**
@@ -865,7 +1040,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public double getPrice() {
- return this.getKnownProperty("price", Double.class).getValue();
+ return this.price;
}
/**
@@ -873,7 +1048,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setPrice(double price) {
- this.setKnownProperty("price", price + "", null);
+ this.setPropertyValueUnchecked("price", price);
}
/**
@@ -884,40 +1059,17 @@ public class MVWorld implements MultiverseWorld {
return this.exempt;
}
- private void saveConfig() {
- if (this.canSave) {
- try {
- this.config.save(new File(this.plugin.getDataFolder(), "worlds.yml"));
- } catch (IOException e) {
- this.plugin.log(Level.SEVERE, "Could not save worlds.yml. Please check your filesystem permissions.");
- }
- }
- }
-
/**
* {@inheritDoc}
*/
@Override
- public boolean setGameMode(String gameMode) {
- return this.setKnownProperty("mode", gameMode, null);
+ public boolean setGameMode(String mode) {
+ return this.setPropertyUnchecked("gameMode", mode);
}
- /**
- * Sets the actual gamemode by iterating through players.
- *
- * gameMode is not used, but it's in the reflection template.
- *
- * Needs a bit o' refactoring.
- *
- * @return True if the gamemodes of players were set successfully. (always)
- */
- public boolean setActualGameMode() {
- for (Player p : this.plugin.getServer().getWorld(this.getName()).getPlayers()) {
- this.plugin.log(Level.FINER, String.format("Setting %s's GameMode to %s",
- p.getName(), this.getKnownProperty("mode", GameMode.class).getValue().toString()));
- this.plugin.getPlayerListener().handleGameMode(p, this);
- }
- return true;
+ @Override
+ public boolean setGameMode(GameMode mode) {
+ return this.setPropertyValueUnchecked("gameMode", mode);
}
/**
@@ -925,7 +1077,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public GameMode getGameMode() {
- return this.getKnownProperty("mode", GameMode.class).getValue();
+ return this.gameMode;
}
/**
@@ -933,20 +1085,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setEnableWeather(boolean weather) {
- this.setKnownProperty("weather", weather + "", null);
- }
-
- /**
- * Used by the active weather-property to set the "actual" property.
- * @return True if the property was successfully set.
- */
- public boolean setActualWeather() {
- // Disable any current weather
- if (!this.getKnownProperty("weather", Boolean.class).getValue()) {
- this.getCBWorld().setStorm(false);
- this.getCBWorld().setThundering(false);
- }
- return true;
+ this.setPropertyValueUnchecked("allowWeather", weather);
}
/**
@@ -954,7 +1093,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean isWeatherEnabled() {
- return this.getKnownProperty("weather", Boolean.class).getValue();
+ return this.allowWeather;
}
/**
@@ -962,15 +1101,15 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean isKeepingSpawnInMemory() {
- return this.getKnownProperty("memory", Boolean.class).getValue();
+ return this.keepSpawnInMemory.get();
}
/**
* {@inheritDoc}
*/
@Override
- public void setHunger(boolean hunger) {
- this.setKnownProperty("hunger", hunger + "", null);
+ public void setKeepSpawnInMemory(boolean value) {
+ this.setPropertyValueUnchecked("keepSpawnInMemory", value);
}
/**
@@ -978,69 +1117,15 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean getHunger() {
- return this.getKnownProperty("hunger", Boolean.class).getValue();
+ return this.hunger;
}
/**
* {@inheritDoc}
*/
@Override
- public void setSpawnLocation(Location l) {
- this.getCBWorld().setSpawnLocation(l.getBlockX(), l.getBlockY(), l.getBlockZ());
- this.getKnownProperty("spawn", Location.class).setValue(l);
- this.saveConfig();
- }
-
- private static final int SPAWN_LOCATION_SEARCH_TOLERANCE = 16;
- private static final int SPAWN_LOCATION_SEARCH_RADIUS = 16;
-
- private Location readSpawnFromConfig(World w) {
- Location spawnLocation = w.getSpawnLocation();
- Location configLocation = this.getSpawnLocation();
-
- // Set the worldspawn to our configspawn
- w.setSpawnLocation(configLocation.getBlockX(), configLocation.getBlockY(), configLocation.getBlockZ());
- SafeTTeleporter teleporter = this.plugin.getSafeTTeleporter();
- BlockSafety bs = this.plugin.getBlockSafety();
- // Verify that location was safe
- if (!bs.playerCanSpawnHereSafely(configLocation)) {
- if (!this.getAdjustSpawn()) {
- this.plugin.log(Level.FINE, "Spawn location from world.dat file was unsafe!!");
- this.plugin.log(Level.FINE, "NOT adjusting spawn for '" + this.getAlias() + "' because you told me not to.");
- this.plugin.log(Level.FINE, "To turn on spawn adjustment for this world simply type:");
- this.plugin.log(Level.FINE, "/mvm set adjustspawn true " + this.getAlias());
- return configLocation;
- }
- // If it's not, find a better one.
- this.plugin.log(Level.WARNING, "Spawn location from world.dat file was unsafe. Adjusting...");
- this.plugin.log(Level.WARNING, "Original Location: " + plugin.getLocationManipulation().strCoordsRaw(spawnLocation));
- Location newSpawn = teleporter.getSafeLocation(spawnLocation,
- SPAWN_LOCATION_SEARCH_TOLERANCE, SPAWN_LOCATION_SEARCH_RADIUS);
- // I think we could also do this, as I think this is what Notch does.
- // Not sure how it will work in the nether...
- //Location newSpawn = this.spawnLocation.getWorld().getHighestBlockAt(this.spawnLocation).getLocation();
- if (newSpawn != null) {
- this.setSpawnLocation(newSpawn);
- configLocation = this.getSpawnLocation();
- this.plugin.log(Level.INFO, "New Spawn for '" + this.getName()
- + "' is Located at: " + plugin.getLocationManipulation().locationToString(configLocation));
- } else {
- // If it's a standard end world, let's check in a better place:
- Location newerSpawn;
- newerSpawn = bs.getTopBlock(new Location(w, 0, 0, 0));
- if (newerSpawn != null) {
- this.setSpawnLocation(newerSpawn);
- configLocation = this.getSpawnLocation();
- this.plugin.log(Level.INFO, "New Spawn for '" + this.getName()
- + "' is Located at: " + plugin.getLocationManipulation().locationToString(configLocation));
- } else {
- this.plugin.log(Level.SEVERE, "New safe spawn NOT found!!!");
- }
-
-
- }
- }
- return configLocation;
+ public void setHunger(boolean hunger) {
+ this.setPropertyValueUnchecked("hunger", hunger);
}
/**
@@ -1048,7 +1133,15 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public Location getSpawnLocation() {
- return this.getKnownProperty("spawn", Location.class).getValue();
+ return this.spawn.get();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setSpawnLocation(Location l) {
+ this.setPropertyValueUnchecked("spawn", l);
}
/**
@@ -1056,20 +1149,23 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public Difficulty getDifficulty() {
- return this.getCBWorld().getDifficulty();
+ return this.difficulty.get();
}
/**
* {@inheritDoc}
+ *
+ * @deprecated This is deprecated.
*/
@Override
+ @Deprecated
public boolean setDifficulty(String difficulty) {
- if (this.setKnownProperty("diff", difficulty, null)) {
- // Set the difficulty
- this.getCBWorld().setDifficulty(this.getKnownProperty("diff", Difficulty.class).getValue());
- return true;
- }
- return false;
+ return this.setPropertyUnchecked("difficulty", difficulty);
+ }
+
+ @Override
+ public boolean setDifficulty(Difficulty difficulty) {
+ return this.setPropertyValueUnchecked("difficulty", difficulty);
}
/**
@@ -1077,7 +1173,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean getAutoHeal() {
- return this.getKnownProperty("autoheal", Boolean.class).getValue();
+ return this.autoHeal;
}
/**
@@ -1085,7 +1181,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setAutoHeal(boolean heal) {
- this.setKnownProperty("autoheal", heal + "", null);
+ this.setPropertyValueUnchecked("autoHeal", heal);
}
/**
@@ -1093,7 +1189,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setAdjustSpawn(boolean adjust) {
- this.setKnownProperty("adjustspawn", adjust + "", null);
+ this.setPropertyValueUnchecked("adjustSpawn", adjust);
}
/**
@@ -1101,15 +1197,15 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean getAdjustSpawn() {
- return this.getKnownProperty("adjustspawn", Boolean.class).getValue();
+ return this.adjustSpawn;
}
/**
* {@inheritDoc}
*/
@Override
- public void setAutoLoad(boolean autoLoad) {
- this.setKnownProperty("autoload", autoLoad + "", null);
+ public void setAutoLoad(boolean load) {
+ this.setPropertyValueUnchecked("autoLoad", load);
}
/**
@@ -1117,7 +1213,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean getAutoLoad() {
- return this.getKnownProperty("autoload", Boolean.class).getValue();
+ return this.autoLoad;
}
/**
@@ -1125,7 +1221,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public void setBedRespawn(boolean respawn) {
- this.setKnownProperty("bedrespawn", respawn + "", null);
+ this.setPropertyValueUnchecked("bedRespawn", respawn);
}
/**
@@ -1133,7 +1229,7 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public boolean getBedRespawn() {
- return this.getKnownProperty("bedrespawn", Boolean.class).getValue();
+ return this.bedRespawn;
}
/**
@@ -1141,13 +1237,14 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public String getAllPropertyNames() {
- ChatColor color = ChatColor.AQUA;
- String result = "";
- for (String propertyNames : this.propertyList.keySet()) {
- result += color + propertyNames + " ";
- color = (color == ChatColor.AQUA) ? ChatColor.GOLD : ChatColor.AQUA;
+ ChatColor myColor = ChatColor.AQUA;
+ StringBuilder result = new StringBuilder();
+ Map serialized = this.serialize();
+ for (String key : serialized.keySet()) {
+ result.append(myColor).append(key).append(' ');
+ myColor = (myColor == ChatColor.AQUA) ? ChatColor.GOLD : ChatColor.AQUA;
}
- return result;
+ return result.toString();
}
/**
@@ -1155,32 +1252,15 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public String getTime() {
- long time = this.getCBWorld().getTime();
- // I'm tired, so they get time in 24 hour for now.
- // Someone else can add 12 hr format if they want :P
-
- // BEGIN CHECKSTYLE-SUPPRESSION: MagicNumberCheck
- int hours = (int) ((time / 1000 + 8) % 24);
- int minutes = (int) (60 * (time % 1000) / 1000);
- // END CHECKSTYLE-SUPPRESSION: MagicNumberCheck
-
- return String.format("%d:%02d", hours, minutes);
+ return this.getPropertyUnchecked("time");
}
/**
* {@inheritDoc}
*/
@Override
- public WorldType getWorldType() {
- return this.type;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void allowPortalMaking(AllowedPortalType type) {
- this.setKnownProperty("portalform", type.toString(), null);
+ public boolean setTime(String timeAsString) {
+ return this.setPropertyUnchecked("time", timeAsString);
}
/**
@@ -1188,72 +1268,16 @@ public class MVWorld implements MultiverseWorld {
*/
@Override
public AllowedPortalType getAllowedPortals() {
- return this.getKnownProperty("portalform", AllowedPortalType.class).getValue();
- }
-
- /**
- * Used by the active time-property to set the "actual" property.
- * @return True if the property was successfully set.
- */
- public boolean setActualTime() {
- return this.setTime(this.getKnownProperty("time", String.class).toString());
+ return portalForm;
}
/**
* {@inheritDoc}
*/
@Override
- // BEGIN CHECKSTYLE-SUPPRESSION: MagicNumberCheck
- public boolean setTime(String timeAsString) {
- if (TIME_ALIASES.containsKey(timeAsString.toLowerCase())) {
- return this.setTime(TIME_ALIASES.get(timeAsString.toLowerCase()));
- }
- // Regex that extracts a time in the following formats:
- // 11:11pm, 11:11, 23:11, 1111, 1111p, and the aliases at the top of this file.
- String timeRegex = "(\\d\\d?):?(\\d\\d)(a|p)?m?";
- Pattern pattern = Pattern.compile(timeRegex, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(timeAsString);
- matcher.find();
- int hour = 0;
- double minute = 0;
- int count = matcher.groupCount();
- if (count >= 2) {
- hour = Integer.parseInt(matcher.group(1));
- minute = Integer.parseInt(matcher.group(2));
- }
- // If there were 4 matches (all, hour, min, ampm)
- if (count == 4) {
- // We want 24 hour time for calcs, but if they
- // added a p[m], turn it into a 24 hr one.
- if (matcher.group(3).equals("p")) {
- hour += 12;
- }
- }
- // Translate 24th hour to 0th hour.
- if (hour == 24) { // SUPPRESS CHECKSTYLE MagicNumberCheck
- hour = 0;
- }
- // Clamp the hour
- if (hour > 23 || hour < 0) {
- return false;
- }
- // Clamp the minute
- if (minute > 59 || minute < 0) {
- return false;
- }
- // 60 seconds in a minute, time needs to be in hrs * 1000, per
- // the bukkit docs.
- double totaltime = (hour + (minute / 60.0)) * 1000;
- // Somehow there's an 8 hour offset...
- totaltime -= 8000;
- if (totaltime < 0) {
- totaltime = 24000 + totaltime;
- }
-
- this.getCBWorld().setTime((long) totaltime);
- return true;
+ public void allowPortalMaking(AllowedPortalType portalType) {
+ this.setPropertyValueUnchecked("portalForm", portalType);
}
- // END CHECKSTYLE-SUPPRESSION: MagicNumberCheck
@Override
public String toString() {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index 2ad337c3..b3d58a46 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -171,6 +171,8 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
public void onLoad() {
// Register our config
SerializationConfig.registerAll(MultiverseCoreConfiguration.class);
+ // Register our world
+ SerializationConfig.registerAll(MVWorld.class);
// Create our DataFolder
getDataFolder().mkdirs();
// Setup our Debug Log
@@ -422,6 +424,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
*/
@Override
public void onDisable() {
+ this.saveMVConfigs();
debugLog.close();
this.banker = null;
this.bank = null;
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java
index 25e95cfc..0595609d 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java
@@ -4,6 +4,7 @@ import java.util.Map;
import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig;
+import me.main__.util.SerializationConfig.NoSuchPropertyException;
import me.main__.util.SerializationConfig.Property;
import me.main__.util.SerializationConfig.SerializationConfig;
@@ -80,6 +81,18 @@ public class MultiverseCoreConfiguration extends SerializationConfig implements
// END CHECKSTYLE-SUPPRESSION: MagicNumberCheck
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean setConfigProperty(String property, String value) {
+ try {
+ return this.setProperty(property, value, true);
+ } catch (NoSuchPropertyException e) {
+ return false;
+ }
+ }
+
// And here we go:
/**
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java
index 25f6fad4..a694f0b6 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java
@@ -12,7 +12,7 @@ public interface MultiverseCoreConfig extends ConfigurationSerializable {
* @param value The value.
* @return True on success, false if the operation failed.
*/
- boolean setProperty(String property, String value);
+ boolean setConfigProperty(String property, String value);
/**
* Sets portalCooldown.
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
index 5bd1eb11..cefbb78a 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
@@ -7,7 +7,6 @@
package com.onarandombox.MultiverseCore.api;
-import com.onarandombox.MultiverseCore.configuration.MVConfigProperty;
import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException;
@@ -26,7 +25,6 @@ import java.util.List;
* The API for a Multiverse Handled World.
*/
public interface MultiverseWorld {
-
/**
* Returns the Bukkit world object that this world describes.
*
@@ -35,79 +33,24 @@ public interface MultiverseWorld {
World getCBWorld();
/**
- * Adds the property to the given value.
- * It will throw a PropertyDoesNotExistException if the property is not found.
+ * Gets the name of this world. The name cannot be changed.
+ *
+ * Note for plugin developers: Usually {@link #getAlias()}
+ * is what you want to use instead of this method.
*
- * @param property The name of a world property to set.
- * @param value A value in string representation, it will be parsed to the correct type.
- * @param sender The sender who wants this value to be set.
- * @return True if the value was set, false if not.
- * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
+ * @return The name of the world as a String.
*/
- boolean setProperty(String property, String value, CommandSender sender) throws PropertyDoesNotExistException;
+ String getName();
/**
- * Gets the actual MVConfigProperty from this world.
- * It will throw a PropertyDoesNotExistException if the property is not found.
+ * Gets the type of this world. As of 1.1-R1 this will be:
+ * FLAT or NORMAL
+ *
+ * This is *not* the generator.
*
- * @param property The name of a world property to get.
- * @return A valid MVWorldProperty.
- * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
- * @deprecated Use {@link #getProperty(String, Class)} instead
+ * @return The Type of this world.
*/
- @Deprecated
- MVConfigProperty> getProperty(String property) throws PropertyDoesNotExistException;
-
- /**
- * Gets the string representation of a property.
- * It will throw a PropertyDoesNotExistException if the property is not found.
- *
- * @param property The name of a world property to get.
- * @return A valid MVWorldProperty.
- * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
- */
- String getPropertyValue(String property) throws PropertyDoesNotExistException;
-
- /**
- * Gets the actual MVConfigProperty from this world.
- * It will throw a PropertyDoesNotExistException if the property is not found.
- *
- * @param property The name of a world property to get.
- * @param expected The type of the expected property. Use Object.class if this doesn't matter for you.
- * @param The type of the expected property.
- *
- * @return A valid MVWorldProperty.
- *
- * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
- */
- MVConfigProperty getProperty(String property, Class expected) throws PropertyDoesNotExistException;
-
- /**
- * Removes all values from the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
- *
- * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to clear.
- * @return True if it was cleared, false if not.
- */
- boolean clearVariable(String property);
-
- /**
- * Adds a value to the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
- *
- * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to add a value to.
- * @param value A value in string representation, it will be parsed to the correct type.
- * @return True if the value was added, false if not.
- */
- boolean addToVariable(String property, String value);
-
- /**
- * Removes a value from the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
- *
- * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to remove a value
- * from.
- * @param value A value in string representation, it will be parsed to the correct type.
- * @return True if the value was removed, false if not.
- */
- boolean removeFromVariable(String property, String value);
+ WorldType getWorldType();
/**
* Gets the environment of this world.
@@ -125,6 +68,37 @@ public interface MultiverseWorld {
*/
void setEnvironment(World.Environment environment);
+ /**
+ * Gets the difficulty of this world.
+ *
+ * @return The difficulty of this world.
+ */
+ Difficulty getDifficulty();
+
+ /**
+ * Sets the difficulty of this world and returns true if success.
+ * Valid string values are either an integer of difficulty(0-3) or
+ * the name that resides in the Bukkit enum, ex. {@code PEACEFUL}
+ *
+ * @param difficulty The difficulty to set the world to as a string.
+ * @return True if success, false if the provided string
+ * could not be translated to a difficulty.
+ * @deprecated Use {@link #setDifficulty(Difficulty)} or, if you have to
+ * pass a string, use {@link #setPropertyValue(String, String)} instead.
+ */
+ @Deprecated
+ boolean setDifficulty(String difficulty);
+
+ /**
+ * Sets the difficulty of this world and returns {@code true} on success.
+ * Valid string values are either an integer of difficulty(0-3) or
+ * the name that resides in the Bukkit enum, ex. PEACEFUL
+ *
+ * @param difficulty The new difficulty.
+ * @return True if success, false if the operation failed... for whatever reason.
+ */
+ boolean setDifficulty(Difficulty difficulty);
+
/**
* Gets the world seed of this world.
*
@@ -137,15 +111,111 @@ public interface MultiverseWorld {
*
* @param seed A Long that is the seed.
*/
- void setSeed(Long seed);
+ void setSeed(long seed);
/**
- * Gets the name of this world. This cannot be changed.
- *
- * @return The name of the world as a String.
+ * Gets the help-message for a property.
+ * @param property The name of the property.
+ * @return The help-message.
+ * @throws PropertyDoesNotExistException Thrown if the property was not found.
*/
- String getName();
+ String getPropertyHelp(String property) throws PropertyDoesNotExistException;
+ /**
+ * Gets a property as {@link String}.
+ *
+ * @param property The name of a world property to get.
+ * @return The string-representation of that property.
+ * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
+ */
+ String getPropertyValue(String property) throws PropertyDoesNotExistException;
+
+ /**
+ * Sets a property to a given value.
+ *
+ * @param property The name of a world property to set.
+ * @param value A value in string representation, it will be parsed to the correct type.
+ * @return True if the value was set, false if not.
+ * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
+ */
+ boolean setPropertyValue(String property, String value) throws PropertyDoesNotExistException;
+
+ /**
+ * Gets the actual MVConfigProperty from this world.
+ * It will throw a PropertyDoesNotExistException if the property is not found.
+ *
+ * @param property The name of a world property to get.
+ * @param expected The type of the expected property. Use Object.class if this doesn't matter for you.
+ * @param The type of the expected property.
+ *
+ * @return A valid MVWorldProperty.
+ *
+ * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
+ * @deprecated We don't use {@link com.onarandombox.MultiverseCore.configuration.MVConfigProperty} any longer!
+ */
+ @Deprecated
+ com.onarandombox.MultiverseCore.configuration.MVConfigProperty getProperty(String property, Class expected) throws PropertyDoesNotExistException;
+
+ // old config
+ /**
+ * Adds the property to the given value.
+ * It will throw a PropertyDoesNotExistException if the property is not found.
+ *
+ * @param property The name of a world property to set.
+ * @param value A value in string representation, it will be parsed to the correct type.
+ * @param sender The sender who wants this value to be set.
+ * @return True if the value was set, false if not.
+ * @throws PropertyDoesNotExistException Thrown if the property was not found in the world.
+ * @deprecated Use {@link #setPropertyValue(String, String)} instead.
+ */
+ @Deprecated
+ boolean setProperty(String property, String value, CommandSender sender) throws PropertyDoesNotExistException;
+
+ /**
+ * Adds a value to the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
+ *
+ * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to add a value to.
+ * @param value A value in string representation, it will be parsed to the correct type.
+ * @return True if the value was added, false if not.
+ * @deprecated We changed the entire world-config-system. This is not compatible any more.
+ */
+ @Deprecated
+ boolean addToVariable(String property, String value);
+
+ /**
+ * Removes a value from the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
+ *
+ * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to remove a value
+ * from.
+ * @param value A value in string representation, it will be parsed to the correct type.
+ * @return True if the value was removed, false if not.
+ * @deprecated We changed the entire world-config-system. This is not compatible any more.
+ */
+ @Deprecated
+ boolean removeFromVariable(String property, String value);
+
+ /**
+ * Removes all values from the given property. The property must be a {@link com.onarandombox.MultiverseCore.enums.AddProperties}.
+ *
+ * @param property The name of a {@link com.onarandombox.MultiverseCore.enums.AddProperties} to clear.
+ * @return True if it was cleared, false if not.
+ * @deprecated We changed the entire world-config-system. This is not compatible any more.
+ */
+ @Deprecated
+ boolean clearVariable(String property);
+
+ /**
+ * Clears a list property (sets it to []).
+ *
+ * @param property The property to clear.
+ * @return True if success, false if fail.
+ * @deprecated We changed the entire world-config-system. This is not compatible any more.
+ */
+ @Deprecated
+ boolean clearList(String property);
+ // end of old config stuff
+
+ // permission stuff
/**
* Gets the lowercased name of the world. This method is required, since the permissables
* lowercase all permissions when recalculating.
@@ -158,6 +228,21 @@ public interface MultiverseWorld {
*/
String getPermissibleName();
+ /**
+ * Gets the permission required to enter this world.
+ *
+ * @return The permission required to be exempt from charges to/from this world.
+ */
+ Permission getAccessPermission();
+
+ /**
+ * Gets the permission required to be exempt when entering.
+ *
+ * @return The permission required to be exempt when entering.
+ */
+ Permission getExemptPermission();
+ // end of permission stuff
+
/**
* Gets the alias of this world.
*
@@ -174,6 +259,13 @@ public interface MultiverseWorld {
*/
void setAlias(String alias);
+ /**
+ * Gets the color that this world's name/alias will display as.
+ *
+ * @return The color of this world.
+ */
+ ChatColor getColor();
+
/**
* Sets the color that this world's name/alias will display as.
*
@@ -182,19 +274,15 @@ public interface MultiverseWorld {
*/
boolean setColor(String color);
- /**
- * Gets the color that this world's name/alias will display as.
- *
- * @return The color of this world.
- */
- ChatColor getColor();
-
/**
* Tells you if someone entered a valid color.
*
* @param color A string that may translate to a color.
* @return True if it is a color, false if not.
+ *
+ * @deprecated This has been moved: {@link com.onarandombox.MultiverseCore.enums.EnglishChatColor#isValidAliasColor(String)}
*/
+ @Deprecated
boolean isValidAliasColor(String color);
/**
@@ -204,6 +292,7 @@ public interface MultiverseWorld {
*/
String getColoredWorldString();
+ // animals&monster stuff
/**
* Gets whether or not animals are allowed to spawn in this world.
*
@@ -211,6 +300,22 @@ public interface MultiverseWorld {
*/
boolean canAnimalsSpawn();
+ /**
+ * Sets whether or not animals can spawn.
+ * If there are values in {@link #getAnimalList()} and this is false,
+ * those animals become the exceptions, and will spawn
+ *
+ * @param allowAnimalSpawn True to allow spawning of monsters, false to prevent.
+ */
+ void setAllowAnimalSpawn(boolean allowAnimalSpawn);
+
+ /**
+ * Returns a list of animals. This list always negates the {@link #canAnimalsSpawn()} result.
+ *
+ * @return A list of animals that will spawn if {@link #canAnimalsSpawn()} is false.
+ */
+ List getAnimalList();
+
/**
* Gets whether or not monsters are allowed to spawn in this world.
*
@@ -219,7 +324,31 @@ public interface MultiverseWorld {
boolean canMonstersSpawn();
/**
- * Turn pvp on or off. This setting is used to set the world's PVP mode, and thus relies on fakePVP
+ * Sets whether or not monsters can spawn.
+ * If there are values in {@link #getMonsterList()} and this is false,
+ * those monsters become the exceptions, and will spawn
+ *
+ * @param allowMonsterSpawn True to allow spawning of monsters, false to prevent.
+ */
+ void setAllowMonsterSpawn(boolean allowMonsterSpawn);
+
+ /**
+ * Returns a list of monsters. This list always negates the {@link #canMonstersSpawn()} result.
+ *
+ * @return A list of monsters that will spawn if {@link #canMonstersSpawn()} is false.
+ */
+ List getMonsterList();
+ // end of animal&monster stuff
+
+ /**
+ * Gets whether or not PVP is enabled in this world in some form (fake or not).
+ *
+ * @return True if players can take damage from other players.
+ */
+ boolean isPVPEnabled();
+
+ /**
+ * Turn pvp on or off. This setting is used to set the world's PVP mode.
*
* @param pvpMode True to enable PVP damage, false to disable it.
*/
@@ -234,13 +363,6 @@ public interface MultiverseWorld {
@Deprecated
boolean getFakePVP();
- /**
- * Gets whether or not PVP is enabled in this world in some form (fake or not).
- *
- * @return True if players can take damage from other players.
- */
- boolean isPVPEnabled();
-
/**
* Gets whether or not this world will display in chat, mvw and mvl regardless if a user has the
* access permissions to go to this world.
@@ -257,6 +379,13 @@ public interface MultiverseWorld {
*/
void setHidden(boolean hidden);
+ /**
+ * Gets whether weather is enabled in this world.
+ *
+ * @return True if weather events will occur, false if not.
+ */
+ boolean isWeatherEnabled();
+
/**
* Sets whether or not there will be weather events in a given world.
* If set to false, Multiverse will disable the weather in the world immediately.
@@ -266,11 +395,11 @@ public interface MultiverseWorld {
void setEnableWeather(boolean enableWeather);
/**
- * Gets whether weather is enabled in this world.
+ * Gets whether or not CraftBukkit is keeping the chunks for this world in memory.
*
- * @return True if weather events will occur, false if not.
+ * @return True if CraftBukkit is keeping spawn chunks in memory.
*/
- boolean isWeatherEnabled();
+ boolean isKeepingSpawnInMemory();
/**
* If true, tells Craftbukkit to keep a worlds spawn chunks loaded in memory (default: true)
@@ -282,29 +411,11 @@ public interface MultiverseWorld {
void setKeepSpawnInMemory(boolean keepSpawnInMemory);
/**
- * Gets whether or not CraftBukkit is keeping the chunks for this world in memory.
+ * Gets the spawn location of this world.
*
- * @return True if CraftBukkit is keeping spawn chunks in memory.
+ * @return The spawn location of this world.
*/
- boolean isKeepingSpawnInMemory();
-
- /**
- * Sets the difficulty of this world and returns true if success.
- * Valid string values are either an integer of difficulty(0-3) or
- * the name that resides in the Bukkit enum, ex. PEACEFUL
- *
- * @param difficulty The difficulty to set the world to as a string.
- * @return True if success, false if the provided string
- * could not be translated to a difficulty.
- */
- boolean setDifficulty(String difficulty);
-
- /**
- * Gets the difficulty of this world.
- *
- * @return The difficulty of this world.
- */
- Difficulty getDifficulty();
+ Location getSpawnLocation();
/**
* Sets the spawn location for a world.
@@ -314,11 +425,11 @@ public interface MultiverseWorld {
void setSpawnLocation(Location spawnLocation);
/**
- * Gets the spawn location of this world.
+ * Gets whether or not the hunger level of players will go down in a world.
*
- * @return The spawn location of this world.
+ * @return True if it will go down, false if it will remain steady.
*/
- Location getSpawnLocation();
+ boolean getHunger();
/**
* Sets whether or not the hunger level of players will go down in a world.
@@ -328,22 +439,6 @@ public interface MultiverseWorld {
*/
void setHunger(boolean hungerEnabled);
- /**
- * Gets whether or not the hunger level of players will go down in a world.
- *
- * @return True if it will go down, false if it will remain steady.
- */
- boolean getHunger();
-
- /**
- * Sets the game mode of this world.
- *
- * @param gameMode A valid game mode string (either
- * an int ex. 0 or a string ex. creative).
- * @return True if the game mode was successfully changed, false if not.
- */
- boolean setGameMode(String gameMode);
-
/**
* Gets the GameMode of this world.
*
@@ -352,18 +447,31 @@ public interface MultiverseWorld {
GameMode getGameMode();
/**
- * Gets the permission required to enter this world.
+ * Sets the game mode of this world.
*
- * @return The permission required to be exempt from charges to/from this world.
+ * @param gameMode A valid game mode string (either
+ * an int ex. 0 or a string ex. creative).
+ * @return True if the game mode was successfully changed, false if not.
+ * @deprecated Use {@link #setGameMode(GameMode)} instead. If you have to
+ * pass a string, use {@link #setPropertyValue(String, String)}.
*/
- Permission getAccessPermission();
+ @Deprecated
+ boolean setGameMode(String gameMode);
/**
- * Gets the permission required to be exempt when entering.
+ * Sets the game mode of this world.
*
- * @return The permission required to be exempt when entering.
+ * @param gameMode The new {@link GameMode}.
+ * @return True if the game mode was successfully changed, false if not.
*/
- Permission getExemptPermission();
+ boolean setGameMode(GameMode gameMode);
+
+ /**
+ * Gets the amount of currency it requires to enter this world.
+ *
+ * @return The amount it costs to enter this world.
+ */
+ double getPrice();
/**
* Sets the price for entry to this world.
@@ -375,11 +483,11 @@ public interface MultiverseWorld {
void setPrice(double price);
/**
- * Gets the amount of currency it requires to enter this world.
+ * Gets the Type of currency that will be used when users enter this world.
*
- * @return The amount it costs to enter this world.
+ * @return The Type of currency that will be used when users enter this world.
*/
- double getPrice();
+ int getCurrency();
/**
* Sets the type of item that will be required given the price is not 0.
@@ -390,11 +498,11 @@ public interface MultiverseWorld {
void setCurrency(int item);
/**
- * Gets the Type of currency that will be used when users enter this world.
+ * Gets the world players will respawn in if they die in this one.
*
- * @return The Type of currency that will be used when users enter this world.
+ * @return A world that exists on the server.
*/
- int getCurrency();
+ World getRespawnToWorld();
/**
* Sets the world players will respawn in if they die in this one.
@@ -406,11 +514,12 @@ public interface MultiverseWorld {
boolean setRespawnToWorld(String respawnWorld);
/**
- * Gets the world players will respawn in if they die in this one.
+ * Gets the scaling value of this world.Really only has an effect if you use
+ * Multiverse-NetherPortals.
*
- * @return A world that exists on the server.
+ * @return This world's non-negative, non-zero scale.
*/
- World getRespawnToWorld();
+ double getScaling();
/**
* Sets the scale of this world. Really only has an effect if you use
@@ -422,60 +531,11 @@ public interface MultiverseWorld {
boolean setScaling(double scaling);
/**
- * Gets the scaling value of this world.Really only has an effect if you use
- * Multiverse-NetherPortals.
+ * Gets whether or not a world will auto-heal players if the difficulty is on peaceful.
*
- * @return This world's non-negative, non-zero scale.
+ * @return True if the world should heal (default), false if not.
*/
- double getScaling();
-
- /**
- * Gets a list of all the worlds that players CANNOT travel to from this world,
- * regardless of their access permissions.
- *
- * @return A List of world names.
- */
- List getWorldBlacklist();
-
- /**
- * Returns a list of animals. This list always negates the {@link #canAnimalsSpawn()} result.
- *
- * @return A list of animals that will spawn if {@link #canAnimalsSpawn()} is false.
- */
- List getAnimalList();
-
- /**
- * Sets whether or not animals can spawn.
- * If there are values in {@link #getAnimalList()} and this is false,
- * those animals become the exceptions, and will spawn
- *
- * @param allowAnimalSpawn True to allow spawning of monsters, false to prevent.
- */
- void setAllowAnimalSpawn(boolean allowAnimalSpawn);
-
- /**
- * Returns a list of monsters. This list always negates the {@link #canMonstersSpawn()} ()} result.
- *
- * @return A list of monsters that will spawn if {@link #canMonstersSpawn()} is false.
- */
- List getMonsterList();
-
- /**
- * Sets whether or not monsters can spawn.
- * If there are values in {@link #getMonsterList()} and this is false,
- * those monsters become the exceptions, and will spawn
- *
- * @param allowMonsterSpawn True to allow spawning of monsters, false to prevent.
- */
- void setAllowMonsterSpawn(boolean allowMonsterSpawn);
-
- /**
- * Clears a list property (sets it to []).
- *
- * @param property The property to clear.
- * @return True if success, false if fail.
- */
- boolean clearList(String property);
+ boolean getAutoHeal();
/**
* Sets whether or not a world will auto-heal players if the difficulty is on peaceful.
@@ -485,11 +545,11 @@ public interface MultiverseWorld {
void setAutoHeal(boolean heal);
/**
- * Gets whether or not a world will auto-heal players if the difficulty is on peaceful.
+ * Gets whether or not Multiverse should auto-adjust the spawn for this world.
*
- * @return True if the world should heal (default), false if not.
+ * @return True if Multiverse should adjust the spawn, false if not.
*/
- boolean getAutoHeal();
+ boolean getAdjustSpawn();
/**
* Sets whether or not Multiverse should auto-adjust the spawn for this world.
@@ -499,11 +559,11 @@ public interface MultiverseWorld {
void setAdjustSpawn(boolean adjust);
/**
- * Gets whether or not Multiverse should auto-adjust the spawn for this world.
+ * Gets whether or not Multiverse should auto-load this world.
*
- * @return True if Multiverse should adjust the spawn, false if not.
+ * @return True if Multiverse should auto-load this world.
*/
- boolean getAdjustSpawn();
+ boolean getAutoLoad();
/**
* Sets whether or not Multiverse should auto-load this world.
@@ -515,11 +575,12 @@ public interface MultiverseWorld {
void setAutoLoad(boolean autoLoad);
/**
- * Gets whether or not Multiverse should auto-load this world.
+ * Gets whether or not a player who dies in this world will respawn in their
+ * bed or follow the normal respawn pattern.
*
- * @return True if Multiverse should auto-load this world.
+ * @return True if players dying in this world should respawn at their bed.
*/
- boolean getAutoLoad();
+ boolean getBedRespawn();
/**
* Sets whether or not a player who dies in this world will respawn in their
@@ -532,19 +593,10 @@ public interface MultiverseWorld {
void setBedRespawn(boolean autoLoad);
/**
- * Gets whether or not a player who dies in this world will respawn in their
- * bed or follow the normal respawn pattern.
- *
- * @return True if players dying in this world should respawn at their bed.
+ * Same as {@link #getTime()}, but returns a string.
+ * @return The time as a short string: 12:34pm
*/
- boolean getBedRespawn();
-
- /**
- * Gets all the names of all properties that can be SET.
- *
- * @return All property names, with alternating colors.
- */
- String getAllPropertyNames();
+ String getTime();
/**
* Sets the current time in a world.
@@ -559,22 +611,6 @@ public interface MultiverseWorld {
*/
boolean setTime(String timeAsString);
- /**
- * Same as {@link #getTime()}, but returns a string.
- * @return The time as a short string: 12:34pm
- */
- String getTime();
-
- /**
- * Gets the type of this world. As of 1.1-R1 this will be:
- * FLAT or NORMAL
- *
- * This is *not* the generator.
- *
- * @return The Type of this world.
- */
- WorldType getWorldType();
-
/**
* Sets The types of portals that are allowed in this world.
*
@@ -588,4 +624,20 @@ public interface MultiverseWorld {
* @return The type of portals that are allowed.
*/
AllowedPortalType getAllowedPortals();
+
+ // properties that are not "getter+setter" style
+ /**
+ * Gets a list of all the worlds that players CANNOT travel to from this world,
+ * regardless of their access permissions.
+ *
+ * @return A List of world names.
+ */
+ List getWorldBlacklist();
+
+ /**
+ * Gets all the names of all properties that can be SET.
+ *
+ * @return All property names, with alternating colors.
+ */
+ String getAllPropertyNames();
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
index 6290183a..55424a94 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
@@ -51,7 +51,7 @@ public class ConfigCommand extends MultiverseCommand {
sender.sendMessage(message);
return;
}
- if (!this.plugin.getMVConfig().setProperty(args.get(0).toLowerCase(), args.get(1))) {
+ if (!this.plugin.getMVConfig().setConfigProperty(args.get(0).toLowerCase(), args.get(1))) {
sender.sendMessage(String.format("%sSetting '%s' to '%s' failed!", ChatColor.RED, args.get(0).toLowerCase(), args.get(1)));
return;
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyAddCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyAddCommand.java
index abd3e135..40425de4 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyAddCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyAddCommand.java
@@ -81,6 +81,7 @@ public class ModifyAddCommand extends MultiverseCommand {
return;
}
+ // TODO fix this
if (world.addToVariable(property, value)) {
sender.sendMessage(ChatColor.GREEN + "Success! " + ChatColor.AQUA
+ value + ChatColor.WHITE + " was " + ChatColor.GREEN + "added to " + ChatColor.GREEN + property);
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyClearCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyClearCommand.java
index 78075432..d30b66f8 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyClearCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyClearCommand.java
@@ -75,6 +75,7 @@ public class ModifyClearCommand extends MultiverseCommand {
sender.sendMessage("Please visit our Github Wiki for more information: http://goo.gl/cgB2B");
return;
}
+ // TODO fix this
if (world.clearList(property)) {
sender.sendMessage(property + " was cleared. It contains 0 values now.");
sender.sendMessage(ChatColor.GREEN + "Success! " + ChatColor.AQUA + property + ChatColor.WHITE + " was "
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyRemoveCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyRemoveCommand.java
index 57b4a262..f61efeff 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyRemoveCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifyRemoveCommand.java
@@ -81,6 +81,7 @@ public class ModifyRemoveCommand extends MultiverseCommand {
sender.sendMessage("Please visit our Github Wiki for more information: http://goo.gl/4W8cY");
return;
}
+ // TODO fix this
if (world.removeFromVariable(property, value)) {
sender.sendMessage(ChatColor.GREEN + "Success! " + ChatColor.AQUA + value + ChatColor.WHITE
+ " was " + ChatColor.RED + "removed from " + ChatColor.GREEN + property);
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifySetCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifySetCommand.java
index 7c753ce4..5df8b93e 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ModifySetCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ModifySetCommand.java
@@ -102,22 +102,21 @@ public class ModifySetCommand extends MultiverseCommand {
return;
}
- if ((property.equalsIgnoreCase("aliascolor") || property.equalsIgnoreCase("color")) && !world.isValidAliasColor(value)) {
+ if ((property.equalsIgnoreCase("aliascolor") || property.equalsIgnoreCase("color")) && !EnglishChatColor.isValidAliasColor(value)) {
sender.sendMessage(value + " is not a valid color. Please pick one of the following:");
sender.sendMessage(EnglishChatColor.getAllColors());
return;
}
try {
- if (world.setProperty(property, value, sender)) {
+ if (world.setPropertyValue(property, value)) {
sender.sendMessage(ChatColor.GREEN + "Success!" + ChatColor.WHITE + " Property " + ChatColor.AQUA + property
+ ChatColor.WHITE + " was set to " + ChatColor.GREEN + value);
} else {
- sender.sendMessage(world.getProperty(property, Object.class).getHelp());
+ sender.sendMessage(ChatColor.RED + world.getPropertyHelp(property));
}
} catch (PropertyDoesNotExistException e) {
sender.sendMessage(ChatColor.RED + "Sorry, You can't set: '" + ChatColor.GRAY + property + ChatColor.RED + "'");
- // TODO: Display the list
- sender.sendMessage(ChatColor.GOLD + "For a full list of thingys, see our wiki.");
+ sender.sendMessage("Valid world-properties: " + world.getAllPropertyNames());
}
}
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/ActiveStringConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/ActiveStringConfigProperty.java
deleted file mode 100644
index 078ba1b5..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/ActiveStringConfigProperty.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2012. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-/**
- * A {@link String} config-property that will NOT be saved to the config.
- */
-public class ActiveStringConfigProperty implements MVActiveConfigProperty {
- private String name;
- private String value;
- private String method;
- private String help;
-
- public ActiveStringConfigProperty(String name, String defaultValue, String help) {
- this.name = name;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(defaultValue);
- }
-
- public ActiveStringConfigProperty(String name, String defaultValue, String help, String method) {
- this(name, defaultValue, help);
- this.method = method;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getMethod() {
- return this.method;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setMethod(String methodName) {
- this.method = methodName;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Class> getPropertyClass() {
- return String.class;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- if (value == null) {
- return false;
- }
- this.setValue(value);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return "";
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(String value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- return true;
- }
-
- @Override
- public String toString() {
- return value;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/BooleanConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/BooleanConfigProperty.java
deleted file mode 100644
index 375a7872..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/BooleanConfigProperty.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link Boolean} config-property.
- */
-public class BooleanConfigProperty implements MVActiveConfigProperty {
- private String name;
- private Boolean value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
- private String method;
-
- public BooleanConfigProperty(ConfigurationSection section, String name, Boolean defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public BooleanConfigProperty(ConfigurationSection section, String name, Boolean defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.setValue(this.section.getBoolean(this.configNode, defaultValue));
- }
-
- public BooleanConfigProperty(ConfigurationSection section, String name, Boolean defaultValue, String configNode, String help, String method) {
- this(section, name, defaultValue, configNode, help);
- this.method = method;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Boolean getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(Boolean value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- if (value == null) {
- return false;
- }
- if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) {
- this.setValue(Boolean.parseBoolean(value));
- return true;
- }
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-
- /**
- * Gets the method that will be executed.
- *
- * @return The name of the method in MVWorld to be called.
- */
- @Override
- public String getMethod() {
- return this.method;
- }
-
- /**
- * Sets the method that will be executed.
- *
- * @param methodName The name of the method in MVWorld to be called.
- */
- @Override
- public void setMethod(String methodName) {
- this.method = methodName;
- }
-
- /**
- * Returns the class of the object we're looking at.
- *
- * @return the class of the object we're looking at.
- */
- @Override
- public Class> getPropertyClass() {
- return Boolean.class;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/ColorConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/ColorConfigProperty.java
deleted file mode 100644
index 1149b815..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/ColorConfigProperty.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import com.onarandombox.MultiverseCore.enums.EnglishChatColor;
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link EnglishChatColor} config-property.
- */
-public class ColorConfigProperty implements MVConfigProperty {
- private String name;
- private EnglishChatColor value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public ColorConfigProperty(ConfigurationSection section, String name, EnglishChatColor defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public ColorConfigProperty(ConfigurationSection section, String name, EnglishChatColor defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(this.section.getString(this.configNode, defaultValue.toString()));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public EnglishChatColor getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(EnglishChatColor value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value.getText());
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- EnglishChatColor color = EnglishChatColor.fromString(value);
- if (color == null) {
- return false;
- }
- this.setValue(color);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java
deleted file mode 100644
index cb409484..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2012. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
-import com.onarandombox.MultiverseCore.enums.EnglishChatColor;
-import org.bukkit.Difficulty;
-import org.bukkit.GameMode;
-import org.bukkit.Location;
-import org.bukkit.configuration.ConfigurationSection;
-
-/** A factory to create config properties for a given world. */
-public class ConfigPropertyFactory {
- private ConfigurationSection section;
-
- public ConfigPropertyFactory(ConfigurationSection section) {
- this.section = section;
- }
-
- // Booleans
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public BooleanConfigProperty getNewProperty(String name, boolean defaultValue, String help) {
- return new BooleanConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public BooleanConfigProperty getNewProperty(String name, boolean defaultValue, String node, String help) {
- return new BooleanConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- /**
- * Constructs a new ActiveBooleanConfigProperty
- *
- * This property will execute 'method' after it has been successfully set.
- *
- * @param name The name of this ConifgProperty
- * @param defaultValue The default value.
- * @param help What string is shown for help.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param method The method that should be executed.
- * @return The ActiveStringConfigProperty
- */
- public BooleanConfigProperty getNewProperty(String name, boolean defaultValue, String help, String node, String method) {
- return new BooleanConfigProperty(this.section, name, defaultValue, help, node, method);
- }
-
- // Integers
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public IntegerConfigProperty getNewProperty(String name, int defaultValue, String help) {
- return new IntegerConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public IntegerConfigProperty getNewProperty(String name, int defaultValue, String node, String help) {
- return new IntegerConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- // Doubles
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public DoubleConfigProperty getNewProperty(String name, double defaultValue, String help) {
- return new DoubleConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public DoubleConfigProperty getNewProperty(String name, double defaultValue, String node, String help) {
- return new DoubleConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @param method The name of the method that's used to set this property.
- * @return The ConfigProperty.
- */
- public DoubleConfigProperty getNewProperty(String name, double defaultValue, String node, String help, String method) {
- return new DoubleConfigProperty(this.section, name, defaultValue, node, help, method);
- }
-
- // Strings
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public StringConfigProperty getNewProperty(String name, String defaultValue, String help) {
- return new StringConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public StringConfigProperty getNewProperty(String name, String defaultValue, String node, String help) {
- return new StringConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- // Colors
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public ColorConfigProperty getNewProperty(String name, EnglishChatColor defaultValue, String help) {
- return new ColorConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public ColorConfigProperty getNewProperty(String name, EnglishChatColor defaultValue, String node, String help) {
- return new ColorConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- // Difficulty
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public DifficultyConfigProperty getNewProperty(String name, Difficulty defaultValue, String help) {
- return new DifficultyConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public DifficultyConfigProperty getNewProperty(String name, Difficulty defaultValue, String node, String help) {
- return new DifficultyConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- // GameMode
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public GameModeConfigProperty getNewProperty(String name, GameMode defaultValue, String help) {
- return new GameModeConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public GameModeConfigProperty getNewProperty(String name, GameMode defaultValue, String node, String help) {
- return new GameModeConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- // Location
- /**
- * Constructs a new LocationConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public LocationConfigProperty getNewProperty(String name, Location defaultValue, String help) {
- return new LocationConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public LocationConfigProperty getNewProperty(String name, Location defaultValue, String node, String help) {
- return new LocationConfigProperty(this.section, name, defaultValue, node, help);
- }
-
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param node The name of the configuration-node this ConfigProperty will be stored as.
- * @param help The text that's displayed when a user failed to set the property.
- * @param method The name of the method that's used to set this property.
- * @return The ConfigProperty.
- */
- public LocationConfigProperty getNewProperty(String name, Location defaultValue, String node, String help, String method) {
- return new LocationConfigProperty(this.section, name, defaultValue, node, help, method);
- }
-
- // GameMode
- /**
- * Constructs a new ConfigProperty.
- *
- * @param name The name of this ConfigProperty.
- * @param defaultValue The default-value.
- * @param help The text that's displayed when a user failed to set the property.
- * @return The ConfigProperty.
- */
- public PortalTypeConfigProperty getNewProperty(String name, AllowedPortalType defaultValue, String help) {
- return new PortalTypeConfigProperty(this.section, name, defaultValue, help);
- }
-
- /**
- * Constructs a new ActiveStringConfigProperty
- *
- * This property will execute 'method' after it has been successfully set.
- * This string will NOT be saved to the config file.
- *
- * @param name The name of this ConifgProperty
- * @param defaultValue The default value.
- * @param help What string is shown for help.
- * @param method The method that should be executed.
- * @param saveToConfig Should the variable save to the config?
- * @return The ActiveStringConfigProperty
- */
- public ActiveStringConfigProperty getNewProperty(String name, String defaultValue, String help, String method, boolean saveToConfig) {
- return new ActiveStringConfigProperty(name, defaultValue, help, method);
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/DifficultyConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/DifficultyConfigProperty.java
deleted file mode 100644
index 42b692c6..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/DifficultyConfigProperty.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.Difficulty;
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link Difficulty} config-property.
- */
-public class DifficultyConfigProperty implements MVActiveConfigProperty {
- private String name;
- private Difficulty value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public DifficultyConfigProperty(ConfigurationSection section, String name, Difficulty defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public DifficultyConfigProperty(ConfigurationSection section, String name, Difficulty defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(this.section.getString(this.configNode, defaultValue.toString()));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Difficulty getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(Difficulty value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value.toString());
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- try {
- return this.setValue(Difficulty.getByValue(Integer.parseInt(value)));
- } catch (NumberFormatException nfe) {
- try {
- return this.setValue(Difficulty.valueOf(value.toUpperCase()));
- } catch (Exception e) {
- return false;
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-
- /**
- * Gets the method that will be executed.
- *
- * @return The name of the method in MVWorld to be called.
- */
- @Override
- public String getMethod() {
- return "setActualDifficulty";
- }
-
- /**
- * Sets the method that will be executed.
- *
- * @param methodName The name of the method in MVWorld to be called.
- */
- @Override
- public void setMethod(String methodName) {
- // Unused here. This will only ever be setDifficulty.
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Class> getPropertyClass() {
- return Difficulty.class;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/DoubleConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/DoubleConfigProperty.java
deleted file mode 100644
index bd6af823..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/DoubleConfigProperty.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link Double} config-property.
- */
-public class DoubleConfigProperty implements MVActiveConfigProperty {
- private String name;
- private Double value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
- private String method;
-
- public DoubleConfigProperty(ConfigurationSection section, String name, Double defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public DoubleConfigProperty(ConfigurationSection section, String name, Double defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.setValue(this.section.getDouble(this.configNode, defaultValue));
- }
-
- public DoubleConfigProperty(ConfigurationSection section, String name, Double defaultValue, String configNode, String help, String method) {
- this(section, name, defaultValue, configNode, help);
- this.method = method;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Double getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(Double value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- try {
- this.setValue(Double.parseDouble(value));
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-
- /**
- * Gets the method that will be executed.
- *
- * @return The name of the method in MVWorld to be called.
- */
- @Override
- public String getMethod() {
- return this.method;
- }
-
- /**
- * Sets the method that will be executed.
- *
- * @param methodName The name of the method in MVWorld to be called.
- */
- @Override
- public void setMethod(String methodName) {
- this.method = methodName;
- }
-
- /**
- * Returns the class of the object we're looking at.
- *
- * @return the class of the object we're looking at.
- */
- @Override
- public Class> getPropertyClass() {
- return Double.class;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/GameModeConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/GameModeConfigProperty.java
deleted file mode 100644
index 2812982c..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/GameModeConfigProperty.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.GameMode;
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link GameMode} config-property.
- */
-public class GameModeConfigProperty implements MVActiveConfigProperty {
- private String name;
- private GameMode value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public GameModeConfigProperty(ConfigurationSection section, String name, GameMode defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public GameModeConfigProperty(ConfigurationSection section, String name, GameMode defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(this.section.getString(this.configNode, defaultValue.toString()));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public GameMode getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(GameMode value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value.toString());
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- try {
- return this.setValue(GameMode.getByValue(Integer.parseInt(value)));
- } catch (NumberFormatException nfe) {
- try {
- return this.setValue(GameMode.valueOf(value.toUpperCase()));
- } catch (Exception e) {
- return false;
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-
- /**
- * Gets the method that will be executed.
- *
- * @return The name of the method in MVWorld to be called.
- */
- @Override
- public String getMethod() {
- return "setActualGameMode";
- }
-
- /**
- * Sets the method that will be executed.
- *
- * @param methodName The name of the method in MVWorld to be called.
- */
- @Override
- public void setMethod(String methodName) {
- // Not required. Gamemode will only ever be one.
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Class> getPropertyClass() {
- return GameMode.class;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/IntegerConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/IntegerConfigProperty.java
deleted file mode 100644
index 27961a24..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/IntegerConfigProperty.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link Integer} config-property.
- */
-public class IntegerConfigProperty implements MVConfigProperty {
- private String name;
- private Integer value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public IntegerConfigProperty(ConfigurationSection section, String name, Integer defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public IntegerConfigProperty(ConfigurationSection section, String name, Integer defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.setValue(this.section.getInt(this.configNode, defaultValue));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Integer getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(Integer value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- try {
- this.setValue(Integer.parseInt(value));
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/LocationConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/LocationConfigProperty.java
deleted file mode 100644
index 9a7096f7..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/LocationConfigProperty.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import com.onarandombox.MultiverseCore.utils.LocationManipulation;
-import org.bukkit.Location;
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link Location} config-property.
- */
-public class LocationConfigProperty implements MVActiveConfigProperty {
- private String name;
- private Location value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
- private String method;
-
- public LocationConfigProperty(ConfigurationSection section, String name, Location defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public LocationConfigProperty(ConfigurationSection section, String name, Location defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.setValue(this.getLocationFromConfig(defaultValue));
- }
-
- public LocationConfigProperty(ConfigurationSection section, String name, Location defaultValue, String configNode, String help, String method) {
- this(section, name, defaultValue, configNode, help);
- this.method = method;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Location getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- // TODO: oh my god, what should we do here?
- Location parsed = LocationManipulation.stringToLocation(value);
- return this.setValue(parsed);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(Location value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode + ".x", this.value.getX());
- this.section.set(configNode + ".y", this.value.getY());
- this.section.set(configNode + ".z", this.value.getZ());
- this.section.set(configNode + ".pitch", this.value.getPitch());
- this.section.set(configNode + ".yaw", this.value.getYaw());
- this.section.set(configNode + ".world", this.value.getWorld().getName());
-
- return true;
- }
-
- private Location getLocationFromConfig(Location defaultValue) {
- double x = this.section.getDouble(this.configNode + ".x", defaultValue.getX());
- double y = this.section.getDouble(this.configNode + ".y", defaultValue.getY());
- double z = this.section.getDouble(this.configNode + ".z", defaultValue.getZ());
- double pitch = this.section.getDouble(this.configNode + ".pitch", defaultValue.getPitch());
- double yaw = this.section.getDouble(this.configNode + ".yaw", defaultValue.getYaw());
- String w = this.section.getString(this.configNode + ".world", defaultValue.getWorld().getName());
- Location found = LocationManipulation.stringToLocation(w + ":" + x + "," + y + "," + z + ":" + yaw + ":" + pitch);
- // TODO: oh my god, what should we do here?
- if (found != null) {
- return found;
- }
- return defaultValue;
- }
-
- @Override
- public String toString() {
- // TODO: oh my god, what should we do here?
- return LocationManipulation.strCoordsRaw(this.value);
- }
-
- /**
- * Gets the method that will be executed.
- *
- * @return The name of the method in MVWorld to be called.
- */
- @Override
- public String getMethod() {
- return this.method;
- }
-
- /**
- * Sets the method that will be executed.
- *
- * @param methodName The name of the method in MVWorld to be called.
- */
- @Override
- public void setMethod(String methodName) {
- this.method = methodName;
- }
-
- /**
- * Returns the class of the object we're looking at.
- *
- * @return the class of the object we're looking at.
- */
- @Override
- public Class> getPropertyClass() {
- return Location.class;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/MVActiveConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/MVActiveConfigProperty.java
index 08d071ed..403d0026 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/MVActiveConfigProperty.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/MVActiveConfigProperty.java
@@ -10,8 +10,10 @@ package com.onarandombox.MultiverseCore.configuration;
/**
* An "active" {@link MVConfigProperty} that uses the specified method to be "actually" set.
* @param The type of the config-property.
+ * @deprecated This is deprecated.
* @see MVConfigProperty
*/
+@Deprecated
public interface MVActiveConfigProperty extends MVConfigProperty {
/**
* Gets the method that will be executed.
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/MVConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/MVConfigProperty.java
index ccb5924d..537a46b5 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/MVConfigProperty.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/MVConfigProperty.java
@@ -11,7 +11,9 @@ package com.onarandombox.MultiverseCore.configuration;
* A generic config-property.
*
* @param The type of the config-property.
+ * @deprecated This is deprecated.
*/
+@Deprecated
public interface MVConfigProperty {
/**
* Gets the name of this property.
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java
deleted file mode 100644
index 685a8101..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2012. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link AllowedPortalType} config-property.
- */
-public class PortalTypeConfigProperty implements MVConfigProperty {
- private String name;
- private AllowedPortalType value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public PortalTypeConfigProperty(ConfigurationSection section, String name, AllowedPortalType defaultValue, String help) {
- this(section, name, defaultValue, name, help);
- }
-
- public PortalTypeConfigProperty(ConfigurationSection section, String name, AllowedPortalType defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(this.section.getString(this.configNode, defaultValue.toString()));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public AllowedPortalType getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(AllowedPortalType value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value.toString());
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- try {
- return this.setValue(AllowedPortalType.valueOf(value.toUpperCase()));
- } catch (Exception e) {
- return false;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnLocation.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnLocation.java
new file mode 100644
index 00000000..a09391c1
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnLocation.java
@@ -0,0 +1,98 @@
+package com.onarandombox.MultiverseCore.configuration;
+
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.bukkit.Chunk;
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.configuration.serialization.ConfigurationSerializable;
+import org.bukkit.configuration.serialization.SerializableAs;
+
+/**
+ * Just like a regular {@link Location}, however {@code world} is usually {@code null}
+ * or just a weak reference and it implements {@link ConfigurationSerializable}.
+ */
+@SerializableAs("MVSpawnLocation")
+public class SpawnLocation extends Location implements ConfigurationSerializable {
+ private Reference worldRef;
+
+ public SpawnLocation(double x, double y, double z) {
+ super(null, x, y, z);
+ }
+
+ public SpawnLocation(double x, double y, double z, float yaw, float pitch) {
+ super(null, x, y, z, yaw, pitch);
+ }
+
+ public SpawnLocation(Location loc) {
+ this(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public World getWorld() {
+ return (this.worldRef != null) ? this.worldRef.get() : null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setWorld(World world) {
+ this.worldRef = new WeakReference(world);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Chunk getChunk() {
+ if ((this.worldRef != null) && (this.worldRef.get() != null))
+ return this.worldRef.get().getChunkAt(this);
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Block getBlock() {
+ if ((this.worldRef != null) && (this.worldRef.get() != null))
+ return this.worldRef.get().getBlockAt(this);
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Map serialize() {
+ Map serialized = new HashMap(5); // SUPPRESS CHECKSTYLE: MagicNumberCheck
+ serialized.put("x", this.getX());
+ serialized.put("y", this.getY());
+ serialized.put("z", this.getZ());
+ serialized.put("pitch", this.getPitch());
+ serialized.put("yaw", this.getYaw());
+ return serialized;
+ }
+
+ /**
+ * Let Bukkit be able to deserialize this.
+ * @param args The map.
+ * @return The deserialized object.
+ */
+ public static SpawnLocation deserialize(Map args) {
+ double x = ((Number) args.get("x")).doubleValue();
+ double y = ((Number) args.get("y")).doubleValue();
+ double z = ((Number) args.get("z")).doubleValue();
+ float pitch = ((Number) args.get("pitch")).floatValue();
+ float yaw = ((Number) args.get("yaw")).floatValue();
+ return new SpawnLocation(x, y, z, yaw, pitch);
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnSettings.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnSettings.java
new file mode 100644
index 00000000..04f2cb71
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/SpawnSettings.java
@@ -0,0 +1,50 @@
+package com.onarandombox.MultiverseCore.configuration;
+
+import java.util.Map;
+
+import me.main__.util.SerializationConfig.Property;
+import me.main__.util.SerializationConfig.SerializationConfig;
+
+import org.bukkit.configuration.serialization.SerializableAs;
+
+/**
+ * Spawning-Settings.
+ */
+@SerializableAs("MVSpawnSettings")
+public class SpawnSettings extends SerializationConfig {
+ @Property
+ private SubSpawnSettings animals;
+ @Property
+ private SubSpawnSettings monsters;
+
+ public SpawnSettings() {
+ super();
+ }
+
+ public SpawnSettings(Map values) {
+ super(values);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDefaults() {
+ animals = new SubSpawnSettings();
+ monsters = new SubSpawnSettings();
+ }
+
+ /**
+ * @return the animal-settings
+ */
+ public SubSpawnSettings getAnimalSettings() {
+ return animals;
+ }
+
+ /**
+ * @return the monster-settings
+ */
+ public SubSpawnSettings getMonsterSettings() {
+ return monsters;
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/StringConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/StringConfigProperty.java
deleted file mode 100644
index 948034ce..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/StringConfigProperty.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/******************************************************************************
- * Multiverse 2 Copyright (c) the Multiverse Team 2011. *
- * Multiverse 2 is licensed under the BSD License. *
- * For more information please check the README.md file included *
- * with this project. *
- ******************************************************************************/
-
-package com.onarandombox.MultiverseCore.configuration;
-
-import org.bukkit.configuration.ConfigurationSection;
-
-/**
- * A {@link String} config-property.
- */
-public class StringConfigProperty implements MVConfigProperty {
- private String name;
- private String value;
- private String configNode;
- private ConfigurationSection section;
- private String help;
-
- public StringConfigProperty(ConfigurationSection section, String name, String defaultValue, String help) {
- this(section, name, defaultValue, defaultValue, help);
- }
-
- public StringConfigProperty(ConfigurationSection section, String name, String defaultValue, String configNode, String help) {
- this.name = name;
- this.configNode = configNode;
- this.section = section;
- this.help = help;
- this.value = defaultValue;
- this.parseValue(this.section.getString(this.configNode, defaultValue));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getName() {
- return this.name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getValue() {
- return this.value;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean parseValue(String value) {
- if (value == null) {
- return false;
- }
- this.setValue(value);
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getConfigNode() {
- return this.configNode;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getHelp() {
- return this.help;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean setValue(String value) {
- if (value == null) {
- return false;
- }
- this.value = value;
- this.section.set(configNode, this.value);
- return true;
- }
-
- @Override
- public String toString() {
- return value;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/SubSpawnSettings.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/SubSpawnSettings.java
new file mode 100644
index 00000000..d66bd133
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/SubSpawnSettings.java
@@ -0,0 +1,59 @@
+package com.onarandombox.MultiverseCore.configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import me.main__.util.SerializationConfig.Property;
+import me.main__.util.SerializationConfig.SerializationConfig;
+
+import org.bukkit.configuration.serialization.SerializableAs;
+
+/**
+ * SpawnSubSettings.
+ */
+@SerializableAs("MVSpawnSubSettings")
+public class SubSpawnSettings extends SerializationConfig {
+ @Property
+ private boolean spawn;
+ @Property
+ private List exceptions;
+
+ public SubSpawnSettings() {
+ super();
+ }
+
+ public SubSpawnSettings(Map values) {
+ super(values);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDefaults() {
+ spawn = true;
+ exceptions = new ArrayList();
+ }
+
+ /**
+ * @return spawn
+ */
+ public boolean doSpawn() {
+ return spawn;
+ }
+
+ /**
+ * @param spawn The new value.
+ */
+ public void setSpawn(boolean spawn) {
+ this.spawn = spawn;
+ }
+
+ /**
+ * @return the exceptions
+ */
+ public List getExceptions() {
+ return exceptions;
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/WorldPropertyValidator.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/WorldPropertyValidator.java
new file mode 100644
index 00000000..b051eabd
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/WorldPropertyValidator.java
@@ -0,0 +1,27 @@
+package com.onarandombox.MultiverseCore.configuration;
+
+import org.bukkit.Bukkit;
+
+import com.onarandombox.MultiverseCore.MVWorld;
+import com.onarandombox.MultiverseCore.event.MVWorldPropertyChangeEvent;
+
+import me.main__.util.SerializationConfig.ChangeDeniedException;
+import me.main__.util.SerializationConfig.ObjectUsingValidator;
+
+/**
+ * Validates world-property-changes.
+ * @param The type of the property that should be validated.
+ */
+public class WorldPropertyValidator extends ObjectUsingValidator {
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public T validateChange(String property, T newValue, T oldValue, MVWorld object) throws ChangeDeniedException {
+ MVWorldPropertyChangeEvent event = new MVWorldPropertyChangeEvent(object, null, property, newValue);
+ Bukkit.getPluginManager().callEvent(event);
+ if (event.isCancelled())
+ throw new ChangeDeniedException();
+ return event.getTheNewValue();
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/enums/EnglishChatColor.java b/src/main/java/com/onarandombox/MultiverseCore/enums/EnglishChatColor.java
index 4f3d015a..007f2024 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/enums/EnglishChatColor.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/enums/EnglishChatColor.java
@@ -99,4 +99,13 @@ public enum EnglishChatColor {
}
return null;
}
+
+ /**
+ * Looks if the given-color name is a valid color.
+ * @param aliasColor A color-name.
+ * @return True if the name is a valid color, false if it isn't.
+ */
+ public static boolean isValidAliasColor(String aliasColor) {
+ return (EnglishChatColor.fromString(aliasColor) != null);
+ }
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/event/MVWorldPropertyChangeEvent.java b/src/main/java/com/onarandombox/MultiverseCore/event/MVWorldPropertyChangeEvent.java
index 1cdd6404..d85e104a 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/event/MVWorldPropertyChangeEvent.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/event/MVWorldPropertyChangeEvent.java
@@ -19,16 +19,18 @@ import org.bukkit.event.HandlerList;
* If it is cancelled, no change will happen.
*
* If you want to get the values of the world before the change, query the world.
- * If you want to get the value being changed, use getProperty()
+ * To get the name of the property that was changed, use {@link #getPropertyName()}.
+ * To get the new value, use {@link #getTheNewValue()}. To change it, use {@link #setTheNewValue(Object)}.
+ * @param The type of the property that was set.
*/
-public class MVWorldPropertyChangeEvent extends Event implements Cancellable {
+public class MVWorldPropertyChangeEvent extends Event implements Cancellable {
private MultiverseWorld world;
private CommandSender changer;
private boolean isCancelled = false;
- private String value;
private String name;
+ private T value;
- public MVWorldPropertyChangeEvent(MultiverseWorld world, CommandSender changer, String name, String value) {
+ public MVWorldPropertyChangeEvent(MultiverseWorld world, CommandSender changer, String name, T value) {
this.world = world;
this.changer = changer;
this.name = name;
@@ -64,16 +66,38 @@ public class MVWorldPropertyChangeEvent extends Event implements Cancellable {
/**
* Gets the new value.
* @return The new value.
+ * @deprecated Use {@link #getTheNewValue()} instead.
*/
+ @Deprecated
public String getNewValue() {
+ return this.value.toString();
+ }
+
+ /**
+ * Gets the new value.
+ * @return The new value.
+ */
+ public T getTheNewValue() {
return this.value;
}
/**
* Sets the new value.
+ *
+ * This method is only a stub, it'll always throw an {@link UnsupportedOperationException}!
* @param value The new new value.
+ * @deprecated Use {@link #setTheNewValue(Object)} instead.
*/
+ @Deprecated
public void setNewValue(String value) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Sets the new value.
+ * @param value The new value.
+ */
+ public void setTheNewValue(T value) {
this.value = value;
}
@@ -88,6 +112,8 @@ public class MVWorldPropertyChangeEvent extends Event implements Cancellable {
/**
* Gets the person (or console) who was responsible for the change.
+ *
+ * This may be null!
*
* @return The person (or console) who was responsible for the change.
*/
diff --git a/src/main/java/com/onarandombox/MultiverseCore/exceptions/PropertyDoesNotExistException.java b/src/main/java/com/onarandombox/MultiverseCore/exceptions/PropertyDoesNotExistException.java
index fc367342..95a24169 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/exceptions/PropertyDoesNotExistException.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/exceptions/PropertyDoesNotExistException.java
@@ -14,4 +14,8 @@ public class PropertyDoesNotExistException extends Exception {
public PropertyDoesNotExistException(String name) {
super(name);
}
+
+ public PropertyDoesNotExistException(String name, Throwable cause) {
+ super(name, cause);
+ }
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
index 388a694d..840588ab 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
@@ -13,7 +13,6 @@ import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.api.WorldPurger;
-import com.onarandombox.MultiverseCore.commands.EnvironmentCommand;
import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent;
import org.bukkit.World;
import org.bukkit.World.Environment;
@@ -44,16 +43,16 @@ import java.util.logging.Level;
public class WorldManager implements MVWorldManager {
private MultiverseCore plugin;
private WorldPurger worldPurger;
+ private Map worldsFromTheConfig;
private Map worlds;
- private List unloadedWorlds;
private FileConfiguration configWorlds = null;
private Map defaultGens;
private String firstSpawn;
public WorldManager(MultiverseCore core) {
this.plugin = core;
+ this.worldsFromTheConfig = new HashMap();
this.worlds = new HashMap();
- this.unloadedWorlds = new ArrayList();
this.worldPurger = new SimpleWorldPurger(plugin);
}
@@ -118,7 +117,10 @@ public class WorldManager implements MVWorldManager {
c.generateStructures(generateStructures);
}
- World world;
+ // Important: doLoad() needs the MVWorld-object in worldsFromTheConfig
+ if (!worldsFromTheConfig.containsKey(name))
+ worldsFromTheConfig.put(name, new MVWorld(useSpawnAdjust));
+
StringBuilder builder = new StringBuilder();
builder.append("Loading World & Settings - '").append(name).append("'");
builder.append(" - Env: ").append(env);
@@ -131,27 +133,12 @@ public class WorldManager implements MVWorldManager {
}
this.plugin.log(Level.INFO, builder.toString());
- try {
- world = c.createWorld();
- } catch (Exception e) {
- this.plugin.log(Level.SEVERE, "The world '" + name + "' could NOT be loaded because it contains errors!");
- this.plugin.log(Level.SEVERE, "Try using Chukster to repair your world! '" + name + "'");
- this.plugin.log(Level.SEVERE, "http://forums.bukkit.org/threads/admin-chunkster.8186/");
- return false;
- }
-
- if (world == null) {
+ if (!doLoad(c)) {
this.plugin.log(Level.SEVERE, "Failed to Create/Load the world '" + name + "'");
return false;
}
- MultiverseWorld mvworld = new MVWorld(world, this.configWorlds, this.plugin,
- this.plugin.getServer().getWorld(name).getSeed(), generator, useSpawnAdjust);
- this.worldPurger.purgeWorld(mvworld);
- this.worlds.put(name, mvworld);
- if (this.unloadedWorlds.contains(name)) {
- this.unloadedWorlds.remove(name);
- }
+ this.saveWorldsConfig();
return true;
}
@@ -185,9 +172,9 @@ public class WorldManager implements MVWorldManager {
this.configWorlds.set("worlds." + name, null);
this.saveWorldsConfig();
- // Remove it from the list of unloaded worlds.
- if (this.unloadedWorlds.contains(name)) {
- this.unloadedWorlds.remove(name);
+ // Remove it from the list of worlds.
+ if (this.worldsFromTheConfig.containsKey(name)) {
+ this.worldsFromTheConfig.remove(name);
}
return true;
} else {
@@ -236,15 +223,14 @@ public class WorldManager implements MVWorldManager {
if (this.unloadWorldFromBukkit(name, true)) {
this.worlds.remove(name);
this.plugin.log(Level.INFO, "World '" + name + "' was unloaded from memory.");
- this.unloadedWorlds.add(name);
return true;
} else {
this.plugin.log(Level.WARNING, "World '" + name + "' could not be unloaded. Is it a default world?");
}
} else if (this.plugin.getServer().getWorld(name) != null) {
this.plugin.log(Level.WARNING, "Hmm Multiverse does not know about this world but it's loaded in memory.");
- this.plugin.log(Level.WARNING, "To unload it using multiverse, use:");
- this.plugin.log(Level.WARNING, "/mv import " + name + " " + this.plugin.getServer().getWorld(name).getEnvironment().toString());
+ this.plugin.log(Level.WARNING, "To let Multiverse know about it, use:");
+ this.plugin.log(Level.WARNING, String.format("/mv import %s %s", name, this.plugin.getServer().getWorld(name).getEnvironment().toString()));
} else {
this.plugin.log(Level.INFO, "Multiverse does not know about " + name + " and it's not loaded by Bukkit.");
}
@@ -258,36 +244,48 @@ public class WorldManager implements MVWorldManager {
public boolean loadWorld(String name) {
// Check if the World is already loaded
if (this.worlds.containsKey(name)) {
- // Ensure it's not unloaded, since it IS loaded.
- if (this.unloadedWorlds.contains(name)) {
- this.unloadedWorlds.remove(name);
- }
return true;
}
- // Grab all the Worlds from the Config.
- Set worldKeys = this.configWorlds.getConfigurationSection("worlds").getKeys(false);
-
- // Check that the list is not null and that the config contains the world
- if ((worldKeys != null) && (worldKeys.contains(name))) {
- // Grab the initial values from the config file.
- String environment = this.configWorlds.getString("worlds." + name + ".environment", "NORMAL"); // Grab the Environment as a String.
- String type = this.configWorlds.getString("worlds." + name + ".type", "NORMAL");
- String seedString = this.configWorlds.getString("worlds." + name + ".seed", "");
- String generatorString = this.configWorlds.getString("worlds." + name + ".generator");
- boolean generateStructures = this.configWorlds.getBoolean("worlds." + name + ".generatestructures", true);
-
- this.addWorld(name, EnvironmentCommand.getEnvFromString(environment), seedString,
- EnvironmentCommand.getWorldTypeFromString(type), generateStructures, generatorString);
- if (this.unloadedWorlds.contains(name)) {
- this.unloadedWorlds.remove(name);
- }
- return true;
+ // Check that the world is in the config
+ if (worldsFromTheConfig.containsKey(name)) {
+ return doLoad(name);
} else {
return false;
}
}
+ private void brokenWorld(String name) {
+ this.plugin.log(Level.SEVERE, "The world '" + name + "' could NOT be loaded because it contains errors!");
+ this.plugin.log(Level.SEVERE, "Try using Chukster to repair your world! '" + name + "'");
+ this.plugin.log(Level.SEVERE, "http://forums.bukkit.org/threads/admin-chunkster.8186/");
+ }
+
+ private boolean doLoad(String name) {
+ return doLoad(WorldCreator.name(name));
+ }
+
+ private boolean doLoad(WorldCreator creator) {
+ String worldName = creator.name();
+ if (!worldsFromTheConfig.containsKey(worldName))
+ throw new IllegalArgumentException("That world doesn't exist!");
+ if (worlds.containsKey(worldName))
+ throw new IllegalArgumentException("That world is already loaded!");
+ MVWorld mvworld = worldsFromTheConfig.get(worldName);
+ World cbworld;
+ try {
+ cbworld = WorldCreator.name(worldName).createWorld();
+ } catch (Exception e) {
+ e.printStackTrace();
+ brokenWorld(worldName);
+ return false;
+ }
+ mvworld.init(cbworld, plugin);
+ this.worldPurger.purgeWorld(mvworld);
+ this.worlds.put(worldName, mvworld);
+ return true;
+ }
+
/**
* {@inheritDoc}
*/
@@ -459,18 +457,14 @@ public class WorldManager implements MVWorldManager {
public void loadDefaultWorlds() {
this.ensureConfigIsPrepared();
List myWorlds = this.plugin.getServer().getWorlds();
- Set worldStrings = this.configWorlds.getConfigurationSection("worlds").getKeys(false);
for (World w : myWorlds) {
String name = w.getName();
- if (!worldStrings.contains(name)) {
+ if (!worldsFromTheConfig.containsKey(name)) {
+ String generator = null;
if (this.defaultGens.containsKey(name)) {
- this.addWorld(name, w.getEnvironment(), w.getSeed() + "", w.getWorldType(),
- w.canGenerateStructures(), this.defaultGens.get(name));
- } else {
- this.addWorld(name, w.getEnvironment(), w.getSeed() + "", w.getWorldType(),
- w.canGenerateStructures(), null);
+ generator = this.defaultGens.get(name);
}
-
+ this.addWorld(name, w.getEnvironment(), String.valueOf(w.getSeed()), w.getWorldType(), w.canGenerateStructures(), generator);
}
}
}
@@ -478,11 +472,6 @@ public class WorldManager implements MVWorldManager {
private void ensureConfigIsPrepared() {
if (this.configWorlds.getConfigurationSection("worlds") == null) {
this.configWorlds.createSection("worlds");
- try {
- this.configWorlds.save(new File(this.plugin.getDataFolder(), "worlds.yml"));
- } catch (IOException e) {
- this.plugin.log(Level.SEVERE, "Failed to save worlds.yml. Please check your file permissions.");
- }
}
}
@@ -495,13 +484,10 @@ public class WorldManager implements MVWorldManager {
int count = 0;
this.ensureConfigIsPrepared();
this.ensureSecondNamespaceIsPrepared();
- // Grab all the Worlds from the Config.
- Set worldKeys = this.configWorlds.getConfigurationSection("worlds").getKeys(false);
// Force the worlds to be loaded, ie don't just load new worlds.
if (forceLoad) {
// Remove all world permissions.
-
Permission allAccess = this.plugin.getServer().getPluginManager().getPermission("multiverse.access.*");
Permission allExempt = this.plugin.getServer().getPluginManager().getPermission("multiverse.exempt.*");
for (MultiverseWorld w : this.worlds.values()) {
@@ -523,45 +509,19 @@ public class WorldManager implements MVWorldManager {
this.worlds.clear();
}
- // Check that the list is not null.
- if (worldKeys != null) {
- for (String worldKey : worldKeys) {
- // Check if the World is already loaded within the Plugin.
- if (this.worlds.containsKey(worldKey)) {
- continue;
- }
+ for (Map.Entry entry : worldsFromTheConfig.entrySet()) {
+ if (worlds.containsKey(entry.getKey()))
+ continue;
+ if (!entry.getValue().getAutoLoad())
+ continue;
- // If autoload was set to false, don't load this one.
- if (!this.configWorlds.getBoolean("worlds." + worldKey + ".autoload", true)) {
- if (!this.unloadedWorlds.contains(worldKey)) {
- this.unloadedWorlds.add(worldKey);
- }
- continue;
- }
- // Grab the initial values from the config file.
- String environment = this.configWorlds.getString("worlds." + worldKey + ".environment", "NORMAL");
- String type = this.configWorlds.getString("worlds." + worldKey + ".type", "NORMAL");
- String seedString = this.configWorlds.getString("worlds." + worldKey + ".seed", null);
- boolean generateStructures = this.configWorlds.getBoolean("worlds." + worldKey + ".generatestructures", true);
- if (seedString == null) {
- seedString = this.configWorlds.getLong("worlds." + worldKey + ".seed") + "";
- }
-
- String generatorString = this.configWorlds.getString("worlds." + worldKey + ".generator");
- if (environment.equalsIgnoreCase("skylands")) {
- this.plugin.log(Level.WARNING, "Found SKYLANDS world. Not importing automatically, as it won't work atm :(");
- continue;
- }
- addWorld(worldKey, EnvironmentCommand.getEnvFromString(environment), seedString,
- EnvironmentCommand.getWorldTypeFromString(type), generateStructures, generatorString);
-
- // Increment the world count
+ if (doLoad(entry.getKey()))
count++;
- }
}
// Simple Output to the Console to show how many Worlds were loaded.
this.plugin.log(Level.INFO, count + " - World(s) loaded.");
+ this.saveWorldsConfig();
}
private void ensureSecondNamespaceIsPrepared() {
@@ -591,14 +551,21 @@ public class WorldManager implements MVWorldManager {
}
/**
- * Load the config from a file.
- *
- * @param file The file to load.
- * @return A loaded configuration.
+ * {@inheritDoc}
*/
@Override
public FileConfiguration loadWorldConfig(File file) {
this.configWorlds = YamlConfiguration.loadConfiguration(file);
+ this.ensureConfigIsPrepared();
+ // load world-objects
+ Set worldKeys = this.configWorlds.getConfigurationSection("worlds").getKeys(false);
+ if (worldKeys != null) {
+ for (String key : worldKeys) {
+ if (this.configWorlds.get("worlds." + key) instanceof MVWorld) {
+ this.worldsFromTheConfig.put(key, (MVWorld) this.configWorlds.get("worlds." + key));
+ }
+ }
+ }
return this.configWorlds;
}
@@ -608,6 +575,9 @@ public class WorldManager implements MVWorldManager {
@Override
public boolean saveWorldsConfig() {
try {
+ for (Map.Entry entry : worlds.entrySet()) {
+ this.configWorlds.set("worlds." + entry.getKey(), entry.getValue());
+ }
this.configWorlds.save(new File(this.plugin.getDataFolder(), "worlds.yml"));
return true;
} catch (IOException e) {
@@ -629,7 +599,9 @@ public class WorldManager implements MVWorldManager {
*/
@Override
public List getUnloadedWorlds() {
- return this.unloadedWorlds;
+ List allNames = new ArrayList(this.worldsFromTheConfig.keySet());
+ allNames.removeAll(worlds.keySet());
+ return allNames;
}
/**
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
index 5dc074a6..4e4619a2 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
@@ -21,6 +21,7 @@ import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity;
+import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
@@ -45,6 +46,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
+import com.onarandombox.MultiverseCore.configuration.SpawnLocation;
import com.onarandombox.MultiverseCore.test.utils.TestInstanceCreator;
import com.onarandombox.MultiverseCore.utils.WorldManager;
@@ -145,7 +147,7 @@ public class TestWorldProperties {
assertTrue(mvWorld.isKeepingSpawnInMemory());
assertTrue(mvWorld.getBedRespawn());
assertTrue(mvWorld.getAutoLoad());
- assertEquals(new Location(mvWorld.getCBWorld(), 0, 64, 0), mvWorld.getSpawnLocation());
+ assertEquals(new SpawnLocation(0, 64, 0), mvWorld.getSpawnLocation());
/* ****************************************** *
* Call some events and verify behavior
@@ -242,7 +244,7 @@ public class TestWorldProperties {
mvWorld.setAutoLoad(false);
assertEquals(false, mvWorld.getAutoLoad());
mvWorld.setSpawnLocation(new Location(mvWorld.getCBWorld(), 1, 1, 1));
- assertEquals(new Location(mvWorld.getCBWorld(), 1, 1, 1), mvWorld.getSpawnLocation());
+ assertEquals(new SpawnLocation(1, 1, 1), mvWorld.getSpawnLocation());
/* ****************************************** *
* Call some events and verify behavior
@@ -279,7 +281,7 @@ public class TestWorldProperties {
core.getPlayerListener().playerJoin(playerJoinEvent);
verify(mockPlayer, never()).teleport(any(Location.class));
core.getPlayerListener().playerJoin(playerNewJoinEvent);
- verify(mockNewPlayer).teleport(new Location(mvWorld.getCBWorld(), 1, 1, 1));
+ verify(mockNewPlayer).teleport(new SpawnLocation(1, 1, 1));
// call player respawn events
core.getPlayerListener().playerRespawn(playerRespawnBed);
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
index fc63b0e6..790fa787 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldStuff.java
@@ -235,13 +235,13 @@ public class TestWorldStuff {
// Now fail one.
plugin.onCommand(mockCommandSender, mockCommand, "", new String[]{ "modify", "set", "mode", "fish", "world" });
try {
- verify(mockCommandSender).sendMessage(mainWorld.getProperty("mode", Object.class).getHelp());
+ verify(mockCommandSender).sendMessage(ChatColor.RED + mainWorld.getPropertyHelp("mode"));
} catch (PropertyDoesNotExistException e) {
fail("Mode property did not exist.");
}
plugin.onCommand(mockCommandSender, mockCommand, "", new String[]{ "modify", "set", "blah", "fish", "world" });
- verify(mockCommandSender).sendMessage(ChatColor.RED + "Sorry, You can't set: '"+ChatColor.GRAY+ "blah" + ChatColor.RED + "'");
+ verify(mockCommandSender).sendMessage(ChatColor.RED + "Sorry, You can't set: '" + ChatColor.GRAY + "blah" + ChatColor.RED + "'");
}
private void createInitialWorlds(Plugin plugin, Command command) {
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java
index c0f22b03..2acc9f6b 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/MockWorldFactory.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.WeakHashMap;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -28,6 +29,9 @@ public class MockWorldFactory {
private static final Map createdWorlds = new HashMap();
+ private static final Map pvpStates = new WeakHashMap();
+ private static final Map keepSpawnInMemoryStates = new WeakHashMap();
+
private MockWorldFactory() {
}
@@ -38,10 +42,43 @@ public class MockWorldFactory {
private static World basics(String world, World.Environment env, WorldType type) {
World mockWorld = mock(World.class);
when(mockWorld.getName()).thenReturn(world);
+ when(mockWorld.getPVP()).thenAnswer(new Answer() {
+ @Override
+ public Boolean answer(InvocationOnMock invocation) throws Throwable {
+ World w = (World) invocation.getMock();
+ if (!pvpStates.containsKey(w))
+ pvpStates.put(w, true); // default value
+ return pvpStates.get(w);
+ }
+ });
+ doAnswer(new Answer() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ pvpStates.put((World) invocation.getMock(), (Boolean) invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(mockWorld).setPVP(anyBoolean());
+ when(mockWorld.getKeepSpawnInMemory()).thenAnswer(new Answer() {
+ @Override
+ public Boolean answer(InvocationOnMock invocation) throws Throwable {
+ World w = (World) invocation.getMock();
+ if (!keepSpawnInMemoryStates.containsKey(w))
+ keepSpawnInMemoryStates.put(w, true); // default value
+ return keepSpawnInMemoryStates.get(w);
+ }
+ });
+ doAnswer(new Answer() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ keepSpawnInMemoryStates.put((World) invocation.getMock(), (Boolean) invocation.getArguments()[0]);
+ return null;
+ }
+ }).when(mockWorld).setKeepSpawnInMemory(anyBoolean());
when(mockWorld.getEnvironment()).thenReturn(env);
when(mockWorld.getWorldType()).thenReturn(type);
when(mockWorld.getSpawnLocation()).thenReturn(new Location(mockWorld, 0, 64, 0));
when(mockWorld.getWorldFolder()).thenAnswer(new Answer() {
+ @Override
public File answer(InvocationOnMock invocation) throws Throwable {
if (!(invocation.getMock() instanceof World))
return null;
@@ -51,6 +88,7 @@ public class MockWorldFactory {
}
});
when(mockWorld.getBlockAt(any(Location.class))).thenAnswer(new Answer() {
+ @Override
public Block answer(InvocationOnMock invocation) throws Throwable {
Location loc;
try {
@@ -85,6 +123,7 @@ public class MockWorldFactory {
when(mockWorld.getWorldType()).thenReturn(type);
when(mockWorld.getSpawnLocation()).thenReturn(new Location(mockWorld, 0, 64, 0));
when(mockWorld.getWorldFolder()).thenAnswer(new Answer() {
+ @Override
public File answer(InvocationOnMock invocation) throws Throwable {
if (!(invocation.getMock() instanceof World))
return null;
@@ -94,6 +133,7 @@ public class MockWorldFactory {
}
});
when(mockWorld.getBlockAt(any(Location.class))).thenAnswer(new Answer() {
+ @Override
public Block answer(InvocationOnMock invocation) throws Throwable {
Location loc;
try {
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java b/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
index 1f93233c..c7b91c38 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/utils/TestInstanceCreator.java
@@ -103,6 +103,7 @@ public class TestInstanceCreator {
// Give the server some worlds
when(mockServer.getWorld(anyString())).thenAnswer(new Answer() {
+ @Override
public World answer(InvocationOnMock invocation) throws Throwable {
String arg;
try {
@@ -115,6 +116,7 @@ public class TestInstanceCreator {
});
when(mockServer.getWorlds()).thenAnswer(new Answer>() {
+ @Override
public List answer(InvocationOnMock invocation) throws Throwable {
return MockWorldFactory.getWorlds();
}
@@ -124,6 +126,7 @@ public class TestInstanceCreator {
when(mockServer.createWorld(Matchers.isA(WorldCreator.class))).thenAnswer(
new Answer() {
+ @Override
public World answer(InvocationOnMock invocation) throws Throwable {
WorldCreator arg;
try {
@@ -146,6 +149,7 @@ public class TestInstanceCreator {
BukkitScheduler mockScheduler = mock(BukkitScheduler.class);
when(mockScheduler.scheduleSyncDelayedTask(any(Plugin.class), any(Runnable.class), anyLong())).
thenAnswer(new Answer() {
+ @Override
public Integer answer(InvocationOnMock invocation) throws Throwable {
Runnable arg;
try {
@@ -158,6 +162,7 @@ public class TestInstanceCreator {
}});
when(mockScheduler.scheduleSyncDelayedTask(any(Plugin.class), any(Runnable.class))).
thenAnswer(new Answer() {
+ @Override
public Integer answer(InvocationOnMock invocation) throws Throwable {
Runnable arg;
try {
@@ -204,6 +209,7 @@ public class TestInstanceCreator {
commandSenderLogger.setParent(Util.logger);
commandSender = mock(CommandSender.class);
doAnswer(new Answer() {
+ @Override
public Void answer(InvocationOnMock invocation) throws Throwable {
commandSenderLogger.info(ChatColor.stripColor((String) invocation.getArguments()[0]));
return null;