Skip to content
Snippets Groups Projects
Commit 32e769ec authored by Dennis Bonke's avatar Dennis Bonke
Browse files

Updated Update Checker and Added tooltips. Version 0.2.1B3.

parent 586ada3f
No related branches found
No related tags found
No related merge requests found
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
......@@ -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();
......
......@@ -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;
}
}
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);
}
}
}
}
// 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment