From 24b6b23d25eb48b277f309e50ab61db2de739171 Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 16 Feb 2020 01:33:43 +0100 Subject: [PATCH 1/4] Bind update notifications to spigot resource updates The notification permission could be moved back into the other class, but well --- Bukkit/build.gradle | 7 - .../plotsquared/bukkit/BukkitMain.java | 34 +--- .../bukkit/listeners/PlayerEvents.java | 38 ----- .../bukkit/util/UpdateUtility.java | 68 ++++++++ Core/build.gradle | 3 - .../plotsquared/plot/PlotSquared.java | 40 +---- .../plotsquared/plot/commands/PluginCmd.java | 11 -- .../plotsquared/plot/config/Settings.java | 4 + .../plotsquared/plot/util/UpdateUtility.java | 157 ------------------ Core/src/main/resources/updater.properties | 8 - 10 files changed, 81 insertions(+), 289 deletions(-) create mode 100644 Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/UpdateUtility.java delete mode 100644 Core/src/main/java/com/github/intellectualsites/plotsquared/plot/util/UpdateUtility.java delete mode 100644 Core/src/main/resources/updater.properties 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 f799d0fd7..fccb9725c 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; @@ -163,37 +163,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..cf9499070 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,8 +1,6 @@ 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.plot.PlotSquared; @@ -17,7 +15,6 @@ 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.util.EntityUtil; @@ -28,16 +25,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; @@ -727,38 +721,6 @@ import java.util.regex.Pattern; } EventUtil.manager.doJoinTask(pp); }, 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); - } - } - })); - } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) 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..5eee44427 --- /dev/null +++ b/Bukkit/src/main/java/com/github/intellectualsites/plotsquared/bukkit/util/UpdateUtility.java @@ -0,0 +1,68 @@ +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.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +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 { + + private final JavaPlugin javaPlugin; + private final String internalVersion; + private String spigotVersion; + + public UpdateUtility(final JavaPlugin javaPlugin) { + this.javaPlugin = javaPlugin; + this.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"); + UpdateUtility.this.spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + } catch (IOException e) { + PlotSquared.log(Captions.PREFIX + "&6Unable to check for updates because: " + e); + this.cancel(); + return; + } + + if (!UpdateUtility.this.internalVersion.equals(UpdateUtility.this.spigotVersion)) { + PlotSquared.log(Captions.PREFIX + "&6There appears to be a PlotSquared update available!"); + PlotSquared.log(Captions.PREFIX + "&6https://www.spigotmc.org/resources/1177/updates"); + Bukkit.getScheduler().runTask(UpdateUtility.this.javaPlugin, () -> Bukkit.getPluginManager().registerEvents(new Listener() { + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(final PlayerJoinEvent event) { + final Player player = event.getPlayer(); + if (player.hasPermission("plots.admin.update.notify")) { + PlotSquared.log(Captions.PREFIX + "&6There appears to be a PlotSquared update available!"); + PlotSquared.log(Captions.PREFIX + "&6https://www.spigotmc.org/resources/1177/updates"); + } + } + }, UpdateUtility.this.javaPlugin)); + } 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 3336066de..6de6f6f40 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 2512abe83..c76e1af84 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; @@ -1622,13 +1619,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 +1638,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))) { @@ -1650,11 +1646,11 @@ import java.util.zip.ZipInputStream; String dateString = br.readLine(); this.version = PlotVersion.tryParse(versionString, commitString, dateString); Settings.DATE = - new Date(100 + version.year, version.month, version.day).toGMTString(); + new Date(100 + version.year, version.month, version.day).toGMTString(); Settings.BUILD = "https://ci.athion.net/job/PlotSquared-Releases/" + version.build; Settings.COMMIT = - "https://github.com/IntellectualSites/PlotSquared/commit/" + Integer - .toHexString(version.hash); + "https://github.com/IntellectualSites/PlotSquared/commit/" + Integer + .toHexString(version.hash); System.out.println("Version is " + this.version); } } catch (IOException throwable) { @@ -1664,28 +1660,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/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 8e1f5ef5b..cebead7e8 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 @@ -132,6 +132,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); @@ -358,5 +361,6 @@ public class Settings extends Config { @Comment("Delete plots when a player is banned") public static boolean BAN_DELETER = false; @Comment({"Prevent possibly unsafe blocks from being used in plot components", "Can be bypassed with `/plot debugallowunsafe`"}) public static boolean PREVENT_UNSAFE = true; + @Comment("Whether we should notify you about updates or not.") public static boolean UPDATE_NOTIFICATIONS = true; } } 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$ From 4ed108b5c09466829de525a68aa4b9678650b2be Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 16 Feb 2020 01:36:24 +0100 Subject: [PATCH 2/4] Remove legacy auto updater (v3) --- .../plotsquared/plot/PlotSquared.java | 34 +------------------ 1 file changed, 1 insertion(+), 33 deletions(-) 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 c76e1af84..b601f28c2 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 @@ -1437,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) { From 7b83f0146e83ce7d83788b6c35c664f9531c6dfd Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 16 Feb 2020 02:34:51 +0100 Subject: [PATCH 3/4] Readd update notification permission implementation --- .../bukkit/listeners/PlayerEvents.java | 35 ++++++++++++++----- .../bukkit/util/UpdateUtility.java | 29 +++++---------- 2 files changed, 35 insertions(+), 29 deletions(-) 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 cf9499070..2f96628f0 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 @@ -3,20 +3,14 @@ package com.github.intellectualsites.plotsquared.bukkit.listeners; import com.destroystokyo.paper.MaterialTags; 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.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; @@ -129,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; @@ -153,6 +152,7 @@ import java.util.regex.Pattern; private boolean tmpTeleport = true; private Field fieldPlayer; private PlayerMoveEvent moveTmp; + private String spigotVersion; { try { @@ -721,6 +721,25 @@ import java.util.regex.Pattern; } EventUtil.manager.doJoinTask(pp); }, 20); + + if (pp.hasPermission(Captions.PERMISSION_ADMIN_UPDATE_NOTIFICATION.getTranslated()) + && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) { + try { + HttpsURLConnection connection = (HttpsURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=1177").openConnection(); + connection.setRequestMethod("GET"); + this.spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + } catch (IOException e) { + PlotSquared.log(Captions.PREFIX + "&6Unable 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 + "https://www.spigotmc.org/resources/1177/updates").color("$1").tooltip("https://www.spigotmc.org/resources/1177/updates").send(pp); + new PlotMessage("-----------------------------------").send(pp); + } + } } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) 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 index 5eee44427..0ea217ae1 100644 --- 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 @@ -4,11 +4,7 @@ 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.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; @@ -20,13 +16,13 @@ import java.net.URL; public class UpdateUtility implements Listener { - private final JavaPlugin javaPlugin; - private final String internalVersion; - private String spigotVersion; + public static String internalVersion; + public static String spigotVersion; + public final JavaPlugin javaPlugin; public UpdateUtility(final JavaPlugin javaPlugin) { this.javaPlugin = javaPlugin; - this.internalVersion = javaPlugin.getDescription().getVersion(); + internalVersion = javaPlugin.getDescription().getVersion(); } public void updateChecker() { @@ -37,30 +33,21 @@ public class UpdateUtility implements Listener { try { HttpsURLConnection connection = (HttpsURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=1177").openConnection(); connection.setRequestMethod("GET"); - UpdateUtility.this.spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); } catch (IOException e) { PlotSquared.log(Captions.PREFIX + "&6Unable to check for updates because: " + e); this.cancel(); return; } - if (!UpdateUtility.this.internalVersion.equals(UpdateUtility.this.spigotVersion)) { + if (!internalVersion.equals(spigotVersion)) { PlotSquared.log(Captions.PREFIX + "&6There appears to be a PlotSquared update available!"); PlotSquared.log(Captions.PREFIX + "&6https://www.spigotmc.org/resources/1177/updates"); - Bukkit.getScheduler().runTask(UpdateUtility.this.javaPlugin, () -> Bukkit.getPluginManager().registerEvents(new Listener() { - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerJoin(final PlayerJoinEvent event) { - final Player player = event.getPlayer(); - if (player.hasPermission("plots.admin.update.notify")) { - PlotSquared.log(Captions.PREFIX + "&6There appears to be a PlotSquared update available!"); - PlotSquared.log(Captions.PREFIX + "&6https://www.spigotmc.org/resources/1177/updates"); - } - } - }, UpdateUtility.this.javaPlugin)); } else { PlotSquared.log(Captions.PREFIX + "Congratulations! You are running the latest PlotSquared version."); } - } this.cancel(); + } + this.cancel(); }); } }.runTaskTimer(this.javaPlugin, 0L, 12000L); From 6953187caca1add217835ed72e23f0c8d4254526 Mon Sep 17 00:00:00 2001 From: NotMyFault Date: Sun, 16 Feb 2020 14:37:07 +0100 Subject: [PATCH 4/4] Add current + new version to update notification And fix a little typo alongside bumping versioning to v5 --- .../plotsquared/bukkit/listeners/PlayerEvents.java | 8 +++++--- .../plotsquared/bukkit/util/UpdateUtility.java | 3 ++- .../intellectualsites/plotsquared/plot/PlotVersion.java | 8 ++------ .../intellectualsites/plotsquared/plot/util/MainUtil.java | 2 +- build.gradle | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) 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 2f96628f0..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 @@ -138,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; /** @@ -152,6 +151,7 @@ import java.util.regex.Pattern; private boolean tmpTeleport = true; private Field fieldPlayer; private PlayerMoveEvent moveTmp; + private String internalVersion; private String spigotVersion; { @@ -727,15 +727,17 @@ import java.util.regex.Pattern; try { HttpsURLConnection connection = (HttpsURLConnection) new URL("https://api.spigotmc.org/legacy/update.php?resource=1177").openConnection(); connection.setRequestMethod("GET"); - this.spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); + spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); } catch (IOException e) { - PlotSquared.log(Captions.PREFIX + "&6Unable to check for updates because: " + 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 index 0ea217ae1..7206fb249 100644 --- 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 @@ -35,13 +35,14 @@ public class UpdateUtility implements Listener { connection.setRequestMethod("GET"); spigotVersion = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine(); } catch (IOException e) { - PlotSquared.log(Captions.PREFIX + "&6Unable to check for updates because: " + 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."); 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/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/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 = ""