diff options
author | ElgarL <ElgarL@palmergames.com> | 2012-04-16 23:54:33 +0100 |
---|---|---|
committer | ElgarL <ElgarL@palmergames.com> | 2012-04-16 23:54:33 +0100 |
commit | da857895fc2eea8449c98c64719fe1e32f54c80c (patch) | |
tree | ee4ce4808a56f9c12b4315d5163cb69497f7d856 | |
parent | 1599a36642014d2b3284288676999a39b417a841 (diff) | |
download | Essentials-da857895fc2eea8449c98c64719fe1e32f54c80c.tar Essentials-da857895fc2eea8449c98c64719fe1e32f54c80c.tar.gz Essentials-da857895fc2eea8449c98c64719fe1e32f54c80c.tar.lz Essentials-da857895fc2eea8449c98c64719fe1e32f54c80c.tar.xz Essentials-da857895fc2eea8449c98c64719fe1e32f54c80c.zip |
Re-initialize the WorldsHolder on a reload, as un-registering and
re-registering a new holder means all plugins have to check for the new
service on every quiery.
3 files changed, 72 insertions, 38 deletions
diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index f900d5aa9..fcdc1ed9d 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -179,4 +179,5 @@ v 2.0: - Unregister the worldsHolder as a service on a reload/shutdown instead of the whole plugin.
- Update all code formatting to use tabs for indentation.
- Stop using our own deprecated methods as we tell others to do.
- - Finally remove all deprecated methods.
\ No newline at end of file + - Finally remove all deprecated methods.
+ - Re-initialize the WorldsHolder on a reload, as un-registering and re-registering a new holder means all plugins have to check for the new service on every quiery.
\ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index df46b70d0..3da9666c3 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -56,25 +56,7 @@ public class GroupManager extends JavaPlugin { private Map<CommandSender, String> selectedWorlds = new HashMap<CommandSender, String>(); private WorldsHolder worldsHolder; private boolean validateOnlinePlayer = true; - - private String lastError = ""; - - /** - * @return the validateOnlinePlayer - */ - public boolean isValidateOnlinePlayer() { - - return validateOnlinePlayer; - } - - /** - * @param validateOnlinePlayer the validateOnlinePlayer to set - */ - public void setValidateOnlinePlayer(boolean validateOnlinePlayer) { - - this.validateOnlinePlayer = validateOnlinePlayer; - } - + private static boolean isLoaded = false; protected GMConfiguration config; @@ -89,13 +71,28 @@ public class GroupManager extends JavaPlugin { private OverloadedWorldHolder dataHolder = null; private AnjoPermissionsHandler permissionHandler = null; + private String lastError = ""; + @Override public void onDisable() { + + onDisable(false); + } + + @Override + public void onEnable() { + + onEnable(false); + } + + public void onDisable(boolean restarting) { setLoaded(false); - // Unregister this service. - this.getServer().getServicesManager().unregister(this.worldsHolder); + if (!restarting) { + // Unregister this service if we are shutting down. + this.getServer().getServicesManager().unregister(this.worldsHolder); + } disableScheduler(); // Shutdown before we save, so it doesn't interfere. if (worldsHolder != null) { @@ -118,18 +115,26 @@ public class GroupManager extends JavaPlugin { // EXAMPLE: Custom code, here we just output some info so we can check that all is well PluginDescriptionFile pdfFile = this.getDescription(); System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is disabled!"); - GroupManager.logger.removeHandler(ch); + + if (!restarting) + GroupManager.logger.removeHandler(ch); } - - @Override - public void onEnable() { + + public void onEnable(boolean restarting) { try { + /* + * reset local variables. + */ + overloadedUsers = new HashMap<String, ArrayList<User>>(); + selectedWorlds = new HashMap<CommandSender, String>(); lastError = ""; - - GroupManager.logger.setUseParentHandlers(false); - ch = new GMLoggerHandler(); - GroupManager.logger.addHandler(ch); + + if (!restarting) { + GroupManager.logger.setUseParentHandlers(false); + ch = new GMLoggerHandler(); + GroupManager.logger.addHandler(ch); + } logger.setLevel(Level.ALL); // Create the backup folder, if it doesn't exist. @@ -138,7 +143,11 @@ public class GroupManager extends JavaPlugin { prepareConfig(); // Load the global groups globalGroups = new GlobalGroups(this); - worldsHolder = new WorldsHolder(this); + + if (!restarting) + worldsHolder = new WorldsHolder(this); + else + worldsHolder.resetWorldsHolder(); PluginDescriptionFile pdfFile = this.getDescription(); if (worldsHolder == null) { @@ -169,7 +178,9 @@ public class GroupManager extends JavaPlugin { System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!"); // Register as a service - this.getServer().getServicesManager().register(WorldsHolder.class, this.worldsHolder, this, ServicePriority.Lowest); + if (!restarting) + this.getServer().getServicesManager().register(WorldsHolder.class, this.worldsHolder, this, ServicePriority.Lowest); + } catch (Exception ex) { /* @@ -222,6 +233,22 @@ public class GroupManager extends JavaPlugin { } } + + /** + * @return the validateOnlinePlayer + */ + public boolean isValidateOnlinePlayer() { + + return validateOnlinePlayer; + } + + /** + * @param validateOnlinePlayer the validateOnlinePlayer to set + */ + public void setValidateOnlinePlayer(boolean validateOnlinePlayer) { + + this.validateOnlinePlayer = validateOnlinePlayer; + } public static boolean isLoaded() { @@ -1633,11 +1660,10 @@ public class GroupManager extends JavaPlugin { */ /* - * Reset the last error as we are attempting a fresh load. + * Attempting a fresh load. */ - lastError = ""; - onDisable(); - onEnable(); + onDisable(true); + onEnable(true); sender.sendMessage("All settings and worlds were reloaded!"); } diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java index 37d0a8430..a9ab4befa 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/dataholder/worlds/WorldsHolder.java @@ -57,12 +57,19 @@ public class WorldsHolder { public WorldsHolder(GroupManager plugin) { this.plugin = plugin; + resetWorldsHolder(); + } + + public void resetWorldsHolder() { + + mirrorsGroup = new HashMap<String, String>(); + mirrorsUser = new HashMap<String, String>(); + // Setup folders and check files exist for the primary world verifyFirstRun(); initialLoad(); - if (serverDefaultWorldName == null) { + if (serverDefaultWorldName == null) throw new IllegalStateException("There is no default group! OMG!"); - } } private void initialLoad() { |