diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 6c3a7c60..00000000
--- a/.gitmodules
+++ /dev/null
@@ -1,7 +0,0 @@
-[submodule "lib/allpay"]
- path = lib/allpay
- url = git://github.com/FernFerret/AllPay.git
-[submodule "lib/commandhandler"]
- path = lib/commandhandler
- url = git://github.com/PneumatiCraft/CommandHandler.git
- branch = notrie
diff --git a/README.md b/README.md
index d1c7b96d..41d090ee 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,8 @@
Building
========
-Update the submodules after you clone and before you build with maven.
+Simply build the source with maven:
-```
-$ git submodule update --init --recursive
-$ mvn install
-```
+ $ mvn install
More details are available on the [build instructions wiki page](https://github.com/Multiverse/Multiverse-Core/wiki/Building).
diff --git a/lib/allpay b/lib/allpay
deleted file mode 160000
index 7abba1f0..00000000
--- a/lib/allpay
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 7abba1f0040862e9fabdafb3d44c6cf0b914cc7c
diff --git a/lib/commandhandler b/lib/commandhandler
deleted file mode 160000
index 46a3ab6e..00000000
--- a/lib/commandhandler
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 46a3ab6e4e444cd84f836aa6d36ed02cf6347454
diff --git a/pom.xml b/pom.xml
index 3c7d07d7..a4ef10c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,28 +67,6 @@
1.6
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 1.7
-
-
- add-wsdl-source
- generate-sources
-
- add-source
-
-
-
-
-
-
-
-
-
-
-
com.google.code.maven-replacer-plugin
maven-replacer-plugin
@@ -158,6 +136,42 @@
${project.basedir}/config/mv_checks.xml
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 1.5
+
+
+ package
+
+ shade
+
+
+
+
+ me.main__.util:SerializationConfig
+ com.fernferret.allpay:AllPay
+ com.pneumaticraft.commandhandler:CommandHandler
+
+
+
+
+ com.fernferret.allpay
+ com.fernferret.allpay.multiverse
+
+
+ me.main__.util
+ me.main__.util.multiverse
+
+
+ com.pneumaticraft.commandhandler
+ com.pneumaticraft.commandhandler.multiverse
+
+
+
+
+
+
@@ -166,7 +180,7 @@
org.bukkit
bukkit
- 1.1-R2-SNAPSHOT
+ 1.1-R3
jar
compile
@@ -178,69 +192,33 @@
dev-SNAPSHOT
-
+
- cosine.boseconomy
- BOSEconomy
- 0.6.2
+ me.main__.util
+ SerializationConfig
+ 1.1
jar
compile
-
+
+
- fr.crafter.tickleman.RealShop
- RealShop
- 0.63
+ com.fernferret.allpay
+ AllPay
+ 6
jar
compile
-
+
+
- com.iCo6
- iConomy
- 6.0
+ com.pneumaticraft.commandhandler
+ CommandHandler
+ 6
jar
compile
-
-
- com.iConomy
- iConomy
- 5.0
- jar
- compile
-
-
-
- com.nijiko.coelho.iConomy
- iConomy
- 4.65
- jar
- compile
-
-
-
- com.earth2me.essentials
- Essentials
- 2.4.2
- jar
- compile
-
-
- me.ashtheking.currency
- MultiCurrency
- 0.09
- jar
- compile
-
-
- ca.agnate
- EconXP
- 1.0.0
- jar
- compile
-
-
+
junit
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java b/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
index c6292ffd..ab81d4e0 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MVWorld.java
@@ -12,6 +12,7 @@ import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.configuration.ConfigPropertyFactory;
import com.onarandombox.MultiverseCore.configuration.MVActiveConfigProperty;
import com.onarandombox.MultiverseCore.configuration.MVConfigProperty;
+import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
import com.onarandombox.MultiverseCore.enums.EnglishChatColor;
import com.onarandombox.MultiverseCore.event.MVWorldPropertyChangeEvent;
import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException;
@@ -156,6 +157,8 @@ public class MVWorld implements MultiverseWorld {
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);
}
@@ -511,6 +514,7 @@ public class MVWorld implements MultiverseWorld {
return (MVConfigProperty) this.propertyList.get(this.propertyAliases.get(name));
}
} catch (ClassCastException e) {
+ return null;
}
return null;
}
@@ -556,6 +560,7 @@ public class MVWorld implements MultiverseWorld {
try {
if (property.getMethod() == null) {
// This property did not have a method.
+ this.saveConfig();
return true;
}
Method method = this.getClass().getMethod(property.getMethod());
@@ -570,6 +575,8 @@ public class MVWorld implements MultiverseWorld {
return true;
}
} catch (Exception e) {
+ // TODO: I don't care about 3 catches,
+ // TODO: I hate pokemon errors :/ - FernFerret
e.printStackTrace();
return false;
}
@@ -1159,6 +1166,22 @@ public class MVWorld implements MultiverseWorld {
return this.type;
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void allowPortalMaking(AllowedPortalType type) {
+ this.setKnownProperty("portalform", type.toString(), null);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @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.
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
index b60e5120..eec81bbe 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java
@@ -14,6 +14,7 @@ import com.onarandombox.MultiverseCore.api.Core;
import com.onarandombox.MultiverseCore.api.LocationManipulation;
import com.onarandombox.MultiverseCore.api.MVPlugin;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
+import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig;
import com.onarandombox.MultiverseCore.api.MultiverseMessaging;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
@@ -30,8 +31,12 @@ import com.onarandombox.MultiverseCore.listeners.MVEntityListener;
import com.onarandombox.MultiverseCore.listeners.MVPlayerListener;
import com.onarandombox.MultiverseCore.listeners.MVPluginListener;
import com.onarandombox.MultiverseCore.listeners.MVWeatherListener;
+import com.onarandombox.MultiverseCore.listeners.MVPortalListener;
import com.onarandombox.MultiverseCore.utils.*;
import com.pneumaticraft.commandhandler.CommandHandler;
+
+import me.main__.util.SerializationConfig.SerializationConfig;
+
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
@@ -58,21 +63,14 @@ import java.util.logging.Logger;
* The implementation of the Multiverse-{@link Core}.
*/
public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
- private static final int PROTOCOL = 12;
- // Global Multiverse config variable, states whether or not
- // Multiverse should stop other plugins from teleporting players
- // to worlds.
- // TODO This is REALLY bad style! We have to change this!
- // No, I'm NOT going to suppress these warnings because we HAVE TO CHANGE THIS!
- public static boolean EnforceAccess;
- public static boolean PrefixChat;
- public static boolean DisplayPermErrors;
- public static boolean TeleportIntercept;
- public static boolean FirstSpawnOverride;
- public static Map teleportQueue = new HashMap();
- public static int GlobalDebug = 0;
+ private static final int PROTOCOL = 13;
+ // TODO: Investigate if this one is really needed to be static.
+ // Doubt it. -- FernFerret
+ private static Map teleportQueue = new HashMap();
private AnchorManager anchorManager = new AnchorManager(this);
+ // TODO please let's make this non-static
+ private static MultiverseCoreConfiguration config;
/**
* This method is used to find out who is teleporting a player.
@@ -153,8 +151,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
private MVEntityListener entityListener = new MVEntityListener(this);
private MVPluginListener pluginListener = new MVPluginListener(this);
private MVWeatherListener weatherListener = new MVWeatherListener(this);
-
- //public UpdateChecker updateCheck;
+ private MVPortalListener portalListener = new MVPortalListener(this);
// HashMap to contain information relating to the Players.
private HashMap playerSessions;
@@ -163,8 +160,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
private int pluginCount;
private DestinationFactory destFactory;
private SpoutInterface spoutInterface = null;
- private static final double ALLPAY_VERSION = 5;
- private static final double CH_VERSION = 4;
private MultiverseMessaging messaging;
private BlockSafety blockSafety;
private LocationManipulation locationManipulation;
@@ -174,6 +169,8 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
@Override
public void onLoad() {
+ // Register our config
+ SerializationConfig.registerAll(MultiverseCoreConfiguration.class);
// Create our DataFolder
getDataFolder().mkdirs();
// Setup our Debug Log
@@ -188,8 +185,10 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
/**
* {@inheritDoc}
+ * @deprecated This is deprecated.
*/
@Override
+ @Deprecated
public FileConfiguration getMVConfiguration() {
return this.multiverseConfig;
}
@@ -207,12 +206,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
*/
@Override
public void onEnable() {
- //this.worldManager = new WorldManager(this);
- // Perform initial checks for AllPay
- if (!this.validateAllpay() || !this.validateCH()) {
- this.getServer().getPluginManager().disablePlugin(this);
- return;
- }
this.messaging = new MVMessaging();
this.banker = new AllPay(this, LOG_TAG + " ");
// Output a little snippet to show it's enabled.
@@ -253,12 +246,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.anchorManager.loadAnchors();
// Now set the firstspawnworld (after the worlds are loaded):
- // Default as the server.props world.
- this.worldManager.setFirstSpawnWorld(this.multiverseConfig.getString("firstspawnworld", getDefaultWorldName()));
- // We have to set this one here, if it's not present, we don't know the name of the default world.
- // and this one won't be in the defaults yml file.
+ this.worldManager.setFirstSpawnWorld(config.getFirstSpawnWorld());
try {
- this.multiverseConfig.set("firstspawnworld", this.worldManager.getFirstSpawnWorld().getName());
+ config.setFirstSpawnWorld(this.worldManager.getFirstSpawnWorld().getName());
} catch (NullPointerException e) {
// A test that had no worlds loaded was being run. This should never happen in production
}
@@ -270,40 +260,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
}
}
- private boolean validateAllpay() {
- try {
- this.banker = new AllPay(this, "Verify");
- if (this.banker.getVersion() >= ALLPAY_VERSION) {
- return true;
- }
- } catch (Throwable t) {
- }
- LOGGER.info(String.format("%s - Version %s was NOT ENABLED!!!", LOG_TAG, this.getDescription().getVersion()));
- LOGGER.info(String.format("%s A plugin that has loaded before %s has an incompatible version of AllPay (an internal library)!",
- LOG_TAG, this.getDescription().getName()));
- LOGGER.info(String.format("%s The Following Plugins MAY out of date: %s", LOG_TAG, AllPay.pluginsThatUseUs.toString()));
- LOGGER.info(String.format("%s This plugin needs AllPay v%f or higher and another plugin has loaded v%f!",
- LOG_TAG, ALLPAY_VERSION, this.banker.getVersion()));
- return false;
- }
-
- private boolean validateCH() {
- try {
- this.commandHandler = new CommandHandler(this, null);
- if (this.commandHandler.getVersion() >= CH_VERSION) {
- return true;
- }
- } catch (Throwable t) {
- }
- LOGGER.info(String.format("%s - Version %s was NOT ENABLED!!!", LOG_TAG, this.getDescription().getVersion()));
- LOGGER.info(String.format("%s A plugin that has loaded before %s has an incompatible version of CommandHandler (an internal library)!",
- LOG_TAG, this.getDescription().getName()));
- LOGGER.info(String.format("%s Please contact this plugin author!!!", LOG_TAG));
- LOGGER.info(String.format("%s This plugin needs CommandHandler v%f or higher and another plugin has loaded v%f!",
- LOG_TAG, CH_VERSION, this.commandHandler.getVersion()));
- return false;
- }
-
private void initializeDestinationFactory() {
this.destFactory = new DestinationFactory(this);
this.destFactory.registerDestinationType(WorldDestination.class, "");
@@ -324,6 +280,8 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
pm.registerEvents(this.entityListener, this);
pm.registerEvents(this.pluginListener, this);
pm.registerEvents(this.weatherListener, this);
+ pm.registerEvents(this.portalListener, this);
+
}
/**
@@ -335,46 +293,80 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.multiverseConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml"));
Configuration coreDefaults = YamlConfiguration.loadConfiguration(this.getClass().getResourceAsStream("/defaults/config.yml"));
this.multiverseConfig.setDefaults(coreDefaults);
- this.multiverseConfig.options().copyDefaults(true);
- this.saveMVConfig();
- this.multiverseConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml"));
+ this.multiverseConfig.options().copyDefaults(false);
+ this.multiverseConfig.options().copyHeader(true);
this.worldManager.loadWorldConfig(new File(getDataFolder(), "worlds.yml"));
- // Setup the Debug option, we'll default to false because this option will not be in the default config.
- GlobalDebug = this.multiverseConfig.getInt("debug", 0);
- // Lets cache these values due to the fact that they will be accessed many times.
- EnforceAccess = this.multiverseConfig.getBoolean("enforceaccess", false);
- PrefixChat = this.multiverseConfig.getBoolean("worldnameprefix", true);
- // Should MV Intercept teleports by other plugins?
- TeleportIntercept = this.multiverseConfig.getBoolean("teleportintercept", true);
- // Should MV do the first spawn stuff?
- FirstSpawnOverride = this.multiverseConfig.getBoolean("firstspawnoverride", true);
- // Should permissions errors display to users?
- DisplayPermErrors = this.multiverseConfig.getBoolean("displaypermerrors", true);
+ MultiverseCoreConfiguration wantedConfig = null;
+ try {
+ wantedConfig = (MultiverseCoreConfiguration) multiverseConfig.get("multiverse-configuration");
+ } catch (Exception e) {
+ // We're just thinking "no risk no fun" and therefore have to catch and forget this exception
+ } finally {
+ config = ((wantedConfig == null) ? new MultiverseCoreConfiguration() : wantedConfig);
+ }
- this.messaging.setCooldown(this.multiverseConfig.getInt("messagecooldown", 5000)); // SUPPRESS CHECKSTYLE: MagicNumberCheck
- // Update the version of the config!
- this.multiverseConfig.set("version", coreDefaults.get("version"));
+ this.messaging.setCooldown(config.getMessageCooldown());
// Remove old values.
this.multiverseConfig.set("enforcegamemodes", null);
this.multiverseConfig.set("bedrespawn", null);
this.multiverseConfig.set("opfallback", null);
+ // Old Config Format
+ this.migrate22Values();
this.saveMVConfigs();
}
/**
- * Safely return a world name.
- * (The tests call this with no worlds loaded)
- *
- * @return The default world name.
+ * Thes are the MV config 2.0-2.2 values,
+ * they should be migrated to the new format.
*/
- private String getDefaultWorldName() {
- if (this.getServer().getWorlds().size() > 0) {
- return this.getServer().getWorlds().get(0).getName();
+ private void migrate22Values() {
+ if (this.multiverseConfig.isSet("worldnameprefix")) {
+ this.log(Level.INFO, "Migrating 'worldnameprefix'...");
+ this.config.setPrefixChat(this.multiverseConfig.getBoolean("worldnameprefix"));
+ this.multiverseConfig.set("worldnameprefix", null);
+ }
+ if (this.multiverseConfig.isSet("firstspawnworld")) {
+ this.log(Level.INFO, "Migrating 'firstspawnworld'...");
+ this.config.setFirstSpawnWorld(this.multiverseConfig.getString("firstspawnworld"));
+ this.multiverseConfig.set("firstspawnworld", null);
+ }
+ if (this.multiverseConfig.isSet("enforceaccess")) {
+ this.log(Level.INFO, "Migrating 'enforceaccess'...");
+ this.config.setEnforceAccess(this.multiverseConfig.getBoolean("enforceaccess"));
+ this.multiverseConfig.set("enforceaccess", null);
+ }
+ if (this.multiverseConfig.isSet("displaypermerrors")) {
+ this.log(Level.INFO, "Migrating 'displaypermerrors'...");
+ this.config.setDisplayPermErrors(this.multiverseConfig.getBoolean("displaypermerrors"));
+ this.multiverseConfig.set("displaypermerrors", null);
+ }
+ if (this.multiverseConfig.isSet("teleportintercept")) {
+ this.log(Level.INFO, "Migrating 'teleportintercept'...");
+ this.config.setTeleportIntercept(this.multiverseConfig.getBoolean("teleportintercept"));
+ this.multiverseConfig.set("teleportintercept", null);
+ }
+ if (this.multiverseConfig.isSet("firstspawnoverride")) {
+ this.log(Level.INFO, "Migrating 'firstspawnoverride'...");
+ this.config.setFirstSpawnOverride(this.multiverseConfig.getBoolean("firstspawnoverride"));
+ this.multiverseConfig.set("firstspawnoverride", null);
+ }
+ if (this.multiverseConfig.isSet("messagecooldown")) {
+ this.log(Level.INFO, "Migrating 'messagecooldown'...");
+ this.config.setMessageCooldown(this.multiverseConfig.getInt("messagecooldown"));
+ this.multiverseConfig.set("messagecooldown", null);
+ }
+ if (this.multiverseConfig.isSet("debug")) {
+ this.log(Level.INFO, "Migrating 'debug'...");
+ this.config.setGlobalDebug(this.multiverseConfig.getInt("debug"));
+ this.multiverseConfig.set("debug", null);
+ }
+ if (this.multiverseConfig.isSet("version")) {
+ this.log(Level.INFO, "Migrating 'version'...");
+ this.multiverseConfig.set("version", null);
}
- return "";
}
/**
@@ -444,7 +436,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
if (this.playerSessions.containsKey(player.getName())) {
return this.playerSessions.get(player.getName());
} else {
- this.playerSessions.put(player.getName(), new MVPlayerSession(player, this.multiverseConfig, this));
+ this.playerSessions.put(player.getName(), new MVPlayerSession(player, config));
return this.playerSessions.get(player.getName());
}
}
@@ -479,7 +471,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
}
ArrayList allArgs = new ArrayList(Arrays.asList(args));
allArgs.add(0, command.getName());
- return this.commandHandler.locateAndRunCommand(sender, allArgs, DisplayPermErrors);
+ return this.commandHandler.locateAndRunCommand(sender, allArgs, config.getDisplayPermErrors());
}
/**
@@ -497,13 +489,13 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
* @param msg The message to log.
*/
public static void staticLog(Level level, String msg) {
- if (level == Level.FINE && GlobalDebug >= 1) {
+ if (level == Level.FINE && config.getGlobalDebug() >= 1) {
staticDebugLog(Level.INFO, msg);
return;
- } else if (level == Level.FINER && GlobalDebug >= 2) {
+ } else if (level == Level.FINER && config.getGlobalDebug() >= 2) {
staticDebugLog(Level.INFO, msg);
return;
- } else if (level == Level.FINEST && GlobalDebug >= 3) {
+ } else if (level == Level.FINEST && config.getGlobalDebug() >= 3) {
staticDebugLog(Level.INFO, msg);
return;
} else if (level != Level.FINE && level != Level.FINER && level != Level.FINEST) {
@@ -729,6 +721,7 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
*/
public boolean saveMVConfig() {
try {
+ this.multiverseConfig.set("multiverse-configuration", config);
this.multiverseConfig.save(new File(getDataFolder(), "config.yml"));
return true;
} catch (IOException e) {
@@ -854,4 +847,22 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
public void setSafeTTeleporter(SafeTTeleporter safeTTeleporter) {
this.safeTTeleporter = safeTTeleporter;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public MultiverseCoreConfig getMVConfig() {
+ return config;
+ }
+
+ /**
+ * This method is currently used by other plugins.
+ * It will be removed in 2.4
+ * @return
+ */
+ @Deprecated
+ public static MultiverseCoreConfiguration getStaticConfig() {
+ return config;
+ }
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java
new file mode 100644
index 00000000..6446ba3d
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java
@@ -0,0 +1,222 @@
+package com.onarandombox.MultiverseCore;
+
+import java.util.Map;
+
+import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig;
+
+import me.main__.util.SerializationConfig.Property;
+import me.main__.util.SerializationConfig.SerializationConfig;
+
+/**
+ * Our configuration.
+ */
+public class MultiverseCoreConfiguration extends SerializationConfig implements MultiverseCoreConfig {
+ @Property
+ private boolean enforceaccess;
+ @Property
+ private boolean prefixchat;
+ @Property
+ private boolean teleportintercept;
+ @Property
+ private boolean firstspawnoverride;
+ @Property
+ private boolean displaypermerrors;
+ @Property
+ private int globaldebug;
+ @Property
+ private int messagecooldown;
+ @Property
+ private double version;
+ @Property
+ private String firstspawnworld;
+ @Property
+ private int teleportcooldown;
+
+ public MultiverseCoreConfiguration() {
+ super();
+ }
+
+ public MultiverseCoreConfiguration(Map values) {
+ super(values);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDefaults() {
+ // BEGIN CHECKSTYLE-SUPPRESSION: MagicNumberCheck
+ enforceaccess = false;
+ prefixchat = true;
+ teleportintercept = true;
+ firstspawnoverride = true;
+ displaypermerrors = true;
+ globaldebug = 0;
+ messagecooldown = 5000;
+ teleportcooldown = 1000;
+ this.version = 2.9;
+ // END CHECKSTYLE-SUPPRESSION: MagicNumberCheck
+ }
+
+ // And here we go:
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getEnforceAccess() {
+ return this.enforceaccess;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setEnforceAccess(boolean enforceAccess) {
+ this.enforceaccess = enforceAccess;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getPrefixChat() {
+ return this.prefixchat;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setPrefixChat(boolean prefixChat) {
+ this.prefixchat = prefixChat;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getTeleportIntercept() {
+ return this.teleportintercept;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTeleportIntercept(boolean teleportIntercept) {
+ this.teleportintercept = teleportIntercept;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getFirstSpawnOverride() {
+ return this.firstspawnoverride;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setFirstSpawnOverride(boolean firstSpawnOverride) {
+ this.firstspawnoverride = firstSpawnOverride;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean getDisplayPermErrors() {
+ return this.displaypermerrors;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDisplayPermErrors(boolean displayPermErrors) {
+ this.displaypermerrors = displayPermErrors;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int getGlobalDebug() {
+ return this.globaldebug;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setGlobalDebug(int globalDebug) {
+ this.globaldebug = globalDebug;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int getMessageCooldown() {
+ return this.messagecooldown;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setMessageCooldown(int messageCooldown) {
+ this.messagecooldown = messageCooldown;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public double getVersion() {
+ return this.version;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getFirstSpawnWorld() {
+ return this.firstspawnworld;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setFirstSpawnWorld(String firstSpawnWorld) {
+ this.firstspawnworld = firstSpawnWorld;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int getTeleportCooldown() {
+ return this.teleportcooldown;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTeleportCooldown(int teleportCooldown) {
+ this.teleportcooldown = teleportCooldown;
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/Core.java b/src/main/java/com/onarandombox/MultiverseCore/api/Core.java
index 4e1007f9..01c684d0 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/Core.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/Core.java
@@ -26,7 +26,9 @@ public interface Core {
* Gets the Multiverse config file.
*
* @return The Multiverse config file.
+ * @deprecated Don't modify the config-file manually!
*/
+ @Deprecated
FileConfiguration getMVConfiguration();
/**
@@ -215,4 +217,9 @@ public interface Core {
*/
void setSafeTTeleporter(SafeTTeleporter safeTTeleporter);
+ /**
+ * Gets the {@link MultiverseCoreConfig}.
+ * @return The configuration.
+ */
+ MultiverseCoreConfig getMVConfig();
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java
new file mode 100644
index 00000000..25f6fad4
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseCoreConfig.java
@@ -0,0 +1,136 @@
+package com.onarandombox.MultiverseCore.api;
+
+import org.bukkit.configuration.serialization.ConfigurationSerializable;
+
+/**
+ * The configuration of MultiverseCore.
+ */
+public interface MultiverseCoreConfig extends ConfigurationSerializable {
+ /**
+ * Sets a property using a {@link String}.
+ * @param property The name of the property.
+ * @param value The value.
+ * @return True on success, false if the operation failed.
+ */
+ boolean setProperty(String property, String value);
+
+ /**
+ * Sets portalCooldown.
+ * @param portalCooldown The new value.
+ */
+ void setTeleportCooldown(int portalCooldown);
+
+ /**
+ * Gets portalCooldown.
+ * @return portalCooldown.
+ */
+ int getTeleportCooldown();
+
+ /**
+ * Sets firstSpawnWorld.
+ * @param firstSpawnWorld The new value.
+ */
+ void setFirstSpawnWorld(String firstSpawnWorld);
+
+ /**
+ * Gets firstSpawnWorld.
+ * @return firstSpawnWorld.
+ */
+ String getFirstSpawnWorld();
+
+ /**
+ * Sets version.
+ * @param version The new value.
+ */
+ void setVersion(int version);
+
+ /**
+ * Gets version.
+ * @return version.
+ */
+ double getVersion();
+
+ /**
+ * Sets messageCooldown.
+ * @param messageCooldown The new value.
+ */
+ void setMessageCooldown(int messageCooldown);
+
+ /**
+ * Gets messageCooldown.
+ * @return messageCooldown.
+ */
+ int getMessageCooldown();
+
+ /**
+ * Sets globalDebug.
+ * @param globalDebug The new value.
+ */
+ void setGlobalDebug(int globalDebug);
+
+ /**
+ * Gets globalDebug.
+ * @return globalDebug.
+ */
+ int getGlobalDebug();
+
+ /**
+ * Sets displayPermErrors.
+ * @param displayPermErrors The new value.
+ */
+ void setDisplayPermErrors(boolean displayPermErrors);
+
+ /**
+ * Gets displayPermErrors.
+ * @return displayPermErrors.
+ */
+ boolean getDisplayPermErrors();
+
+ /**
+ * Sets firstSpawnOverride.
+ * @param firstSpawnOverride The new value.
+ */
+ void setFirstSpawnOverride(boolean firstSpawnOverride);
+
+ /**
+ * Gets firstSpawnOverride.
+ * @return firstSpawnOverride.
+ */
+ boolean getFirstSpawnOverride();
+
+ /**
+ * Sets teleportIntercept.
+ * @param teleportIntercept The new value.
+ */
+ void setTeleportIntercept(boolean teleportIntercept);
+
+ /**
+ * Gets teleportIntercept.
+ * @return teleportIntercept.
+ */
+ boolean getTeleportIntercept();
+
+ /**
+ * Sets prefixChat.
+ * @param prefixChat The new value.
+ */
+ void setPrefixChat(boolean prefixChat);
+
+ /**
+ * Gets prefixChat.
+ * @return prefixChat.
+ */
+ boolean getPrefixChat();
+
+ /**
+ * Sets enforceAccess.
+ * @param enforceAccess The new value.
+ */
+ void setEnforceAccess(boolean enforceAccess);
+
+ /**
+ * Gets enforceAccess.
+ * @return enforceAccess.
+ */
+ boolean getEnforceAccess();
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
index fb473ce8..5bd1eb11 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/api/MultiverseWorld.java
@@ -8,6 +8,7 @@
package com.onarandombox.MultiverseCore.api;
import com.onarandombox.MultiverseCore.configuration.MVConfigProperty;
+import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException;
import org.bukkit.ChatColor;
@@ -573,4 +574,18 @@ public interface MultiverseWorld {
* @return The Type of this world.
*/
WorldType getWorldType();
+
+ /**
+ * Sets The types of portals that are allowed in this world.
+ *
+ * @param type The type of portals allowed in this world.
+ */
+ void allowPortalMaking(AllowedPortalType type);
+
+ /**
+ * Gets which type(s) of portals are allowed to be constructed in this world.
+ *
+ * @return The type of portals that are allowed.
+ */
+ AllowedPortalType getAllowedPortals();
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
index 3b48e1ce..6290183a 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ConfigCommand.java
@@ -8,12 +8,12 @@
package com.onarandombox.MultiverseCore.commands;
import com.onarandombox.MultiverseCore.MultiverseCore;
-import com.onarandombox.MultiverseCore.enums.ConfigProperty;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.PermissionDefault;
import java.util.List;
+import java.util.Map;
/**
* Allows you to set Global MV Variables.
@@ -28,7 +28,6 @@ public class ConfigCommand extends MultiverseCommand {
this.addKey("mvconfig");
this.addKey("mv conf");
this.addKey("mvconf");
- this.addCommandExample("All values: " + ConfigProperty.getAllValues());
this.addCommandExample("/mv config show");
this.addCommandExample("/mv config " + ChatColor.GREEN + "debug" + ChatColor.AQUA + " 3");
this.addCommandExample("/mv config " + ChatColor.GREEN + "enforceaccess" + ChatColor.AQUA + " false");
@@ -38,55 +37,31 @@ public class ConfigCommand extends MultiverseCommand {
@Override
public void runCommand(CommandSender sender, List args) {
if (args.size() <= 1) {
- String[] allProps = ConfigProperty.getAllValues().split(" ");
- String currentvals = "";
- for (String prop : allProps) {
- currentvals += ChatColor.GREEN;
- currentvals += prop;
- currentvals += ChatColor.WHITE;
- currentvals += " = ";
- currentvals += ChatColor.GOLD;
- currentvals += this.plugin.getMVConfiguration().get(prop, "NOT SET");
- currentvals += ChatColor.WHITE;
- currentvals += ", ";
+ StringBuilder builder = new StringBuilder();
+ Map serializedConfig = this.plugin.getMVConfig().serialize();
+ for (Map.Entry entry : serializedConfig.entrySet()) {
+ builder.append(ChatColor.GREEN);
+ builder.append(entry.getKey());
+ builder.append(ChatColor.WHITE).append(" = ").append(ChatColor.GOLD);
+ builder.append(entry.getValue().toString());
+ builder.append(ChatColor.WHITE).append(", ");
}
- sender.sendMessage(currentvals.substring(0, currentvals.length() - 2));
+ String message = builder.toString();
+ message = message.substring(0, message.length() - 2);
+ sender.sendMessage(message);
return;
}
+ if (!this.plugin.getMVConfig().setProperty(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;
+ }
+
+ // special rule
if (args.get(0).equalsIgnoreCase("firstspawnworld")) {
- this.plugin.getMVConfiguration().set(args.get(0).toLowerCase(), args.get(1));
// Don't forget to set the world!
this.plugin.getMVWorldManager().setFirstSpawnWorld(args.get(1));
- } else if (args.get(0).equalsIgnoreCase("messagecooldown") || args.get(0).equalsIgnoreCase("teleportcooldown")
- || args.get(0).equalsIgnoreCase("debug")) {
- try {
- this.plugin.getMVConfiguration().set(args.get(0).toLowerCase(), Integer.parseInt(args.get(1)));
- } catch (NumberFormatException e) {
- sender.sendMessage(ChatColor.RED + "Sorry, " + ChatColor.AQUA + args.get(0) + ChatColor.WHITE + " must be an integer!");
- return;
- }
- } else {
- ConfigProperty property = null;
- try {
- property = ConfigProperty.valueOf(args.get(0).toLowerCase());
- } catch (IllegalArgumentException e) {
- sender.sendMessage(ChatColor.RED + "Sorry, " + ChatColor.AQUA
- + args.get(0) + ChatColor.WHITE + " you can't set " + ChatColor.AQUA + args.get(0));
- sender.sendMessage(ChatColor.GREEN + "Valid values are:");
- sender.sendMessage(ConfigProperty.getAllValues());
- return;
- }
-
- if (property != null) {
- try {
- this.plugin.getMVConfiguration().set(args.get(0).toLowerCase(), Boolean.parseBoolean(args.get(1)));
- } catch (Exception e) {
- sender.sendMessage(ChatColor.RED + "Sorry, " + ChatColor.AQUA + args.get(0) + ChatColor.WHITE + " must be true or false!");
- return;
- }
-
- }
}
+
if (this.plugin.saveMVConfigs()) {
sender.sendMessage(ChatColor.GREEN + "SUCCESS!" + ChatColor.WHITE + " Values were updated successfully!");
this.plugin.loadConfigs();
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
index ee44febd..d820626b 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/CreateCommand.java
@@ -29,7 +29,8 @@ public class CreateCommand extends MultiverseCommand {
public CreateCommand(MultiverseCore plugin) {
super(plugin);
this.setName("Create World");
- this.setCommandUsage("/mv create" + ChatColor.GREEN + " {NAME} {ENV}" + ChatColor.GOLD + " -s [SEED] -g [GENERATOR[:ID]] -t [WORLDTYPE] [-n] -a [true|false]");
+ this.setCommandUsage(String.format("/mv create %s{NAME} {ENV} %s-s [SEED] -g [GENERATOR[:ID]] -t [WORLDTYPE] [-n] -a [true|false]",
+ ChatColor.GREEN, ChatColor.GOLD));
this.setArgRange(2, 11); // SUPPRESS CHECKSTYLE: MagicNumberCheck
this.addKey("mvcreate");
this.addKey("mvc");
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java
index 83f7cdd5..53fc01b5 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java
@@ -36,14 +36,14 @@ public class DebugCommand extends MultiverseCommand {
public void runCommand(CommandSender sender, List args) {
if (args.size() == 1) {
if (args.get(0).equalsIgnoreCase("off")) {
- MultiverseCore.GlobalDebug = 0;
+ plugin.getMVConfig().setGlobalDebug(0);
} else {
try {
int debugLevel = Integer.parseInt(args.get(0));
if (debugLevel > 3 || debugLevel < 0) {
throw new NumberFormatException();
}
- MultiverseCore.GlobalDebug = debugLevel;
+ plugin.getMVConfig().setGlobalDebug(debugLevel);
} catch (NumberFormatException e) {
sender.sendMessage(ChatColor.RED + "Error" + ChatColor.WHITE
+ " setting debug level. Please use a number 0-3 " + ChatColor.AQUA + "(3 being many many messages!)");
@@ -55,10 +55,10 @@ public class DebugCommand extends MultiverseCommand {
}
private void displayDebugMode(CommandSender sender) {
- if (MultiverseCore.GlobalDebug == 0) {
+ if (plugin.getMVConfig().getGlobalDebug() == 0) {
sender.sendMessage("Multiverse Debug mode is " + ChatColor.RED + "OFF");
} else {
- sender.sendMessage("Multiverse Debug mode is " + ChatColor.GREEN + MultiverseCore.GlobalDebug);
+ sender.sendMessage("Multiverse Debug mode is " + ChatColor.GREEN + plugin.getMVConfig().getGlobalDebug());
this.plugin.log(Level.FINE, "Multiverse Debug ENABLED");
}
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/EnvironmentCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/EnvironmentCommand.java
index 4531b39e..6be7f7fe 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/EnvironmentCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/EnvironmentCommand.java
@@ -91,6 +91,7 @@ public class EnvironmentCommand extends MultiverseCommand {
* @return The environment as {@link org.bukkit.World.Environment}
*/
public static World.Environment getEnvFromString(String env) {
+ env = env.toUpperCase();
// Don't reference the enum directly as there aren't that many, and we can be more forgiving to users this way
if (env.equalsIgnoreCase("HELL") || env.equalsIgnoreCase("NETHER"))
env = "NETHER";
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
index 85aeaa26..90084e71 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ImportCommand.java
@@ -34,7 +34,7 @@ public class ImportCommand extends MultiverseCommand {
super(plugin);
this.setName("Import World");
this.setCommandUsage("/mv import" + ChatColor.GREEN + " {NAME} {ENV} " + ChatColor.GOLD + " -g [GENERATOR[:ID]] [-n] -t [TYPE] -a [true|false]");
- this.setArgRange(2, 5); // SUPPRESS CHECKSTYLE: MagicNumberCheck
+ this.setArgRange(1, 9); // SUPPRESS CHECKSTYLE: MagicNumberCheck
this.addKey("mvimport");
this.addKey("mvim");
this.addKey("mv import");
@@ -130,10 +130,10 @@ public class ImportCommand extends MultiverseCommand {
String generator = CommandHandler.getFlag("-g", args);
String typeString = CommandHandler.getFlag("-t", args);
boolean allowStructures = true;
- String structureString = CommandHandler.getFlag("-a", args);
- if (structureString != null) {
- allowStructures = Boolean.parseBoolean(structureString);
- }
+ String structureString = CommandHandler.getFlag("-a", args);
+ if (structureString != null) {
+ allowStructures = Boolean.parseBoolean(structureString);
+ }
boolean useSpawnAdjust = true;
for (String s : args) {
if (s.equalsIgnoreCase("-n")) {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/InfoCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/InfoCommand.java
index b92527eb..e7ad09bf 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/InfoCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/InfoCommand.java
@@ -61,9 +61,13 @@ public class InfoCommand extends MultiverseCommand {
return;
}
} else if (args.size() == 1) {
- if (this.worldManager.getMVWorld(args.get(0)) != null) {
+ if (this.worldManager.isMVWorld(args.get(0))) {
// then we have a world!
worldName = args.get(0);
+ } else if(this.worldManager.getUnloadedWorlds().contains(args.get(0))){
+ sender.sendMessage("That world exists, but it is unloaded!");
+ sender.sendMessage(String.format("You can load it with: %s/mv load %s", ChatColor.AQUA, args.get(0)));
+ return;
} else {
if (sender instanceof Player) {
Player p = (Player) sender;
@@ -93,8 +97,11 @@ public class InfoCommand extends MultiverseCommand {
p = (Player) sender;
}
showPage(pageNum, sender, this.buildEntireCommand(this.worldManager.getMVWorld(worldName), p));
+ } else if (this.worldManager.getUnloadedWorlds().contains(worldName)) {
+ sender.sendMessage("That world exists, but it is unloaded!");
+ sender.sendMessage(String.format("You can load it with: %s/mv load %s", ChatColor.AQUA, worldName));
} else if (this.plugin.getServer().getWorld(worldName) != null) {
- sender.sendMessage("That world exists, but multiverse does not know about it!");
+ sender.sendMessage("That world exists, but Multiverse does not know about it!");
sender.sendMessage("You can import it with" + ChatColor.AQUA + "/mv import " + ChatColor.GREEN + worldName + ChatColor.LIGHT_PURPLE + "{ENV}");
sender.sendMessage("For available environments type " + ChatColor.GREEN + "/mv env");
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java
index e882aa02..e63ea4f2 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/ListCommand.java
@@ -52,14 +52,16 @@ public class ListCommand extends PaginatedCoreCommand {
} else if (env == Environment.THE_END) {
color = ChatColor.AQUA;
}
- String outputCache = world.getColoredWorldString() + ChatColor.WHITE + " - " + color + world.getEnvironment();
+ StringBuilder builder = new StringBuilder();
+ builder.append(world.getColoredWorldString()).append(ChatColor.WHITE);
+ builder.append(" - ").append(color).append(world.getEnvironment());
if (world.isHidden()) {
- if (p == null || p.hasPermission("multiverse.core.modify")) {
+ if (p == null || this.plugin.getMVPerms().hasPermission(p, "multiverse.core.modify", true)) {
// Prefix hidden worlds with an "[H]"
- worldList.add(ChatColor.GRAY + "[H]" + outputCache);
+ worldList.add(ChatColor.GRAY + "[H]" + builder.toString());
}
} else {
- worldList.add(outputCache);
+ worldList.add(builder.toString());
}
}
for (String name : this.plugin.getMVWorldManager().getUnloadedWorlds()) {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java
index 8232c5bb..b20f7e73 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java
@@ -110,7 +110,7 @@ public class TeleportCommand extends MultiverseCommand {
return;
}
- if (MultiverseCore.EnforceAccess && teleporter != null && !this.plugin.getMVPerms().canEnterDestination(teleporter, d)) {
+ if (plugin.getMVConfig().getEnforceAccess() && teleporter != null && !this.plugin.getMVPerms().canEnterDestination(teleporter, d)) {
if (teleportee.equals(teleporter)) {
teleporter.sendMessage("Doesn't look like you're allowed to go " + ChatColor.RED + "there...");
} else {
diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java
index db878b80..28fb318f 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java
@@ -53,16 +53,16 @@ public class VersionCommand extends MultiverseCommand {
buffer.append("[Multiverse-Core] Economy being used: ").append(this.plugin.getBank().getEconUsed()).append('\n');
buffer.append("[Multiverse-Core] Permissions Plugin: ").append(this.plugin.getMVPerms().getType()).append('\n');
buffer.append("[Multiverse-Core] Dumping Config Values: (version ")
- .append(this.plugin.getMVConfiguration().getDouble("version", -1)).append(")").append('\n');
- buffer.append("[Multiverse-Core] messagecooldown: ").append(this.plugin.getMessaging().getCooldown()).append('\n');
- buffer.append("[Multiverse-Core] teleportcooldown: ").append("Not yet IMPLEMENTED").append('\n');
- buffer.append("[Multiverse-Core] worldnameprefix: ").append(MultiverseCore.PrefixChat).append('\n');
- buffer.append("[Multiverse-Core] enforceaccess: ").append(MultiverseCore.EnforceAccess).append('\n');
- buffer.append("[Multiverse-Core] displaypermerrors: ").append(MultiverseCore.DisplayPermErrors).append('\n');
- buffer.append("[Multiverse-Core] teleportintercept: ").append(MultiverseCore.TeleportIntercept).append('\n');
- buffer.append("[Multiverse-Core] firstspawnoverride: ").append(MultiverseCore.FirstSpawnOverride).append('\n');
- buffer.append("[Multiverse-Core] firstspawnworld: ").append(this.plugin.getMVConfiguration().getString("firstspawnworld", "NOT SET")).append('\n');
- buffer.append("[Multiverse-Core] debug: ").append(MultiverseCore.GlobalDebug).append('\n');
+ .append(this.plugin.getMVConfig().getVersion()).append(")").append('\n');
+ buffer.append("[Multiverse-Core] messagecooldown: ").append(plugin.getMessaging().getCooldown()).append('\n');
+ buffer.append("[Multiverse-Core] teleportcooldown: ").append(plugin.getMVConfig().getTeleportCooldown()).append('\n');
+ buffer.append("[Multiverse-Core] worldnameprefix: ").append(plugin.getMVConfig().getPrefixChat()).append('\n');
+ buffer.append("[Multiverse-Core] enforceaccess: ").append(plugin.getMVConfig().getEnforceAccess()).append('\n');
+ buffer.append("[Multiverse-Core] displaypermerrors: ").append(plugin.getMVConfig().getDisplayPermErrors()).append('\n');
+ buffer.append("[Multiverse-Core] teleportintercept: ").append(plugin.getMVConfig().getTeleportIntercept()).append('\n');
+ buffer.append("[Multiverse-Core] firstspawnoverride: ").append(plugin.getMVConfig().getFirstSpawnOverride()).append('\n');
+ buffer.append("[Multiverse-Core] firstspawnworld: ").append(plugin.getMVConfig().getFirstSpawnWorld()).append('\n');
+ buffer.append("[Multiverse-Core] debug: ").append(plugin.getMVConfig().getGlobalDebug()).append('\n');
buffer.append("[Multiverse-Core] Special Code: FRN002").append('\n');
MVVersionEvent versionEvent = new MVVersionEvent(buffer.toString());
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java
index 76d22efd..cb409484 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/ConfigPropertyFactory.java
@@ -7,6 +7,7 @@
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;
@@ -233,9 +234,9 @@ public class ConfigPropertyFactory {
return new GameModeConfigProperty(this.section, name, defaultValue, node, help);
}
- // GameMode
+ // Location
/**
- * Constructs a new ConfigProperty.
+ * Constructs a new LocationConfigProperty.
*
* @param name The name of this ConfigProperty.
* @param defaultValue The default-value.
@@ -273,6 +274,19 @@ public class ConfigPropertyFactory {
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
*
diff --git a/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java
new file mode 100644
index 00000000..685a8101
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/configuration/PortalTypeConfigProperty.java
@@ -0,0 +1,97 @@
+/******************************************************************************
+ * 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/enums/AllowedPortalType.java b/src/main/java/com/onarandombox/MultiverseCore/enums/AllowedPortalType.java
new file mode 100644
index 00000000..cadfb1bd
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/enums/AllowedPortalType.java
@@ -0,0 +1,46 @@
+/******************************************************************************
+ * 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.enums;
+
+import org.bukkit.PortalType;
+
+/**
+ * Custom enum that adds all/none for allowing portal creation.
+ */
+public enum AllowedPortalType {
+ /**
+ * No portals are allowed.
+ */
+ NONE(PortalType.CUSTOM),
+ /**
+ * All portal types are allowed.
+ */
+ ALL(PortalType.CUSTOM),
+ /**
+ * Only Nether style portals are allowed.
+ */
+ NETHER(PortalType.NETHER),
+ /**
+ * Only Ender style portals are allowed.
+ */
+ END(PortalType.ENDER);
+
+ private PortalType type;
+
+ AllowedPortalType(PortalType type) {
+ this.type = type;
+ }
+
+ /**
+ * Gets the text.
+ * @return The text.
+ */
+ public PortalType getActualPortalType() {
+ return this.type;
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java b/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java
deleted file mode 100644
index 6d11c9ab..00000000
--- a/src/main/java/com/onarandombox/MultiverseCore/enums/ConfigProperty.java
+++ /dev/null
@@ -1,64 +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.enums;
-
-/**
- * An enum containing all config-properties that can be set.
- */
-public enum ConfigProperty {
- /**
- * How long to leave in between sending a message to the player. (NOT YET IMPLEMENTED)
- */
- messagecooldown,
- /**
- * How fast are people allowed to use /MVTP (NOT YET IMPLEMENTED).
- */
- teleportcooldown,
- /**
- * Prefix chat-messages with world-names.
- */
- worldnameprefix,
- /**
- * If value is set to false, Multiverse will NOT enforce world access permissions.
- */
- enforceaccess,
- /**
- * Whether users should get detailed information about the permissions they would need.
- */
- displaypermerrors,
- /**
- * Debug-information.
- */
- debug,
- /**
- * The world new users will spawn in.
- */
- firstspawnworld,
- /**
- * Whether Multiverse should intercept teleports.
- */
- teleportintercept,
- /**
- * Whether Multiverse should override the first spawn.
- */
- firstspawnoverride;
-
- /**
- * Constructs a string containing all values in this enum.
- *
- * @return That {@link String}.
- */
- public static String getAllValues() {
- String buffer = "";
- for (ConfigProperty c : ConfigProperty.values()) {
- // All values will NOT Contain spaces.
- buffer += c.toString() + " ";
- }
- return buffer;
- }
-}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
index e0e8d004..2af2670d 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java
@@ -55,7 +55,7 @@ public class MVPlayerListener implements Listener {
}
// Check whether the Server is set to prefix the chat with the World name.
// If not we do nothing, if so we need to check if the World has an Alias.
- if (MultiverseCore.PrefixChat) {
+ if (plugin.getMVConfig().getPrefixChat()) {
String world = event.getPlayer().getWorld().getName();
String prefix = "";
// If we're not a MV world, don't do anything
@@ -127,7 +127,7 @@ public class MVPlayerListener implements Listener {
Player p = event.getPlayer();
if (!p.hasPlayedBefore()) {
this.plugin.log(Level.FINE, "Player joined first!");
- if (MultiverseCore.FirstSpawnOverride) {
+ if (plugin.getMVConfig().getFirstSpawnOverride()) {
this.plugin.log(Level.FINE, "Moving NEW player to(firstspawnoverride): " + worldManager.getFirstSpawnWorld().getSpawnLocation());
this.spawnNewPlayer(p);
}
@@ -197,7 +197,7 @@ public class MVPlayerListener implements Listener {
teleportee.getName(), event.getTo().getWorld().getName(), teleporter.getName()));
return;
}
- if (MultiverseCore.EnforceAccess) {
+ if (plugin.getMVConfig().getEnforceAccess()) {
event.setCancelled(!pt.playerCanGoFromTo(fromWorld, toWorld, teleporter, teleportee));
if (event.isCancelled() && teleporter != null) {
this.plugin.log(Level.FINE, String.format("Player '%s' was DENIED ACCESS to '%s' because '%s' don't have: multiverse.access.%s",
@@ -262,7 +262,7 @@ public class MVPlayerListener implements Listener {
event.getPlayer().getName(), event.getTo().getWorld().getName()));
return;
}
- if (MultiverseCore.EnforceAccess) {
+ if (plugin.getMVConfig().getEnforceAccess()) {
event.setCancelled(!pt.playerCanGoFromTo(fromWorld, toWorld, event.getPlayer(), event.getPlayer()));
if (event.isCancelled()) {
this.plugin.log(Level.FINE, String.format("Player '%s' was DENIED ACCESS to '%s' because they don't have: multiverse.access.%s",
@@ -308,7 +308,7 @@ public class MVPlayerListener implements Listener {
public void run() {
// Check that the player is in the new world and they haven't been teleported elsewhere or the event cancelled.
if (player.getWorld() == world.getCBWorld()) {
- MultiverseCore.staticLog(Level.FINE, "Handeling gamemode for player: " + player.getName() + ", " + world.getGameMode().toString());
+ MultiverseCore.staticLog(Level.FINE, "Handling gamemode for player: " + player.getName() + ", " + world.getGameMode().toString());
MultiverseCore.staticLog(Level.FINE, "PWorld: " + player.getWorld());
MultiverseCore.staticLog(Level.FINE, "AWorld: " + world);
player.setGameMode(world.getGameMode());
diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPluginListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPluginListener.java
index 567429e4..001a490f 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPluginListener.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPluginListener.java
@@ -36,7 +36,7 @@ public class MVPluginListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR)
public void pluginEnable(PluginEnableEvent event) {
// Let AllPay handle all econ plugin loadings, only go for econ plugins we support
- if (Arrays.asList(AllPay.validEconPlugins).contains(event.getPlugin().getDescription().getName())) {
+ if (Arrays.asList(AllPay.getValidEconPlugins()).contains(event.getPlugin().getDescription().getName())) {
this.plugin.setBank(this.plugin.getBanker().loadEconPlugin());
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPortalListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPortalListener.java
new file mode 100644
index 00000000..6f124b41
--- /dev/null
+++ b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPortalListener.java
@@ -0,0 +1,78 @@
+/******************************************************************************
+ * 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.listeners;
+
+import com.onarandombox.MultiverseCore.MultiverseCore;
+import com.onarandombox.MultiverseCore.api.MultiverseWorld;
+import com.onarandombox.MultiverseCore.enums.AllowedPortalType;
+import org.bukkit.Material;
+import org.bukkit.PortalType;
+import org.bukkit.block.Block;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.EntityCreatePortalEvent;
+import org.bukkit.event.world.PortalCreateEvent;
+
+/**
+ * A custom listener for portal related events.
+ */
+public class MVPortalListener implements Listener {
+
+ private MultiverseCore plugin;
+
+ public MVPortalListener(MultiverseCore core) {
+ this.plugin = core;
+ }
+
+ /**
+ * This is called when an entity creates a portal.
+ *
+ * @param event The event where an entity created a portal.
+ */
+ @EventHandler
+ public void entityPortalCreate(EntityCreatePortalEvent event) {
+ if (event.isCancelled() || event.getBlocks().size() == 0) {
+ return;
+ }
+ MultiverseWorld world = this.plugin.getMVWorldManager().getMVWorld(event.getBlocks().get(0).getWorld());
+ event.setCancelled(this.cancelPortalEvent(world, event.getPortalType()));
+ }
+
+ /**
+ * This is called when a portal is created as the result of another world being linked.
+ * @param event The event where a portal was formed due to a world link
+ */
+ @EventHandler
+ public void portalForm(PortalCreateEvent event) {
+ if (event.isCancelled() || event.getBlocks().size() == 0) {
+ return;
+ }
+ // There's no type attribute (as of 1.1-R1), so we have to iterate.
+ for (Block b : event.getBlocks()) {
+ if (b.getType() == Material.PORTAL) {
+ MultiverseWorld world = this.plugin.getMVWorldManager().getMVWorld(b.getWorld());
+ event.setCancelled(this.cancelPortalEvent(world, PortalType.NETHER));
+ return;
+ }
+ }
+ // If We're here, then the Portal was an Ender type:
+ MultiverseWorld world = this.plugin.getMVWorldManager().getMVWorld(event.getBlocks().get(0).getWorld());
+ event.setCancelled(this.cancelPortalEvent(world, PortalType.ENDER));
+ }
+
+ private boolean cancelPortalEvent(MultiverseWorld world, PortalType type) {
+ if (world.getAllowedPortals() == AllowedPortalType.NONE) {
+ return true;
+ } else if (world.getAllowedPortals() != AllowedPortalType.ALL) {
+ if (type != world.getAllowedPortals().getActualPortalType()) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java
index a66c0d9b..980febeb 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java
@@ -98,7 +98,8 @@ public class MVPermissions implements PermissionsInterface {
*/
public boolean canEnterWorld(Player p, MultiverseWorld w) {
// If we're not enforcing access, anyone can enter.
- if (!MultiverseCore.EnforceAccess) {
+ if (!plugin.getMVConfig().getEnforceAccess()) {
+ this.plugin.log(Level.FINEST, "EnforceAccess is OFF. Player was allowed in " + w.getAlias());
return true;
}
return this.hasPermission(p, "multiverse.access." + w.getName(), false);
@@ -169,9 +170,9 @@ public class MVPermissions implements PermissionsInterface {
// plugin reloads, when MV asks the API if a player has a perm, it reports that they do NOT.
// For the moment, we're going to check all of this node's parents to see if the user has those. It stops
// when if finds a true or there are no more parents. --FF
- if (!hasPermission) {
- hasPermission = this.hasAnyParentPermission(sender, node);
- }
+// if (!hasPermission) {
+// hasPermission = this.hasAnyParentPermission(sender, node);
+// }
return hasPermission;
}
@@ -179,10 +180,12 @@ public class MVPermissions implements PermissionsInterface {
// TODO: Better player checks, most likely not needed, but safer.
private boolean checkActualPermission(CommandSender sender, String node) {
Player player = (Player) sender;
- this.plugin.log(Level.FINEST, "Checking to see if player [" + player.getName() + "] has permission [" + node + "]");
+
boolean hasPermission = sender.hasPermission(node);
if (hasPermission) {
- this.plugin.log(Level.FINER, "Player [" + player.getName() + "] HAS PERMISSION [" + node + "]!");
+ this.plugin.log(Level.FINEST, "Checking to see if player [" + player.getName() + "] has permission [" + node + "]... YES");
+ } else {
+ this.plugin.log(Level.FINEST, "Checking to see if player [" + player.getName() + "] has permission [" + node + "]... NO");
}
return hasPermission;
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPlayerSession.java b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPlayerSession.java
index 90e8796c..5b772f9e 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPlayerSession.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPlayerSession.java
@@ -7,8 +7,9 @@
package com.onarandombox.MultiverseCore.utils;
-import com.onarandombox.MultiverseCore.MultiverseCore;
-import org.bukkit.configuration.Configuration;
+import com.onarandombox.MultiverseCore.MultiverseCoreConfiguration;
+
+import com.onarandombox.MultiverseCore.api.MultiverseCoreConfig;
import org.bukkit.entity.Player;
import java.util.Date;
@@ -23,9 +24,9 @@ public class MVPlayerSession {
private long teleportLast = 0L; // Timestamp for the Players last Portal Teleportation.
private long messageLast = 0L; // Timestamp for the Players last Alert Message.
- private Configuration config; // Configuration file to find out Cooldown Timers.
+ private MultiverseCoreConfig config; // Configuration file to find out Cooldown Timers.
- public MVPlayerSession(Player player, Configuration config, MultiverseCore multiVerseCore) {
+ public MVPlayerSession(Player player, MultiverseCoreConfig config) {
this.player = player;
this.config = config;
// this.bedSpawn = null;
@@ -42,6 +43,6 @@ public class MVPlayerSession {
*/
public boolean getTeleportable() {
long time = (new Date()).getTime();
- return ((time - this.teleportLast) > this.config.getInt("portalcooldown", 5000)); // SUPPRESS CHECKSTYLE: MagicNumberCheck
+ return ((time - this.teleportLast) > this.config.getTeleportCooldown());
}
}
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java b/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java
index 2be0c287..bcb98377 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java
@@ -100,7 +100,7 @@ public class PermissionTools {
*/
public boolean playerHasMoneyToEnter(MultiverseWorld fromWorld, MultiverseWorld toWorld, CommandSender teleporter, Player teleportee, boolean pay) {
Player teleporterPlayer;
- if (MultiverseCore.TeleportIntercept) {
+ if (plugin.getMVConfig().getTeleportIntercept()) {
if (teleporter instanceof ConsoleCommandSender) {
return true;
}
@@ -171,7 +171,7 @@ public class PermissionTools {
this.plugin.log(Level.FINEST, "Checking '" + teleporter + "' can send '" + teleportee + "' somewhere");
Player teleporterPlayer;
- if (MultiverseCore.TeleportIntercept) {
+ if (plugin.getMVConfig().getTeleportIntercept()) {
// The console can send anyone anywhere
if (teleporter instanceof ConsoleCommandSender) {
return true;
diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
index 3bc01374..8c9764b9 100644
--- a/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
+++ b/src/main/java/com/onarandombox/MultiverseCore/utils/WorldManager.java
@@ -210,7 +210,7 @@ public class WorldManager implements MVWorldManager {
*/
@Override
public void setFirstSpawnWorld(String world) {
- if (world == null) {
+ if ((world == null) && (this.plugin.getServer().getWorlds().size() > 0)) {
this.firstSpawn = this.plugin.getServer().getWorlds().get(0).getName();
} else {
this.firstSpawn = world;
diff --git a/src/main/resources/defaults/config.yml b/src/main/resources/defaults/config.yml
index b478d099..3bf24ebc 100644
--- a/src/main/resources/defaults/config.yml
+++ b/src/main/resources/defaults/config.yml
@@ -1,14 +1,16 @@
-# This is the MV2 Config. If you mess it up, copy the values out
-# delete it, and it will be regenerated. Then use the ingame interface
-# to add your values back via the "/mv conf" command.
-# When in-game, simply type: "/mv conf ?" for help.
-# A config with explanations can be found here:
-# https://github.com/Multiverse/Multiverse-Core/wiki/config.yml
-
-worldnameprefix: true
-enforceaccess: true
-displaypermerrors: true
-teleportintercept: true
-firstspawnoverride: true
-messagecooldown: 5000
-version: 2.7
+# ------------------------------------------------------------------------- #
+# This is the MV2 Config. If you mess it up, copy the values out #
+# delete it, and it will be regenerated. Then use the ingame interface #
+# to add your values back via the "/mv conf" command. #
+# When in-game, simply type: "/mv conf ?" for help. #
+# A config with explanations can be found here: #
+# https://github.com/Multiverse/Multiverse-Core/wiki/config.yml #
+# #
+# #
+# IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !!IMPORTANT #
+# #
+# Do NOT delete this line from your config!!!! #
+# ==: com.onarandombox.MultiverseCore.MultiverseCoreConfiguration #
+# #
+# IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !! IMPORTANT !!IMPORTANT #
+# ------------------------------------------------------------------------- #
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java
index 34815c6c..64d9b1fd 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java
@@ -22,12 +22,14 @@ import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.onarandombox.MultiverseCore.MultiverseCore;
+import com.onarandombox.MultiverseCore.api.Core;
import com.onarandombox.MultiverseCore.test.utils.TestInstanceCreator;
@RunWith(PowerMockRunner.class)
@@ -54,6 +56,7 @@ public class TestDebugMode {
public void testEnableDebugMode() {
// Pull a core instance from the server.
Plugin plugin = mockServer.getPluginManager().getPlugin("Multiverse-Core");
+ Core core = (Core) plugin;
// Make sure Core is not null
assertNotNull(plugin);
@@ -70,12 +73,12 @@ public class TestDebugMode {
when(mockCommand.getName()).thenReturn("mv");
// Assert debug mode is off
- Assert.assertEquals(0, MultiverseCore.GlobalDebug);
+ Assert.assertEquals(0, core.getMVConfig().getGlobalDebug());
// Send the debug command.
String[] debugArgs = new String[] { "debug", "3" };
plugin.onCommand(mockCommandSender, mockCommand, "", debugArgs);
- Assert.assertEquals(3, MultiverseCore.GlobalDebug);
+ Assert.assertEquals(3, core.getMVConfig().getGlobalDebug());
}
}
diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
index 45412ccf..b53ffeaa 100644
--- a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
+++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java
@@ -34,6 +34,7 @@ import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager;
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.internal.verification.VerificationModeFactory;
@@ -165,10 +166,10 @@ public class TestWorldProperties {
assertFalse(thunderChangeOnEvent.isCancelled());
// call player chat event
- MultiverseCore.PrefixChat = true;
+ core.getMVConfig().setPrefixChat(true);
core.getPlayerListener().playerChat(playerChatEvent);
verify(playerChatEvent).setFormat("[" + mvWorld.getColoredWorldString() + "]" + "format");
- MultiverseCore.PrefixChat = false;
+ core.getMVConfig().setPrefixChat(false);
core.getPlayerListener().playerChat(playerChatEvent);
verify(playerChatEvent, times(1)).setFormat(anyString()); // only ONE TIME (not the 2nd time!)
@@ -263,7 +264,7 @@ public class TestWorldProperties {
assertTrue(thunderChangeOnEvent.isCancelled());
// call player chat event
- MultiverseCore.PrefixChat = true;
+ core.getMVConfig().setPrefixChat(true);
core.getPlayerListener().playerChat(playerChatEvent);
// never because it's hidden!
verify(playerChatEvent, never()).setFormat(
@@ -271,7 +272,7 @@ public class TestWorldProperties {
mvWorld.setHidden(false);
core.getPlayerListener().playerChat(playerChatEvent);
verify(playerChatEvent).setFormat("[" + mvWorld.getColoredWorldString() + "]" + "format");
- MultiverseCore.PrefixChat = false;
+ core.getMVConfig().setPrefixChat(false);
core.getPlayerListener().playerChat(playerChatEvent);
verify(playerChatEvent, times(1)).setFormat(anyString()); // only ONE TIME (not the 2nd time!)