From cf0f075acbe103b3b9c389432cb9d7b844c02c83 Mon Sep 17 00:00:00 2001 From: TfT_02 Date: Mon, 18 Feb 2013 22:54:47 +0100 Subject: [PATCH] Added an Update Checker, closes #559 --- Changelog.txt | 1 + .../java/com/gmail/nossr50/config/Config.java | 2 + .../nossr50/listeners/PlayerListener.java | 5 ++ src/main/java/com/gmail/nossr50/mcMMO.java | 15 +++++ .../com/gmail/nossr50/util/UpdateCheck.java | 62 +++++++++++++++++++ src/main/resources/config.yml | 3 + .../resources/locale/locale_en_US.properties | 4 ++ src/main/resources/plugin.yml | 4 ++ 8 files changed, 96 insertions(+) create mode 100644 src/main/java/com/gmail/nossr50/util/UpdateCheck.java diff --git a/Changelog.txt b/Changelog.txt index e508b58fb..ac3c584c5 100644 --- a/Changelog.txt +++ b/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 diff --git a/src/main/java/com/gmail/nossr50/config/Config.java b/src/main/java/com/gmail/nossr50/config/Config.java index 7de193ce4..c3309cea9 100644 --- a/src/main/java/com/gmail/nossr50/config/Config.java +++ b/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); } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index a1c1ace9b..8870863ad 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/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")); + } } /** diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index bc1c7e6ab..cba26f4c3 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/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")); + } } /** diff --git a/src/main/java/com/gmail/nossr50/util/UpdateCheck.java b/src/main/java/com/gmail/nossr50/util/UpdateCheck.java new file mode 100644 index 000000000..9a7e75a61 --- /dev/null +++ b/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; + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 43655a73f..d8367c912 100644 --- a/src/main/resources/config.yml +++ b/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. diff --git a/src/main/resources/locale/locale_en_US.properties b/src/main/resources/locale/locale_en_US.properties index 70816dc1f..c14256496 100644 --- a/src/main/resources/locale/locale_en_US.properties +++ b/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. \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a85154e5c..e078861f5 100644 --- a/src/main/resources/plugin.yml +++ b/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 \ No newline at end of file