From 32e769ecab1f43a4c3b9d4b76aa5519b77658fe1 Mon Sep 17 00:00:00 2001
From: Dennisbonke <dennisb@kabelfoon.net>
Date: Mon, 13 Apr 2015 09:11:40 +0200
Subject: [PATCH] Updated Update Checker and Added tooltips. Version 0.2.1B3.

---
 VERSION                                       |   2 +-
 .../java/com/advancedmods/amcore/AMCore.java  |   5 +-
 .../core/mod/updater/ReleaseVersion.java      | 335 ++++++++----------
 .../core/mod/updater/UpdateManager.java       | 191 +++++-----
 .../resources/assets/amcore/lang/en_US.lang   |   4 +
 5 files changed, 262 insertions(+), 275 deletions(-)
 create mode 100644 src/main/resources/assets/amcore/lang/en_US.lang

diff --git a/VERSION b/VERSION
index dbd1562..fc4e8f2 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.7.10R0.2.1B1 Beta 2! Added: -Some Utilities from Testing. Changed: -Configs.
\ No newline at end of file
+1.7.10R0.2.1B3 Beta 3! Updated the Update Checker and added Tooltips.
\ No newline at end of file
diff --git a/src/main/java/com/advancedmods/amcore/AMCore.java b/src/main/java/com/advancedmods/amcore/AMCore.java
index a1e6e70..44ee427 100644
--- a/src/main/java/com/advancedmods/amcore/AMCore.java
+++ b/src/main/java/com/advancedmods/amcore/AMCore.java
@@ -34,6 +34,7 @@ public class AMCore extends BaseMod {
     public static CommonProxy proxy;
     public static Logger log = LogManager.getLogger("AMCore");
     public static final String updateURL = "https://raw.github.com/AdvancedMods/AMCore/master/VERSION";
+    public static final String downloadURL = "http://ci.zsinfo.nl/job/AMCore/lastSuccessfulBuild/";
     public static ConfigurationHandler config;
 
     @EventHandler
@@ -54,7 +55,7 @@ public class AMCore extends BaseMod {
         if (config.enableUpdateChecker) {
             try {
                 log.info("Starting Update Checker for AMCore...");
-                UpdateManager.registerUpdater(new UpdateManager(this, updateURL, null));
+                UpdateManager.registerUpdater(new UpdateManager(this, updateURL, downloadURL));
                 log.info("Update Checker for AMCore started");
             } catch (Exception e) {
                 log.error("Failed to start the update checker, printing stacktrace...");
@@ -65,7 +66,7 @@ public class AMCore extends BaseMod {
         } else {
             log.error("Could not read config value, ignoring...");
             try {
-                UpdateManager.registerUpdater(new UpdateManager(this, updateURL, null));
+                UpdateManager.registerUpdater(new UpdateManager(this, updateURL, downloadURL));
             } catch (Exception e) {
                 log.error("Failed to start the update checker, printing stacktrace...");
                 e.printStackTrace();
diff --git a/src/main/java/com/advancedmods/amcore/core/mod/updater/ReleaseVersion.java b/src/main/java/com/advancedmods/amcore/core/mod/updater/ReleaseVersion.java
index a1a2115..056c6d9 100644
--- a/src/main/java/com/advancedmods/amcore/core/mod/updater/ReleaseVersion.java
+++ b/src/main/java/com/advancedmods/amcore/core/mod/updater/ReleaseVersion.java
@@ -4,252 +4,201 @@ import cpw.mods.fml.common.versioning.ArtifactVersion;
 
 public class ReleaseVersion implements ArtifactVersion {
 
-	private final String _label;
-	private final int _major;
-	private final int _minor;
-	private final int _patch;
-    private final int _build;
-	private final int _rc;
-	private final int _beta;
-    private final int _alpha;
-
-	public ReleaseVersion(String label, int major, int minor, int patch, int build) {
-
-		this(label, major, minor, patch, build, 0, 0, 0);
-	}
-
-	public ReleaseVersion(String label, int major, int minor, int patch, int build, int rc, int beta, int alpha) {
-
-		_label = label;
-		_major = major;
-		_minor = minor;
-		_patch = patch;
-        _build = build;
-		_rc = rc;
-		_beta = beta;
-        _alpha = alpha;
-	}
-
-	public ReleaseVersion(String label, String s) {
-
-		int major = 0;
-		int minor = 0;
-		int patch = 0;
-        int build = 0;
-		int rc = 0;
-		int beta = 0;
-        int alpha = 0;
-		String main = s;
-		String[] parts;
-
-		parts = main.split("RC");
-		if (parts.length > 1) {
-			rc = Integer.parseInt(parts[1]);
-            build = Integer.valueOf(parts[1].split("-")[1]);
-			main = parts[0];
-		}
-		parts = main.split("B");
-		if (parts.length > 1) {
-			beta = Integer.parseInt(parts[1].split("-")[0]);
-            build = Integer.valueOf(parts[1].split("-")[1]);
-			main = parts[0];
-		}
-        parts = main.split("A");
-        if (parts.length > 1) {
-            alpha = Integer.parseInt(parts[1].split("-")[0]);
-            build = Integer.valueOf(parts[1].split("-")[1]);
-            main = parts[0];
-        }
-		parts = main.split("\\.");
-		switch (parts.length) {
+    private final String _label;
+    private final int _major;
+    private final int _minor;
+    private final int _patch;
+    private final int _rc;
+    private final int _beta;
 
-		default:
-        case 4:
-            build = Integer.parseInt(parts[3]);
-        case 3:
-			patch = Integer.parseInt(parts[2]);
-		case 2:
-			minor = Integer.parseInt(parts[1]);
-		case 1:
-			major = Integer.parseInt(parts[0]);
-		case 0:
-			break;
-		}
+    public ReleaseVersion(String label, int major, int minor, int patch) {
 
-		_label = label;
-		_major = major;
-		_minor = minor;
-		_patch = patch;
-        _build = build;
-		_rc = rc;
-		_beta = beta;
-        _alpha = alpha;
-	}
+        this(label, major, minor, patch, 0, 0);
+    }
 
-	public static ReleaseVersion parse(String label, String s) {
+    public ReleaseVersion(String label, int major, int minor, int patch, int rc, int beta) {
 
-		return new ReleaseVersion(label, s);
-	}
+        _label = label;
+        _major = major;
+        _minor = minor;
+        _patch = patch;
+        _rc = rc;
+        _beta = beta;
+    }
 
-	public int major() {
+    public ReleaseVersion(String label, String s) {
 
-		return _major;
-	}
+        int major = 0;
+        int minor = 0;
+        int patch = 0;
+        int rc = 0;
+        int beta = 0;
+        String main = s;
+        String[] parts;
 
-	public int minor() {
+        parts = main.split("RC");
+        if (parts.length > 1) {
+            rc = Integer.parseInt(parts[1]);
+            main = parts[0];
+        }
+        parts = main.split("B");
+        if (parts.length > 1) {
+            beta = Integer.parseInt(parts[1]);
+            main = parts[0];
+        }
+        parts = main.split("\\.");
+        switch (parts.length) {
+
+            default:
+            case 3:
+                patch = Integer.parseInt(parts[2]);
+            case 2:
+                minor = Integer.parseInt(parts[1]);
+            case 1:
+                major = Integer.parseInt(parts[0]);
+            case 0:
+                break;
+        }
 
-		return _minor;
-	}
+        _label = label;
+        _major = major;
+        _minor = minor;
+        _patch = patch;
+        _rc = rc;
+        _beta = beta;
+    }
 
-	public int patch() {
+    public static ReleaseVersion parse(String label, String s) {
 
-		return _patch;
-	}
+        return new ReleaseVersion(label, s);
+    }
 
-    public int build() {
+    public int major() {
 
-        return _build;
+        return _major;
     }
 
-	public int rc() {
+    public int minor() {
 
-		return _rc;
-	}
+        return _minor;
+    }
 
-	public int beta() {
+    public int patch() {
 
-		return _beta;
-	}
+        return _patch;
+    }
 
-    public int alpha() {
+    public int rc() {
 
-        return _alpha;
+        return _rc;
     }
 
-	public boolean isStable() {
+    public int beta() {
 
-		return _rc == 0 & _beta == 0;
-	}
+        return _beta;
+    }
 
-	public boolean isRC() {
+    public boolean isStable() {
 
-		return _rc > 0;
-	}
+        return _rc == 0 & _beta == 0;
+    }
 
-	public boolean isBeta() {
+    public boolean isRC() {
 
-		return _beta > 0;
-	}
+        return _rc > 0;
+    }
 
-    public boolean isAlpha() {
+    public boolean isBeta() {
 
-        return _alpha > 0;
+        return _beta > 0;
     }
 
-	@Override
-	public int compareTo(ArtifactVersion o) {
+    @Override
+    public int compareTo(ArtifactVersion o) {
 
-		if (o instanceof ReleaseVersion) {
-			return compareTo((ReleaseVersion) o);
-		}
-		if (o instanceof ModVersion) {
-			ModVersion r = (ModVersion) o;
-			if (_label.equals(r.getLabel())) {
-				return compareTo(r.modVersion());
-			} else if ("Minecraft".equals(_label)) {
-				return compareTo(r.minecraftVersion());
-			}
-		}
-		return 0;
-	}
+        if (o instanceof ReleaseVersion) {
+            return compareTo((ReleaseVersion) o);
+        }
+        if (o instanceof ModVersion) {
+            ModVersion r = (ModVersion) o;
+            if (_label.equals(r.getLabel())) {
+                return compareTo(r.modVersion());
+            } else if ("Minecraft".equals(_label)) {
+                return compareTo(r.minecraftVersion());
+            }
+        }
+        return 0;
+    }
 
-	public int compareTo(ReleaseVersion arg0) {
+    public int compareTo(ReleaseVersion arg0) {
 
-		if (this.major() != arg0.major()) {
-			return this.major() < arg0.major() ? -1 : 1;
-		}
-		if (this.minor() != arg0.minor()) {
-			return this.minor() < arg0.minor() ? -1 : 1;
-		}
-		if (this.patch() != arg0.patch()) {
-			return this.patch() < arg0.patch() ? -1 : 1;
-		}
-        if (this.build() != arg0.build()) {
-            return this.build() < arg0.build() ? -1 : 1;
+        if (this.major() != arg0.major()) {
+            return this.major() < arg0.major() ? -1 : 1;
+        }
+        if (this.minor() != arg0.minor()) {
+            return this.minor() < arg0.minor() ? -1 : 1;
+        }
+        if (this.patch() != arg0.patch()) {
+            return this.patch() < arg0.patch() ? -1 : 1;
         }
 
-		if (this.isStable() && !arg0.isStable()) {
-			return 1;
-		}
-		if (this.isRC() && arg0.isBeta()) {
-			return 1;
-		}
-        if (this.isRC() && arg0.isAlpha()) {
+        if (this.isStable() && !arg0.isStable()) {
+            return 1;
+        }
+        if (this.isRC() && arg0.isBeta()) {
             return 1;
         }
-		if (!this.isStable() && arg0.isStable()) {
-			return -1;
-		}
-		if (this.isBeta() && arg0.isRC()) {
-			return -1;
-		}
-        if (this.isAlpha() && arg0.isRC()) {
+        if (!this.isStable() && arg0.isStable()) {
             return -1;
         }
-        if (this.isAlpha() && arg0.isBeta()) {
+        if (this.isBeta() && arg0.isRC()) {
             return -1;
         }
 
-		if (this.rc() != arg0.rc()) {
-			return this.rc() < arg0.rc() ? -1 : 1;
-		}
-		if (this.beta() != arg0.beta()) {
-			return this.beta() < arg0.beta() ? -1 : 1;
-		}
-        if (this.alpha() != arg0.alpha()) {
-            return this.alpha() < arg0.alpha() ? -1 : 1;
+        if (this.rc() != arg0.rc()) {
+            return this.rc() < arg0.rc() ? -1 : 1;
         }
-		return 0;
-	}
+        if (this.beta() != arg0.beta()) {
+            return this.beta() < arg0.beta() ? -1 : 1;
+        }
+        return 0;
+    }
 
-	@Override
-	public String toString() {
+    @Override
+    public String toString() {
 
-		return _label + " " + getVersionString();
-	}
+        return _label + " " + getVersionString();
+    }
 
-	@Override
-	public String getVersionString() {
+    @Override
+    public String getVersionString() {
 
-		String v = _major + "." + _minor + "." + _patch + "." + _build;
-		if (_rc != 0) {
-			v += "RC" + _rc;
-		}
-		if (_beta != 0) {
-			v += "B" + _beta;
-		}
-        if (_alpha != 0) {
-            v += "A" + _alpha;
+        String v = _major + "." + _minor + "." + _patch;
+        if (_rc != 0) {
+            v += "RC" + _rc;
+        }
+        if (_beta != 0) {
+            v += "B" + _beta;
         }
-		return v;
-	}
+        return v;
+    }
 
-	@Override
-	public String getLabel() {
+    @Override
+    public String getLabel() {
 
-		return _label;
-	}
+        return _label;
+    }
 
-	@Override
-	public boolean containsVersion(ArtifactVersion source) {
+    @Override
+    public boolean containsVersion(ArtifactVersion source) {
 
-		return compareTo(source) == 0;
-	}
+        return compareTo(source) == 0;
+    }
 
-	@Override
-	public String getRangeString() {
+    @Override
+    public String getRangeString() {
 
-		return null;
-	}
+        return null;
+    }
 
 }
diff --git a/src/main/java/com/advancedmods/amcore/core/mod/updater/UpdateManager.java b/src/main/java/com/advancedmods/amcore/core/mod/updater/UpdateManager.java
index 27890cf..291c68c 100644
--- a/src/main/java/com/advancedmods/amcore/core/mod/updater/UpdateManager.java
+++ b/src/main/java/com/advancedmods/amcore/core/mod/updater/UpdateManager.java
@@ -1,97 +1,130 @@
 package com.advancedmods.amcore.core.mod.updater;
 
 import com.advancedmods.amcore.common.handler.ConfigurationHandler;
-import com.advancedmods.amcore.core.AMCoreProps;
 import com.google.common.base.Strings;
 import cpw.mods.fml.common.FMLCommonHandler;
 import cpw.mods.fml.common.eventhandler.SubscribeEvent;
 import cpw.mods.fml.common.gameevent.TickEvent.Phase;
 import cpw.mods.fml.common.gameevent.TickEvent.PlayerTickEvent;
 import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.event.ClickEvent;
+import net.minecraft.event.HoverEvent;
+import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChatComponentTranslation;
 import net.minecraft.util.ChatStyle;
 import net.minecraft.util.IChatComponent;
 
-import static net.minecraft.util.EnumChatFormatting.*;
+import static net.minecraft.util.EnumChatFormatting.AQUA;
+import static net.minecraft.util.EnumChatFormatting.GOLD;
+import static net.minecraft.util.EnumChatFormatting.GRAY;
+import static net.minecraft.util.EnumChatFormatting.GREEN;
+import static net.minecraft.util.EnumChatFormatting.WHITE;
+import static net.minecraft.util.EnumChatFormatting.YELLOW;
 
 public class UpdateManager {
 
-	private static transient int pollOffset = 0;
-	private static final ChatStyle description = new ChatStyle();
-	private static final ChatStyle version = new ChatStyle();
-	static {
-
-		description.setColor(GRAY);
-		version.setColor(AQUA);
-	}
-
-	public static void registerUpdater(UpdateManager manager) {
-
-		FMLCommonHandler.instance().bus().register(manager);
-	}
-
-	private boolean _notificationDisplayed;
-	private final IUpdatableMod _mod;
-	private final UpdateCheckThread _updateThread;
-	private final String _downloadUrl;
-	private int lastPoll = 400;
-
-	public UpdateManager(IUpdatableMod mod) {
-
-		this(mod, null);
-	}
-
-	public UpdateManager(IUpdatableMod mod, String releaseUrl) {
-
-		this(mod, releaseUrl, null);
-	}
-
-	public UpdateManager(IUpdatableMod mod, String releaseUrl, String downloadUrl) {
-
-		_mod = mod;
-		_updateThread = new UpdateCheckThread(mod, releaseUrl);
-		_updateThread.start();
-		_downloadUrl = downloadUrl;
-		lastPoll += (pollOffset += 140);
-	}
-
-	@SubscribeEvent
-	public void tickStart(PlayerTickEvent evt) {
-
-		if (evt.phase != Phase.START) {
-			return;
-		}
-		if (lastPoll > 0) {
-			--lastPoll;
-			return;
-		}
-		lastPoll = 400;
-
-		if (!_notificationDisplayed && _updateThread.checkComplete()) {
-			_notificationDisplayed = true;
-			FMLCommonHandler.instance().bus().unregister(this);
-			if (_updateThread.newVersionAvailable()) {
-				if (!ConfigurationHandler.enableUpdateNotice && !_updateThread.isCriticalUpdate()) {
-					return;
-				}
-				ModVersion newVersion = _updateThread.newVersion();
-
-				EntityPlayer player = evt.player;
-				player.addChatMessage(new ChatComponentText(GOLD + "[" + _mod.getModName() + "]").appendText(WHITE + " A new version is available:"));
-				IChatComponent chat;
-				String text = newVersion.modVersion().toString();
-				if (Strings.isNullOrEmpty(_downloadUrl)) {
-					chat = new ChatComponentText(text).setChatStyle(version);
-				} else {
-					chat = IChatComponent.Serializer.func_150699_a("[{\"text\":\"" + text + "\",\"color\":\"aqua\"}," + "{\"text\":\" " + WHITE + "[" + GREEN
-							+ "Download" + WHITE + "]\"," + "\"color\":\"green\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":"
-							+ "{\"text\":\"Click this to download the latest version\",\"color\":\"yellow\"}},"
-							+ "\"clickEvent\":{\"action\":\"open_url\",\"value\":\"" + _downloadUrl + "\"}}]");
-				}
-				player.addChatMessage(chat);
-				player.addChatMessage(new ChatComponentText(newVersion.description()).setChatStyle(description));
-			}
-		}
-	}
+    private static transient int pollOffset = 0;
+    private static final ChatStyle description = new ChatStyle();
+    private static final ChatStyle version = new ChatStyle();
+    private static final ChatStyle modname = new ChatStyle();
+    private static final ChatStyle download = new ChatStyle();
+    private static final ChatStyle white = new ChatStyle();
+    static {
+
+        description.setColor(GRAY);
+        version.setColor(AQUA);
+        modname.setColor(GOLD);
+        download.setColor(GREEN);
+        white.setColor(WHITE);
+
+        {
+            ChatStyle tooltip = new ChatStyle();
+            tooltip.setColor(YELLOW);
+            IChatComponent msg = new ChatComponentTranslation("info.amcore.updater.tooltip").setChatStyle(tooltip);
+            download.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, msg));
+        }
+    }
+
+    public static void registerUpdater(UpdateManager manager) {
+
+        FMLCommonHandler.instance().bus().register(manager);
+    }
+
+    private boolean _notificationDisplayed;
+    private final IUpdatableMod _mod;
+    private final UpdateCheckThread _updateThread;
+    private final String _downloadUrl;
+    private int lastPoll = 400;
+
+    public UpdateManager(IUpdatableMod mod) {
+
+        this(mod, null);
+    }
+
+    public UpdateManager(IUpdatableMod mod, String releaseUrl) {
+
+        this(mod, releaseUrl, null);
+    }
+
+    public UpdateManager(IUpdatableMod mod, String releaseUrl, String downloadUrl) {
+
+        _mod = mod;
+        _updateThread = new UpdateCheckThread(mod, releaseUrl);
+        _updateThread.start();
+        _downloadUrl = downloadUrl;
+        lastPoll += (pollOffset += 140);
+    }
+
+    @SubscribeEvent
+    public void tickStart(PlayerTickEvent evt) {
+
+        if (evt.phase != Phase.START) {
+            return;
+        }
+        if (MinecraftServer.getServer() != null) {
+            if (!MinecraftServer.getServer().getConfigurationManager().func_152596_g(evt.player.getGameProfile())) {
+                return;
+            }
+        }
+        if (lastPoll > 0) {
+            --lastPoll;
+            return;
+        }
+        lastPoll = 400;
+
+        if (!_notificationDisplayed && _updateThread.checkComplete()) {
+            _notificationDisplayed = true;
+            FMLCommonHandler.instance().bus().unregister(this);
+            if (_updateThread.newVersionAvailable()) {
+                if (!ConfigurationHandler.enableUpdateNotice && !_updateThread.isCriticalUpdate()) {
+                    return;
+                }
+                ModVersion newVersion = _updateThread.newVersion();
+
+                EntityPlayer player = evt.player;
+                IChatComponent chat = new ChatComponentText("");
+                {
+                    ChatStyle data = modname.createShallowCopy();
+                    IChatComponent msg = new ChatComponentText(newVersion.modVersion().toString()).setChatStyle(version);
+                    data.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, msg));
+                    chat.appendSibling(new ChatComponentText("[" + _mod.getModName() + "] ").setChatStyle(data));
+                }
+                chat.appendSibling(new ChatComponentTranslation("info.amcore.updater.version").setChatStyle(white));
+                chat.appendText(GOLD + ":");
+                player.addChatMessage(chat);
+                chat = new ChatComponentText("");
+                if (!Strings.isNullOrEmpty(_downloadUrl)) {
+                    chat.appendText(WHITE + "[");
+                    ChatStyle data = download.createShallowCopy();
+                    data.setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, _downloadUrl));
+                    chat.appendSibling(new ChatComponentTranslation("info.amcore.updater.download").setChatStyle(data));
+                    chat.appendText(WHITE + "] ");
+                }
+                chat.appendSibling(new ChatComponentText(newVersion.description()).setChatStyle(description));
+                player.addChatMessage(chat);
+            }
+        }
+    }
 
 }
diff --git a/src/main/resources/assets/amcore/lang/en_US.lang b/src/main/resources/assets/amcore/lang/en_US.lang
new file mode 100644
index 0000000..86233ed
--- /dev/null
+++ b/src/main/resources/assets/amcore/lang/en_US.lang
@@ -0,0 +1,4 @@
+// Updater
+info.amcore.updater.download=Download
+info.amcore.updater.tooltip=Click to download the latest version
+info.amcore.updater.version=A new version is available
\ No newline at end of file
-- 
GitLab