diff --git a/Bukkit/build.gradle b/Bukkit/build.gradle index 6e2c1e3a8..eb3963461 100644 --- a/Bukkit/build.gradle +++ b/Bukkit/build.gradle @@ -22,7 +22,6 @@ dependencies { implementation("org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT") compile(group: "com.sk89q.worldedit", name: "worldedit-bukkit", version: "7.0.1") compile("io.papermc:paperlib:1.0.2") - compile(group: "com.squareup.retrofit2", name: "retrofit", version: "2.4.0") implementation("net.kyori:text-adapter-bukkit:3.0.3") compile("com.github.MilkBowl:VaultAPI:1.7") { exclude(module: "bukkit") @@ -79,12 +78,6 @@ task copyFiles { shadowJar { dependencies { include(dependency(":Core")) - // update notification stuff - include(dependency("com.github.Sauilitired:Jenkins4J:2.0-SNAPSHOT")) - include(dependency("com.squareup.retrofit2:retrofit:2.4.0")) - include(dependency("com.squareup.okhttp3:okhttp:4.2.2")) - include(dependency("com.squareup.okio:okio:2.4.1")) - include(dependency("org.jetbrains.kotlin:kotlin-stdlib:1.3.61")) include(dependency("io.papermc:paperlib:1.0.2")) include(dependency("net.kyori:text-adapter-bukkit:3.0.3")) } diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java index f28bc3c97..00110287f 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/BukkitMain.java @@ -60,7 +60,7 @@ import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandlerImplementation; -import com.github.intellectualsites.plotsquared.plot.util.UpdateUtility; +import com.github.intellectualsites.plotsquared.bukkit.util.UpdateUtility; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.block.QueueProvider; import com.github.intellectualsites.plotsquared.plot.uuid.UUIDWrapper; @@ -161,37 +161,7 @@ public final class BukkitMain extends JavaPlugin implements Listener, IPlotMain return; } - // Check for updates - if (PlotSquared.get().getUpdateUtility() != null) { - final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility(); - updateUtility.checkForUpdate(PlotSquared.get().getVersion().versionString(), - ((updateDescription, throwable) -> { - Bukkit.getScheduler().runTask(BukkitMain.this, () -> { - getLogger().info("-------- PlotSquared Update Check --------"); - if (throwable != null) { - getLogger().severe(String - .format("Could not check for updates. Reason: %s", - throwable.getMessage())); - } else { - if (updateDescription == null) { - getLogger().info( - "You appear to be running the latest version of PlotSquared. Congratulations!"); - } else { - getLogger() - .info("There appears to be a PlotSquared update available!"); - getLogger().info(String.format( - "You are running version %s, the newest available version is %s", - getPluginVersionString(), updateDescription.getVersion())); - getLogger().info( - String.format("Update URL: %s", updateDescription.getUrl())); - } - } - getLogger().info("-------- PlotSquared Update Check --------"); - }); - })); - } else { - getLogger().warning("Update checking disabled. Skipping."); - } + new UpdateUtility(this).updateChecker(); this.startMetrics(); if (Settings.Enabled_Components.WORLDS) { diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/PlayerEvents.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/PlayerEvents.java index 69752719f..66977d308 100644 --- a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/PlayerEvents.java +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/listeners/PlayerEvents.java @@ -1,25 +1,16 @@ package com.github.intellectualsites.plotsquared.bukkit.listeners; import com.destroystokyo.paper.MaterialTags; -import com.github.intellectualsites.plotsquared.bukkit.BukkitMain; -import com.github.intellectualsites.plotsquared.bukkit.object.BukkitBlockUtil; import com.github.intellectualsites.plotsquared.bukkit.object.BukkitPlayer; import com.github.intellectualsites.plotsquared.bukkit.util.BukkitUtil; +import com.github.intellectualsites.plotsquared.bukkit.util.UpdateUtility; import com.github.intellectualsites.plotsquared.plot.PlotSquared; import com.github.intellectualsites.plotsquared.plot.config.Captions; import com.github.intellectualsites.plotsquared.plot.config.Settings; import com.github.intellectualsites.plotsquared.plot.flag.Flags; import com.github.intellectualsites.plotsquared.plot.listener.PlayerBlockEventType; import com.github.intellectualsites.plotsquared.plot.listener.PlotListener; -import com.github.intellectualsites.plotsquared.plot.object.Location; -import com.github.intellectualsites.plotsquared.plot.object.Plot; -import com.github.intellectualsites.plotsquared.plot.object.PlotArea; -import com.github.intellectualsites.plotsquared.plot.object.PlotHandler; -import com.github.intellectualsites.plotsquared.plot.object.PlotId; -import com.github.intellectualsites.plotsquared.plot.object.PlotInventory; -import com.github.intellectualsites.plotsquared.plot.object.PlotMessage; -import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; -import com.github.intellectualsites.plotsquared.plot.object.StringWrapper; +import com.github.intellectualsites.plotsquared.plot.object.*; import com.github.intellectualsites.plotsquared.plot.util.EntityUtil; import com.github.intellectualsites.plotsquared.plot.util.EventUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil; @@ -28,16 +19,13 @@ import com.github.intellectualsites.plotsquared.plot.util.Permissions; import com.github.intellectualsites.plotsquared.plot.util.RegExUtil; import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler; -import com.github.intellectualsites.plotsquared.plot.util.UpdateUtility; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.world.block.BlockType; -import com.sk89q.worldedit.world.item.ItemType; import io.papermc.lib.PaperLib; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.FluidCollisionMode; import org.bukkit.Material; -import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -135,7 +123,12 @@ import org.bukkit.projectiles.BlockProjectileSource; import org.bukkit.projectiles.ProjectileSource; import org.bukkit.util.Vector; +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.lang.reflect.Field; +import java.net.URL; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -145,7 +138,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.UUID; -import java.util.function.Supplier; import java.util.regex.Pattern; /** @@ -159,6 +151,8 @@ import java.util.regex.Pattern; private boolean tmpTeleport = true; private Field fieldPlayer; private PlayerMoveEvent moveTmp; + private String internalVersion; + private String spigotVersion; { try { @@ -729,35 +723,24 @@ import java.util.regex.Pattern; }, 20); if (pp.hasPermission(Captions.PERMISSION_ADMIN_UPDATE_NOTIFICATION.getTranslated()) - && PlotSquared.get().getUpdateUtility() != null) { - final UpdateUtility updateUtility = PlotSquared.get().getUpdateUtility(); - final BukkitMain bukkitMain = BukkitMain.getPlugin(BukkitMain.class); - updateUtility.checkForUpdate(PlotSquared.get().getVersion().versionString(), - ((updateDescription, throwable) -> { - if (throwable != null) { - bukkitMain.getLogger().severe(String - .format("Could not check for update. Reason: %s", - throwable.getMessage())); - } else { - if (updateDescription != null) { - new PlotMessage("-------- ").color("$2") - .text("PlotSquared Update Notification").color("$1") - .text(" --------").color("$2").send(pp); - new PlotMessage("There appears to be a PlotSquared update available!") - .color("$1").send(pp); - new PlotMessage(String.format( - "You are running version %s, the newest available version is %s", - bukkitMain.getPluginVersionString(), - updateDescription.getVersion())).color("$1").send(pp); - new PlotMessage("Update URL").color("$1").text(": ").color("$2") - .text(updateDescription.getUrl()).tooltip("Download update") - .send(pp); - new PlotMessage("-------- ").color("$2") - .text("PlotSquared Update Notification").color("$1") - .text(" --------").color("$2").send(pp); - } - } - })); + && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) { + try { + HttpsURLConnection connection = (HttpsURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=1177").openConnection(); + connection.setRequestMethod("GET"); + spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + } catch (IOException e) { + new PlotMessage(Captions.PREFIX + "Unable to check for updates, check console for further information.").color("$13"); + PlotSquared.log(Captions.PREFIX + "&cUnable to check for updates because: " + e); + return; + } + + if (!UpdateUtility.internalVersion.equals(UpdateUtility.spigotVersion)) { + new PlotMessage("-----------------------------------").send(pp); + new PlotMessage(Captions.PREFIX + "There appears to be a PlotSquared update available!").color("$1").tooltip("https://www.spigotmc.org/resources/1177/updates").send(pp); + new PlotMessage(Captions.PREFIX + "The latest version is " + spigotVersion).color("$1").tooltip("https://www.spigotmc.org/resources/1177/updates").send(pp); + new PlotMessage(Captions.PREFIX + "https://www.spigotmc.org/resources/1177/updates").color("$1").tooltip("https://www.spigotmc.org/resources/1177/updates").send(pp); + new PlotMessage("-----------------------------------").send(pp); + } } } diff --git a/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/UpdateUtility.java b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/UpdateUtility.java new file mode 100644 index 000000000..7206fb249 --- /dev/null +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/UpdateUtility.java @@ -0,0 +1,56 @@ +package com.github.intellectualsites.plotsquared.bukkit.util; + +import com.github.intellectualsites.plotsquared.plot.PlotSquared; +import com.github.intellectualsites.plotsquared.plot.config.Captions; +import com.github.intellectualsites.plotsquared.plot.config.Settings; +import org.bukkit.Bukkit; +import org.bukkit.event.Listener; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +import javax.net.ssl.HttpsURLConnection; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; + +public class UpdateUtility implements Listener { + + public static String internalVersion; + public static String spigotVersion; + public final JavaPlugin javaPlugin; + + public UpdateUtility(final JavaPlugin javaPlugin) { + this.javaPlugin = javaPlugin; + internalVersion = javaPlugin.getDescription().getVersion(); + } + + public void updateChecker() { + new BukkitRunnable() { + public void run() { + Bukkit.getScheduler().runTaskAsynchronously(UpdateUtility.this.javaPlugin, () -> { + if (Settings.Enabled_Components.UPDATE_NOTIFICATIONS) { + try { + HttpsURLConnection connection = (HttpsURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=1177").openConnection(); + connection.setRequestMethod("GET"); + spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + } catch (IOException e) { + PlotSquared.log(Captions.PREFIX + "&cUnable to check for updates because: " + e); + this.cancel(); + return; + } + + if (!internalVersion.equals(spigotVersion)) { + PlotSquared.log(Captions.PREFIX + "&6There appears to be a PlotSquared update available!"); + PlotSquared.log(Captions.PREFIX + "&6You are running version " + internalVersion + ", &6latest version is " + spigotVersion); + PlotSquared.log(Captions.PREFIX + "&6https://www.spigotmc.org/resources/1177/updates"); + } else { + PlotSquared.log(Captions.PREFIX + "Congratulations! You are running the latest PlotSquared version."); + } + } + this.cancel(); + }); + } + }.runTaskTimer(this.javaPlugin, 0L, 12000L); + } +} \ No newline at end of file diff --git a/Core/build.gradle b/Core/build.gradle index b46c1881b..83de66a50 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -14,9 +14,6 @@ dependencies { testCompileOnly("org.projectlombok:lombok:1.18.8") annotationProcessor("org.projectlombok:lombok:1.18.8") testAnnotationProcessor("org.projectlombok:lombok:1.18.8") - implementation("com.github.Sauilitired:Jenkins4J:2.0-SNAPSHOT") - implementation("com.squareup.okhttp3:okhttp:4.2.2") - implementation("com.squareup.okio:okio:2.4.1") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.61") } diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java index a67032b9c..b7d011140 100644 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java +++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotSquared.java @@ -49,7 +49,6 @@ import com.github.intellectualsites.plotsquared.plot.util.SetupUtils; import com.github.intellectualsites.plotsquared.plot.util.StringMan; import com.github.intellectualsites.plotsquared.plot.util.TaskManager; import com.github.intellectualsites.plotsquared.plot.util.UUIDHandler; -import com.github.intellectualsites.plotsquared.plot.util.UpdateUtility; import com.github.intellectualsites.plotsquared.plot.util.WorldUtil; import com.github.intellectualsites.plotsquared.plot.util.block.GlobalBlockQueue; import com.github.intellectualsites.plotsquared.plot.util.expiry.ExpireManager; @@ -89,7 +88,6 @@ import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; -import java.util.Properties; import java.util.Set; import java.util.UUID; import java.util.function.Consumer; @@ -127,7 +125,6 @@ import java.util.zip.ZipInputStream; @Setter @Getter private ILogger logger; // Platform / Version / Update URL private PlotVersion version; - @Nullable @Getter private UpdateUtility updateUtility; // Files and configuration @Getter private File jarFile = null; // This file private File storageFile; @@ -1440,42 +1437,10 @@ import java.util.zip.ZipInputStream; return Arrays.stream(split).map(s -> String.format("%4s", s)).collect(Collectors.joining()); } - private boolean update(PlotPlayer sender, URL url) { - try { - String name = this.jarFile.getName(); - MainUtil.sendMessage(sender, "$1Downloading from provided URL: &7" + url); - URLConnection con = url.openConnection(); - try (InputStream stream = con.getInputStream()) { - File newJar = new File("plugins/update/" + name); - File parent = newJar.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - MainUtil.sendMessage(sender, "$2 - Output: " + newJar); - if (!newJar.delete()) { - MainUtil.sendMessage(sender, "Failed to update " + IMP.getPluginName() + ""); - MainUtil.sendMessage(sender, "Jar file failed to delete."); - MainUtil.sendMessage(sender, " - Please update manually"); - } - Files.copy(stream, newJar.toPath()); - } - MainUtil.sendMessage(sender, - "$1The update will take effect when the server is restarted next"); - return true; - } catch (IOException e) { - MainUtil.sendMessage(sender, "Failed to update " + IMP.getPluginName() + ""); - MainUtil.sendMessage(sender, " - Please update manually"); - PlotSquared.log("============ Stacktrace ============"); - e.printStackTrace(); - PlotSquared.log("===================================="); - } - return false; - } - /** * Copies a file from inside the jar to a location * - * @param file Name of the file inside PlotSquared.jar + * @param file Name of the file inside PlotSquared.jar * @param folder The output location relative to /plugins/PlotSquared/ */ public void copyFile(String file, String folder) { @@ -1622,13 +1587,13 @@ import java.util.zip.ZipInputStream; String lastVersionString = this.getConfig().getString("version"); if (lastVersionString != null) { String[] split = lastVersionString.split("\\."); - int[] lastVersion = new int[] {Integer.parseInt(split[0]), Integer.parseInt(split[1]), - Integer.parseInt(split[2])}; - if (checkVersion(new int[] {3, 4, 0}, lastVersion)) { + int[] lastVersion = new int[]{Integer.parseInt(split[0]), Integer.parseInt(split[1]), + Integer.parseInt(split[2])}; + if (checkVersion(new int[]{3, 4, 0}, lastVersion)) { Settings.convertLegacy(configFile); if (getConfig().contains("worlds")) { ConfigurationSection worldSection = - getConfig().getConfigurationSection("worlds"); + getConfig().getConfigurationSection("worlds"); worlds.set("worlds", worldSection); try { worlds.save(worldsFile); @@ -1641,7 +1606,6 @@ import java.util.zip.ZipInputStream; } } Settings.load(configFile); - setupUpdateUtility(); //Sets the version information for the settings.yml file try (InputStream stream = getClass().getResourceAsStream("/plugin.properties")) { try (BufferedReader br = new BufferedReader(new InputStreamReader(stream))) { @@ -1658,28 +1622,6 @@ import java.util.zip.ZipInputStream; config = YamlConfiguration.loadConfiguration(configFile); } - private void setupUpdateUtility() { - try { - copyFile("updater.properties", "config"); - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( - new FileInputStream(new File(new File(this.IMP.getDirectory(), "config"), - "updater.properties"))))) { - final Properties properties = new Properties(); - properties.load(bufferedReader); - final boolean enabled = - Boolean.parseBoolean(properties.getOrDefault("enabled", true).toString()); - if (enabled) { - this.updateUtility = new UpdateUtility(properties.getProperty("path"), - properties.getProperty("job"), properties.getProperty("artifact")); - } - } catch (final IOException throwable) { - throwable.printStackTrace(); - } - } catch (final Throwable throwable) { - throwable.printStackTrace(); - } - } - /** * Setup all configuration files
* - Config: settings.yml
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotVersion.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotVersion.java index 4646a787a..ea533e598 100644 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotVersion.java +++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/PlotVersion.java @@ -34,18 +34,14 @@ public class PlotVersion { if (hash == 0 && build == 0) { return "NoVer-SNAPSHOT"; } else { - return "4." + build; + return "5." + build; } } @Override public String toString() { if (hash == 0 && build == 0) { return "PlotSquared-NoVer-SNAPSHOT"; } else { - return "PlotSquared-4." + build; + return "PlotSquared-5." + build; } } - - public boolean isNewer(PlotVersion other) { - return other.build < this.build; - } } diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/PluginCmd.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/PluginCmd.java index dc794a06a..89bd81bec 100644 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/PluginCmd.java +++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/commands/PluginCmd.java @@ -1,10 +1,8 @@ package com.github.intellectualsites.plotsquared.plot.commands; import com.github.intellectualsites.plotsquared.commands.CommandDeclaration; -import com.github.intellectualsites.plotsquared.json.JSONObject; import com.github.intellectualsites.plotsquared.plot.PlotSquared; import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer; -import com.github.intellectualsites.plotsquared.plot.util.HttpUtil; import com.github.intellectualsites.plotsquared.plot.util.MainUtil; import com.github.intellectualsites.plotsquared.plot.util.TaskManager; @@ -22,17 +20,8 @@ import com.github.intellectualsites.plotsquared.plot.util.TaskManager; "$2>> $1&lAuthors$2: $1Citymonstret $2& $1Empire92 $2& $1MattBDev $2& $1dordsor21 $2& $1NotMyFault"); MainUtil.sendMessage(player, "$2>> $1&lWiki$2: $1https://github.com/IntellectualSites/PlotSquared/wiki"); - // MainUtil.sendMessage(player, - // "$2>> $1&lNewest Version$2: $1" + getNewestVersionString()); } }); return true; } - - public String getNewestVersionString() { - String str = HttpUtil - .readUrl("https://api.github.com/repos/IntellectualSites/PlotSquared/releases/latest"); - JSONObject release = new JSONObject(str); - return release.getString("name"); - } } diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/config/Settings.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/config/Settings.java index d89aead31..cd7237bc5 100644 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/config/Settings.java +++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/config/Settings.java @@ -123,6 +123,9 @@ public class Settings extends Config { // Titles TITLES = config.getBoolean("titles", TITLES); + // Update Notifications + Enabled_Components.UPDATE_NOTIFICATIONS = config.getBoolean("update-notifications", Enabled_Components.UPDATE_NOTIFICATIONS); + // Teleportation Teleport.DELAY = config.getInt("teleport.delay", Teleport.DELAY); Teleport.ON_LOGIN = config.getBoolean("teleport.on_login", Teleport.ON_LOGIN); @@ -157,8 +160,6 @@ public class Settings extends Config { Chat.CONSOLE_COLOR = config.getBoolean("console.color", Chat.CONSOLE_COLOR); Chat.INTERACTIVE = config.getBoolean("chat.fancy", Chat.INTERACTIVE); - Enabled_Components.UPDATER = - config.getBoolean("update-notifications", Enabled_Components.UPDATER); Enabled_Components.DATABASE_PURGER = config.getBoolean("auto-purge", Enabled_Components.DATABASE_PURGER); return true; @@ -321,7 +322,7 @@ public class Settings extends Config { true; @Comment("The UUID cacher is used to resolve player names") public static boolean UUID_CACHE = true; - @Comment("The plugin auto updater will notify you if updates are available.") public static boolean UPDATER = true; + @Comment("Whether we should notify you about updates or not.") public static boolean UPDATE_NOTIFICATIONS = true; @Comment("Stores user metadata in a database") public static boolean PERSISTENT_META = true; @Comment("Optimizes permission checks") public static boolean PERMISSION_CACHE = true; @Comment("Optimizes block changing code") public static boolean BLOCK_CACHE = true; diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/MainUtil.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/MainUtil.java index 15abc1bd6..ea34c5dc9 100644 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/MainUtil.java +++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/MainUtil.java @@ -67,7 +67,7 @@ public class MainUtil { public static boolean canSendChunk = false; /** * Cache of mapping x,y,z coordinates to the chunk array
- * - Used for efficent world generation
+ * - Used for efficient world generation
*/ public static short[][] x_loc; public static short[][] y_loc; diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/UpdateUtility.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/UpdateUtility.java deleted file mode 100644 index 0ad79b41b..000000000 --- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/UpdateUtility.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.github.intellectualsites.plotsquared.plot.util; - -import lombok.Getter; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import org.incendo.jenkins.Jenkins; -import org.incendo.jenkins.objects.ArtifactDescription; -import org.incendo.jenkins.objects.BuildInfo; - -import java.util.Collection; -import java.util.Optional; -import java.util.function.BiConsumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class UpdateUtility { - - private final String jobName; - private final Pattern artifactPattern; - - private final Jenkins jenkins; - - public UpdateUtility(@NonNull final String jenkinsPath, @NonNull final String jobName, - @NonNull final String artifactPattern) { - this.jobName = jobName; - this.artifactPattern = Pattern.compile(artifactPattern); - this.jenkins = Jenkins.newBuilder().withPath(jenkinsPath).build(); - } - - private void fetchLatestBuildInfo(final BiConsumer whenDone) { - this.jenkins.getJobInfo(jobName).whenCompleteAsync((jobInfo, exception) -> { - if (jobInfo == null && exception != null) { - whenDone.accept(null, exception); - } else if (jobInfo != null) { - jobInfo.getLastSuccessfulBuild().getBuildInfo().whenComplete(whenDone); - } else { - whenDone.accept(null, new IllegalStateException( - String.format("Could not fetch job info for job %s", this.jobName))); - } - }); - } - - private void getMatchingArtifact(final BiConsumer whenDone) { - this.fetchLatestBuildInfo((buildInfo, throwable) -> { - if (throwable != null) { - whenDone.accept(null, throwable); - } else { - final Collection artifacts = buildInfo.getArtifacts(); - final Optional artifact = - artifacts.stream().filter(artifactDescription -> { - final String name = artifactDescription.getFileName(); - final Matcher matcher = artifactPattern.matcher(name); - return matcher.matches(); - }).findAny(); - if (artifact.isPresent()) { - final ArtifactDescription artifactDescription = artifact.get(); - whenDone.accept(artifactDescription, null); - } else { - whenDone.accept(null, new NullPointerException(String - .format("Could not find any matching artifacts in build %d", - buildInfo.getId()))); - } - } - }); - } - - public void checkForUpdate(final String currentVersion, - final BiConsumer whenDone) { - this.getMatchingArtifact(((artifactDescription, throwable) -> { - if (throwable != null) { - whenDone.accept(null, new RuntimeException(String - .format("Failed to read artifact description: %s", throwable.getMessage()), - throwable)); - } else { - try { - final String version = this.isNewer(currentVersion, artifactDescription); - if (version != null) { - whenDone - .accept(new UpdateDescription(version, artifactDescription.getUrl()), - null); - } else { - whenDone.accept(null, null); - } - } catch (final Throwable exception) { - whenDone.accept(null, new RuntimeException( - String.format("Failed to compare versions: %s", exception.getMessage()), - exception)); - } - } - })); - } - - private String isNewer(@NonNull final String currentVersion, - @NonNull final ArtifactDescription artifact) { - final Matcher matcher = artifactPattern.matcher(artifact.getFileName()); - if (!matcher.matches()) { - throw new IllegalArgumentException( - "Artifact file name does not match artifact pattern"); - } - final String version = matcher.group("version"); - if (version == null) { - throw new IllegalArgumentException("Given artifact does not contain version"); - } - return compareVersions(currentVersion, version) < 0 ? version : null; - } - - /** - * Compare two given versions in the format $major.$minor - * - * @param oldVersion current version - * @param newVersion other version - * @return -1 if the current version is older, 1 is the versions are the same, - * and 1 if the current version is newer - */ - private int compareVersions(@NonNull final String oldVersion, - @NonNull final String newVersion) { - // Versions look this this: major.minor :P - final int[] oldNums = splitVersion(oldVersion); - final int[] newNums = splitVersion(newVersion); - - if (oldNums == null || newNums == null) { - throw new IllegalArgumentException("Could not extract version data"); - } - - // Compare major version - if (oldNums[0] != -1 && newNums[0] != -1) { - if (oldNums[0] < newNums[0]) { - return -1; - } else if (oldNums[0] > newNums[0]) { - return 1; - } - } - - // Compare minor versions - return Integer.compare(oldNums[1], newNums[1]); - } - - private int[] splitVersion(@NonNull final String versionString) { - final String[] parts = versionString.split("\\."); - switch (parts.length) { - case 0: - return new int[] {-1, -1}; - case 1: - return new int[] {-1, Integer.parseInt(parts[0])}; - case 2: - return new int[] {Integer.parseInt(parts[0]), Integer.parseInt(parts[1])}; - default: - return null; - } - } - - @Getter @RequiredArgsConstructor public static class UpdateDescription { - private final String version; - private final String url; - } - -} diff --git a/Core/src/main/resources/updater.properties b/Core/src/main/resources/updater.properties deleted file mode 100644 index 19ef0aed6..000000000 --- a/Core/src/main/resources/updater.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Whether update notifications are enabled -enabled=true -# CI path -path=https://ci.athion.net/ -# Job name -job=PlotSquared-Releases -# Artifact pattern -artifact=^PlotSquared-Bukkit-(?[0-9.]+).jar$ diff --git a/build.gradle b/build.gradle index 63bacd9c2..f09d0d5fd 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ plugins { group = "com.github.intellectualsites.plotsquared" -def rootVersion = "4" +def rootVersion = "5" def revision = "" def buildNumber = "" def date = ""