From c7ff0ed8e8758a78ea1491f408795aa57758e19c Mon Sep 17 00:00:00 2001 From: Pyrbu Date: Fri, 21 Apr 2023 17:34:18 +0100 Subject: [PATCH] fix default configs & add update checker --- build.gradle | 7 ++- .../configuration/Configuration.java | 1 + .../configuration/ConfigurationConstants.java | 6 +- .../configuration/ConfigurationValue.java | 5 +- .../java/lol/pyr/znpcsplus/ZNPCsPlus.java | 3 + .../pyr/znpcsplus/updater/UpdateChecker.java | 56 +++++++++++++++++++ .../updater/UpdateNotificationListener.java | 33 +++++++++++ 7 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java create mode 100644 src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java diff --git a/build.gradle b/build.gradle index b863a32..2d2d518 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,9 @@ repositories { maven { url "https://repo.extendedclip.com/content/repositories/placeholderapi/" } + maven { + url "https://jitpack.io/" + } } dependencies { @@ -27,10 +30,11 @@ dependencies { implementation "commons-io:commons-io:2.11.0" implementation "com.google.code.gson:gson:2.10.1" implementation "org.bstats:bstats-bukkit:3.0.2" + implementation "com.github.robertlit:SpigotResourcesAPI:2.0" } group "lol.pyr" -version "1.0.3" +version "1.0.4" compileJava { options.release.set(17) @@ -41,6 +45,7 @@ shadowJar { relocate "org.bstats", "lol.pyr.znpcsplus.lib.bstats" relocate "org.apache.commons", "lol.pyr.znpcsplus.lib.commons" relocate "com.google.gson", "lol.pyr.znpcsplus.lib.gson" + relocate "me.robertlit.spigotresources", "lol.pyr.znpcsplus.lib.spigotapi" minimize() } diff --git a/src/main/java/io/github/znetworkw/znpcservers/configuration/Configuration.java b/src/main/java/io/github/znetworkw/znpcservers/configuration/Configuration.java index d60cedf..15d49c8 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/configuration/Configuration.java +++ b/src/main/java/io/github/znetworkw/znpcservers/configuration/Configuration.java @@ -39,6 +39,7 @@ public class Configuration { this.path = path; this.configurationValues = ConfigurationValue.VALUES_BY_NAME.get(name).stream().collect(Collectors.toMap((c) -> c, ConfigurationValue::getValue)); this.onLoad(); + this.save(); } protected void onLoad() { diff --git a/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationConstants.java b/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationConstants.java index 93dd639..7472672 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationConstants.java +++ b/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationConstants.java @@ -7,16 +7,12 @@ import java.util.List; public final class ConfigurationConstants { public static final String SPACE_SYMBOL = Configuration.CONFIGURATION.getValue(ConfigurationValue.REPLACE_SYMBOL); - public static final int VIEW_DISTANCE = Configuration.CONFIGURATION.getValue(ConfigurationValue.VIEW_DISTANCE); - public static final int SAVE_DELAY = Configuration.CONFIGURATION.getValue(ConfigurationValue.SAVE_NPCS_DELAY_SECONDS); - public static final boolean RGB_ANIMATION = Configuration.CONFIGURATION.getValue(ConfigurationValue.ANIMATION_RGB); - public static final List NPC_LIST = Configuration.DATA.getValue(ConfigurationValue.NPC_LIST); - public static final List NPC_CONVERSATIONS = Configuration.CONVERSATIONS.getValue(ConfigurationValue.CONVERSATION_LIST); + public static final boolean CHECK_FOR_UPDATES = Configuration.CONFIGURATION.getValue(ConfigurationValue.CHECK_FOR_UPDATES); static { NPC_LIST.stream() diff --git a/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationValue.java b/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationValue.java index 2759753..4e64dfb 100644 --- a/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationValue.java +++ b/src/main/java/io/github/znetworkw/znpcservers/configuration/ConfigurationValue.java @@ -18,9 +18,10 @@ public enum ConfigurationValue { SAVE_NPCS_DELAY_SECONDS("config", 600, Integer.class), MAX_PATH_LOCATIONS("config", 500, Integer.class), NAMING_METHOD("config", NamingType.DEFAULT, NamingType.class), - DEBUG_ENABLED("config", Boolean.TRUE, Boolean.class), + DEBUG_ENABLED("config", true, Boolean.class), LINE_SPACING("config", 0.3D, Double.class), - ANIMATION_RGB("config", Boolean.FALSE, Boolean.class), + ANIMATION_RGB("config", false, Boolean.class), + CHECK_FOR_UPDATES("config", true, Boolean.class), NO_PERMISSION("messages", "&cYou do not have permission to execute this command.", String.class), SUCCESS("messages", "&aSuccess!", String.class), INCORRECT_USAGE("messages", "&cThe arguments you specified are invalid. Type &f/znpcs help&c for examples.", String.class), diff --git a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java index 42de964..9506c59 100644 --- a/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java +++ b/src/main/java/lol/pyr/znpcsplus/ZNPCsPlus.java @@ -19,6 +19,8 @@ import io.github.znetworkw.znpcservers.utility.BungeeUtils; import io.github.znetworkw.znpcservers.utility.SchedulerUtils; import io.github.znetworkw.znpcservers.utility.itemstack.ItemStackSerializer; import io.github.znetworkw.znpcservers.utility.location.ZLocation; +import lol.pyr.znpcsplus.updater.UpdateChecker; +import lol.pyr.znpcsplus.updater.UpdateNotificationListener; import org.apache.commons.io.FileUtils; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -118,6 +120,7 @@ public class ZNPCsPlus extends JavaPlugin { new NPCSaveTask(this, ConfigurationConstants.SAVE_DELAY); new PlayerListener(this); new InventoryListener(this); + if (ConfigurationConstants.CHECK_FOR_UPDATES) new UpdateNotificationListener(this, new UpdateChecker(this)); enabled = true; serverLogger.info(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)"); diff --git a/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java b/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java new file mode 100644 index 0000000..5d45fca --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/updater/UpdateChecker.java @@ -0,0 +1,56 @@ +package lol.pyr.znpcsplus.updater; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import me.robertlit.spigotresources.api.Resource; +import me.robertlit.spigotresources.api.SpigotResourcesAPI; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.concurrent.TimeUnit; + +@SuppressWarnings("deprecation") +public class UpdateChecker extends BukkitRunnable { + private final static SpigotResourcesAPI api = new SpigotResourcesAPI(1, TimeUnit.MINUTES); + public final static int RESOURCE_ID = 109380; + public final static String DOWNLOAD_LINK = "https://www.spigotmc.org/resources/znpcsplus.109380/"; + + private final ZNPCsPlus plugin; + private Status status = Status.UNKNOWN; + private String newestVersion = "N/A"; + + public UpdateChecker(ZNPCsPlus plugin) { + this.plugin = plugin; + runTaskTimerAsynchronously(plugin, 5L, 6000L); + } + + public void run() { + Resource resource = api.getResource(RESOURCE_ID).join(); + newestVersion = resource.getVersion(); + + int current = versionToNumber(plugin.getDescription().getVersion()); + int newest = versionToNumber(newestVersion); + + status = current >= newest ? Status.LATEST_VERSION : Status.UPDATE_NEEDED; + if (status == Status.UPDATE_NEEDED) notifyConsole(); + } + + private void notifyConsole() { + ZNPCsPlus.LOGGER.warning("Version " + getLatestVersion() + " of " + plugin.getDescription().getName() + " is available now!"); + ZNPCsPlus.LOGGER.warning("Download it at " + UpdateChecker.DOWNLOAD_LINK); + } + + private int versionToNumber(String version) { + return Integer.parseInt(version.replaceAll("\\.", "")); + } + + public Status getStatus() { + return status; + } + + public String getLatestVersion() { + return newestVersion; + } + + public enum Status { + UNKNOWN, LATEST_VERSION, UPDATE_NEEDED + } +} diff --git a/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java b/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java new file mode 100644 index 0000000..e9a3801 --- /dev/null +++ b/src/main/java/lol/pyr/znpcsplus/updater/UpdateNotificationListener.java @@ -0,0 +1,33 @@ +package lol.pyr.znpcsplus.updater; + +import lol.pyr.znpcsplus.ZNPCsPlus; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +@SuppressWarnings("deprecation") +public class UpdateNotificationListener implements Listener { + private final ZNPCsPlus plugin; + private final UpdateChecker updateChecker; + + public UpdateNotificationListener(ZNPCsPlus plugin, UpdateChecker updateChecker) { + this.plugin = plugin; + this.updateChecker = updateChecker; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + if (!event.getPlayer().hasPermission("znpcsplus.updates")) return; + if (updateChecker.getStatus() != UpdateChecker.Status.UPDATE_NEEDED) return; + Bukkit.getScheduler().runTaskLater(plugin, () -> { + if (!event.getPlayer().isOnline()) return; + event.getPlayer().sendMessage(Component.text(plugin.getDescription().getName() + " v" + updateChecker.getLatestVersion() + " is available now!", NamedTextColor.GOLD).appendNewline() + .append(Component.text("Click this message to open the Spigot page (CLICK)", NamedTextColor.YELLOW)).clickEvent(ClickEvent.openUrl(UpdateChecker.DOWNLOAD_LINK))); + }, 100L); + } +}