Bläddra i källkod

Added an Update Checker, closes #559

TfT_02 12 år sedan
förälder
incheckning
cf0f075acb

+ 1 - 0
Changelog.txt

@@ -9,6 +9,7 @@ Key:
 
 Version 1.4.00-dev
  + Added new Child Skill - Smelting!
+ + Added a version check, admins will get notified when a new version is available!
  + Added new cancellable McMMOPlayerDisarmEvent for Citizens compatibility - fires whenever a player is disarmed.
  + Added config options for Hylian Luck skill
  + Added display values to Unarmed command for Iron Grip

+ 2 - 0
src/main/java/com/gmail/nossr50/config/Config.java

@@ -35,6 +35,8 @@ public class Config extends ConfigLoader {
     public boolean getDonateMessageEnabled() { return config.getBoolean("Commands.mcmmo.Donate_Message", true); }
     public int getSaveInterval() { return config.getInt("General.Save_Interval", 10); }
     public boolean getStatsTrackingEnabled() { return config.getBoolean("General.Stats_Tracking", true); }
+    public boolean getUpdateCheckEnabled() { return config.getBoolean("General.Update_Check", true); }
+    public boolean getPreferBeta() { return config.getBoolean("General.Prefer_Beta", false); }
     public boolean getEventCallbackEnabled() { return config.getBoolean("General.Event_Callback", true); }
     public boolean getBackupsEnabled() { return config.getBoolean("General.Generate_Backups", true); }
     public boolean getPartyDisplayNames() { return config.getBoolean("Commands.p.Use_Display_Names", true); }

+ 5 - 0
src/main/java/com/gmail/nossr50/listeners/PlayerListener.java

@@ -236,6 +236,11 @@ public class PlayerListener implements Listener {
         if (plugin.isXPEventEnabled()) {
             player.sendMessage(LocaleLoader.getString("XPRate.Event", Config.getInstance().getExperienceGainsGlobalMultiplier()));
         }
+
+        if (player.hasPermission("mcmmo.tools.updatecheck") && mcMMO.p.updateAvailable) {
+            player.sendMessage(LocaleLoader.getString("UpdateChecker.outdated"));
+            player.sendMessage(LocaleLoader.getString("UpdateChecker.newavailable"));
+        }
     }
 
     /**

+ 15 - 0
src/main/java/com/gmail/nossr50/mcMMO.java

@@ -32,6 +32,7 @@ import com.gmail.nossr50.listeners.EntityListener;
 import com.gmail.nossr50.listeners.InventoryListener;
 import com.gmail.nossr50.listeners.PlayerListener;
 import com.gmail.nossr50.listeners.WorldListener;
+import com.gmail.nossr50.locale.LocaleLoader;
 import com.gmail.nossr50.mods.config.CustomArmorConfig;
 import com.gmail.nossr50.mods.config.CustomBlocksConfig;
 import com.gmail.nossr50.mods.config.CustomEntityConfig;
@@ -49,6 +50,7 @@ import com.gmail.nossr50.skills.runnables.BleedTimer;
 import com.gmail.nossr50.skills.runnables.SkillMonitor;
 import com.gmail.nossr50.spout.SpoutConfig;
 import com.gmail.nossr50.spout.SpoutTools;
+import com.gmail.nossr50.util.UpdateCheck;
 import com.gmail.nossr50.util.Users;
 
 public class mcMMO extends JavaPlugin {
@@ -75,6 +77,9 @@ public class mcMMO extends JavaPlugin {
     private static String usersFile;
     private static String modDirectory;
 
+    // Update Check
+    public boolean updateAvailable;
+
     // Spout Check
     public static boolean spoutEnabled = false;
 
@@ -121,6 +126,16 @@ public class mcMMO extends JavaPlugin {
         placeStore = ChunkManagerFactory.getChunkManager(); // Get our ChunkletManager
 
         new MobStoreCleaner(); // Automatically starts and stores itself
+
+        try {
+            updateAvailable = Config.getInstance().getUpdateCheckEnabled() && UpdateCheck.updateAvailable();
+        } catch (Exception e) {
+            updateAvailable = false;
+        }
+        if (updateAvailable) {
+            getLogger().info(LocaleLoader.getString("UpdateChecker.outdated"));
+            getLogger().info(LocaleLoader.getString("UpdateChecker.newavailable"));
+        }
     }
 
     /**

+ 62 - 0
src/main/java/com/gmail/nossr50/util/UpdateCheck.java

@@ -0,0 +1,62 @@
+package com.gmail.nossr50.util;
+
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.UnknownHostException;
+
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+
+import com.gmail.nossr50.mcMMO;
+import com.gmail.nossr50.config.Config;
+
+public class UpdateCheck {
+    private UpdateCheck() {}
+
+    public static boolean updateAvailable() throws Exception {
+        String checkType = "release";
+        if (Config.getInstance().getPreferBeta()) {
+            checkType = "latest";
+        }
+        String version = mcMMO.p.getDescription().getVersion();
+        URL url = new URL("http://api.bukget.org/api2/bukkit/plugin/mcmmo/"+checkType);
+        InputStreamReader isr;
+        try {
+            isr = new InputStreamReader(url.openStream());
+        } catch (UnknownHostException e) {
+            return false;
+        }
+
+        String newVersion;
+        try {
+            JSONParser jp = new JSONParser();
+            Object o = jp.parse(isr);
+
+            if (!(o instanceof JSONObject)) {
+                isr.close();
+                return false;
+            }
+
+            JSONObject jo = (JSONObject) o;
+            jo = (JSONObject) jo.get("versions");
+            newVersion = (String) jo.get("version");
+
+            String[] oldTokens = version.replaceAll("(?i)(-)(.+?)(-)", "").split("[.]|[b]");
+            String[] newTokens = newVersion.replaceAll("(?i)(-)(.+?)(-)", "").split("[.]|[b]");
+
+            for (int i = 0; i < 4; i++) {
+                Integer newVer = Integer.parseInt(newTokens[i]);
+                Integer oldVer = Integer.parseInt(oldTokens[i]);
+                if (oldVer < newVer) {
+                    isr.close();
+                    return true;
+                }
+            }
+            return false;
+        } catch (ParseException e) {
+            isr.close();
+            return false;
+        }
+    }
+}

+ 3 - 0
src/main/resources/config.yml

@@ -14,6 +14,9 @@ General:
     Save_Interval: 10
     #Allow mcMMO to report on basic anonymous usage
     Stats_Tracking: true
+    #Allow mcMMO to check if a new version is available
+    Update_Check: true
+    Prefer_Beta: false
     #Allow mcMMO to inform other plugins of damage being dealt
     Event_Callback: true
     #Allow mcMMO to create zip backups for flatfile data on shutdown.

+ 4 - 0
src/main/resources/locale/locale_en_US.properties

@@ -725,3 +725,7 @@ Commands.Description.skillreset=Reset mcMMO levels for a user
 Commands.Description.vampirism=Modify the mcMMO vampirism percentage or toggle vampirism mode on/off
 Commands.Description.xplock=Lock your mcMMO XP bar to a specific mcMMO skill
 Commands.Description.xprate=Modify the mcMMO XP rate or start an mcMMO XP event
+
+#UPDATE CHECKER
+UpdateChecker.outdated=You are using an outdated version of mcMMO!
+UpdateChecker.newavailable=There is a new version available on BukkitDev.

+ 4 - 0
src/main/resources/plugin.yml

@@ -1369,6 +1369,7 @@ permissions:
             mcmmo.tools.mcrefresh: true
             mcmmo.tools.mcremove: true
             mcmmo.tools.mmoedit: true
+            mcmmo.tools.updatecheck: true
     mcmmo.tools.mcgod:
         default: false
         description: Allows access to mcgod command
@@ -1396,3 +1397,6 @@ permissions:
             mcmmo.commands.mcpurge: true
             mcmmo.commands.mmoedit: true
             mcmmo.commands.mmoedit.others: true
+    mcmmo.tools.updatecheck:
+        default: false
+        description: Notifies admins if there is a new version of mcMMO available