diff --git a/bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java index e352f92f..869b8f34 100644 --- a/bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java +++ b/bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java @@ -350,7 +350,7 @@ public class FaweBukkit implements IFawe, Listener { @Override public String getPlatform() { - return Bukkit.getVersion(); + return "bukkit"; } @Override diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index affe6b87..9494c970 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -14,6 +14,7 @@ import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.MemUtil; import com.boydti.fawe.util.StringMan; import com.boydti.fawe.util.TaskManager; +import com.boydti.fawe.util.Updater; import com.boydti.fawe.util.WEManager; import com.boydti.fawe.util.WESubscriber; import com.sk89q.jnbt.NBTInputStream; @@ -244,6 +245,14 @@ public class Fawe { */ this.setupInjector(); this.setupMemoryListener(); + + // Update + TaskManager.IMP.async(new Runnable() { + @Override + public void run() { + Updater.update(implementation.getPlatform(), getVersion()); + } + }); } private boolean isJava8 = MainUtil.getJavaVersion() >= 1.8; @@ -295,7 +304,7 @@ public class Fawe { scanner.close(); this.version = new FaweVersion(versionString); Settings.DATE = new Date(100 + version.year, version.month, version.day).toGMTString(); - Settings.BUILD = "http://ci.athion.net/job/FastAsyncWorldEdit/" + version.build; + Settings.BUILD = "https://ci.athion.net/job/FastAsyncWorldEdit/" + version.build; Settings.COMMIT = "https://github.com/boy0001/FastAsyncWorldedit/commit/" + Integer.toHexString(version.hash); } catch (Throwable ignore) {} Settings.load(file); diff --git a/core/src/main/java/com/boydti/fawe/FaweVersion.java b/core/src/main/java/com/boydti/fawe/FaweVersion.java index 3e5b7a07..cf16e8f7 100644 --- a/core/src/main/java/com/boydti/fawe/FaweVersion.java +++ b/core/src/main/java/com/boydti/fawe/FaweVersion.java @@ -21,4 +21,8 @@ public class FaweVersion { public String toString() { return "FastAsyncWorldEdit-" + year + "." + month + "." + day + "-" + Integer.toHexString(hash) + "-" + build; } + + public boolean isNewer(FaweVersion other) { + return other.build < this.build && (this.major > other.major || (this.major == other.major && this.minor > other.minor) || (this.major == other.major && this.minor == other.minor && this.patch > other.patch)); + } } diff --git a/core/src/main/java/com/boydti/fawe/util/Updater.java b/core/src/main/java/com/boydti/fawe/util/Updater.java new file mode 100644 index 00000000..13dad901 --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/util/Updater.java @@ -0,0 +1,42 @@ +package com.boydti.fawe.util; + +import com.boydti.fawe.Fawe; +import com.boydti.fawe.FaweVersion; +import java.io.File; +import java.io.FileOutputStream; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Scanner; + +public class Updater { + public static void update(String platform, FaweVersion currentVersion) { + if (currentVersion == null || platform == null) { + return; + } + try { + String downloadUrl = "http://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/artifact/target/FastAsyncWorldEdit-%platform%-%version%.jar"; + String versionUrl = "http://empcraft.com/fawe/version.php?%platform%"; + URL url = new URL(versionUrl.replace("%platform%", platform)); + try (Scanner reader = new Scanner(url.openStream())) { + String versionString = reader.next(); + FaweVersion version = new FaweVersion(versionString); + if (currentVersion == null || version.isNewer(currentVersion)) { + URL download = new URL(downloadUrl.replaceAll("%platform%", platform).replaceAll("%version%", versionString)); + try (ReadableByteChannel rbc = Channels.newChannel(download.openStream())) { + File jarFile = MainUtil.getJarFile(); + File outFile = new File(jarFile.getParent(), "update" + File.separator + jarFile.getName()); + File outFileParent = outFile.getParentFile(); + if (!outFileParent.exists()) { + outFileParent.mkdirs(); + } + try (FileOutputStream fos = new FileOutputStream(outFile)) { + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + } + Fawe.debug("Updated FAWE to " + versionString); + } + } + } + } catch (Throwable ignore) {} + } +} diff --git a/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/FaweNukkit.java b/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/FaweNukkit.java index 1eb5110e..f861178a 100644 --- a/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/FaweNukkit.java +++ b/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/FaweNukkit.java @@ -125,7 +125,7 @@ public class FaweNukkit implements IFawe, Listener { @Override public String getPlatform() { - return "Nukkit-" + plugin.getServer().getNukkitVersion(); + return "nukkit"; } @Override