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