From 96221a9d5b6373f15b01740bd6329629a81e5697 Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 24 Nov 2021 10:18:39 -0600 Subject: [PATCH] Update Checker Created an Update Checker --- .../justindevb/VulcanReplay/VulcanReplay.java | 22 +++++++++++ .../VulcanReplpay/util/UpdateChecker.java | 36 ++++++++++++++++++ .../VulcanReplay/VulcanReplay.class | Bin 7093 -> 8167 bytes .../VulcanReplpay/util/UpdateChecker.class | Bin 0 -> 3125 bytes target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 1 + target/original-VulcanReplay-1.3.jar | Bin 25249 -> 27669 bytes 8 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/justindevb/VulcanReplpay/util/UpdateChecker.java create mode 100644 target/classes/me/justindevb/VulcanReplpay/util/UpdateChecker.class diff --git a/src/main/java/me/justindevb/VulcanReplay/VulcanReplay.java b/src/main/java/me/justindevb/VulcanReplay/VulcanReplay.java index 59cd56b..3aa58d8 100644 --- a/src/main/java/me/justindevb/VulcanReplay/VulcanReplay.java +++ b/src/main/java/me/justindevb/VulcanReplay/VulcanReplay.java @@ -14,6 +14,8 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import me.justindevb.VulcanReplpay.util.UpdateChecker; + public class VulcanReplay extends JavaPlugin { private HashMap playerCache = new HashMap<>(); @@ -28,6 +30,13 @@ public void onEnable() { initBstats(); + checkForUpdate(); + + } + + @Override + public void onDisable() { + this.playerCache.clear(); } private void registerListener() { @@ -93,6 +102,7 @@ private void checkVulcanApi() { */ private void initConfig() { FileConfiguration config = getConfig(); + config.addDefault("General.Check-Update", true); config.addDefault("General.Nearby-Range", 30); List list = new ArrayList<>(); @@ -164,4 +174,16 @@ public void log(String msg, boolean severe) { getLogger().log(Level.INFO, msg); } + private void checkForUpdate() { + if (!getConfig().getBoolean("General.Check-Update")) + return; + new UpdateChecker(this, 97845).getVersion(version -> { + if (this.getDescription().getVersion().equals(version)) + log("You are up to date!", false); + else + log("There is an update available! Download at: https://www.spigotmc.org/resources/vulcan-replay.97845/", + true); + }); + } + } diff --git a/src/main/java/me/justindevb/VulcanReplpay/util/UpdateChecker.java b/src/main/java/me/justindevb/VulcanReplpay/util/UpdateChecker.java new file mode 100644 index 0000000..e3e7e12 --- /dev/null +++ b/src/main/java/me/justindevb/VulcanReplpay/util/UpdateChecker.java @@ -0,0 +1,36 @@ +package me.justindevb.VulcanReplpay.util; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Scanner; +import java.util.function.Consumer; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +//From: https://www.spigotmc.org/wiki/creating-an-update-checker-that-checks-for-updates +public class UpdateChecker { + + private final JavaPlugin plugin; + private final int resourceId; + + public UpdateChecker(JavaPlugin plugin, int resourceId) { + this.plugin = plugin; + this.resourceId = resourceId; + } + + public void getVersion(final Consumer consumer) { + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + try (InputStream inputStream = new URL( + "https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceId).openStream(); + Scanner scanner = new Scanner(inputStream)) { + if (scanner.hasNext()) { + consumer.accept(scanner.next()); + } + } catch (IOException exception) { + plugin.getLogger().info("Unable to check for updates: " + exception.getMessage()); + } + }); + } +} diff --git a/target/classes/me/justindevb/VulcanReplay/VulcanReplay.class b/target/classes/me/justindevb/VulcanReplay/VulcanReplay.class index 1053d3a2c97558ecffc37384409cd58814b681b9..c67b579c076b452670b62553feb369a9a54243b4 100644 GIT binary patch literal 8167 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 literal 7093 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 diff --git a/target/classes/me/justindevb/VulcanReplpay/util/UpdateChecker.class b/target/classes/me/justindevb/VulcanReplpay/util/UpdateChecker.class new file mode 100644 index 0000000000000000000000000000000000000000..831819a7c8dd943817a589c0e7398941371ea648 GIT binary patch literal 3125 zcmbVOTXPge6#ja%$t0VJ!Ejv(vVkZ`AQ{w%nnlq>k>Dl~HUxtgoXk#khn>s}a{=Q0 ze!uIBRr1WURT@O9S0=&gkcK&DNc=HnVWXG(v&4gO+23j|sF449<0+9UTfXDmtMGj4YYjnJ5S? zr(~X6(B>lB(4FI^XM6gx7KN6ro$yL}Xiij2qiXsz=Gjr%as+l4T)(U>MAfPlYRRG& zV;`jh&&EP|33i8yZfp?9_-5cnzF|(51jJ+pJ=myVlZwsQB5-GevGLfZfLb=gqERtR zku8x21_m1;gZhq^$ls96_mG%vDzdnXA^Q=1H3kZ|7iYc@hY}O87&%60xsEpBIzhB# z`uV|RHzxUb zqm?l9f-z0gJ!>TJtg;&}86z@0+brt_(PyMd|TS%HnKbj>ms&&#~dU`U}q_3>744%ge3SLz45>5;BHI&fW4Mw1YJ)+>2 z%d$cA)(3rG=8-&-1HA+`pf-6(mK; z{RX#cl}g}FYqg+RG>J@e)=KxxdZsqXtR^sJx{9H0RHt;Wc4(PmeCZvw;$v;POh;r+ z@Wvi@-7pA!-J3GQidzc0+wfin@8bgnAFB8W9}Db?(M!F8*VSG(#OZh*#>CdFBv?*H3NAlKJz?AA5d3Ej4f zR%qropsicMXBoaHK38!8XL*%P$}T%$>+D5=g0BSbxrwB;;#KgCz}@SMvVkV#@GfZQ z`wIN^$OjW=J@Prju?6g%IK%%czvksDjAQrEWr(4@KSLSn{TW?9aw!Fy|2;_8{x_ln zn{Wr;Jxg54C2DZs@{0yy7!l7TP>KK^&T^D6r)fpHv-ua?IrI}j_Wp{kz!hw7!AS|$ z5`)P%A>TlR*&TyyNtAAYY=)13hC@oJ9BGg%5ohN(PvQKAlq8wo1QkCJw2kW*ucB}M zDt6Cb#yvgvu3&&3bgf|D3bf03UfLVGJRUao$%?;s~DM*oTu?;87&+8yvDQo0lQ*CM`N^MEaMeglQ^$(KNZWojyGbuFW#X0VvX)Mi8q7J zzrZ)coPx2#3TFOcg0(7WSMYSQ$TbN5wO>c-Xe`i)bb~;$t6YZ|SMZ!npSNf>g}3nz ZM|qm>a_tj*%HJ1U$#CUMe2s6B{TDA|P(J_w literal 0 HcmV?d00001 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties index 522aba1..9e04477 100644 --- a/target/maven-archiver/pom.properties +++ b/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Wed Nov 24 09:35:49 CST 2021 +#Wed Nov 24 10:02:13 CST 2021 groupId=me.justindevb artifactId=VulcanReplay version=1.3 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index fb44149..d09d2c7 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -8,6 +8,7 @@ me\justindevb\VulcanReplay\DiscordWebhook$EmbedObject.class me\justindevb\VulcanReplay\VulcanListener$1.class me\justindevb\VulcanReplay\PlayerListener.class me\justindevb\VulcanReplay\DiscordWebhook$EmbedObject$Footer.class +me\justindevb\VulcanReplpay\util\UpdateChecker.class me\justindevb\VulcanReplay\DiscordWebhook$EmbedObject$Field.class me\justindevb\VulcanReplay\PlayerCache.class me\justindevb\VulcanReplay\DiscordWebhook$1.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 16b8457..f84f205 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,3 +1,4 @@ +C:\Users\Justin\eclipse-workspace\VulcanReplay\src\main\java\me\justindevb\VulcanReplpay\util\UpdateChecker.java C:\Users\Justin\eclipse-workspace\VulcanReplay\src\main\java\me\justindevb\VulcanReplay\PlayerCache.java C:\Users\Justin\eclipse-workspace\VulcanReplay\src\main\java\me\justindevb\VulcanReplay\PlayerListener.java C:\Users\Justin\eclipse-workspace\VulcanReplay\src\main\java\me\justindevb\VulcanReplay\VulcanListener.java diff --git a/target/original-VulcanReplay-1.3.jar b/target/original-VulcanReplay-1.3.jar index a92cbc775de1d0203bed4b7439191f3108df2f2d..d0803725445bd748ac33ae7ff167fc4b5323e86e 100644 GIT binary patch delta 6369 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