Bladeren bron

Setting mcMMO to disable itself if it errors on load. Fixes most reloading errors.

U-YUE\Sean 12 jaren geleden
bovenliggende
commit
d2035f1816
1 gewijzigde bestanden met toevoegingen van 54 en 35 verwijderingen
  1. 54 35
      src/main/java/com/gmail/nossr50/mcMMO.java

+ 54 - 35
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -8,6 +8,7 @@ import java.util.List;
 
 import net.shatteredlands.shatt.backup.ZipLibrary;
 
+import org.bukkit.Bukkit;
 import org.bukkit.OfflinePlayer;
 import org.bukkit.block.Block;
 import org.bukkit.entity.Player;
@@ -98,46 +99,52 @@ public class mcMMO extends JavaPlugin {
      */
     @Override
     public void onEnable() {
-        p = this;
-        getLogger().setFilter(new LogFilter(this));
-        entityMetadata = new FixedMetadataValue(mcMMO.p, true);
-        setupFilePaths();
-        setupSpout();
-        loadConfigFiles();
-
-        if (!Config.getInstance().getUseMySQL()) {
-            Users.loadUsers();
-        }
+        try {
+            p = this;
+            getLogger().setFilter(new LogFilter(this));
+            entityMetadata = new FixedMetadataValue(mcMMO.p, true);
+            setupFilePaths();
+            setupSpout();
+            loadConfigFiles();
+
+            if (!Config.getInstance().getUseMySQL()) {
+                Users.loadUsers();
+            }
 
-        registerEvents();
+            registerEvents();
 
-        // Setup the leader boards
-        if (Config.getInstance().getUseMySQL()) {
-            // TODO: Why do we have to check for a connection that hasn't be made yet? 
-            Database.checkConnected();
-            Database.createStructure();
-        }
-        else {
-            Leaderboard.updateLeaderboards();
-        }
+            // Setup the leader boards
+            if (Config.getInstance().getUseMySQL()) {
+                // TODO: Why do we have to check for a connection that hasn't be made yet? 
+                Database.checkConnected();
+                Database.createStructure();
+            }
+            else {
+                Leaderboard.updateLeaderboards();
+            }
 
-        for (Player player : getServer().getOnlinePlayers()) {
-            Users.addUser(player); // In case of reload add all users back into PlayerProfile
-        }
+            for (Player player : getServer().getOnlinePlayers()) {
+                Users.addUser(player); // In case of reload add all users back into PlayerProfile
+            }
 
-        getLogger().info("Version " + getDescription().getVersion() + " is enabled!");
+            getLogger().info("Version " + getDescription().getVersion() + " is enabled!");
 
-        scheduleTasks();
-        registerCommands();
+            scheduleTasks();
+            registerCommands();
 
-        MetricsManager.setup();
+            MetricsManager.setup();
 
-        placeStore = ChunkManagerFactory.getChunkManager(); // Get our ChunkletManager
+            placeStore = ChunkManagerFactory.getChunkManager(); // Get our ChunkletManager
 
-        checkForUpdates();
+            checkForUpdates();
 
-        if (Config.getInstance().getPTPCommandWorldPermissions()) {
-            Permissions.generateWorldTeleportPermissions();
+            if (Config.getInstance().getPTPCommandWorldPermissions()) {
+                Permissions.generateWorldTeleportPermissions();
+            }
+        }
+        catch (Throwable t) {
+            getLogger().severe("There was an error while enabling mcMMO! Disabling now");
+            Bukkit.getPluginManager().disablePlugin(this);
         }
     }
 
@@ -210,11 +217,15 @@ public class mcMMO extends JavaPlugin {
      */
     @Override
     public void onDisable() {
-        Users.saveAll(); // Make sure to save player information if the server shuts down
-        PartyManager.saveParties();
+        try {
+            Users.saveAll(); // Make sure to save player information if the server shuts down
+            PartyManager.saveParties();
+            placeStore.saveAll(); // Save our metadata
+            placeStore.cleanUp(); // Cleanup empty metadata stores
+        }
+        catch (NullPointerException e) {}
+
         getServer().getScheduler().cancelTasks(this); // This removes our tasks
-        placeStore.saveAll(); // Save our metadata
-        placeStore.cleanUp(); // Cleanup empty metadata stores
         HandlerList.unregisterAll(this); // Cancel event registrations
 
         if (Config.getInstance().getBackupsEnabled()) {
@@ -225,6 +236,14 @@ public class mcMMO extends JavaPlugin {
             catch (IOException e) {
                 getLogger().severe(e.toString());
             }
+            catch (Throwable e) {
+                if (e instanceof NoClassDefFoundError) {
+                    getLogger().severe("Backup class not found. Do not replace the mcMMO jar during runtime.");
+                }
+                else {
+                    getLogger().severe(e.toString());
+                }
+            }
         }
 
         getLogger().info("Was disabled."); //How informative!