diff --git a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java index 31aef137..79e77dcf 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCore.java @@ -33,6 +33,9 @@ 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; @@ -60,20 +63,12 @@ import java.util.logging.Logger; */ 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; + + // TODO maybe add deprecated stubs for the old globals + private static Map teleportQueue = new HashMap(); private AnchorManager anchorManager = new AnchorManager(this); + private static MultiverseCoreConfiguration config; /** * This method is used to find out who is teleporting a player. @@ -176,6 +171,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 @@ -344,21 +341,18 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core { this.multiverseConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "config.yml")); 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); + } + // ... and save it + multiverseConfig.set("multiverse-configuration", config); - 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); @@ -483,7 +477,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()); } /** @@ -501,13 +495,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) { @@ -858,4 +852,12 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core { public void setSafeTTeleporter(SafeTTeleporter safeTTeleporter) { this.safeTTeleporter = safeTTeleporter; } + + /** + * Gets our {@link MultiverseCoreConfiguration}. + * @return The {@link MultiverseCoreConfiguration} we're using. + */ + 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..8631b729 --- /dev/null +++ b/src/main/java/com/onarandombox/MultiverseCore/MultiverseCoreConfiguration.java @@ -0,0 +1,164 @@ +package com.onarandombox.MultiverseCore; + +import java.util.Map; + +import me.main__.util.SerializationConfig.Property; +import me.main__.util.SerializationConfig.SerializationConfig; + +/** + * Our configuration. + */ +public class MultiverseCoreConfiguration extends SerializationConfig { + @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; + + 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; + // END CHECKSTYLE-SUPPRESSION: MagicNumberCheck + } + + // And here we go: + + /** + * Gets enforceAccess. + * @return enforceAccess. + */ + public boolean getEnforceAccess() { + return enforceAccess; + } + + /** + * Sets enforceAccess. + * @param enforceAccess The new value. + */ + public void setEnforceAccess(boolean enforceAccess) { + this.enforceAccess = enforceAccess; + } + + /** + * Gets prefixChat. + * @return prefixChat. + */ + public boolean getPrefixChat() { + return prefixChat; + } + + /** + * Sets prefixChat. + * @param prefixChat The new value. + */ + public void setPrefixChat(boolean prefixChat) { + this.prefixChat = prefixChat; + } + + /** + * Gets teleportIntercept. + * @return teleportIntercept. + */ + public boolean getTeleportIntercept() { + return teleportIntercept; + } + + /** + * Sets teleportIntercept. + * @param teleportIntercept The new value. + */ + public void setTeleportIntercept(boolean teleportIntercept) { + this.teleportIntercept = teleportIntercept; + } + + /** + * Gets firstSpawnOverride. + * @return firstSpawnOverride. + */ + public boolean getFirstSpawnOverride() { + return firstSpawnOverride; + } + + /** + * Sets firstSpawnOverride. + * @param firstSpawnOverride The new value. + */ + public void setFirstSpawnOverride(boolean firstSpawnOverride) { + this.firstSpawnOverride = firstSpawnOverride; + } + + /** + * Gets displayPermErrors. + * @return displayPermErrors. + */ + public boolean getDisplayPermErrors() { + return displayPermErrors; + } + + /** + * Sets displayPermErrors. + * @param displayPermErrors The new value. + */ + public void setDisplayPermErrors(boolean displayPermErrors) { + this.displayPermErrors = displayPermErrors; + } + + /** + * Gets globalDebug. + * @return globalDebug. + */ + public int getGlobalDebug() { + return globalDebug; + } + + /** + * Sets globalDebug. + * @param globalDebug The new value. + */ + public void setGlobalDebug(int globalDebug) { + this.globalDebug = globalDebug; + } + + /** + * Gets messageCooldown. + * @return messageCooldown. + */ + public int getMessageCooldown() { + return messageCooldown; + } + + /** + * Sets messageCooldown. + * @param messageCooldown The new value. + */ + public void setMessageCooldown(int messageCooldown) { + this.messageCooldown = messageCooldown; + } +} diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/DebugCommand.java index 83f7cdd5..42431ac8 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; + MultiverseCore.getStaticConfig().setGlobalDebug(0); } else { try { int debugLevel = Integer.parseInt(args.get(0)); if (debugLevel > 3 || debugLevel < 0) { throw new NumberFormatException(); } - MultiverseCore.GlobalDebug = debugLevel; + MultiverseCore.getStaticConfig().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 (MultiverseCore.getStaticConfig().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 + MultiverseCore.getStaticConfig().getGlobalDebug()); this.plugin.log(Level.FINE, "Multiverse Debug ENABLED"); } } diff --git a/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java b/src/main/java/com/onarandombox/MultiverseCore/commands/TeleportCommand.java index 8232c5bb..3ebb25f6 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 (MultiverseCore.getStaticConfig().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..fa3b6c4c 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java +++ b/src/main/java/com/onarandombox/MultiverseCore/commands/VersionCommand.java @@ -56,13 +56,13 @@ public class VersionCommand extends MultiverseCommand { .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] worldnameprefix: ").append(MultiverseCore.getStaticConfig().getPrefixChat()).append('\n'); + buffer.append("[Multiverse-Core] enforceaccess: ").append(MultiverseCore.getStaticConfig().getEnforceAccess()).append('\n'); + buffer.append("[Multiverse-Core] displaypermerrors: ").append(MultiverseCore.getStaticConfig().getDisplayPermErrors()).append('\n'); + buffer.append("[Multiverse-Core] teleportintercept: ").append(MultiverseCore.getStaticConfig().getTeleportIntercept()).append('\n'); + buffer.append("[Multiverse-Core] firstspawnoverride: ").append(MultiverseCore.getStaticConfig().getFirstSpawnOverride()).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'); + buffer.append("[Multiverse-Core] debug: ").append(MultiverseCore.getStaticConfig().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/listeners/MVPlayerListener.java b/src/main/java/com/onarandombox/MultiverseCore/listeners/MVPlayerListener.java index 76240e42..a6fd21ea 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 (MultiverseCore.getStaticConfig().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 (MultiverseCore.getStaticConfig().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 (MultiverseCore.getStaticConfig().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 (MultiverseCore.getStaticConfig().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", diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java index a66c0d9b..e10fe51b 100644 --- a/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java +++ b/src/main/java/com/onarandombox/MultiverseCore/utils/MVPermissions.java @@ -98,7 +98,7 @@ 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 (!MultiverseCore.getStaticConfig().getEnforceAccess()) { return true; } return this.hasPermission(p, "multiverse.access." + w.getName(), false); diff --git a/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java b/src/main/java/com/onarandombox/MultiverseCore/utils/PermissionTools.java index 2be0c287..4312ab86 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 (MultiverseCore.getStaticConfig().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 (MultiverseCore.getStaticConfig().getTeleportIntercept()) { // The console can send anyone anywhere if (teleporter instanceof ConsoleCommandSender) { return true; diff --git a/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java b/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java index 34815c6c..47471a73 100644 --- a/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java +++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestDebugMode.java @@ -70,12 +70,12 @@ public class TestDebugMode { when(mockCommand.getName()).thenReturn("mv"); // Assert debug mode is off - Assert.assertEquals(0, MultiverseCore.GlobalDebug); + Assert.assertEquals(0, MultiverseCore.getStaticConfig().getGlobalDebug()); // Send the debug command. String[] debugArgs = new String[] { "debug", "3" }; plugin.onCommand(mockCommandSender, mockCommand, "", debugArgs); - Assert.assertEquals(3, MultiverseCore.GlobalDebug); + Assert.assertEquals(3, MultiverseCore.getStaticConfig().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..c569b7ba 100644 --- a/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java +++ b/src/test/java/com/onarandombox/MultiverseCore/test/TestWorldProperties.java @@ -165,10 +165,10 @@ public class TestWorldProperties { assertFalse(thunderChangeOnEvent.isCancelled()); // call player chat event - MultiverseCore.PrefixChat = true; + MultiverseCore.getStaticConfig().setPrefixChat(true); core.getPlayerListener().playerChat(playerChatEvent); verify(playerChatEvent).setFormat("[" + mvWorld.getColoredWorldString() + "]" + "format"); - MultiverseCore.PrefixChat = false; + MultiverseCore.getStaticConfig().setPrefixChat(false); core.getPlayerListener().playerChat(playerChatEvent); verify(playerChatEvent, times(1)).setFormat(anyString()); // only ONE TIME (not the 2nd time!) @@ -263,7 +263,7 @@ public class TestWorldProperties { assertTrue(thunderChangeOnEvent.isCancelled()); // call player chat event - MultiverseCore.PrefixChat = true; + MultiverseCore.getStaticConfig().setPrefixChat(true); core.getPlayerListener().playerChat(playerChatEvent); // never because it's hidden! verify(playerChatEvent, never()).setFormat( @@ -271,7 +271,7 @@ public class TestWorldProperties { mvWorld.setHidden(false); core.getPlayerListener().playerChat(playerChatEvent); verify(playerChatEvent).setFormat("[" + mvWorld.getColoredWorldString() + "]" + "format"); - MultiverseCore.PrefixChat = false; + MultiverseCore.getStaticConfig().setPrefixChat(false); core.getPlayerListener().playerChat(playerChatEvent); verify(playerChatEvent, times(1)).setFormat(anyString()); // only ONE TIME (not the 2nd time!)