From 70ff02fd7fe15ab90cfcc0e376216fd52619edda Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Fri, 3 Apr 2026 00:18:57 +0100 Subject: [PATCH 01/57] Started working on platforms rewrite --- api/build.gradle.kts | 53 +------- build.gradle.kts | 113 +++--------------- common/build.gradle.kts | 25 ++++ .../InvalidVersionFormatException.java | 0 .../api/listener/NotificationHandler.java | 0 .../pluginupdater/api/platform/Platform.java | 0 .../api/platform/PlatformData.java | 0 .../api/platform/PlatformRegistry.java | 0 .../api/platform/github/GithubData.java | 0 .../platform/github/GithubVersionChecker.java | 0 .../api/platform/hangar/HangarData.java | 0 .../platform/hangar/HangarVersionChecker.java | 0 .../api/platform/modrinth/ModrinthData.java | 0 .../modrinth/ModrinthVersionChecker.java | 0 .../api/platform/spigot/SpigotData.java | 0 .../platform/spigot/SpigotVersionChecker.java | 0 .../pluginupdater/api/updater/PluginData.java | 0 .../pluginupdater/api/updater/Updater.java | 0 .../api/util/DownloadLogger.java | 0 .../pluginupdater/api/util/HttpUtil.java | 0 .../api/util/UpdaterConstants.java | 0 .../api/version/VersionChecker.java | 0 .../api/version/VersionDifference.java | 0 .../comparator/BuildNumComparator.java | 0 .../version/comparator/CalVerComparator.java | 0 .../comparator/ComparatorRegistry.java | 0 .../version/comparator/SemVerComparator.java | 0 .../version/comparator/VersionComparator.java | 0 .../src/main/resources/settings.properties | 0 platform/build.gradle.kts | 30 +++++ platform/spigot/build.gradle.kts | 93 ++++++++++++++ .../pluginupdater/PluginUpdater.java | 0 .../pluginupdater/api/PluginUpdaterAPI.java | 0 .../collector/CommonPluginCollector.java | 0 .../collector/ModrinthCollector.java | 0 .../collector/PluginDataCollector.java | 0 .../collector/PluginYamlCollector.java | 0 .../collector/SpigotCollector.java | 0 .../pluginupdater/command/UpdateCommand.java | 0 .../pluginupdater/command/UpdaterCommand.java | 0 .../pluginupdater/command/UpdatesCommand.java | 0 .../pluginupdater/config/ConfigManager.java | 0 .../listener/PlayerListener.java | 0 .../pluginupdater/updater/UpdateHandler.java | 0 .../util/lamp/annotation/PluginName.java | 0 .../StringMessageResponseHandler.java | 0 .../src}/main/resources/common-plugins.yml | 0 .../spigot/src}/main/resources/config.yml | 0 .../spigot/src}/main/resources/plugin.yml | 0 platform/velocity/build.gradle.kts | 0 settings.gradle.kts | 6 +- 51 files changed, 175 insertions(+), 145 deletions(-) create mode 100644 common/build.gradle.kts rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java (100%) rename {api => common}/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java (100%) rename {api => common}/src/main/resources/settings.properties (100%) create mode 100644 platform/build.gradle.kts create mode 100644 platform/spigot/build.gradle.kts rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/PluginUpdater.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java (100%) rename {src => platform/spigot/src}/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java (100%) rename {src => platform/spigot/src}/main/resources/common-plugins.yml (100%) rename {src => platform/spigot/src}/main/resources/config.yml (100%) rename {src => platform/spigot/src}/main/resources/plugin.yml (100%) create mode 100644 platform/velocity/build.gradle.kts diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 1b4b678..ca853aa 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -1,50 +1,5 @@ -plugins { - `java-library` - id("com.gradleup.shadow") version("9.3.1") -} - -dependencies { - compileOnly("org.spigotmc:spigot-api:26.1-R0.1-SNAPSHOT") - - implementation("org.lushplugins:ChatColorHandler:5.1.6") - - compileOnlyApi("org.jetbrains:annotations:26.1.0") -} - -java { - toolchain.languageVersion.set(JavaLanguageVersion.of(17)) - - withSourcesJar() -} - -tasks { - withType { - options.encoding = "UTF-8" +subprojects { + dependencies { + api(project(":common")) } - - shadowJar { - minimize() - - archiveFileName.set("${project.name}-${project.version}.jar") - } - - processResources{ - expand(project.properties) - - inputs.property("version", rootProject.version) - filesMatching("settings.properties") { - expand("version" to rootProject.version) - } - } -} - -publishing { - publications { - create("maven") { - groupId = rootProject.group.toString() + ".pluginupdater" - artifactId = rootProject.name + "-API" - version = rootProject.version.toString() - from(project.components["java"]) - } - } -} +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 4772e7b..32fedc1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,24 +5,37 @@ plugins { `java-library` `maven-publish` id("com.gradleup.shadow") version("9.3.1") - id("xyz.jpenilla.run-paper") version("3.0.2") - id("com.modrinth.minotaur") version ("2.+") } +group = "org.lushplugins" +version = "2.1.0" + allprojects { + apply(plugin = "java-library") apply(plugin = "maven-publish") - group = "org.lushplugins" - version = "2.1.0" + group = rootProject.group + version = rootProject.version repositories { mavenLocal() mavenCentral() maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") // Spigot - maven("https://repo.lushplugins.org/releases") // LushLib maven("https://repo.lushplugins.org/snapshots") // LushLib } + java { + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) + + withSourcesJar() + } + + tasks { + withType { + options.encoding = "UTF-8" + } + } + publishing { repositories { maven { @@ -48,96 +61,6 @@ allprojects { } } -dependencies { - compileOnly("org.spigotmc:spigot-api:26.1-R0.1-SNAPSHOT") - - implementation(project(":api")) - - implementation("org.lushplugins:LushLib:1.0.0") - implementation("io.github.revxrsal:lamp.common:4.0.0-rc.16") - implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") -} - -java { - toolchain.languageVersion.set(JavaLanguageVersion.of(21)) - - withSourcesJar() -} - -tasks { - withType { - options.encoding = "UTF-8" - } - - shadowJar { - relocate("org.lushplugins.lushlib", "org.lushplugins.pluginupdater.libraries.lushlib") - - minimize() - - archiveFileName.set("${project.name}-${project.version}.jar") - } - - processResources { - expand(project.properties) - - inputs.property("version", rootProject.version) - filesMatching("plugin.yml") { - expand("version" to rootProject.version) - } - } - - runServer { - minecraftVersion("1.21") - - downloadPlugins { - modrinth("viaversion", "5.7.1") // ViaVersion - modrinth("viabackwards", "5.7.1") // ViaBackwards - // The following plugins are intentionally outdated for testing purposes - modrinth("djC8I9ui", "3.2.0") // LushRewards - modrinth("discordsrv", "1.27.0") // DiscordSRV - modrinth("coreprotect", "22.3") // CoreProtect - modrinth("fancynpcs", "2.2.2") // FancyNPCs - modrinth("fancyholograms", "2.3.1") // FancyHolograms - modrinth("nMwMeNFr", "2025.07") // UltimateAutoRestart - } - } -} - -publishing { - publications { - create("maven") { - groupId = rootProject.group.toString() + ".pluginupdater" - artifactId = rootProject.name - version = rootProject.version.toString() - from(project.components["java"]) - } - } -} - -modrinth { - token.set(System.getenv("MODRINTH_TOKEN")) - projectId.set("IBSpJfbm") - if (System.getenv("RELEASE_TYPE") == "release") { - versionNumber.set(rootProject.version.toString()) - changelog.set(getChangelogSinceLastTag()) - } else { - versionNumber.set("${rootProject.version}-${getCurrentCommitHash()}") - } - uploadFile.set(file("build/libs/${project.name}-${project.version}.jar")) - versionType.set(System.getenv("RELEASE_TYPE")) - gameVersions.addAll( - "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11", - "21.6" - ) - loaders.addAll("spigot", "paper", "purpur", "folia") - syncBodyFrom.set(rootProject.file("README.md").readText()) -} - -tasks.modrinth { - dependsOn("shadowJar") - dependsOn(tasks.modrinthSyncBody) -} - fun getCurrentCommitHash(): String { val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD").start() val reader = BufferedReader(InputStreamReader(process.inputStream)) diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 0000000..c5e89f1 --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,25 @@ +dependencies { + compileOnlyApi("org.jetbrains:annotations:26.1.0") +} + +tasks { + processResources{ + expand(project.properties) + + inputs.property("version", rootProject.version) + filesMatching("settings.properties") { + expand("version" to rootProject.version) + } + } +} + +publishing { + publications { + create("maven") { + groupId = rootProject.group.toString() + ".pluginupdater" + artifactId = rootProject.name + "-API" + version = rootProject.version.toString() + from(project.components["java"]) + } + } +} diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java b/common/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java b/common/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java b/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java b/common/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java b/common/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java b/common/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java b/common/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java diff --git a/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java similarity index 100% rename from api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java rename to common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java diff --git a/api/src/main/resources/settings.properties b/common/src/main/resources/settings.properties similarity index 100% rename from api/src/main/resources/settings.properties rename to common/src/main/resources/settings.properties diff --git a/platform/build.gradle.kts b/platform/build.gradle.kts new file mode 100644 index 0000000..b7efae2 --- /dev/null +++ b/platform/build.gradle.kts @@ -0,0 +1,30 @@ +plugins { + id("com.gradleup.shadow") version("9.3.1") +} + +subprojects { + apply(plugin = "com.gradleup.shadow") + + dependencies { + implementation(project(":api:" + project.name)) + } + + tasks { + shadowJar { + minimize() + + archiveFileName.set("${project.name}-${project.version}.jar") + } + } + + publishing { + publications { + create("maven") { + groupId = rootProject.group.toString() + artifactId = rootProject.name + "-" + project.name + version = rootProject.version.toString() + from(project.components["java"]) + } + } + } +} \ No newline at end of file diff --git a/platform/spigot/build.gradle.kts b/platform/spigot/build.gradle.kts new file mode 100644 index 0000000..64abdab --- /dev/null +++ b/platform/spigot/build.gradle.kts @@ -0,0 +1,93 @@ +import java.io.BufferedReader +import java.io.InputStreamReader + +plugins { + id("com.modrinth.minotaur") version ("2.+") + id("xyz.jpenilla.run-paper") version("3.0.2") +} + +dependencies { + compileOnly("org.spigotmc:spigot-api:26.1-R0.1-SNAPSHOT") + + implementation("org.lushplugins:LushLib:1.0.0") + implementation("io.github.revxrsal:lamp.common:4.0.0-rc.16") + implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") +} + +tasks { + processResources { + expand(project.properties) + + inputs.property("version", rootProject.version) + filesMatching("plugin.yml") { + expand("version" to rootProject.version) + } + } + + shadowJar { + relocate("org.lushplugins.lushlib", "org.lushplugins.pluginupdater.libraries.lushlib") + } + + runServer { + minecraftVersion("1.21") + + downloadPlugins { + modrinth("viaversion", "5.7.1") // ViaVersion + modrinth("viabackwards", "5.7.1") // ViaBackwards + // The following plugins are intentionally outdated for testing purposes + modrinth("djC8I9ui", "3.2.0") // LushRewards + modrinth("discordsrv", "1.27.0") // DiscordSRV + modrinth("coreprotect", "22.3") // CoreProtect + modrinth("fancynpcs", "2.2.2") // FancyNPCs + modrinth("fancyholograms", "2.3.1") // FancyHolograms + modrinth("nMwMeNFr", "2025.07") // UltimateAutoRestart + } + } +} + +modrinth { + token.set(System.getenv("MODRINTH_TOKEN")) + projectId.set("IBSpJfbm") + if (System.getenv("RELEASE_TYPE") == "release") { + versionNumber.set(rootProject.version.toString()) + changelog.set(getChangelogSinceLastTag()) + } else { + versionNumber.set("${rootProject.version}-${getCurrentCommitHash()}") + } + uploadFile.set(file("build/libs/${project.name}-${project.version}.jar")) + versionType.set(System.getenv("RELEASE_TYPE")) + gameVersions.addAll( + "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11", + "21.6" + ) + loaders.addAll("spigot", "paper", "purpur", "folia") + syncBodyFrom.set(rootProject.file("README.md").readText()) +} + +tasks.modrinth { + dependsOn("shadowJar") + dependsOn(tasks.modrinthSyncBody) +} + +fun getCurrentCommitHash(): String { + val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD").start() + val reader = BufferedReader(InputStreamReader(process.inputStream)) + val commitHash = reader.readLine() + reader.close() + process.waitFor() + if (process.exitValue() == 0) { + return commitHash ?: "" + } else { + throw IllegalStateException("Failed to retrieve the commit hash.") + } +} + +fun getLastTag(): String { + return ProcessBuilder("git", "describe", "--tags", "--abbrev=0") + .start().inputStream.bufferedReader().readText().trim() +} + +fun getChangelogSinceLastTag(): String { + return ProcessBuilder("git", "log", "${getLastTag()}..HEAD", "--pretty=format:* %s ([#%h](https://github.com/OakLoaf/PluginUpdater/commit/%H))") + .start().inputStream.bufferedReader().readText().trim() +} \ No newline at end of file diff --git a/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java diff --git a/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java diff --git a/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java diff --git a/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java diff --git a/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java diff --git a/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java diff --git a/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java diff --git a/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java diff --git a/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java diff --git a/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java diff --git a/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java diff --git a/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java diff --git a/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java diff --git a/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java diff --git a/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java similarity index 100% rename from src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java rename to platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java diff --git a/src/main/resources/common-plugins.yml b/platform/spigot/src/main/resources/common-plugins.yml similarity index 100% rename from src/main/resources/common-plugins.yml rename to platform/spigot/src/main/resources/common-plugins.yml diff --git a/src/main/resources/config.yml b/platform/spigot/src/main/resources/config.yml similarity index 100% rename from src/main/resources/config.yml rename to platform/spigot/src/main/resources/config.yml diff --git a/src/main/resources/plugin.yml b/platform/spigot/src/main/resources/plugin.yml similarity index 100% rename from src/main/resources/plugin.yml rename to platform/spigot/src/main/resources/plugin.yml diff --git a/platform/velocity/build.gradle.kts b/platform/velocity/build.gradle.kts new file mode 100644 index 0000000..e69de29 diff --git a/settings.gradle.kts b/settings.gradle.kts index 6083b65..b19f13c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,6 @@ rootProject.name = "PluginUpdater" -include("api") +include("common") +include("api:spigot") +include("api:velocity") +include("platform:spigot") +include("platform:velocity") \ No newline at end of file From 23dc0c1a7f08df0434e9e0b1979d63e913f462ae Mon Sep 17 00:00:00 2001 From: Oak Date: Sat, 2 May 2026 00:11:44 +0300 Subject: [PATCH 02/57] Continued progress on refactoring --- api/build.gradle.kts | 5 - build.gradle.kts | 2 +- common/commands/build.gradle.kts | 3 + .../common}/command/UpdateCommand.java | 18 ++-- .../common}/command/UpdaterCommand.java | 4 +- .../common}/command/UpdatesCommand.java | 4 +- .../command}/annotation/PluginName.java | 2 +- .../StringMessageResponseHandler.java | 13 +++ common/config/build.gradle.kts | 5 + .../common/config/ComparatorRegistry.java | 42 ++++++++ .../common}/config/ConfigManager.java | 98 +++++++------------ .../pluginupdater/common/config/Messages.java | 14 +++ .../serializer/ComparatorSerializer.java | 27 +++++ .../serializer/PluginDataSerializer.java | 11 +++ .../api/collector/CollectorRegistry.java | 68 +++++++++++++ .../api/collector/PluginDataCollector.java | 10 ++ .../comparator/BuildNumComparator.java | 7 +- .../version/comparator/CalVerComparator.java | 7 +- .../comparator/ComparatorRegistry.java | 43 -------- .../version/comparator/SemVerComparator.java | 7 +- platform/build.gradle.kts | 4 - platform/spigot/{ => plugin}/build.gradle.kts | 9 +- .../pluginupdater/PluginUpdater.java | 12 +-- .../pluginupdater/api/PluginUpdaterAPI.java | 12 +-- .../collector/CommonPluginCollector.java | 2 +- .../collector/ModrinthCollector.java | 0 .../collector/PluginDataCollector.java | 2 +- .../collector/PluginYamlCollector.java | 2 +- .../collector/SpigotCollector.java | 0 .../listener/PlayerListener.java | 3 +- .../pluginupdater/updater/UpdateHandler.java | 1 - .../src/main/resources/common-plugins.yml | 0 .../src/main/resources/config.yml | 0 .../src/main/resources/plugin.yml | 0 .../StringMessageResponseHandler.java | 14 --- settings.gradle.kts | 8 +- 36 files changed, 273 insertions(+), 186 deletions(-) delete mode 100644 api/build.gradle.kts create mode 100644 common/commands/build.gradle.kts rename {platform/spigot/src/main/java/org/lushplugins/pluginupdater => common/commands/src/main/java/org/lushplugins/pluginupdater/common}/command/UpdateCommand.java (77%) rename {platform/spigot/src/main/java/org/lushplugins/pluginupdater => common/commands/src/main/java/org/lushplugins/pluginupdater/common}/command/UpdaterCommand.java (92%) rename {platform/spigot/src/main/java/org/lushplugins/pluginupdater => common/commands/src/main/java/org/lushplugins/pluginupdater/common}/command/UpdatesCommand.java (97%) rename {platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp => common/commands/src/main/java/org/lushplugins/pluginupdater/common/command}/annotation/PluginName.java (80%) create mode 100644 common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java create mode 100644 common/config/build.gradle.kts create mode 100644 common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java rename {platform/spigot/src/main/java/org/lushplugins/pluginupdater => common/config/src/main/java/org/lushplugins/pluginupdater/common}/config/ConfigManager.java (53%) create mode 100644 common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java create mode 100644 common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java create mode 100644 common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java create mode 100644 common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java create mode 100644 common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java delete mode 100644 common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java rename platform/spigot/{ => plugin}/build.gradle.kts (92%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java (83%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java (100%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java (97%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java (100%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java (97%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java (97%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java (100%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java (92%) rename platform/spigot/{ => plugin}/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java (98%) rename platform/spigot/{ => plugin}/src/main/resources/common-plugins.yml (100%) rename platform/spigot/{ => plugin}/src/main/resources/config.yml (100%) rename platform/spigot/{ => plugin}/src/main/resources/plugin.yml (100%) delete mode 100644 platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java diff --git a/api/build.gradle.kts b/api/build.gradle.kts deleted file mode 100644 index ca853aa..0000000 --- a/api/build.gradle.kts +++ /dev/null @@ -1,5 +0,0 @@ -subprojects { - dependencies { - api(project(":common")) - } -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 7fc59c0..0e14d8d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ allprojects { repositories { mavenLocal() mavenCentral() - maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") // Spigot + maven("https://repo.papermc.io/repository/maven-public/") // Paper maven("https://repo.lushplugins.org/snapshots") // LushLib } diff --git a/common/commands/build.gradle.kts b/common/commands/build.gradle.kts new file mode 100644 index 0000000..bf48d2c --- /dev/null +++ b/common/commands/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + api("io.github.revxrsal:lamp.common:4.0.0-rc.16") +} \ No newline at end of file diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java similarity index 77% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java rename to common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index 635cf43..f5fe8b4 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdateCommand.java +++ b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -1,15 +1,14 @@ -package org.lushplugins.pluginupdater.command; +package org.lushplugins.pluginupdater.common.command; -import org.bukkit.command.CommandSender; -import org.lushplugins.lushlib.libraries.chatcolor.paper.PaperColor; import org.lushplugins.pluginupdater.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.updater.UpdateHandler; -import org.lushplugins.pluginupdater.util.lamp.annotation.PluginName; +import org.lushplugins.pluginupdater.common.command.annotation.PluginName; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Switch; import revxrsal.commands.bukkit.annotation.CommandPermission; +import revxrsal.commands.command.CommandActor; import java.util.concurrent.atomic.AtomicInteger; @@ -18,7 +17,7 @@ public class UpdateCommand { @Command("updater update") @CommandPermission("pluginupdater.downloadupdates") - public String update(CommandSender sender, @PluginName String pluginName) { + public String update(@PluginName String pluginName) { if (!PluginUpdater.getInstance().getConfigManager().shouldAllowDownloads()) { return "&#ff6969Update downloads have been disabled in the config"; } @@ -40,11 +39,10 @@ public String update(CommandSender sender, @PluginName String pluginName) { @Command("updater update all") @CommandPermission("pluginupdater.downloadupdates") - public String updateAll(CommandSender sender, @Switch("force") boolean force) { + public String updateAll(CommandActor actor, @Switch("force") boolean force) { UpdateHandler updateHandler = PluginUpdater.getInstance().getUpdateHandler(); AtomicInteger updateCount = new AtomicInteger(0); AtomicInteger majorUpdateCount = new AtomicInteger(0); - PluginUpdater.getInstance().getConfigManager().getAllPluginData().forEach(pluginData -> { if (!pluginData.areDownloadsAllowed()) { return; @@ -67,13 +65,13 @@ public String updateAll(CommandSender sender, @Switch("force") boolean force) { int finalMajorCount = majorUpdateCount.get(); if (finalCount == 0 && finalMajorCount == 0) { - PaperColor.handler().sendMessage(sender, "&#ff6969No updates found"); + actor.reply("&#ff6969No updates found"); } else if (finalCount > 0) { - PaperColor.handler().sendMessage(sender, "&#b7faa2Successfully queued an update for %s plugins".formatted(finalCount)); + actor.reply("&#b7faa2Successfully queued an update for %s plugins".formatted(finalCount)); } if (finalMajorCount > 0) { - PaperColor.handler().sendMessage(sender, "&#e0c01b%s &#ffe27aplugins require major updates, run &#e0c01b/updater update all --force &#ffe27ato force all possible updates".formatted(finalMajorCount)); + actor.reply("&#e0c01b%s &#ffe27aplugins require major updates, run &#e0c01b/updater update all --force &#ffe27ato force all possible updates".formatted(finalMajorCount)); } return null; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java similarity index 92% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java rename to common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java index 1cced91..432b03c 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdaterCommand.java +++ b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.command; +package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.util.lamp.annotation.PluginName; +import org.lushplugins.pluginupdater.common.command.annotation.PluginName; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Subcommand; import revxrsal.commands.bukkit.annotation.CommandPermission; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java similarity index 97% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java rename to common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index 9952ed3..d896593 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/command/UpdatesCommand.java +++ b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -1,10 +1,10 @@ -package org.lushplugins.pluginupdater.command; +package org.lushplugins.pluginupdater.common.command; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.config.ConfigManager; import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.common.config.ConfigManager; import revxrsal.commands.annotation.Command; import revxrsal.commands.bukkit.annotation.CommandPermission; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java similarity index 80% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java rename to common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java index 632f1a2..0f8adb9 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/annotation/PluginName.java +++ b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.util.lamp.annotation; +package org.lushplugins.pluginupdater.common.command.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java new file mode 100644 index 0000000..514aff2 --- /dev/null +++ b/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java @@ -0,0 +1,13 @@ +package org.lushplugins.pluginupdater.common.command.response; + +import revxrsal.commands.command.CommandActor; +import revxrsal.commands.node.ExecutionContext; +import revxrsal.commands.response.ResponseHandler; + +public class StringMessageResponseHandler implements ResponseHandler { + + @Override + public void handleResponse(String string, ExecutionContext context) { + context.actor().reply(string); + } +} diff --git a/common/config/build.gradle.kts b/common/config/build.gradle.kts new file mode 100644 index 0000000..d08a8a7 --- /dev/null +++ b/common/config/build.gradle.kts @@ -0,0 +1,5 @@ +dependencies { + compileOnly(project(":common")) + + implementation("com.electronwill.night-config:yaml:3.8.4") +} diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java new file mode 100644 index 0000000..d421232 --- /dev/null +++ b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -0,0 +1,42 @@ +package org.lushplugins.pluginupdater.common.config; + +import com.electronwill.nightconfig.core.Config; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.config.serializer.ComparatorSerializer; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class ComparatorRegistry { + private static final Map> comparators = new HashMap<>(); + + static { + register("build", ComparatorSerializer::buildNum); + register("cal-ver", ComparatorSerializer::calVer); + register("sem-ver", ComparatorSerializer::semVer); + } + + public static @Nullable VersionComparator readVersionComparator(String id, Config config) { + try { + return comparators.containsKey(id) ? comparators.get(id).apply(config) : null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void register(@NotNull String id, Function constructor) { + if (comparators.containsKey(id)) { + throw new IllegalStateException("This comparator is already registered"); + } + + comparators.put(id, constructor); + } + + public static void unregister(String id) { + comparators.remove(id); + } +} diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java similarity index 53% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java rename to common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index d01c20f..90dfe1a 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/config/ConfigManager.java +++ b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -1,19 +1,13 @@ -package org.lushplugins.pluginupdater.config; +package org.lushplugins.pluginupdater.common.config; -import org.lushplugins.pluginupdater.PluginUpdater; +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.core.file.FileConfig; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.platform.PlatformData; import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.bukkit.Bukkit; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.plugin.Plugin; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.version.comparator.ComparatorRegistry; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.updater.UpdateHandler; import java.util.*; import java.util.logging.Level; @@ -21,35 +15,29 @@ public class ConfigManager { private boolean allowDownloads; private final Map plugins = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - private final HashSet disabledPlugins = new HashSet<>(); - private final HashMap messages = new HashMap<>(); + private final Set disabledPlugins = new HashSet<>(); + private Messages messages; public ConfigManager() { PluginUpdater.getInstance().saveDefaultConfig(); } public void reloadConfig() { - PluginUpdater plugin = PluginUpdater.getInstance(); - plugin.reloadConfig(); - FileConfiguration config = plugin.getConfig(); - - boolean checkOnReload; - if (config.contains("check-updates-on-start")) { - checkOnReload = config.getBoolean("check-updates-on-start", true); - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'"); - } else { - checkOnReload = config.getBoolean("check-updates-on-reload", true); - } + // TODO: Access file location + FileConfig config = FileConfig.of(""); + config.load(); + + boolean checkOnReload = config.getOrElse("check-updates-on-reload", () -> { + if (config.contains("check-updates-on-start")) { + PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'"); + return config.get("check-updates-on-start"); + } else { + return true; + } + }); - allowDownloads = config.getBoolean("allow-downloads", true); - - ConfigurationSection messagesSection = config.getConfigurationSection("messages"); - if (messagesSection != null) { - getConfigurationSections(messagesSection).forEach(messageSection -> { - String messageName = messageSection.getName(); - setMessage(messageName, messagesSection.getString(messageName)); - }); - } + this.allowDownloads = config.getOrElse("allow-downloads", true); + this.messages = config.getOrElse("messages", () -> new Messages(new HashMap<>())); Collection dataSnapshot = new ArrayList<>(plugins.values()); for (PluginData snapshot : dataSnapshot) { @@ -58,18 +46,19 @@ public void reloadConfig() { } } - ConfigurationSection pluginsSection = config.getConfigurationSection("plugins"); - if (pluginsSection != null) { - getConfigurationSections(pluginsSection).forEach(pluginSection -> { - String pluginName = pluginSection.getName(); - boolean enabled = pluginSection.getBoolean("enabled", true); + Config pluginsConfig = config.get("plugins"); + if (pluginsConfig != null) { + pluginsConfig.entrySet().forEach(entry -> { + String pluginName = entry.getKey(); + Config pluginConfig = entry.getRawValue(); + boolean enabled = pluginConfig.getOrElse("enabled", true); if (!enabled) { disabledPlugins.add(pluginName); return; } - String platform = pluginSection.getString("platform"); - boolean allowDownloads = pluginSection.getBoolean("allow-downloads", true); + String platform = pluginConfig.get("platform"); + boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); if (platform == null) { return; } @@ -80,16 +69,16 @@ public void reloadConfig() { } VersionComparator comparator; - ConfigurationSection comparatorSection = pluginSection.getConfigurationSection("comparator"); - if (comparatorSection != null) { - String comparatorType = comparatorSection.getString("type", "sem-ver"); - comparator = ComparatorRegistry.getVersionComparator(comparatorType, comparatorSection); + Config comparatorConfig = pluginConfig.get("comparator"); + if (comparatorConfig != null) { + String comparatorType = comparatorConfig.getOrElse("type", "sem-ver"); + comparator = ComparatorRegistry.readVersionComparator(comparatorType, comparatorConfig); } else { comparator = null; } try { - PlatformData platformData = PlatformRegistry.getPlatformData(platform, pluginSection); + PlatformData platformData = PlatformRegistry.getPlatformData(platform, pluginConfig); if (platformData != null) { addPlugin(pluginName, PluginData.builder(currPlugin) .platformData(platformData) @@ -113,6 +102,8 @@ public void reloadConfig() { getPlugins().forEach(updateHandler::queueUpdateCheck); } }); + + config.close(); } public boolean shouldAllowDownloads() { @@ -148,23 +139,10 @@ public void removePlugin(String pluginName) { } public @Nullable String getMessage(String name) { - return getMessage(name, null); + return messages.get(name); } public String getMessage(String name, String def) { - return messages.getOrDefault(name, def); - } - - public void setMessage(@NotNull String name, @NotNull String message) { - messages.put(name, message); - } - - public static List getConfigurationSections(ConfigurationSection configurationSection) { - return configurationSection.getValues(false) - .values() - .stream() - .filter(sectionRaw -> sectionRaw instanceof ConfigurationSection) - .map(sectionRaw -> (ConfigurationSection) sectionRaw) - .toList(); + return messages.get(name, def); } } diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java new file mode 100644 index 0000000..e7588e4 --- /dev/null +++ b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java @@ -0,0 +1,14 @@ +package org.lushplugins.pluginupdater.common.config; + +import java.util.Map; + +public record Messages(Map messages) { + + public String get(String key) { + return messages.get(key); + } + + public String get(String key, String def) { + return messages.getOrDefault(key, def); + } +} diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java new file mode 100644 index 0000000..f13fad2 --- /dev/null +++ b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java @@ -0,0 +1,27 @@ +package org.lushplugins.pluginupdater.common.config.serializer; + +import com.electronwill.nightconfig.core.Config; +import org.lushplugins.pluginupdater.api.version.comparator.BuildNumComparator; +import org.lushplugins.pluginupdater.api.version.comparator.CalVerComparator; +import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; + +import java.time.format.DateTimeFormatter; +import java.util.regex.Pattern; + +public class ComparatorSerializer { + + public static BuildNumComparator buildNum(Config config) { + Pattern pattern = config.contains("pattern") ? Pattern.compile(config.get("pattern")) : BuildNumComparator.DEFAULT_PATTERN; + return new BuildNumComparator(pattern); + } + + public static CalVerComparator calVer(Config config) { + DateTimeFormatter dateTimeFormat = config.contains("date-format") ? DateTimeFormatter.ofPattern(config.get("date-format")) : CalVerComparator.DEFAULT_FORMAT; + return new CalVerComparator(dateTimeFormat); + } + + public static SemVerComparator semVer(Config config) { + Pattern pattern = config.contains("pattern") ? Pattern.compile(config.get("pattern")) : SemVerComparator.DEFAULT_PATTERN; + return new SemVerComparator(pattern); + } +} diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java new file mode 100644 index 0000000..d4638b5 --- /dev/null +++ b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java @@ -0,0 +1,11 @@ +package org.lushplugins.pluginupdater.common.config.serializer; + +import com.electronwill.nightconfig.core.Config; +import org.lushplugins.pluginupdater.api.updater.PluginData; + +public class PluginDataSerializer { + + public static PluginData read(Config config) { + + } +} diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java b/common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java new file mode 100644 index 0000000..8e7c758 --- /dev/null +++ b/common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java @@ -0,0 +1,68 @@ +package org.lushplugins.pluginupdater.api.collector; + +import org.jetbrains.annotations.NotNull; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; + +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class CollectorRegistry { + private static final Map collectors = new HashMap<>(); + + static { + register("", null); + } + + public static void register(@NotNull String id, PluginDataCollector collector) { + if (collectors.containsKey(id)) { + throw new IllegalStateException("This collector is already registered"); + } + + collectors.put(id, collector); + } + + public static void unregister(String id) { + collectors.remove(id); + } + + public static CompletableFuture> collectUnknownPlugins() { + CompletableFuture> future = new CompletableFuture<>(); + + PluginUpdater.getInstance().getUpdateHandler().getThreads().execute(() -> { + ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + Map unknownPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()) + .map(plugin -> plugin instanceof JavaPlugin javaPlugin ? javaPlugin : null) + .filter(plugin -> plugin != null && configManager.canRegisterPluginData(plugin.getName())) + .collect(Collectors.toMap(PluginBase::getName, plugin -> plugin)); + + if (unknownPlugins.isEmpty()) { + future.complete(Collections.emptyList()); + return; + } + + List foundPluginDataList = new ArrayList<>(); + List collectors = List.of( + new CommonPluginCollector(), + new PluginYamlCollector(), + new ModrinthCollector(), + new SpigotCollector() + ); + + for (PluginDataCollector collector : collectors) { + List pluginDataList = collector.collectPlugins(unknownPlugins.values()); + + foundPluginDataList.addAll(pluginDataList); + for (PluginData pluginData : pluginDataList) { + unknownPlugins.remove(pluginData.getPluginName()); + } + } + + future.complete(foundPluginDataList); + }); + + return future; + } +} diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java b/common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java new file mode 100644 index 0000000..cb13756 --- /dev/null +++ b/common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java @@ -0,0 +1,10 @@ +package org.lushplugins.pluginupdater.api.collector; + +import org.lushplugins.pluginupdater.api.updater.PluginData; + +import java.util.List; +import java.util.Set; + +public interface PluginDataCollector { + List collectPluginData(Set unknownPlugins); +} diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java index adc9959..3ce081c 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java +++ b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java @@ -1,6 +1,5 @@ package org.lushplugins.pluginupdater.api.version.comparator; -import org.bukkit.configuration.ConfigurationSection; import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -8,7 +7,7 @@ import java.util.regex.Pattern; public class BuildNumComparator implements VersionComparator { - private static final Pattern DEFAULT_PATTERN = Pattern.compile("[.#-+]([0-9]+)$"); + public static final Pattern DEFAULT_PATTERN = Pattern.compile("[.#-+]([0-9]+)$"); public static final BuildNumComparator INSTANCE = new BuildNumComparator(DEFAULT_PATTERN); private final Pattern pattern; @@ -17,10 +16,6 @@ public BuildNumComparator(Pattern pattern) { this.pattern = pattern; } - public BuildNumComparator(ConfigurationSection config) { - this.pattern = config.isString("pattern") ? Pattern.compile(config.getString("pattern")) : DEFAULT_PATTERN; - } - @Override public VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException { int currentBuild = Integer.parseInt(applyVersionFormat(currentVersionString)); diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java index 6cec99f..b8c9aca 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java +++ b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java @@ -1,6 +1,5 @@ package org.lushplugins.pluginupdater.api.version.comparator; -import org.bukkit.configuration.ConfigurationSection; import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -12,7 +11,7 @@ import java.time.temporal.TemporalAccessor; public class CalVerComparator implements VersionComparator { - private static final DateTimeFormatter DEFAULT_FORMAT = DateTimeFormatter.ofPattern("yyyy.MM.dd"); + public static final DateTimeFormatter DEFAULT_FORMAT = DateTimeFormatter.ofPattern("yyyy.MM.dd"); public static final CalVerComparator INSTANCE = new CalVerComparator(DEFAULT_FORMAT); private final DateTimeFormatter dateTimeFormat; @@ -21,10 +20,6 @@ public CalVerComparator(DateTimeFormatter dateTimeFormat) { this.dateTimeFormat = dateTimeFormat; } - public CalVerComparator(ConfigurationSection config) { - this.dateTimeFormat = config.isString("date-format") ? DateTimeFormatter.ofPattern(config.getString("date-format")) : DEFAULT_FORMAT; - } - /** * @return {@link VersionDifference#LATEST} if the latest version has the same (or earlier) date and time *
{@link VersionDifference#MINOR} if the latest version has a later date diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java deleted file mode 100644 index 444fd38..0000000 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/ComparatorRegistry.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.lushplugins.pluginupdater.api.version.comparator; - -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; - -public class ComparatorRegistry { - private static final HashMap comparators = new HashMap<>(); - - static { - register("build", BuildNumComparator::new); - register("cal-ver", CalVerComparator::new); - register("sem-ver", SemVerComparator::new); - } - - public static @Nullable VersionComparator getVersionComparator(String id, ConfigurationSection config) { - try { - return comparators.containsKey(id) ? comparators.get(id).apply(config) : null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static void register(@NotNull String id, VersionComparatorConstructor constructor) { - if (comparators.containsKey(id)) { - throw new IllegalStateException("This comparator is already registered"); - } - - comparators.put(id, constructor); - } - - public static void unregister(String id) { - comparators.remove(id); - } - - @FunctionalInterface - public interface VersionComparatorConstructor { - VersionComparator apply(ConfigurationSection configurationSection); - } -} diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java index e62aee7..8272b2e 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java +++ b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java @@ -1,6 +1,5 @@ package org.lushplugins.pluginupdater.api.version.comparator; -import org.bukkit.configuration.ConfigurationSection; import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -8,7 +7,7 @@ import java.util.regex.Pattern; public class SemVerComparator implements VersionComparator { - private static final Pattern DEFAULT_PATTERN = Pattern.compile("(\\d+(\\.\\d+)*)"); + public static final Pattern DEFAULT_PATTERN = Pattern.compile("(\\d+(\\.\\d+)*)"); public static final SemVerComparator INSTANCE = new SemVerComparator(DEFAULT_PATTERN); private final Pattern pattern; @@ -16,10 +15,6 @@ public class SemVerComparator implements VersionComparator { public SemVerComparator(Pattern pattern) { this.pattern = pattern; } - - public SemVerComparator(ConfigurationSection config) { - this.pattern = config.isString("pattern") ? Pattern.compile(config.getString("pattern")) : DEFAULT_PATTERN; - } @Override public VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException { diff --git a/platform/build.gradle.kts b/platform/build.gradle.kts index b7efae2..4d65799 100644 --- a/platform/build.gradle.kts +++ b/platform/build.gradle.kts @@ -5,10 +5,6 @@ plugins { subprojects { apply(plugin = "com.gradleup.shadow") - dependencies { - implementation(project(":api:" + project.name)) - } - tasks { shadowJar { minimize() diff --git a/platform/spigot/build.gradle.kts b/platform/spigot/plugin/build.gradle.kts similarity index 92% rename from platform/spigot/build.gradle.kts rename to platform/spigot/plugin/build.gradle.kts index 64abdab..431fddf 100644 --- a/platform/spigot/build.gradle.kts +++ b/platform/spigot/plugin/build.gradle.kts @@ -7,10 +7,11 @@ plugins { } dependencies { - compileOnly("org.spigotmc:spigot-api:26.1-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") - implementation("org.lushplugins:LushLib:1.0.0") - implementation("io.github.revxrsal:lamp.common:4.0.0-rc.16") + implementation(project(":common")) + implementation(project(":common:commands")) + implementation(project(":common:config")) implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") } @@ -60,7 +61,7 @@ modrinth { "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11", "21.6" ) - loaders.addAll("spigot", "paper", "purpur", "folia") + loaders.addAll("paper", "purpur", "folia") syncBodyFrom.set(rootProject.file("README.md").readText()) } diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java similarity index 83% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java index e03453f..3381c6b 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java @@ -1,15 +1,15 @@ package org.lushplugins.pluginupdater; import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.command.UpdateCommand; -import org.lushplugins.pluginupdater.command.UpdaterCommand; -import org.lushplugins.pluginupdater.command.UpdatesCommand; -import org.lushplugins.pluginupdater.config.ConfigManager; +import org.lushplugins.pluginupdater.common.command.UpdateCommand; +import org.lushplugins.pluginupdater.common.command.UpdaterCommand; +import org.lushplugins.pluginupdater.common.command.UpdatesCommand; +import org.lushplugins.pluginupdater.common.config.ConfigManager; import org.lushplugins.pluginupdater.listener.PlayerListener; import org.lushplugins.pluginupdater.updater.UpdateHandler; import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.util.lamp.annotation.PluginName; -import org.lushplugins.pluginupdater.util.lamp.response.StringMessageResponseHandler; +import org.lushplugins.pluginupdater.common.command.annotation.PluginName; +import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; import revxrsal.commands.Lamp; import revxrsal.commands.bukkit.BukkitLamp; import revxrsal.commands.bukkit.actor.BukkitCommandActor; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java similarity index 100% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java index 91903e3..2e717c5 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java @@ -13,20 +13,20 @@ public class PluginUpdaterAPI { /** * Make a plugin available to be checked/downloaded - * @param plugin Plugin to be added + * @param pluginName Name of plugin to be added * @param pluginData Relevant update data */ - public static void addPlugin(Plugin plugin, PluginData pluginData) { - addPlugin(plugin.getName(), pluginData); + public static void addPlugin(String pluginName, PluginData pluginData) { + PluginUpdater.getInstance().getConfigManager().addPlugin(pluginName, pluginData); } /** * Make a plugin available to be checked/downloaded - * @param pluginName Name of plugin to be added + * @param plugin Plugin to be added * @param pluginData Relevant update data */ - public static void addPlugin(String pluginName, PluginData pluginData) { - PluginUpdater.getInstance().getConfigManager().addPlugin(pluginName, pluginData); + public static void addPlugin(Plugin plugin, PluginData pluginData) { + addPlugin(plugin.getName(), pluginData); } /** diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java similarity index 97% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java index 12a8e1c..2915c00 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java @@ -10,7 +10,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.comparator.ComparatorRegistry; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.config.ConfigManager; +import org.lushplugins.pluginupdater.common.ConfigManager; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java similarity index 100% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java similarity index 97% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java index 4278c27..243d70e 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java @@ -5,7 +5,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.lushplugins.pluginupdater.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.config.ConfigManager; +import org.lushplugins.pluginupdater.common.ConfigManager; import java.util.*; import java.util.concurrent.CompletableFuture; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java similarity index 97% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java index d9a836b..d434221 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java @@ -10,7 +10,7 @@ import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.config.ConfigManager; +import org.lushplugins.pluginupdater.common.config.ConfigManager; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java similarity index 100% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java similarity index 92% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java index 46da140..9d1b2fe 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java @@ -5,10 +5,9 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import org.lushplugins.lushlib.libraries.chatcolor.paper.PaperColor; import org.lushplugins.pluginupdater.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.config.ConfigManager; +import org.lushplugins.pluginupdater.common.config.ConfigManager; public class PlayerListener implements Listener { diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java similarity index 98% rename from platform/spigot/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java index 2fc997e..f0e4f3f 100644 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java @@ -2,7 +2,6 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.lushplugins.lushlib.libraries.chatcolor.paper.PaperColor; import org.lushplugins.pluginupdater.PluginUpdater; import org.lushplugins.pluginupdater.api.platform.PlatformData; import org.lushplugins.pluginupdater.api.updater.PluginData; diff --git a/platform/spigot/src/main/resources/common-plugins.yml b/platform/spigot/plugin/src/main/resources/common-plugins.yml similarity index 100% rename from platform/spigot/src/main/resources/common-plugins.yml rename to platform/spigot/plugin/src/main/resources/common-plugins.yml diff --git a/platform/spigot/src/main/resources/config.yml b/platform/spigot/plugin/src/main/resources/config.yml similarity index 100% rename from platform/spigot/src/main/resources/config.yml rename to platform/spigot/plugin/src/main/resources/config.yml diff --git a/platform/spigot/src/main/resources/plugin.yml b/platform/spigot/plugin/src/main/resources/plugin.yml similarity index 100% rename from platform/spigot/src/main/resources/plugin.yml rename to platform/spigot/plugin/src/main/resources/plugin.yml diff --git a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java b/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java deleted file mode 100644 index 4ffd7d6..0000000 --- a/platform/spigot/src/main/java/org/lushplugins/pluginupdater/util/lamp/response/StringMessageResponseHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.lushplugins.pluginupdater.util.lamp.response; - -import org.lushplugins.lushlib.libraries.chatcolor.paper.PaperColor; -import revxrsal.commands.bukkit.actor.BukkitCommandActor; -import revxrsal.commands.node.ExecutionContext; -import revxrsal.commands.response.ResponseHandler; - -public class StringMessageResponseHandler implements ResponseHandler { - - @Override - public void handleResponse(String string, ExecutionContext context) { - PaperColor.handler().sendMessage(context.actor().sender(), string); - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index b19f13c..d5a1b07 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,6 @@ rootProject.name = "PluginUpdater" include("common") -include("api:spigot") -include("api:velocity") -include("platform:spigot") -include("platform:velocity") \ No newline at end of file +include("common:commands") +include("common:config") +include("platform:spigot:plugin") +include("platform:velocity:plugin") \ No newline at end of file From eeabd6477a3bbfdbef8ae51d63a24a804d6ff873 Mon Sep 17 00:00:00 2001 From: Oak Date: Sat, 2 May 2026 21:28:24 +0300 Subject: [PATCH 03/57] Continued progress on refactoring --- build.gradle.kts | 2 +- common/{ => api}/build.gradle.kts | 0 .../api/collector/CollectorRegistry.java | 6 +- .../api/collector/PluginDataCollector.java | 4 +- .../InvalidVersionFormatException.java | 2 +- .../api/listener/NotificationHandler.java | 6 +- .../paper}/api/platform/Platform.java | 4 +- .../paper}/api/platform/PlatformData.java | 6 +- .../paper}/api/platform/PlatformRegistry.java | 20 ++--- .../api/platform/github/GithubData.java | 4 +- .../platform/github/GithubVersionChecker.java | 12 +-- .../api/platform/hangar/HangarData.java | 4 +- .../platform/hangar/HangarVersionChecker.java | 12 +-- .../api/platform/modrinth/ModrinthData.java | 4 +- .../modrinth/ModrinthVersionChecker.java | 12 +-- .../api/platform/spigot/SpigotData.java | 4 +- .../platform/spigot/SpigotVersionChecker.java | 12 +-- .../paper}/api/updater/PluginData.java | 10 +-- .../paper}/api/updater/Updater.java | 21 +++-- .../paper}/api/util/DownloadLogger.java | 4 +- .../paper}/api/util/HttpUtil.java | 2 +- .../paper}/api/util/UpdaterConstants.java | 2 +- .../paper}/api/version/VersionChecker.java | 16 ++-- .../paper}/api/version/VersionDifference.java | 2 +- .../comparator/BuildNumComparator.java | 6 +- .../version/comparator/CalVerComparator.java | 6 +- .../version/comparator/SemVerComparator.java | 6 +- .../version/comparator/VersionComparator.java | 9 +++ .../src/main/resources/settings.properties | 0 common/commands/build.gradle.kts | 3 - common/config/build.gradle.kts | 5 -- .../pluginupdater/common/config/Messages.java | 14 ---- common/impl/build.gradle.kts | 6 ++ .../common/command/UpdateCommand.java | 4 +- .../common/command/UpdaterCommand.java | 0 .../common/command/UpdatesCommand.java | 2 +- .../common/command/annotation/PluginName.java | 0 .../StringMessageResponseHandler.java | 0 .../common/config/ComparatorRegistry.java | 2 +- .../common/config/ConfigManager.java | 20 ++++- .../serializer/ComparatorSerializer.java | 6 +- .../serializer/PluginDataSerializer.java | 2 +- .../common/platform/UpdaterImpl.java | 57 ++++++++++++++ .../common}/updater/UpdateHandler.java | 30 +++----- .../impl}/src/main/resources/config.yml | 0 .../version/comparator/VersionComparator.java | 9 --- platform/spigot/plugin/build.gradle.kts | 5 +- .../pluginupdater/PluginUpdater.java | 76 ------------------- .../pluginupdater/paper/PluginUpdater.java | 40 ++++++++++ .../paper/SpigotUpdaterImpl.java | 37 +++++++++ .../{ => paper}/api/PluginUpdaterAPI.java | 14 ++-- .../collector/CommonPluginCollector.java | 16 ++-- .../collector/ModrinthCollector.java | 12 +-- .../collector/PluginDataCollector.java | 10 +-- .../collector/PluginYamlCollector.java | 18 ++--- .../collector/SpigotCollector.java | 12 +-- .../{ => paper}/listener/PlayerListener.java | 9 ++- .../plugin/src/main/resources/plugin.yml | 2 +- settings.gradle.kts | 5 +- 59 files changed, 326 insertions(+), 288 deletions(-) rename common/{ => api}/build.gradle.kts (100%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/collector/CollectorRegistry.java (91%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/collector/PluginDataCollector.java (55%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/exception/InvalidVersionFormatException.java (82%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/listener/NotificationHandler.java (89%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/Platform.java (74%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/PlatformData.java (70%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/PlatformRegistry.java (78%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/github/GithubData.java (85%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/github/GithubVersionChecker.java (84%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/hangar/HangarData.java (81%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/hangar/HangarVersionChecker.java (74%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/modrinth/ModrinthData.java (94%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/modrinth/ModrinthVersionChecker.java (85%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/spigot/SpigotData.java (81%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/platform/spigot/SpigotVersionChecker.java (76%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/updater/PluginData.java (92%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/updater/Updater.java (92%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/util/DownloadLogger.java (91%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/util/HttpUtil.java (96%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/util/UpdaterConstants.java (95%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/version/VersionChecker.java (91%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/version/VersionDifference.java (80%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/version/comparator/BuildNumComparator.java (84%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/version/comparator/CalVerComparator.java (92%) rename common/{src/main/java/org/lushplugins/pluginupdater => api/src/main/java/org/lushplugins/pluginupdater/paper}/api/version/comparator/SemVerComparator.java (91%) create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java rename common/{ => api}/src/main/resources/settings.properties (100%) delete mode 100644 common/commands/build.gradle.kts delete mode 100644 common/config/build.gradle.kts delete mode 100644 common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java create mode 100644 common/impl/build.gradle.kts rename common/{commands => impl}/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java (96%) rename common/{commands => impl}/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java (100%) rename common/{commands => impl}/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java (98%) rename common/{commands => impl}/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java (100%) rename common/{commands => impl}/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java (100%) rename common/{config => impl}/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java (94%) rename common/{config => impl}/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java (90%) rename common/{config => impl}/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java (79%) rename common/{config => impl}/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java (75%) create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java rename {platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater => common/impl/src/main/java/org/lushplugins/pluginupdater/common}/updater/UpdateHandler.java (84%) rename {platform/spigot/plugin => common/impl}/src/main/resources/config.yml (100%) delete mode 100644 common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java delete mode 100644 platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java create mode 100644 platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java create mode 100644 platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/api/PluginUpdaterAPI.java (77%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/collector/CommonPluginCollector.java (81%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/collector/ModrinthCollector.java (89%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/collector/PluginDataCollector.java (85%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/collector/PluginYamlCollector.java (79%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/collector/SpigotCollector.java (84%) rename platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/{ => paper}/listener/PlayerListener.java (83%) diff --git a/build.gradle.kts b/build.gradle.kts index 0e14d8d..8b7280e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,7 +21,7 @@ allprojects { mavenLocal() mavenCentral() maven("https://repo.papermc.io/repository/maven-public/") // Paper - maven("https://repo.lushplugins.org/snapshots") // LushLib + maven("https://repo.lushplugins.org/snapshots") // ChatColorHandler } java { diff --git a/common/build.gradle.kts b/common/api/build.gradle.kts similarity index 100% rename from common/build.gradle.kts rename to common/api/build.gradle.kts diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java similarity index 91% rename from common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java index 8e7c758..4dbec39 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/CollectorRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java @@ -1,12 +1,10 @@ -package org.lushplugins.pluginupdater.api.collector; +package org.lushplugins.pluginupdater.paper.api.collector; import org.jetbrains.annotations.NotNull; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.function.Function; import java.util.stream.Collectors; public class CollectorRegistry { diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java similarity index 55% rename from common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java index cb13756..a29bc9a 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/collector/PluginDataCollector.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.api.collector; +package org.lushplugins.pluginupdater.paper.api.collector; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import java.util.List; import java.util.Set; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java similarity index 82% rename from common/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java index 68fcffa..f1f466c 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.exception; +package org.lushplugins.pluginupdater.paper.api.exception; public class InvalidVersionFormatException extends RuntimeException { diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java similarity index 89% rename from common/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java index 0c74f76..6f2ca4c 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.listener; +package org.lushplugins.pluginupdater.paper.api.listener; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -6,8 +6,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.lushplugins.chatcolorhandler.paper.PaperColor; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.updater.Updater; public class NotificationHandler implements Listener { private final Updater updater; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java similarity index 74% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java index 4188617..a3099af 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.api.platform; +package org.lushplugins.pluginupdater.paper.api.platform; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; import java.util.concurrent.Callable; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java similarity index 70% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java index 87571e6..6b983b3 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.platform; +package org.lushplugins.pluginupdater.paper.api.platform; -import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; public abstract class PlatformData { private final String name; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java similarity index 78% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java index c338178..f78eedc 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java @@ -1,14 +1,14 @@ -package org.lushplugins.pluginupdater.api.platform; +package org.lushplugins.pluginupdater.paper.api.platform; -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.github.GithubVersionChecker; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarVersionChecker; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthVersionChecker; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotVersionChecker; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.paper.api.platform.github.GithubVersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarVersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthVersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotVersionChecker; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.NotNull; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java similarity index 85% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java index e0fd0bd..7b390e5 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java @@ -1,8 +1,8 @@ -package org.lushplugins.pluginupdater.api.platform.github; +package org.lushplugins.pluginupdater.paper.api.platform.github; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; public class GithubData extends PlatformData { private static final String NAME = "github"; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java similarity index 84% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java index 6b274b1..f6d5a1d 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java @@ -1,13 +1,13 @@ -package org.lushplugins.pluginupdater.api.platform.github; +package org.lushplugins.pluginupdater.paper.api.platform.github; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import java.io.IOException; import java.net.URI; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java similarity index 81% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java index 9c443f3..7d921a1 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.platform.hangar; +package org.lushplugins.pluginupdater.paper.api.platform.hangar; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; public class HangarData extends PlatformData { private static final String NAME = "hangar"; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java similarity index 74% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java index 66a6ef4..f1d21dd 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java @@ -1,10 +1,10 @@ -package org.lushplugins.pluginupdater.api.platform.hangar; +package org.lushplugins.pluginupdater.paper.api.platform.hangar; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java similarity index 94% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java index 6d33aeb..bd7503a 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.api.platform.modrinth; +package org.lushplugins.pluginupdater.paper.api.platform.modrinth; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; import java.util.Collections; import java.util.List; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java similarity index 85% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java index 62fb563..f1f42e0 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java @@ -1,13 +1,13 @@ -package org.lushplugins.pluginupdater.api.platform.modrinth; +package org.lushplugins.pluginupdater.paper.api.platform.modrinth; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java similarity index 81% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java index 0077317..e2ea32b 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.platform.spigot; +package org.lushplugins.pluginupdater.paper.api.platform.spigot; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; public class SpigotData extends PlatformData { private static final String NAME = "spigot"; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java similarity index 76% rename from common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java index a6052d9..3b296b9 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java @@ -1,12 +1,12 @@ -package org.lushplugins.pluginupdater.api.platform.spigot; +package org.lushplugins.pluginupdater.paper.api.platform.spigot; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java similarity index 92% rename from common/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java index c432029..0e9a987 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java @@ -1,12 +1,12 @@ -package org.lushplugins.pluginupdater.api.updater; +package org.lushplugins.pluginupdater.paper.api.updater; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.version.VersionDifference; -import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; import java.util.Collections; import java.util.List; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java similarity index 92% rename from common/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java index 3d1c830..46420a0 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java @@ -1,22 +1,21 @@ -package org.lushplugins.pluginupdater.api.updater; +package org.lushplugins.pluginupdater.paper.api.updater; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.listener.NotificationHandler; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.listener.NotificationHandler; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.concurrent.CompletableFuture; import java.util.logging.Level; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java similarity index 91% rename from common/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java index 23198ca..8b477ef 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.api.util; +package org.lushplugins.pluginupdater.paper.api.util; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import java.io.File; import java.io.FileWriter; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java similarity index 96% rename from common/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java index 2290b95..b510a83 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.util; +package org.lushplugins.pluginupdater.paper.api.util; import com.google.gson.JsonElement; import org.jetbrains.annotations.Nullable; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java similarity index 95% rename from common/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java index 8755c21..cc11f21 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.util; +package org.lushplugins.pluginupdater.paper.api.util; import com.google.gson.Gson; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java similarity index 91% rename from common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java index 134bdd5..c7cc466 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java @@ -1,13 +1,13 @@ -package org.lushplugins.pluginupdater.api.version; +package org.lushplugins.pluginupdater.paper.api.version; import org.bukkit.Bukkit; -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; import java.io.*; import java.net.HttpURLConnection; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java similarity index 80% rename from common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java index 12ef1db..05d101f 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.version; +package org.lushplugins.pluginupdater.paper.api.version; public enum VersionDifference { /** diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java similarity index 84% rename from common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java index 3ce081c..717826d 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.version.comparator; +package org.lushplugins.pluginupdater.paper.api.version.comparator; -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java similarity index 92% rename from common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java index b8c9aca..108903e 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.version.comparator; +package org.lushplugins.pluginupdater.paper.api.version.comparator; -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java similarity index 91% rename from common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java index 8272b2e..3856ad9 100644 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.api.version.comparator; +package org.lushplugins.pluginupdater.paper.api.version.comparator; -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java new file mode 100644 index 0000000..8ad9244 --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java @@ -0,0 +1,9 @@ +package org.lushplugins.pluginupdater.paper.api.version.comparator; + +import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; + +public interface VersionComparator { + + VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException; +} diff --git a/common/src/main/resources/settings.properties b/common/api/src/main/resources/settings.properties similarity index 100% rename from common/src/main/resources/settings.properties rename to common/api/src/main/resources/settings.properties diff --git a/common/commands/build.gradle.kts b/common/commands/build.gradle.kts deleted file mode 100644 index bf48d2c..0000000 --- a/common/commands/build.gradle.kts +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - api("io.github.revxrsal:lamp.common:4.0.0-rc.16") -} \ No newline at end of file diff --git a/common/config/build.gradle.kts b/common/config/build.gradle.kts deleted file mode 100644 index d08a8a7..0000000 --- a/common/config/build.gradle.kts +++ /dev/null @@ -1,5 +0,0 @@ -dependencies { - compileOnly(project(":common")) - - implementation("com.electronwill.night-config:yaml:3.8.4") -} diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java b/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java deleted file mode 100644 index e7588e4..0000000 --- a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/Messages.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.lushplugins.pluginupdater.common.config; - -import java.util.Map; - -public record Messages(Map messages) { - - public String get(String key) { - return messages.get(key); - } - - public String get(String key, String def) { - return messages.getOrDefault(key, def); - } -} diff --git a/common/impl/build.gradle.kts b/common/impl/build.gradle.kts new file mode 100644 index 0000000..7a88426 --- /dev/null +++ b/common/impl/build.gradle.kts @@ -0,0 +1,6 @@ +dependencies { + api(project(":common:api")) + + api("io.github.revxrsal:lamp.common:4.0.0-rc.16") + api("com.electronwill.night-config:yaml:3.8.4") +} diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java similarity index 96% rename from common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index f5fe8b4..eb14270 100644 --- a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -1,8 +1,8 @@ package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import org.lushplugins.pluginupdater.updater.UpdateHandler; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; import revxrsal.commands.annotation.Command; diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java similarity index 100% rename from common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java similarity index 98% rename from common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index d896593..314fbdf 100644 --- a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -3,7 +3,7 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import org.lushplugins.pluginupdater.common.config.ConfigManager; import revxrsal.commands.annotation.Command; import revxrsal.commands.bukkit.annotation.CommandPermission; diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java similarity index 100% rename from common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/PluginName.java diff --git a/common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java similarity index 100% rename from common/commands/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/response/StringMessageResponseHandler.java diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java similarity index 94% rename from common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java index d421232..d753342 100644 --- a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -3,7 +3,7 @@ import com.electronwill.nightconfig.core.Config; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.config.serializer.ComparatorSerializer; import java.util.HashMap; diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java similarity index 90% rename from common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 90dfe1a..2402b86 100644 --- a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -4,10 +4,10 @@ import com.electronwill.nightconfig.core.file.FileConfig; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; import java.util.*; import java.util.logging.Level; @@ -145,4 +145,16 @@ public void removePlugin(String pluginName) { public String getMessage(String name, String def) { return messages.get(name, def); } + + + public record Messages(Map messages) { + + public String get(String key) { + return messages.get(key); + } + + public String get(String key, String def) { + return messages.getOrDefault(key, def); + } + } } diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java similarity index 79% rename from common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java index f13fad2..8554d2f 100644 --- a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java @@ -1,9 +1,9 @@ package org.lushplugins.pluginupdater.common.config.serializer; import com.electronwill.nightconfig.core.Config; -import org.lushplugins.pluginupdater.api.version.comparator.BuildNumComparator; -import org.lushplugins.pluginupdater.api.version.comparator.CalVerComparator; -import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.BuildNumComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.CalVerComparator; +import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; diff --git a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java similarity index 75% rename from common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java index d4638b5..387d0cc 100644 --- a/common/config/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java @@ -1,7 +1,7 @@ package org.lushplugins.pluginupdater.common.config.serializer; import com.electronwill.nightconfig.core.Config; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; public class PluginDataSerializer { diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java new file mode 100644 index 0000000..86c50a1 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java @@ -0,0 +1,57 @@ +package org.lushplugins.pluginupdater.common.platform; + +import org.lushplugins.pluginupdater.common.command.UpdateCommand; +import org.lushplugins.pluginupdater.common.command.UpdaterCommand; +import org.lushplugins.pluginupdater.common.command.UpdatesCommand; +import org.lushplugins.pluginupdater.common.command.annotation.PluginName; +import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; +import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import revxrsal.commands.Lamp; + +public abstract class UpdaterImpl { + private final UpdateHandler updateHandler; + private final ConfigManager config; + + public UpdaterImpl() { + updateHandler = new UpdateHandler(); + updateHandler.enable(); + + config = new ConfigManager(); + config.reloadConfig(); + + Lamp lamp = prepareLamp() + .suggestionProviders(providers -> { + providers.addProviderForAnnotation(PluginName.class, (annotation) -> (context) -> { + return config.getPlugins(); + }); + }) + .responseHandler(String.class, new StringMessageResponseHandler()) + .build(); + lamp.register(new UpdaterCommand(), new UpdatesCommand()); + + if (config.shouldAllowDownloads()) { + lamp.register(new UpdateCommand()); + } + } + + public void shutdown() { + updateHandler.shutdown(); + } + + public UpdateHandler getUpdateHandler() { + return updateHandler; + } + + public ConfigManager getConfig() { + return config; + } + + public void reloadConfig() { + config.reloadConfig(); + } + + public abstract Lamp.Builder prepareLamp(); + + public abstract void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); +} diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java similarity index 84% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index f0e4f3f..df0d3d5 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -1,21 +1,17 @@ -package org.lushplugins.pluginupdater.updater; +package org.lushplugins.pluginupdater.common.updater; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; import java.io.IOException; import java.util.ArrayDeque; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.*; import java.util.logging.Level; -import java.util.stream.Collectors; public class UpdateHandler { private final ScheduledExecutorService threads = Executors.newScheduledThreadPool(1); @@ -42,6 +38,10 @@ public boolean shutdown() { } } + public Map currentlyProcessing() { + return currentlyProcessing; + } + public int remainingWithState(ProcessingData.State state) { return (int) this.queue.stream() .filter(data -> data.getState() == state) @@ -117,19 +117,7 @@ private void processQueue() { } public void sendNotification(ProcessingData.State state) { - List players = Bukkit.getOnlinePlayers().stream() - .filter(player -> player.hasPermission("pluginupdater.notify")) - .collect(Collectors.toUnmodifiableList()); - - if (players.isEmpty()) { - return; - } - - int processed = this.currentlyProcessing.getOrDefault(state, 1); - int total = processed + remainingWithState(state); - PaperColor.handler().sendActionBarMessage(players, "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" - .formatted(processed, total)); } public static class ProcessingData { diff --git a/platform/spigot/plugin/src/main/resources/config.yml b/common/impl/src/main/resources/config.yml similarity index 100% rename from platform/spigot/plugin/src/main/resources/config.yml rename to common/impl/src/main/resources/config.yml diff --git a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java b/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java deleted file mode 100644 index a1ac8d6..0000000 --- a/common/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.lushplugins.pluginupdater.api.version.comparator; - -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.version.VersionDifference; - -public interface VersionComparator { - - VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException; -} diff --git a/platform/spigot/plugin/build.gradle.kts b/platform/spigot/plugin/build.gradle.kts index 431fddf..92fe2b4 100644 --- a/platform/spigot/plugin/build.gradle.kts +++ b/platform/spigot/plugin/build.gradle.kts @@ -9,9 +9,8 @@ plugins { dependencies { compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") - implementation(project(":common")) - implementation(project(":common:commands")) - implementation(project(":common:config")) + implementation(project(":common:impl")) + implementation("org.lushplugins.chatcolorhandler:paper:8.1.0") implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") } diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java deleted file mode 100644 index 3381c6b..0000000 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/PluginUpdater.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.lushplugins.pluginupdater; - -import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.common.command.UpdateCommand; -import org.lushplugins.pluginupdater.common.command.UpdaterCommand; -import org.lushplugins.pluginupdater.common.command.UpdatesCommand; -import org.lushplugins.pluginupdater.common.config.ConfigManager; -import org.lushplugins.pluginupdater.listener.PlayerListener; -import org.lushplugins.pluginupdater.updater.UpdateHandler; -import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.common.command.annotation.PluginName; -import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; -import revxrsal.commands.Lamp; -import revxrsal.commands.bukkit.BukkitLamp; -import revxrsal.commands.bukkit.actor.BukkitCommandActor; - -import java.io.File; - -public final class PluginUpdater extends JavaPlugin { - private static PluginUpdater plugin; - - private UpdateHandler updateHandler; - private ConfigManager configManager; - - @Override - public void onEnable() { - plugin = this; - - DownloadLogger.setLogFile(new File(plugin.getDataFolder(), "downloads.log")); - - updateHandler = new UpdateHandler(); - updateHandler.enable(); - - configManager = new ConfigManager(); - configManager.reloadConfig(); - - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - - Lamp lamp = BukkitLamp.builder(this) - .suggestionProviders(providers -> { - providers.addProviderForAnnotation(PluginName.class, (annotation) -> (context) -> { - return PluginUpdater.getInstance().getConfigManager().getPlugins(); - }); - }) - .responseHandler(String.class, new StringMessageResponseHandler()) - .build(); - lamp.register(new UpdaterCommand(), new UpdatesCommand()); - - if (PluginUpdater.getInstance().getConfigManager().shouldAllowDownloads()) { - lamp.register(new UpdateCommand()); - } - } - - @Override - public void onDisable() { - if (updateHandler != null) { - updateHandler.shutdown(); - updateHandler = null; - } - - configManager = null; - plugin = null; - } - - public UpdateHandler getUpdateHandler() { - return updateHandler; - } - - public ConfigManager getConfigManager() { - return configManager; - } - - public static PluginUpdater getInstance() { - return plugin; - } -} diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java new file mode 100644 index 0000000..7bd53d8 --- /dev/null +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java @@ -0,0 +1,40 @@ +package org.lushplugins.pluginupdater.paper; + +import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.paper.listener.PlayerListener; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; + +public final class PluginUpdater extends JavaPlugin { + private static PluginUpdater plugin; + + private SpigotUpdaterImpl updaterImpl; + + @Override + public void onEnable() { + plugin = this; + + DownloadLogger.setLogFile(new File(plugin.getDataFolder(), "downloads.log")); + + updaterImpl = new SpigotUpdaterImpl(); + + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + } + + @Override + public void onDisable() { + if (updaterImpl != null) { + updaterImpl.shutdown(); + updaterImpl = null; + } + } + + public SpigotUpdaterImpl getUpdaterImpl() { + return updaterImpl; + } + + public static PluginUpdater getInstance() { + return plugin; + } +} diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java new file mode 100644 index 0000000..b58b448 --- /dev/null +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java @@ -0,0 +1,37 @@ +package org.lushplugins.pluginupdater.paper; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.lushplugins.chatcolorhandler.paper.PaperColor; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import revxrsal.commands.Lamp; +import revxrsal.commands.bukkit.BukkitLamp; + +import java.util.List; +import java.util.stream.Collectors; + +public class SpigotUpdaterImpl extends UpdaterImpl { + + @Override + public Lamp.Builder prepareLamp() { + return BukkitLamp.builder(PluginUpdater.getInstance()); + } + + @Override + public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state) { + List players = Bukkit.getOnlinePlayers().stream() + .filter(player -> player.hasPermission("pluginupdater.notify")) + .collect(Collectors.toUnmodifiableList()); + + if (players.isEmpty()) { + return; + } + + int processed = handler.currentlyProcessing().getOrDefault(state, 1); + int total = processed + handler.remainingWithState(state); + + PaperColor.handler().sendActionBarMessage(players, "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" + .formatted(processed, total)); + } +} diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java similarity index 77% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index 2e717c5..83af771 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/api/PluginUpdaterAPI.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.api; +package org.lushplugins.pluginupdater.paper.api; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; import org.bukkit.plugin.Plugin; import java.util.concurrent.Callable; @@ -17,7 +17,7 @@ public class PluginUpdaterAPI { * @param pluginData Relevant update data */ public static void addPlugin(String pluginName, PluginData pluginData) { - PluginUpdater.getInstance().getConfigManager().addPlugin(pluginName, pluginData); + PluginUpdater.getInstance().getUpdaterImpl().getConfig().addPlugin(pluginName, pluginData); } /** @@ -42,7 +42,7 @@ public static void removePlugin(Plugin plugin) { * @param pluginName Name of plugin to be removed */ public static void removePlugin(String pluginName) { - PluginUpdater.getInstance().getConfigManager().removePlugin(pluginName); + PluginUpdater.getInstance().getUpdaterImpl().getConfig().removePlugin(pluginName); } /** diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java similarity index 81% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index 2915c00..1343893 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/CommonPluginCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -1,15 +1,15 @@ -package org.lushplugins.pluginupdater.collector; +package org.lushplugins.pluginupdater.paper.collector; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.comparator.ComparatorRegistry; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.version.comparator.ComparatorRegistry; +import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.ConfigManager; import java.io.InputStream; @@ -22,7 +22,7 @@ public class CommonPluginCollector implements PluginDataCollector { @Override public List collectPlugins(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); List pluginDataList = new ArrayList<>(); InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java similarity index 89% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java index 61e1c1a..307a912 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/ModrinthCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.collector; +package org.lushplugins.pluginupdater.paper.collector; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; @@ -7,11 +7,11 @@ import com.google.gson.JsonParser; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; import java.io.File; import java.io.IOException; diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java similarity index 85% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java index 243d70e..322bb0a 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginDataCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java @@ -1,10 +1,10 @@ -package org.lushplugins.pluginupdater.collector; +package org.lushplugins.pluginupdater.paper.collector; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginBase; import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import org.lushplugins.pluginupdater.common.ConfigManager; import java.util.*; @@ -18,8 +18,8 @@ public interface PluginDataCollector { static CompletableFuture> collectUnknownPlugins() { CompletableFuture> future = new CompletableFuture<>(); - PluginUpdater.getInstance().getUpdateHandler().getThreads().execute(() -> { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + PluginUpdater.getInstance().getUpdaterImpl().getUpdateHandler().getThreads().execute(() -> { + ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); Map unknownPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()) .map(plugin -> plugin instanceof JavaPlugin javaPlugin ? javaPlugin : null) .filter(plugin -> plugin != null && configManager.canRegisterPluginData(plugin.getName())) diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java similarity index 79% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index d434221..637c2ac 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/PluginYamlCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -1,15 +1,15 @@ -package org.lushplugins.pluginupdater.collector; +package org.lushplugins.pluginupdater.paper.collector; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; import java.io.InputStream; @@ -22,7 +22,7 @@ public class PluginYamlCollector implements PluginDataCollector { @Override public List collectPlugins(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); List pluginDataList = new ArrayList<>(); for (Plugin plugin : unknownPlugins) { diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java similarity index 84% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index ea29554..c9dc914 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/collector/SpigotCollector.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -1,15 +1,15 @@ -package org.lushplugins.pluginupdater.collector; +package org.lushplugins.pluginupdater.paper.collector; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; +import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java similarity index 83% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java rename to platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java index 9d1b2fe..a575644 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/listener/PlayerListener.java +++ b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java @@ -1,12 +1,13 @@ -package org.lushplugins.pluginupdater.listener; +package org.lushplugins.pluginupdater.paper.listener; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.chatcolorhandler.paper.PaperColor; +import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; public class PlayerListener implements Listener { @@ -16,7 +17,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); if (player.hasPermission("pluginupdater.notify")) { Bukkit.getScheduler().runTaskLaterAsynchronously(PluginUpdater.getInstance(), () -> { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); int updatesAvailable = 0; for (PluginData pluginData : configManager.getAllPluginData()) { diff --git a/platform/spigot/plugin/src/main/resources/plugin.yml b/platform/spigot/plugin/src/main/resources/plugin.yml index 694b912..6586dff 100644 --- a/platform/spigot/plugin/src/main/resources/plugin.yml +++ b/platform/spigot/plugin/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: PluginUpdater version: '${version}' -main: org.lushplugins.pluginupdater.PluginUpdater +main: org.lushplugins.pluginupdater.paper.PluginUpdater api-version: '1.18' modrinth-project-id: "plugin-updater" diff --git a/settings.gradle.kts b/settings.gradle.kts index d5a1b07..d89e892 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,5 @@ rootProject.name = "PluginUpdater" -include("common") -include("common:commands") -include("common:config") +include("common:api") +include("common:impl") include("platform:spigot:plugin") include("platform:velocity:plugin") \ No newline at end of file From 46b505ec8b844b89492ef0b713ed88a687cb285c Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 00:06:03 +0300 Subject: [PATCH 04/57] Continued progress on refactoring --- .../InvalidVersionFormatException.java | 2 +- .../api/listener/NotificationHandler.java | 10 ++-- .../{paper => }/api/platform/Platform.java | 4 +- .../api/platform/PlatformData.java | 6 +- .../api/platform/PlatformRegistry.java | 20 +++---- .../api/platform/github/GithubData.java | 4 +- .../platform/github/GithubVersionChecker.java | 12 ++-- .../api/platform/hangar/HangarData.java | 4 +- .../platform/hangar/HangarVersionChecker.java | 12 ++-- .../api/platform/modrinth/ModrinthData.java | 4 +- .../modrinth/ModrinthVersionChecker.java | 12 ++-- .../api/platform/spigot/SpigotData.java | 4 +- .../platform/spigot/SpigotVersionChecker.java | 12 ++-- .../{paper => }/api/updater/PluginData.java | 17 +++--- .../pluginupdater/api/updater/PluginInfo.java | 27 +++++++++ .../{paper => }/api/updater/Updater.java | 36 ++++++------ .../{paper => }/api/util/DownloadLogger.java | 4 +- .../{paper => }/api/util/HttpUtil.java | 2 +- .../api/util/UpdaterConstants.java | 2 +- .../api/version/VersionChecker.java | 19 +++---- .../api/version/VersionDifference.java | 2 +- .../comparator/BuildNumComparator.java | 6 +- .../version/comparator/CalVerComparator.java | 6 +- .../version/comparator/SemVerComparator.java | 6 +- .../version/comparator/VersionComparator.java | 9 +++ .../api/collector/PluginDataCollector.java | 10 ---- .../version/comparator/VersionComparator.java | 9 --- .../common}/collector/CollectorRegistry.java | 4 +- .../common/collector/PluginDataCollector.java | 12 ++++ .../common/command/UpdateCommand.java | 22 ++++---- .../common/command/UpdaterCommand.java | 16 +++--- .../common/command/UpdatesCommand.java | 22 ++++---- .../command/annotation/CommandPermission.java | 15 +++++ .../annotation/CommandPermissionFactory.java | 27 +++++++++ .../common/config/ComparatorRegistry.java | 2 +- .../common/config/ConfigManager.java | 8 +-- .../serializer/ComparatorSerializer.java | 6 +- .../serializer/PluginDataSerializer.java | 5 +- .../common/platform/UpdaterImpl.java | 17 +++++- .../common/updater/UpdateHandler.java | 8 +-- .../{spigot => paper}/plugin/build.gradle.kts | 0 .../paper/PaperUpdaterImpl.java} | 31 ++++++++++- .../pluginupdater/paper/PluginUpdater.java | 8 +-- .../paper/api/PluginUpdaterAPI.java | 6 +- .../collector/CommonPluginCollector.java | 34 ++++++------ .../paper/collector/ModrinthCollector.java | 34 ++++-------- .../paper/collector/PluginYamlCollector.java | 20 +++---- .../paper/collector/SpigotCollector.java | 17 +++--- .../paper/listener/PlayerListener.java | 2 +- .../paper/plugin/PaperPluginInfo.java | 43 +++++++++++++++ .../src/main/resources/common-plugins.yml | 0 .../plugin/src/main/resources/plugin.yml | 0 .../paper/collector/PluginDataCollector.java | 55 ------------------- settings.gradle.kts | 2 +- 54 files changed, 381 insertions(+), 296 deletions(-) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/exception/InvalidVersionFormatException.java (82%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/listener/NotificationHandler.java (78%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/Platform.java (74%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/PlatformData.java (70%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/PlatformRegistry.java (78%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/github/GithubData.java (85%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/github/GithubVersionChecker.java (84%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/hangar/HangarData.java (81%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/hangar/HangarVersionChecker.java (74%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/modrinth/ModrinthData.java (94%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/modrinth/ModrinthVersionChecker.java (85%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/spigot/SpigotData.java (81%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/platform/spigot/SpigotVersionChecker.java (76%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/updater/PluginData.java (88%) create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/updater/Updater.java (87%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/util/DownloadLogger.java (91%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/util/HttpUtil.java (96%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/util/UpdaterConstants.java (95%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/version/VersionChecker.java (90%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/version/VersionDifference.java (80%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/version/comparator/BuildNumComparator.java (84%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/version/comparator/CalVerComparator.java (92%) rename common/api/src/main/java/org/lushplugins/pluginupdater/{paper => }/api/version/comparator/SemVerComparator.java (91%) create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java rename common/{api/src/main/java/org/lushplugins/pluginupdater/paper/api => impl/src/main/java/org/lushplugins/pluginupdater/common}/collector/CollectorRegistry.java (94%) create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermission.java create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java rename platform/{spigot => paper}/plugin/build.gradle.kts (100%) rename platform/{spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java => paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java} (58%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java (79%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java (90%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java (61%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java (68%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java (77%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java (77%) rename platform/{spigot => paper}/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java (96%) create mode 100644 platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java rename platform/{spigot => paper}/plugin/src/main/resources/common-plugins.yml (100%) rename platform/{spigot => paper}/plugin/src/main/resources/plugin.yml (100%) delete mode 100644 platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java similarity index 82% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java index f1f466c..68fcffa 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/exception/InvalidVersionFormatException.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/exception/InvalidVersionFormatException.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.api.exception; +package org.lushplugins.pluginupdater.api.exception; public class InvalidVersionFormatException extends RuntimeException { diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java similarity index 78% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java index 6f2ca4c..275d860 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/listener/NotificationHandler.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.api.listener; +package org.lushplugins.pluginupdater.api.listener; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -6,8 +6,8 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.lushplugins.chatcolorhandler.paper.PaperColor; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.updater.Updater; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.Updater; public class NotificationHandler implements Listener { private final Updater updater; @@ -19,7 +19,7 @@ public NotificationHandler(Updater updater, String notificationPermission, Strin this.notificationPermission = notificationPermission; this.notificationMessage = notificationMessage; - updater.getPlugin().getServer().getPluginManager().registerEvents(this, updater.getPlugin()); + updater.getPluginInfo().getServer().getPluginManager().registerEvents(this, updater.getPluginInfo()); } @EventHandler @@ -28,7 +28,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { if (notificationPermission == null || player.hasPermission(notificationPermission)) { PluginData pluginData = updater.getPluginData(); if (pluginData.isUpdateAvailable() && !pluginData.isAlreadyDownloaded()) { - Bukkit.getScheduler().runTaskLaterAsynchronously(updater.getPlugin(), () -> PaperColor.handler().sendMessage(player, notificationMessage + Bukkit.getScheduler().runTaskLaterAsynchronously(updater.getPluginInfo(), () -> PaperColor.handler().sendMessage(player, notificationMessage .replace("%plugin%", pluginData.getPluginName()) .replace("%current_version%", pluginData.getCurrentVersion()) .replace("%latest_version%", pluginData.getLatestVersion()) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java similarity index 74% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java index a3099af..4188617 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/Platform.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.paper.api.platform; +package org.lushplugins.pluginupdater.api.platform; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.version.VersionChecker; import java.util.concurrent.Callable; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java similarity index 70% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java index 6b983b3..87571e6 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.platform; +package org.lushplugins.pluginupdater.api.platform; -import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; public abstract class PlatformData { private final String name; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java similarity index 78% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java index f78eedc..c338178 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/PlatformRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java @@ -1,14 +1,14 @@ -package org.lushplugins.pluginupdater.paper.api.platform; +package org.lushplugins.pluginupdater.api.platform; -import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.paper.api.platform.github.GithubVersionChecker; -import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarVersionChecker; -import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthVersionChecker; -import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotVersionChecker; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.api.platform.github.GithubVersionChecker; +import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.api.platform.hangar.HangarVersionChecker; +import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthVersionChecker; +import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.platform.spigot.SpigotVersionChecker; +import org.lushplugins.pluginupdater.api.version.VersionChecker; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.NotNull; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java similarity index 85% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java index 7b390e5..e0fd0bd 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java @@ -1,8 +1,8 @@ -package org.lushplugins.pluginupdater.paper.api.platform.github; +package org.lushplugins.pluginupdater.api.platform.github; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; public class GithubData extends PlatformData { private static final String NAME = "github"; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java similarity index 84% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java index f6d5a1d..6b274b1 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/github/GithubVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java @@ -1,13 +1,13 @@ -package org.lushplugins.pluginupdater.paper.api.platform.github; +package org.lushplugins.pluginupdater.api.platform.github; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.updater.PluginData; import java.io.IOException; import java.net.URI; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java similarity index 81% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java index 7d921a1..9c443f3 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.platform.hangar; +package org.lushplugins.pluginupdater.api.platform.hangar; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; public class HangarData extends PlatformData { private static final String NAME = "hangar"; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java similarity index 74% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java index f1d21dd..66a6ef4 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/hangar/HangarVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java @@ -1,10 +1,10 @@ -package org.lushplugins.pluginupdater.paper.api.platform.hangar; +package org.lushplugins.pluginupdater.api.platform.hangar; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.updater.PluginData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java similarity index 94% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java index bd7503a..6d33aeb 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.paper.api.platform.modrinth; +package org.lushplugins.pluginupdater.api.platform.modrinth; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; import java.util.Collections; import java.util.List; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java similarity index 85% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java index f1f42e0..62fb563 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/modrinth/ModrinthVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java @@ -1,13 +1,13 @@ -package org.lushplugins.pluginupdater.paper.api.platform.modrinth; +package org.lushplugins.pluginupdater.api.platform.modrinth; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java similarity index 81% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java index e2ea32b..0077317 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.platform.spigot; +package org.lushplugins.pluginupdater.api.platform.spigot; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; public class SpigotData extends PlatformData { private static final String NAME = "spigot"; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java similarity index 76% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java index 3b296b9..a6052d9 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/platform/spigot/SpigotVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java @@ -1,12 +1,12 @@ -package org.lushplugins.pluginupdater.paper.api.platform.spigot; +package org.lushplugins.pluginupdater.api.platform.spigot; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.platform.PlatformData; import java.io.IOException; import java.net.http.HttpResponse; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java similarity index 88% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java index 0e9a987..395f095 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/PluginData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java @@ -1,12 +1,11 @@ -package org.lushplugins.pluginupdater.paper.api.updater; +package org.lushplugins.pluginupdater.api.updater; -import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; -import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import java.util.Collections; import java.util.List; @@ -110,11 +109,11 @@ public static Builder builder(String pluginName, String currentVersion) { return new Builder(pluginName, currentVersion); } - public static Builder builder(Plugin plugin) { - return builder(plugin.getName(), plugin.getDescription().getVersion()); + public static Builder builder(PluginInfo plugin) { + return builder(plugin.getName(), plugin.getVersion()); } - public static PluginData empty(Plugin plugin) { + public static PluginData of(PluginInfo plugin) { return builder(plugin).build(); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java new file mode 100644 index 0000000..0cd2ac9 --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java @@ -0,0 +1,27 @@ +package org.lushplugins.pluginupdater.api.updater; + +import java.io.File; +import java.util.logging.Logger; + +public interface PluginInfo { + + /** + * @return The plugin's name + */ + String getName(); + + /** + * @return The current version of the plugin + */ + String getVersion(); + + /** + * @return The jar file that represents this plugin + */ + File getFile(); + + /** + * @return The plugin's logger instance + */ + Logger getLogger(); +} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java similarity index 87% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index 46420a0..87ba55d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -1,18 +1,16 @@ -package org.lushplugins.pluginupdater.paper.api.updater; +package org.lushplugins.pluginupdater.api.updater; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.listener.NotificationHandler; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.listener.NotificationHandler; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.io.File; import java.io.IOException; @@ -21,17 +19,17 @@ @SuppressWarnings("unused") public class Updater { - private final Plugin plugin; + private final PluginInfo plugin; private final PluginData pluginData; private final NotificationHandler notificationHandler; - private Updater(@NotNull Plugin plugin, @NotNull PluginData pluginData, boolean notify, String notificationPermission, String notificationMessage) { + private Updater(@NotNull PluginInfo plugin, @NotNull PluginData pluginData, boolean notify, String notificationPermission, String notificationMessage) { this.plugin = plugin; this.pluginData = pluginData; this.notificationHandler = notify ? new NotificationHandler(this, notificationPermission, notificationMessage) : null; } - public Plugin getPlugin() { + public PluginInfo getPluginInfo() { return plugin; } @@ -119,12 +117,12 @@ private CompletableFuture download() { return completableFuture; } - public static Builder builder(Plugin plugin) { + public static Builder builder(PluginInfo plugin) { return new Builder(plugin); } public static class Builder { - private final Plugin plugin; + private final PluginInfo plugin; private final PluginData pluginData; private long checkFrequency = 600; private boolean notify = true; @@ -132,9 +130,9 @@ public static class Builder { private String notificationMessage = "&#ffe27aA new &#e0c01b%plugin% &#ffe27aupdate is now available! &#e0c01b%current_version% &#ffe27a-> &#e0c01b%latest_version%"; private File downloadLogFile; - private Builder(Plugin plugin) { + private Builder(PluginInfo plugin) { this.plugin = plugin; - this.pluginData = PluginData.empty(plugin); + this.pluginData = PluginData.of(plugin); } /** diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java similarity index 91% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java index 8b477ef..23198ca 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/DownloadLogger.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/DownloadLogger.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.paper.api.util; +package org.lushplugins.pluginupdater.api.util; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginData; import java.io.File; import java.io.FileWriter; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java similarity index 96% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java index b510a83..2290b95 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/HttpUtil.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.api.util; +package org.lushplugins.pluginupdater.api.util; import com.google.gson.JsonElement; import org.jetbrains.annotations.Nullable; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java similarity index 95% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java index cc11f21..8755c21 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/util/UpdaterConstants.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.api.util; +package org.lushplugins.pluginupdater.api.util; import com.google.gson.Gson; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java similarity index 90% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java index c7cc466..886bb1b 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java @@ -1,13 +1,12 @@ -package org.lushplugins.pluginupdater.paper.api.version; - -import org.bukkit.Bukkit; -import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; +package org.lushplugins.pluginupdater.api.version; + +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import java.io.*; import java.net.HttpURLConnection; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java similarity index 80% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java index 05d101f..12ef1db 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/VersionDifference.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionDifference.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.api.version; +package org.lushplugins.pluginupdater.api.version; public enum VersionDifference { /** diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java similarity index 84% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java index 717826d..3ce081c 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/BuildNumComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/BuildNumComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.version.comparator; +package org.lushplugins.pluginupdater.api.version.comparator; -import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java similarity index 92% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java index 108903e..b8c9aca 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/CalVerComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/CalVerComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.version.comparator; +package org.lushplugins.pluginupdater.api.version.comparator; -import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.time.LocalDate; import java.time.LocalDateTime; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java similarity index 91% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java index 3856ad9..8272b2e 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/SemVerComparator.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/SemVerComparator.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.version.comparator; +package org.lushplugins.pluginupdater.api.version.comparator; -import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java new file mode 100644 index 0000000..a1ac8d6 --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/comparator/VersionComparator.java @@ -0,0 +1,9 @@ +package org.lushplugins.pluginupdater.api.version.comparator; + +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.version.VersionDifference; + +public interface VersionComparator { + + VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException; +} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java deleted file mode 100644 index a29bc9a..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/PluginDataCollector.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.lushplugins.pluginupdater.paper.api.collector; - -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; - -import java.util.List; -import java.util.Set; - -public interface PluginDataCollector { - List collectPluginData(Set unknownPlugins); -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java b/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java deleted file mode 100644 index 8ad9244..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/version/comparator/VersionComparator.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.lushplugins.pluginupdater.paper.api.version.comparator; - -import org.lushplugins.pluginupdater.paper.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; - -public interface VersionComparator { - - VersionDifference getVersionDifference(String currentVersionString, String latestVersionString) throws InvalidVersionFormatException; -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java similarity index 94% rename from common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java index 4dbec39..f112120 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/paper/api/collector/CollectorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java @@ -1,7 +1,7 @@ -package org.lushplugins.pluginupdater.paper.api.collector; +package org.lushplugins.pluginupdater.common.collector; import org.jetbrains.annotations.NotNull; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginData; import java.util.*; import java.util.concurrent.CompletableFuture; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java new file mode 100644 index 0000000..7e2ff07 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java @@ -0,0 +1,12 @@ +package org.lushplugins.pluginupdater.common.collector; + +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +public interface PluginDataCollector { + List collectPluginData(Collection unknownPlugins); +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index eb14270..075195f 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -1,28 +1,28 @@ package org.lushplugins.pluginupdater.common.command; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; -import org.lushplugins.pluginupdater.updater.UpdateHandler; +import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Switch; -import revxrsal.commands.bukkit.annotation.CommandPermission; import revxrsal.commands.command.CommandActor; import java.util.concurrent.atomic.AtomicInteger; @SuppressWarnings("unused") -public class UpdateCommand { +public record UpdateCommand(UpdaterImpl instance) { @Command("updater update") @CommandPermission("pluginupdater.downloadupdates") public String update(@PluginName String pluginName) { - if (!PluginUpdater.getInstance().getConfigManager().shouldAllowDownloads()) { + if (!instance.getConfig().shouldAllowDownloads()) { return "&#ff6969Update downloads have been disabled in the config"; } - PluginData pluginData = PluginUpdater.getInstance().getConfigManager().getPluginData(pluginName); + PluginData pluginData = instance.getConfig().getPluginData(pluginName); if (pluginData == null) { return "&#ff6969That plugin is not registered"; } else if (!pluginData.areDownloadsAllowed()) { @@ -32,7 +32,7 @@ public String update(@PluginName String pluginName) { } else if (!pluginData.isUpdateAvailable()) { return "&#ff6969No update has been found for this plugin"; } else { - PluginUpdater.getInstance().getUpdateHandler().queueDownload(pluginData.getPluginName()); + instance.getUpdateHandler().queueDownload(pluginData.getPluginName()); return "&#b7faa2Successfully queued an update for '%s'".formatted(pluginData.getPluginName()); } } @@ -40,10 +40,10 @@ public String update(@PluginName String pluginName) { @Command("updater update all") @CommandPermission("pluginupdater.downloadupdates") public String updateAll(CommandActor actor, @Switch("force") boolean force) { - UpdateHandler updateHandler = PluginUpdater.getInstance().getUpdateHandler(); + UpdateHandler updateHandler = instance.getUpdateHandler(); AtomicInteger updateCount = new AtomicInteger(0); AtomicInteger majorUpdateCount = new AtomicInteger(0); - PluginUpdater.getInstance().getConfigManager().getAllPluginData().forEach(pluginData -> { + instance.getConfig().getAllPluginData().forEach(pluginData -> { if (!pluginData.areDownloadsAllowed()) { return; } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java index 432b03c..7268bd5 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java @@ -1,25 +1,25 @@ package org.lushplugins.pluginupdater.common.command; -import org.lushplugins.pluginupdater.PluginUpdater; +import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Subcommand; -import revxrsal.commands.bukkit.annotation.CommandPermission; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; @Command("updater") @SuppressWarnings("unused") -public class UpdaterCommand { +public record UpdaterCommand(UpdaterImpl instance) { @Subcommand("reload") @CommandPermission("pluginupdater.reload") public String reload() { try { - PluginUpdater.getInstance().getConfigManager().reloadConfig(); + instance.reloadConfig(); } catch (Throwable e) { - PluginUpdater.getInstance().getLogger().log(Level.SEVERE, "Caught error whilst reloading: ", e); + instance.getLogger().log(Level.SEVERE, "Caught error whilst reloading: ", e); return "&#ff6969Something went wrong whilst reloading the plugin, check the console for errors"; } @@ -29,7 +29,7 @@ public String reload() { @Subcommand("check") @CommandPermission("pluginupdater.checkupdates") public String check(@PluginName String pluginName) { - PluginUpdater.getInstance().getUpdateHandler().queueUpdateCheck(pluginName); + instance.getUpdateHandler().queueUpdateCheck(pluginName); return "&#b7faa2Successfully queued check for %s".formatted(pluginName); } @@ -38,8 +38,8 @@ public String check(@PluginName String pluginName) { @CommandPermission("pluginupdater.checkupdates") public String check() { AtomicInteger updateCount = new AtomicInteger(0); - PluginUpdater.getInstance().getConfigManager().getPlugins().forEach(pluginName -> { - PluginUpdater.getInstance().getUpdateHandler().queueUpdateCheck(pluginName); + instance.getConfig().getPlugins().forEach(pluginName -> { + instance.getUpdateHandler().queueUpdateCheck(pluginName); updateCount.incrementAndGet(); }); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index 314fbdf..82f4469 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -1,24 +1,22 @@ package org.lushplugins.pluginupdater.common.command; -import org.bukkit.Bukkit; -import org.bukkit.plugin.Plugin; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.common.config.ConfigManager; import revxrsal.commands.annotation.Command; -import revxrsal.commands.bukkit.annotation.CommandPermission; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @SuppressWarnings("unused") -public class UpdatesCommand { +public record UpdatesCommand(UpdaterImpl instance) { @Command({ "updater updates", "updates" }) @CommandPermission("pluginupdater.checkupdates") public String updates() { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + ConfigManager configManager = instance.getConfig(); List plugins = configManager.getAllPluginData().stream() .map(pluginData -> { String pluginName = pluginData.getPluginName(); @@ -54,7 +52,7 @@ public String updates() { @Command({ "updater list updates", "updates list" }) @CommandPermission("pluginupdater.checkupdates") public String list() { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); + ConfigManager configManager = instance.getConfig(); String updateAvailableColor = configManager.getMessage("update-available-color", "&#ffda54"); String majorUpdateAvailableColor = configManager.getMessage("major-update-available-color", "&#ff6969"); String latestVersionColor = configManager.getMessage("latest-version-color", "&#b7faa2"); @@ -85,9 +83,9 @@ public String list() { @Command("updater list unregistered") @CommandPermission("pluginupdater.unregisteredplugins") public String unregisteredPlugins() { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); - List unregisteredPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()) - .map(Plugin::getName) + ConfigManager configManager = instance.getConfig(); + List unregisteredPlugins = instance.getPlugins().stream() + .map(PluginInfo::getName) .filter(pluginName -> configManager.getPluginData(pluginName) == null) .sorted(String.CASE_INSENSITIVE_ORDER) .toList(); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermission.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermission.java new file mode 100644 index 0000000..c3ed3b4 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermission.java @@ -0,0 +1,15 @@ +package org.lushplugins.pluginupdater.common.command.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface CommandPermission { + /** + * @return The command permission required by the actor to run the command + */ + String value(); +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java new file mode 100644 index 0000000..24aaa24 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java @@ -0,0 +1,27 @@ +package org.lushplugins.pluginupdater.common.command.annotation; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import revxrsal.commands.Lamp; +import revxrsal.commands.annotation.list.AnnotationList; +import revxrsal.commands.command.CommandActor; + +public class CommandPermissionFactory implements revxrsal.commands.command.CommandPermission.Factory { + private final UpdaterImpl instance; + + public CommandPermissionFactory(UpdaterImpl instance) { + this.instance = instance; + } + + @Override + public @Nullable revxrsal.commands.command.CommandPermission create(@NotNull AnnotationList annotations, @NotNull Lamp lamp) { + CommandPermission annotation = annotations.get(CommandPermission.class); + if (annotation == null) { + return null; + } + + String permission = annotation.value(); + return actor -> instance.hasPermission(actor, permission); + } +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java index d753342..d421232 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -3,7 +3,7 @@ import com.electronwill.nightconfig.core.Config; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.config.serializer.ComparatorSerializer; import java.util.HashMap; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 2402b86..dc07b30 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -4,10 +4,10 @@ import com.electronwill.nightconfig.core.file.FileConfig; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import java.util.*; import java.util.logging.Level; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java index 8554d2f..f13fad2 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java @@ -1,9 +1,9 @@ package org.lushplugins.pluginupdater.common.config.serializer; import com.electronwill.nightconfig.core.Config; -import org.lushplugins.pluginupdater.paper.api.version.comparator.BuildNumComparator; -import org.lushplugins.pluginupdater.paper.api.version.comparator.CalVerComparator; -import org.lushplugins.pluginupdater.paper.api.version.comparator.SemVerComparator; +import org.lushplugins.pluginupdater.api.version.comparator.BuildNumComparator; +import org.lushplugins.pluginupdater.api.version.comparator.CalVerComparator; +import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java index 387d0cc..d170ccc 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java @@ -1,11 +1,12 @@ package org.lushplugins.pluginupdater.common.config.serializer; import com.electronwill.nightconfig.core.Config; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginData; public class PluginDataSerializer { + // TODO public static PluginData read(Config config) { - + return null; } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java index 86c50a1..4a8d414 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java @@ -3,11 +3,17 @@ import org.lushplugins.pluginupdater.common.command.UpdateCommand; import org.lushplugins.pluginupdater.common.command.UpdaterCommand; import org.lushplugins.pluginupdater.common.command.UpdatesCommand; +import org.lushplugins.pluginupdater.common.command.annotation.CommandPermissionFactory; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import revxrsal.commands.Lamp; +import revxrsal.commands.command.CommandActor; + +import java.util.List; +import java.util.logging.Logger; public abstract class UpdaterImpl { private final UpdateHandler updateHandler; @@ -21,6 +27,7 @@ public UpdaterImpl() { config.reloadConfig(); Lamp lamp = prepareLamp() + .permissionFactory(new CommandPermissionFactory(this)) .suggestionProviders(providers -> { providers.addProviderForAnnotation(PluginName.class, (annotation) -> (context) -> { return config.getPlugins(); @@ -28,10 +35,10 @@ public UpdaterImpl() { }) .responseHandler(String.class, new StringMessageResponseHandler()) .build(); - lamp.register(new UpdaterCommand(), new UpdatesCommand()); + lamp.register(new UpdaterCommand(this), new UpdatesCommand(this)); if (config.shouldAllowDownloads()) { - lamp.register(new UpdateCommand()); + lamp.register(new UpdateCommand(this)); } } @@ -51,7 +58,13 @@ public void reloadConfig() { config.reloadConfig(); } + public abstract List getPlugins(); + public abstract Lamp.Builder prepareLamp(); + public abstract boolean hasPermission(CommandActor actor, String permission); + public abstract void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); + + public abstract Logger getLogger(); } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index df0d3d5..306b436 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -1,10 +1,10 @@ package org.lushplugins.pluginupdater.common.updater; import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.io.IOException; import java.util.ArrayDeque; diff --git a/platform/spigot/plugin/build.gradle.kts b/platform/paper/plugin/build.gradle.kts similarity index 100% rename from platform/spigot/plugin/build.gradle.kts rename to platform/paper/plugin/build.gradle.kts diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java similarity index 58% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java index b58b448..ad1fea5 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/SpigotUpdaterImpl.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java @@ -2,22 +2,46 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; import org.lushplugins.chatcolorhandler.paper.PaperColor; import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.paper.plugin.PaperPluginInfo; import revxrsal.commands.Lamp; import revxrsal.commands.bukkit.BukkitLamp; +import revxrsal.commands.bukkit.actor.BukkitCommandActor; +import revxrsal.commands.command.CommandActor; +import java.util.Arrays; import java.util.List; +import java.util.logging.Logger; import java.util.stream.Collectors; -public class SpigotUpdaterImpl extends UpdaterImpl { +public class PaperUpdaterImpl extends UpdaterImpl { + private final Plugin plugin; + + public PaperUpdaterImpl(Plugin plugin) { + super(); + this.plugin = plugin; + } + + @Override + public List getPlugins() { + return Arrays.stream(Bukkit.getPluginManager().getPlugins()) + .map(PaperPluginInfo::new) + .toList(); + } @Override public Lamp.Builder prepareLamp() { return BukkitLamp.builder(PluginUpdater.getInstance()); } + @Override + public boolean hasPermission(CommandActor actor, String permission) { + return ((BukkitCommandActor) actor).sender().hasPermission(permission); + } + @Override public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state) { List players = Bukkit.getOnlinePlayers().stream() @@ -34,4 +58,9 @@ public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.Proc PaperColor.handler().sendActionBarMessage(players, "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" .formatted(processed, total)); } + + @Override + public Logger getLogger() { + return plugin.getLogger(); + } } diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java similarity index 79% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java index 7bd53d8..d78cfbe 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java @@ -1,6 +1,6 @@ package org.lushplugins.pluginupdater.paper; -import org.lushplugins.pluginupdater.paper.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.api.util.DownloadLogger; import org.lushplugins.pluginupdater.paper.listener.PlayerListener; import org.bukkit.plugin.java.JavaPlugin; @@ -9,7 +9,7 @@ public final class PluginUpdater extends JavaPlugin { private static PluginUpdater plugin; - private SpigotUpdaterImpl updaterImpl; + private PaperUpdaterImpl updaterImpl; @Override public void onEnable() { @@ -17,7 +17,7 @@ public void onEnable() { DownloadLogger.setLogFile(new File(plugin.getDataFolder(), "downloads.log")); - updaterImpl = new SpigotUpdaterImpl(); + updaterImpl = new PaperUpdaterImpl(this); getServer().getPluginManager().registerEvents(new PlayerListener(), this); } @@ -30,7 +30,7 @@ public void onDisable() { } } - public SpigotUpdaterImpl getUpdaterImpl() { + public PaperUpdaterImpl getUpdaterImpl() { return updaterImpl; } diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java similarity index 90% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index 83af771..785cff6 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -1,9 +1,9 @@ package org.lushplugins.pluginupdater.paper.api; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.version.VersionChecker; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; import org.bukkit.plugin.Plugin; import java.util.concurrent.Callable; diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java similarity index 61% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index 1343893..4680baf 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -2,38 +2,40 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; +import org.lushplugins.pluginupdater.common.config.ComparatorRegistry; +import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformRegistry; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.version.comparator.ComparatorRegistry; -import org.lushplugins.pluginupdater.paper.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.common.ConfigManager; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.util.*; public class CommonPluginCollector implements PluginDataCollector { @Override - public List collectPlugins(Collection unknownPlugins) { + public List collectPluginData(Collection unknownPlugins) { ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); List pluginDataList = new ArrayList<>(); InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); - YamlConfiguration commonPluginsYml = commonPluginsInputStream != null ? YamlConfiguration.loadConfiguration(new InputStreamReader(commonPluginsInputStream)) : null; - for (Plugin plugin : unknownPlugins) { + if (commonPluginsInputStream == null) { + return Collections.emptyList(); + } + + YamlConfiguration commonPluginsYml = YamlConfiguration.loadConfiguration(new InputStreamReader(commonPluginsInputStream)); + for (PluginInfo plugin : unknownPlugins) { String pluginName = plugin.getName(); if (!configManager.canRegisterPluginData(pluginName)) { continue; } - if (commonPluginsYml == null || !commonPluginsYml.contains(pluginName)) { + if (!commonPluginsYml.contains(pluginName)) { continue; } @@ -46,7 +48,7 @@ public List collectPlugins(Collection unknownPlugins) { ConfigurationSection comparatorSection = pluginSection.getConfigurationSection("comparator"); if (comparatorSection != null) { String comparatorType = comparatorSection.getString("type", "sem-ver"); - comparator = ComparatorRegistry.getVersionComparator(comparatorType, comparatorSection); + comparator = ComparatorRegistry.readVersionComparator(comparatorType, comparatorSection); } else { comparator = null; } diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java similarity index 68% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java index 307a912..c05d33f 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java @@ -5,18 +5,16 @@ import com.google.common.io.Files; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.http.HttpResponse; import java.util.*; import java.util.logging.Level; @@ -24,10 +22,10 @@ public class ModrinthCollector implements PluginDataCollector { @Override - public List collectPlugins(Collection unknownPlugins) { - HashMap pluginHashes = new HashMap<>(); - for (JavaPlugin unknownPlugin : unknownPlugins) { - File pluginFile = getPluginFile(unknownPlugin); + public List collectPluginData(Collection unknownPlugins) { + HashMap pluginHashes = new HashMap<>(); + for (PluginInfo unknownPlugin : unknownPlugins) { + File pluginFile = unknownPlugin.getFile(); if (pluginFile == null) { continue; } @@ -79,16 +77,4 @@ public List collectPlugins(Collection unknownPlugins) { return pluginDataList; } - - private @Nullable File getPluginFile(JavaPlugin plugin) { - try { - Method method = JavaPlugin.class.getDeclaredMethod("getFile"); - method.setAccessible(true); - - return (File) method.invoke(plugin); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst getting plugin file: ", e); - return null; - } - } } diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java similarity index 77% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 637c2ac..c05646d 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -1,15 +1,15 @@ package org.lushplugins.pluginupdater.paper.collector; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.platform.PlatformData; -import org.lushplugins.pluginupdater.paper.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.paper.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.paper.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.platform.github.GithubData; +import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; +import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; import java.io.InputStream; @@ -21,11 +21,11 @@ public class PluginYamlCollector implements PluginDataCollector { @Override - public List collectPlugins(Collection unknownPlugins) { + public List collectPluginData(Collection unknownPlugins) { ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); List pluginDataList = new ArrayList<>(); - for (Plugin plugin : unknownPlugins) { + for (PluginInfo plugin : unknownPlugins) { String pluginName = plugin.getName(); if (!configManager.canRegisterPluginData(pluginName)) { continue; diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java similarity index 77% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index c9dc914..699e38d 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -3,13 +3,14 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.paper.api.util.HttpUtil; -import org.lushplugins.pluginupdater.paper.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.IOException; import java.net.http.HttpResponse; @@ -21,9 +22,9 @@ public class SpigotCollector implements PluginDataCollector { @Override - public List collectPlugins(Collection unknownPlugins) { + public List collectPluginData(Collection unknownPlugins) { List pluginDataList = new ArrayList<>(); - for (JavaPlugin unknownPlugin : unknownPlugins) { + for (PluginInfo unknownPlugin : unknownPlugins) { PluginData pluginData = collectPlugin(unknownPlugin); if (pluginData != null) { pluginDataList.add(pluginData); @@ -33,7 +34,7 @@ public List collectPlugins(Collection unknownPlugins) { return pluginDataList; } - private @Nullable PluginData collectPlugin(JavaPlugin unknownPlugin) { + private @Nullable PluginData collectPlugin(PluginInfo unknownPlugin) { HttpResponse response; try { response = HttpUtil.sendRequest(String.format("%s/search/resources/%s", UpdaterConstants.Endpoint.SPIGET, unknownPlugin.getName())); diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java similarity index 96% rename from platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java rename to platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java index a575644..9810da1 100644 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java @@ -7,7 +7,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.lushplugins.chatcolorhandler.paper.PaperColor; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; public class PlayerListener implements Listener { diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java new file mode 100644 index 0000000..f06ce3d --- /dev/null +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java @@ -0,0 +1,43 @@ +package org.lushplugins.pluginupdater.paper.plugin; + +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.java.JavaPlugin; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.paper.PluginUpdater; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.logging.Level; +import java.util.logging.Logger; + +public record PaperPluginInfo(Plugin plugin) implements PluginInfo { + + @Override + public String getName() { + return plugin.getName(); + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public File getFile() { + try { + Method method = JavaPlugin.class.getDeclaredMethod("getFile"); + method.setAccessible(true); + + return (File) method.invoke(plugin); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst getting plugin file: ", e); + return null; + } + } + + @Override + public Logger getLogger() { + return plugin.getLogger(); + } +} diff --git a/platform/spigot/plugin/src/main/resources/common-plugins.yml b/platform/paper/plugin/src/main/resources/common-plugins.yml similarity index 100% rename from platform/spigot/plugin/src/main/resources/common-plugins.yml rename to platform/paper/plugin/src/main/resources/common-plugins.yml diff --git a/platform/spigot/plugin/src/main/resources/plugin.yml b/platform/paper/plugin/src/main/resources/plugin.yml similarity index 100% rename from platform/spigot/plugin/src/main/resources/plugin.yml rename to platform/paper/plugin/src/main/resources/plugin.yml diff --git a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java b/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java deleted file mode 100644 index 322bb0a..0000000 --- a/platform/spigot/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginDataCollector.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.lushplugins.pluginupdater.paper.collector; - -import org.bukkit.Bukkit; -import org.bukkit.plugin.PluginBase; -import org.bukkit.plugin.java.JavaPlugin; -import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.paper.api.updater.PluginData; -import org.lushplugins.pluginupdater.common.ConfigManager; - -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - -public interface PluginDataCollector { - - List collectPlugins(Collection unknownPlugins); - - static CompletableFuture> collectUnknownPlugins() { - CompletableFuture> future = new CompletableFuture<>(); - - PluginUpdater.getInstance().getUpdaterImpl().getUpdateHandler().getThreads().execute(() -> { - ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); - Map unknownPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()) - .map(plugin -> plugin instanceof JavaPlugin javaPlugin ? javaPlugin : null) - .filter(plugin -> plugin != null && configManager.canRegisterPluginData(plugin.getName())) - .collect(Collectors.toMap(PluginBase::getName, plugin -> plugin)); - - if (unknownPlugins.isEmpty()) { - future.complete(Collections.emptyList()); - return; - } - - List foundPluginDataList = new ArrayList<>(); - List collectors = List.of( - new CommonPluginCollector(), - new PluginYamlCollector(), - new ModrinthCollector(), - new SpigotCollector() - ); - - for (PluginDataCollector collector : collectors) { - List pluginDataList = collector.collectPlugins(unknownPlugins.values()); - - foundPluginDataList.addAll(pluginDataList); - for (PluginData pluginData : pluginDataList) { - unknownPlugins.remove(pluginData.getPluginName()); - } - } - - future.complete(foundPluginDataList); - }); - - return future; - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index d89e892..841aa9b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ rootProject.name = "PluginUpdater" include("common:api") include("common:impl") -include("platform:spigot:plugin") +include("platform:paper:plugin") include("platform:velocity:plugin") \ No newline at end of file From 637184e84bc52218ba42818a8ac41722222a5648 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 00:20:02 +0300 Subject: [PATCH 05/57] Renamed platforms to sources for clarity between software platforms and sources for checking versions --- .../api/platform/PlatformRegistry.java | 83 ------------------- .../Platform.java => source/Source.java} | 6 +- .../SourceData.java} | 8 +- .../api/source/SourceRegistry.java | 83 +++++++++++++++++++ .../github/GithubData.java | 6 +- .../github/GithubVersionChecker.java | 12 +-- .../hangar/HangarData.java | 6 +- .../hangar/HangarVersionChecker.java | 12 +-- .../modrinth/ModrinthData.java | 6 +- .../modrinth/ModrinthVersionChecker.java | 12 +-- .../spigot/SpigotData.java | 6 +- .../spigot/SpigotVersionChecker.java | 12 +-- .../pluginupdater/api/updater/PluginData.java | 28 +++---- .../pluginupdater/api/updater/Updater.java | 22 ++--- .../api/version/VersionChecker.java | 34 ++++---- .../common/config/ConfigManager.java | 10 +-- .../common/updater/UpdateHandler.java | 18 ++-- .../paper/api/PluginUpdaterAPI.java | 22 ++--- .../collector/CommonPluginCollector.java | 10 +-- .../paper/collector/ModrinthCollector.java | 2 +- .../paper/collector/PluginYamlCollector.java | 24 +++--- .../paper/collector/SpigotCollector.java | 2 +- 22 files changed, 213 insertions(+), 211 deletions(-) delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform/Platform.java => source/Source.java} (70%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform/PlatformData.java => source/SourceData.java} (72%) create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/github/GithubData.java (81%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/github/GithubVersionChecker.java (80%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/hangar/HangarData.java (76%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/hangar/HangarVersionChecker.java (69%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/modrinth/ModrinthData.java (93%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/modrinth/ModrinthVersionChecker.java (81%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/spigot/SpigotData.java (75%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/{platform => source}/spigot/SpigotVersionChecker.java (72%) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java deleted file mode 100644 index c338178..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformRegistry.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.lushplugins.pluginupdater.api.platform; - -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.github.GithubVersionChecker; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarVersionChecker; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthVersionChecker; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotVersionChecker; -import org.lushplugins.pluginupdater.api.version.VersionChecker; - -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; -import java.util.concurrent.Callable; - -public class PlatformRegistry { - private static final HashMap platforms = new HashMap<>(); - private static final HashMap cachedPlatformCheckers = new HashMap<>(); - - static { - register("github", -1, GithubVersionChecker::new, GithubData::new); - register("hangar", 1, HangarVersionChecker::new, HangarData::new); - register("modrinth", 1, ModrinthVersionChecker::new, ModrinthData::new); - register("spigot", 1, SpigotVersionChecker::new, SpigotData::new); - } - - @Nullable - public static VersionChecker getVersionChecker(String platform) { - return getOrConstructVersionChecker(platform); - } - - @Nullable - public static PlatformData getPlatformData(String platform, ConfigurationSection configurationSection) { - try { - return platforms.containsKey(platform) ? platforms.get(platform).platformDataConstructor().apply(configurationSection) : null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static void register(@NotNull String platform, int rateLimit, @NotNull Callable updater, @NotNull PlatformRegistry.PlatformDataConstructor platformDataConstructor) { - if (platforms.containsKey(platform)) { - throw new IllegalStateException("This platform is already registered"); - } - - platforms.put(platform, new Platform(rateLimit, updater, platformDataConstructor)); - } - - public static void register(@NotNull String platform, @NotNull Callable updater, @NotNull PlatformRegistry.PlatformDataConstructor platformDataConstructor) { - register(platform, 1, updater, platformDataConstructor); - } - - public static void unregister(String platform) { - platforms.remove(platform); - } - - private static @Nullable VersionChecker getOrConstructVersionChecker(@NotNull String platform) { - if (cachedPlatformCheckers.containsKey(platform)) { - return cachedPlatformCheckers.get(platform); - } else if (platforms.containsKey(platform)) { - try { - VersionChecker versionChecker = platforms.get(platform).updater().call(); - cachedPlatformCheckers.put(platform, versionChecker); - return versionChecker; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } else { - return null; - } - } - - @FunctionalInterface - public interface PlatformDataConstructor { - PlatformData apply(ConfigurationSection configurationSection); - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java similarity index 70% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java index 4188617..a80c613 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/Platform.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.platform; +package org.lushplugins.pluginupdater.api.source; import org.lushplugins.pluginupdater.api.version.VersionChecker; @@ -7,10 +7,10 @@ /** * @param rateLimit The endpoint's rate limit per second, set to {@code -1} to remove limit */ -public record Platform( +public record Source( int rateLimit, Callable updater, - PlatformRegistry.PlatformDataConstructor platformDataConstructor + SourceRegistry.SourceDataConstructor sourceDataConstructor ) { public boolean hasRateLimit() { diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java similarity index 72% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java index 87571e6..8670961 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/PlatformData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java @@ -1,18 +1,18 @@ -package org.lushplugins.pluginupdater.api.platform; +package org.lushplugins.pluginupdater.api.source; import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -public abstract class PlatformData { +public abstract class SourceData { private final String name; private final VersionComparator defaultComparator; - public PlatformData(String name, VersionComparator defaultComparator) { + public SourceData(String name, VersionComparator defaultComparator) { this.name = name; this.defaultComparator = defaultComparator; } - public PlatformData(String name) { + public SourceData(String name) { this(name, SemVerComparator.INSTANCE); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java new file mode 100644 index 0000000..d8a7fd6 --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java @@ -0,0 +1,83 @@ +package org.lushplugins.pluginupdater.api.source; + +import org.lushplugins.pluginupdater.api.source.github.GithubData; +import org.lushplugins.pluginupdater.api.source.github.GithubVersionChecker; +import org.lushplugins.pluginupdater.api.source.hangar.HangarData; +import org.lushplugins.pluginupdater.api.source.hangar.HangarVersionChecker; +import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthVersionChecker; +import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.source.spigot.SpigotVersionChecker; +import org.lushplugins.pluginupdater.api.version.VersionChecker; + +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.concurrent.Callable; + +public class SourceRegistry { + private static final HashMap sources = new HashMap<>(); + private static final HashMap cachedSourceCheckers = new HashMap<>(); + + static { + register("github", -1, GithubVersionChecker::new, GithubData::new); + register("hangar", 1, HangarVersionChecker::new, HangarData::new); + register("modrinth", 1, ModrinthVersionChecker::new, ModrinthData::new); + register("spigot", 1, SpigotVersionChecker::new, SpigotData::new); + } + + @Nullable + public static VersionChecker getVersionChecker(String source) { + return getOrConstructVersionChecker(source); + } + + @Nullable + public static SourceData getSourceData(String source, ConfigurationSection configurationSection) { + try { + return sources.containsKey(source) ? sources.get(source).sourceDataConstructor().apply(configurationSection) : null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void register(@NotNull String source, int rateLimit, @NotNull Callable updater, @NotNull SourceRegistry.SourceDataConstructor sourceDataConstructor) { + if (sources.containsKey(source)) { + throw new IllegalStateException("This source is already registered"); + } + + sources.put(source, new Source(rateLimit, updater, sourceDataConstructor)); + } + + public static void register(@NotNull String source, @NotNull Callable updater, @NotNull SourceRegistry.SourceDataConstructor sourceDataConstructor) { + register(source, 1, updater, sourceDataConstructor); + } + + public static void unregister(String source) { + sources.remove(source); + } + + private static @Nullable VersionChecker getOrConstructVersionChecker(@NotNull String source) { + if (cachedSourceCheckers.containsKey(source)) { + return cachedSourceCheckers.get(source); + } else if (sources.containsKey(source)) { + try { + VersionChecker versionChecker = sources.get(source).updater().call(); + cachedSourceCheckers.put(source, versionChecker); + return versionChecker; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } else { + return null; + } + } + + @FunctionalInterface + public interface SourceDataConstructor { + SourceData apply(ConfigurationSection configurationSection); + } +} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java similarity index 81% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java index e0fd0bd..e721f51 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java @@ -1,10 +1,10 @@ -package org.lushplugins.pluginupdater.api.platform.github; +package org.lushplugins.pluginupdater.api.source.github; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; -public class GithubData extends PlatformData { +public class GithubData extends SourceData { private static final String NAME = "github"; private final String repo; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java similarity index 80% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java index 6b274b1..3871396 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/github/GithubVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.api.platform.github; +package org.lushplugins.pluginupdater.api.source.github; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import org.lushplugins.pluginupdater.api.version.VersionChecker; @@ -18,8 +18,8 @@ public class GithubVersionChecker implements VersionChecker { @Override - public String getLatestVersion(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof GithubData githubData)) { + public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof GithubData githubData)) { return null; } @@ -28,8 +28,8 @@ public String getLatestVersion(PluginData pluginData, PlatformData platformData) } @Override - public String getDownloadUrl(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof GithubData githubData)) { + public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof GithubData githubData)) { return null; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java similarity index 76% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java index 9c443f3..c6202f5 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.api.platform.hangar; +package org.lushplugins.pluginupdater.api.source.hangar; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; -public class HangarData extends PlatformData { +public class HangarData extends SourceData { private static final String NAME = "hangar"; private final String projectSlug; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java similarity index 69% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java index 66a6ef4..94322e8 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/hangar/HangarVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java @@ -1,6 +1,6 @@ -package org.lushplugins.pluginupdater.api.platform.hangar; +package org.lushplugins.pluginupdater.api.source.hangar; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import org.lushplugins.pluginupdater.api.version.VersionChecker; @@ -12,8 +12,8 @@ public class HangarVersionChecker implements VersionChecker { @Override - public String getLatestVersion(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof HangarData hangarData)) { + public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof HangarData hangarData)) { return null; } @@ -27,8 +27,8 @@ public String getLatestVersion(PluginData pluginData, PlatformData platformData) } @Override - public String getDownloadUrl(PluginData pluginData, PlatformData platformData) { - return platformData instanceof HangarData hangarData ? + public String getDownloadUrl(PluginData pluginData, SourceData sourceData) { + return sourceData instanceof HangarData hangarData ? String.format("%s/projects/%s/versions/%s/PAPER/download", UpdaterConstants.Endpoint.HANGAR, hangarData.getProjectSlug(), pluginData.getLatestVersion()) : null; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java similarity index 93% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java index 6d33aeb..65070dd 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java @@ -1,14 +1,14 @@ -package org.lushplugins.pluginupdater.api.platform.modrinth; +package org.lushplugins.pluginupdater.api.source.modrinth; import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import java.util.Collections; import java.util.List; -public class ModrinthData extends PlatformData { +public class ModrinthData extends SourceData { private static final String NAME = "modrinth"; private final String projectId; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java similarity index 81% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java index 62fb563..2d2df41 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/modrinth/ModrinthVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.platform.modrinth; +package org.lushplugins.pluginupdater.api.source.modrinth; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -7,7 +7,7 @@ import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import org.lushplugins.pluginupdater.api.version.VersionChecker; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import java.io.IOException; import java.net.http.HttpResponse; @@ -15,8 +15,8 @@ public class ModrinthVersionChecker implements VersionChecker { @Override - public String getLatestVersion(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof ModrinthData modrinthData)) { + public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof ModrinthData modrinthData)) { return null; } @@ -25,8 +25,8 @@ public String getLatestVersion(PluginData pluginData, PlatformData platformData) } @Override - public String getDownloadUrl(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof ModrinthData modrinthData)) { + public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof ModrinthData modrinthData)) { return null; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java similarity index 75% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java index 0077317..f971261 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java @@ -1,9 +1,9 @@ -package org.lushplugins.pluginupdater.api.platform.spigot; +package org.lushplugins.pluginupdater.api.source.spigot; import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; -public class SpigotData extends PlatformData { +public class SpigotData extends SourceData { private static final String NAME = "spigot"; private final String resourceId; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java similarity index 72% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java index a6052d9..9aaf867 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/platform/spigot/SpigotVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.api.platform.spigot; +package org.lushplugins.pluginupdater.api.source.spigot; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -6,7 +6,7 @@ import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import java.io.IOException; import java.net.http.HttpResponse; @@ -14,8 +14,8 @@ public class SpigotVersionChecker implements VersionChecker { @Override - public String getLatestVersion(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { - if (!(platformData instanceof SpigotData spigotData)) { + public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof SpigotData spigotData)) { return null; } @@ -30,8 +30,8 @@ public String getLatestVersion(PluginData pluginData, PlatformData platformData) } @Override - public String getDownloadUrl(PluginData pluginData, PlatformData platformData) { - return platformData instanceof SpigotData spigotData ? + public String getDownloadUrl(PluginData pluginData, SourceData sourceData) { + return sourceData instanceof SpigotData spigotData ? String.format("%s/resources/%s/download", UpdaterConstants.Endpoint.SPIGET, spigotData.getResourceId()) : null; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java index 395f095..6593ae5 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java @@ -2,7 +2,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; @@ -14,7 +14,7 @@ public class PluginData { private final String pluginName; private final String currentVersion; - private final List platformData; + private final List sourceData; private final VersionComparator comparator; private String latestVersion; @@ -24,10 +24,10 @@ public class PluginData { private boolean alreadyDownloaded = false; private boolean checkRan = false; - private PluginData(@NotNull String pluginName, @NotNull String currentVersion, @NotNull List platformData, @Nullable VersionComparator comparator, boolean allowDownloads) { + private PluginData(@NotNull String pluginName, @NotNull String currentVersion, @NotNull List sourceData, @Nullable VersionComparator comparator, boolean allowDownloads) { this.pluginName = pluginName; this.currentVersion = currentVersion; - this.platformData = platformData; + this.sourceData = sourceData; this.comparator = comparator; this.allowDownloads = allowDownloads; } @@ -41,8 +41,8 @@ public String getCurrentVersion() { return currentVersion; } - public List getPlatformData() { - return platformData; + public List getSourceData() { + return sourceData; } public VersionComparator getComparator() { @@ -53,8 +53,8 @@ public Optional getOptionalComparator() { return Optional.ofNullable(comparator); } - public void addPlatform(PlatformData platformData) { - this.platformData.add(platformData); + public void addPlatform(SourceData sourceData) { + this.sourceData.add(sourceData); } public String getLatestVersion() { @@ -120,7 +120,7 @@ public static PluginData of(PluginInfo plugin) { public static class Builder { private final String pluginName; private final String currentVersion; - private List platformData = Collections.emptyList(); + private List sourceData = Collections.emptyList(); private VersionComparator comparator = SemVerComparator.INSTANCE; private boolean allowDownloads = true; @@ -129,13 +129,13 @@ private Builder(String pluginName, String currentVersion) { this.currentVersion = currentVersion; } - public Builder platformData(PlatformData platformData) { - this.platformData = Collections.singletonList(platformData); + public Builder platformData(SourceData sourceData) { + this.sourceData = Collections.singletonList(sourceData); return this; } - public Builder platformData(List platformData) { - this.platformData = platformData; + public Builder platformData(List sourceData) { + this.sourceData = sourceData; return this; } @@ -161,7 +161,7 @@ public PluginData build() { return new PluginData( this.pluginName, this.currentVersion, - this.platformData, + this.sourceData, this.comparator, this.allowDownloads ); diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index 87ba55d..30af1a4 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -3,11 +3,11 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.listener.NotificationHandler; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.github.GithubData; +import org.lushplugins.pluginupdater.api.source.hangar.HangarData; +import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.util.DownloadLogger; import org.lushplugins.pluginupdater.api.version.VersionChecker; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -182,12 +182,12 @@ public Builder spigot(String resourceId) { } /** - * Add a plugin's platform data to be used for collecting update information - * (Platforms should be added in order of priority). - * @param platformData The platform data. + * Add a plugin's source data to be used for collecting update information + * (Sources should be added in order of priority). + * @param sourceData The source data. */ - public Builder platform(PlatformData platformData) { - this.pluginData.addPlatform(platformData); + public Builder platform(SourceData sourceData) { + this.pluginData.addPlatform(sourceData); return this; } @@ -242,7 +242,7 @@ public Builder logDownloads(@Nullable File logFile) { * @return The created Updater instance. */ public Updater build() { - if (pluginData.getPlatformData().isEmpty()) { + if (pluginData.getSourceData().isEmpty()) { throw new IllegalStateException("At least 1 platform must be registered before building the Updater."); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java index 886bb1b..90bf2c0 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java @@ -1,8 +1,8 @@ package org.lushplugins.pluginupdater.api.version; import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.DownloadLogger; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -18,15 +18,15 @@ @SuppressWarnings("CodeBlock2Expr") public interface VersionChecker { - String getLatestVersion(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException; + String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; - String getDownloadUrl(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException; + String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; - default boolean isUpdateAvailable(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { + default boolean isUpdateAvailable(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { String currentVersion = pluginData.getCurrentVersion(); - String latestVersion = getLatestVersion(pluginData, platformData); + String latestVersion = getLatestVersion(pluginData, sourceData); - VersionComparator comparator = pluginData.getOptionalComparator().orElse(platformData.getDefaultComparator()); + VersionComparator comparator = pluginData.getOptionalComparator().orElse(sourceData.getDefaultComparator()); VersionDifference versionDifference; try { versionDifference = comparator.getVersionDifference(currentVersion, latestVersion); @@ -46,10 +46,10 @@ default boolean isUpdateAvailable(PluginData pluginData, PlatformData platformDa } } - default boolean download(PluginData pluginData, PlatformData platformData) throws IOException, InterruptedException { + default boolean download(PluginData pluginData, SourceData sourceData, File destinationDir) throws IOException, InterruptedException { String pluginName = pluginData.getPluginName(); String latestVersion = pluginData.getLatestVersion(); - String downloadUrl = getDownloadUrl(pluginData, platformData); + String downloadUrl = getDownloadUrl(pluginData, sourceData); if (downloadUrl == null) { return false; } @@ -71,11 +71,11 @@ default boolean download(PluginData pluginData, PlatformData platformData) throw } // Ensures update folder exists - Bukkit.getUpdateFolderFile().mkdirs(); + destinationDir.mkdirs(); // Downloads file from url ReadableByteChannel rbc = Channels.newChannel(connection.getInputStream()); - File out = new File(Bukkit.getUpdateFolderFile(), fileName); + File out = new File(destinationDir, fileName); UpdaterConstants.LOGGER.info("Saving '" + fileName + "' to '" + out.getAbsolutePath() + "'"); FileOutputStream fos = new FileOutputStream(out); fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); @@ -116,10 +116,10 @@ static boolean isUpdateAvailable(PluginData pluginData) throws IOException { } } - static boolean download(PluginData pluginData) throws IOException { + static boolean download(PluginData pluginData, File destinationDir) throws IOException { try { return attemptOnPlatforms(pluginData, (versionChecker, platformData) -> { - return versionChecker.download(pluginData, platformData); + return versionChecker.download(pluginData, platformData, destinationDir); }); } catch (IOException e) { throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'."); @@ -127,14 +127,14 @@ static boolean download(PluginData pluginData) throws IOException { } private static T attemptOnPlatforms(PluginData pluginData, VersionCheckerCallable callable) throws IOException { - for (PlatformData platformData : pluginData.getPlatformData()) { - VersionChecker versionChecker = PlatformRegistry.getVersionChecker(platformData.getName()); + for (SourceData sourceData : pluginData.getSourceData()) { + VersionChecker versionChecker = SourceRegistry.getVersionChecker(sourceData.getName()); if (versionChecker == null) { continue; } try { - return callable.call(versionChecker, platformData); + return callable.call(versionChecker, sourceData); } catch (IOException | InterruptedException e) { UpdaterConstants.LOGGER.log(Level.SEVERE, e.getMessage(), e); } @@ -145,6 +145,6 @@ private static T attemptOnPlatforms(PluginData pluginData, VersionCheckerCal @FunctionalInterface interface VersionCheckerCallable { - T call(VersionChecker versionChecker, PlatformData platformData) throws IOException, InterruptedException; + T call(VersionChecker versionChecker, SourceData sourceData) throws IOException, InterruptedException; } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index dc07b30..229f266 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -4,8 +4,8 @@ import com.electronwill.nightconfig.core.file.FileConfig; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; @@ -78,10 +78,10 @@ public void reloadConfig() { } try { - PlatformData platformData = PlatformRegistry.getPlatformData(platform, pluginConfig); - if (platformData != null) { + SourceData sourceData = SourceRegistry.getSourceData(platform, pluginConfig); + if (sourceData != null) { addPlugin(pluginName, PluginData.builder(currPlugin) - .platformData(platformData) + .platformData(sourceData) .comparator(comparator) .allowDownloads(allowDownloads) .build()); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index 306b436..ca3061f 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -1,10 +1,10 @@ package org.lushplugins.pluginupdater.common.updater; -import org.lushplugins.pluginupdater.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.VersionChecker; import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import java.io.IOException; import java.util.ArrayDeque; @@ -87,8 +87,8 @@ private void processQueue() { PluginUpdater.getInstance().getLogger().log(Level.SEVERE, e.getMessage(), e); } - String platformNames = String.join(", ", pluginData.getPlatformData().stream().map(PlatformData::getName).toList()); - processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined platforms: '" + platformNames + "'")); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); + processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined platforms: '" + sourceNames + "'")); } case DOWNLOAD -> { PluginData pluginData = processingData.getPluginData(); @@ -110,8 +110,8 @@ private void processQueue() { processingData.getFuture().completeExceptionally(e); } - String platformNames = String.join(", ", pluginData.getPlatformData().stream().map(PlatformData::getName).toList()); - processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined platforms: '%s'".formatted(pluginData.getPluginName(), platformNames))); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); + processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined platforms: '%s'".formatted(pluginData.getPluginName(), sourceNames))); } } } @@ -121,11 +121,13 @@ public void sendNotification(ProcessingData.State state) { } public static class ProcessingData { + private final UpdaterImpl instance; private final String pluginName; private final State state; private final CompletableFuture future; - public ProcessingData(String pluginName, State state) { + public ProcessingData(UpdaterImpl instance, String pluginName, State state) { + this.instance = instance; this.pluginName = pluginName; this.state = state; this.future = new CompletableFuture<>(); @@ -140,7 +142,7 @@ public State getState() { } public PluginData getPluginData() { - return PluginUpdater.getInstance().getConfigManager().getPluginData(pluginName); + return instance.getConfig().getPluginData(pluginName); } public CompletableFuture getFuture() { diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index 785cff6..f0154a6 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -3,7 +3,7 @@ import org.lushplugins.pluginupdater.paper.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.bukkit.plugin.Plugin; import java.util.concurrent.Callable; @@ -46,20 +46,20 @@ public static void removePlugin(String pluginName) { } /** - * Register support for a platform - * @param platform Name of platform - * @param platformUpdater Constructor for updater - * @param dataConstructor Constructor for platform data + * Register support for a source + * @param source Name of source + * @param sourceUpdater Constructor for updater + * @param dataConstructor Constructor for source data */ - public static void registerPlatform(String platform, Callable platformUpdater, PlatformRegistry.PlatformDataConstructor dataConstructor) { - PlatformRegistry.register(platform, platformUpdater, dataConstructor); + public static void registerSource(String source, Callable sourceUpdater, SourceRegistry.SourceDataConstructor dataConstructor) { + SourceRegistry.register(source, sourceUpdater, dataConstructor); } /** - * Unregister support for a platform - * @param platform Name of platform + * Unregister support for a source + * @param source Name of source */ - public static void unregisterPlatform(String platform) { - PlatformRegistry.unregister(platform); + public static void unregisterSource(String source) { + SourceRegistry.unregister(source); } } diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index 4680baf..aee06c0 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -7,8 +7,8 @@ import org.lushplugins.pluginupdater.common.config.ConfigManager; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.PlatformRegistry; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; @@ -53,10 +53,10 @@ public List collectPluginData(Collection unknownPlugins) comparator = null; } - PlatformData platformData = PlatformRegistry.getPlatformData(pluginSection.getString("platform"), pluginSection); - if (platformData != null) { + SourceData sourceData = SourceRegistry.getSourceData(pluginSection.getString("platform"), pluginSection); + if (sourceData != null) { pluginDataList.add(PluginData.builder(plugin) - .platformData(platformData) + .platformData(sourceData) .comparator(comparator) .build()); } diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java index c05d33f..bd8db0b 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java @@ -8,7 +8,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index c05646d..959af32 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -4,11 +4,11 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.PlatformData; -import org.lushplugins.pluginupdater.api.platform.github.GithubData; -import org.lushplugins.pluginupdater.api.platform.hangar.HangarData; -import org.lushplugins.pluginupdater.api.platform.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.github.GithubData; +import org.lushplugins.pluginupdater.api.source.hangar.HangarData; +import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; +import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -35,32 +35,32 @@ public List collectPluginData(Collection unknownPlugins) if (pluginInputStream != null) { YamlConfiguration pluginYml = YamlConfiguration.loadConfiguration(new InputStreamReader(pluginInputStream)); - PlatformData platformData = null; + SourceData sourceData = null; if (pluginYml.contains("modrinth-project-id")) { - platformData = new ModrinthData( + sourceData = new ModrinthData( pluginYml.getString("modrinth-project-id") ); } else if (pluginYml.contains("spigot-resource-id")) { - platformData = new SpigotData( + sourceData = new SpigotData( pluginYml.getString("spigot-resource-id") ); } else if (pluginYml.contains("hangar-project-slug")) { - platformData = new HangarData( + sourceData = new HangarData( pluginYml.getString("hangar-project-slug") ); } else if (pluginYml.contains("github-repo")) { - platformData = new GithubData( + sourceData = new GithubData( pluginYml.getString("github-repo"), null ); } - if (platformData != null) { + if (sourceData != null) { pluginDataList.add(PluginData.builder(plugin) - .platformData(platformData) + .platformData(sourceData) .build()); } } diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index 699e38d..6c94a9a 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -7,7 +7,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.platform.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; From dba1636556e77e57bbf1b01b8a874d053eb06d44 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 00:30:14 +0300 Subject: [PATCH 06/57] Continued migrating project to support platformss --- .../common/collector/CollectorRegistry.java | 46 +++++++++---------- .../common/config/ConfigManager.java | 17 ++++--- .../common/platform/UpdaterImpl.java | 17 ++++++- .../common/updater/UpdateHandler.java | 13 ++++-- .../pluginupdater/paper/PaperUpdaterImpl.java | 14 ++++++ 5 files changed, 70 insertions(+), 37 deletions(-) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java index f112120..9ea6a0a 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java @@ -2,19 +2,23 @@ import org.jetbrains.annotations.NotNull; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; public class CollectorRegistry { - private static final Map collectors = new HashMap<>(); + private final UpdaterImpl instance; + private final Map collectors = new LinkedHashMap<>(); - static { - register("", null); + public CollectorRegistry(UpdaterImpl instance) { + this.instance = instance; } - public static void register(@NotNull String id, PluginDataCollector collector) { + public void register(@NotNull String id, PluginDataCollector collector) { if (collectors.containsKey(id)) { throw new IllegalStateException("This collector is already registered"); } @@ -22,43 +26,35 @@ public static void register(@NotNull String id, PluginDataCollector collector) { collectors.put(id, collector); } - public static void unregister(String id) { + public void unregister(String id) { collectors.remove(id); } - public static CompletableFuture> collectUnknownPlugins() { + public CompletableFuture> collectUnknownPlugins() { CompletableFuture> future = new CompletableFuture<>(); - PluginUpdater.getInstance().getUpdateHandler().getThreads().execute(() -> { - ConfigManager configManager = PluginUpdater.getInstance().getConfigManager(); - Map unknownPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()) - .map(plugin -> plugin instanceof JavaPlugin javaPlugin ? javaPlugin : null) - .filter(plugin -> plugin != null && configManager.canRegisterPluginData(plugin.getName())) - .collect(Collectors.toMap(PluginBase::getName, plugin -> plugin)); + instance.getUpdateHandler().getThreads().execute(() -> { + ConfigManager config = instance.getConfig(); + Map unknownPlugins = instance.getPlugins().stream() + .filter(plugin -> config.canRegisterPluginData(plugin.getName())) + .collect(Collectors.toMap(PluginInfo::getName, plugin -> plugin)); if (unknownPlugins.isEmpty()) { future.complete(Collections.emptyList()); return; } - List foundPluginDataList = new ArrayList<>(); - List collectors = List.of( - new CommonPluginCollector(), - new PluginYamlCollector(), - new ModrinthCollector(), - new SpigotCollector() - ); + List collectedPluginData = new ArrayList<>(); + for (PluginDataCollector collector : collectors.values()) { + List foundPluginData = collector.collectPluginData(unknownPlugins.values()); - for (PluginDataCollector collector : collectors) { - List pluginDataList = collector.collectPlugins(unknownPlugins.values()); - - foundPluginDataList.addAll(pluginDataList); - for (PluginData pluginData : pluginDataList) { + collectedPluginData.addAll(foundPluginData); + for (PluginData pluginData : foundPluginData) { unknownPlugins.remove(pluginData.getPluginName()); } } - future.complete(foundPluginDataList); + future.complete(collectedPluginData); }); return future; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 229f266..6b714dc 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -7,18 +7,23 @@ import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import java.util.*; import java.util.logging.Level; public class ConfigManager { + private final UpdaterImpl instance; private boolean allowDownloads; private final Map plugins = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); private final Set disabledPlugins = new HashSet<>(); private Messages messages; - public ConfigManager() { + public ConfigManager(UpdaterImpl instance) { + this.instance = instance; PluginUpdater.getInstance().saveDefaultConfig(); } @@ -29,7 +34,7 @@ public void reloadConfig() { boolean checkOnReload = config.getOrElse("check-updates-on-reload", () -> { if (config.contains("check-updates-on-start")) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'"); + instance.getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'"); return config.get("check-updates-on-start"); } else { return true; @@ -63,7 +68,7 @@ public void reloadConfig() { return; } - Plugin currPlugin = Bukkit.getPluginManager().getPlugin(pluginName); + PluginInfo currPlugin = instance.getPlugin(pluginName); if (currPlugin == null) { return; } @@ -87,18 +92,18 @@ public void reloadConfig() { .build()); } } catch (Exception e) { - plugin.getLogger().log(Level.SEVERE, "Caught error whilst collecting data for '%s'".formatted(pluginName), e); + instance.getLogger().log(Level.SEVERE, "Caught error whilst collecting data for '%s'".formatted(pluginName), e); } }); } - PluginDataCollector.collectUnknownPlugins().thenAccept(collectedPluginData -> { + instance.getCollectorRegistry().collectUnknownPlugins().thenAccept(collectedPluginData -> { for (PluginData pluginData : collectedPluginData) { addPlugin(pluginData); } if (checkOnReload) { - UpdateHandler updateHandler = PluginUpdater.getInstance().getUpdateHandler(); + UpdateHandler updateHandler = instance.getUpdateHandler(); getPlugins().forEach(updateHandler::queueUpdateCheck); } }); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java index 4a8d414..fc250c3 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java @@ -1,5 +1,7 @@ package org.lushplugins.pluginupdater.common.platform; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.common.collector.CollectorRegistry; import org.lushplugins.pluginupdater.common.command.UpdateCommand; import org.lushplugins.pluginupdater.common.command.UpdaterCommand; import org.lushplugins.pluginupdater.common.command.UpdatesCommand; @@ -12,18 +14,21 @@ import revxrsal.commands.Lamp; import revxrsal.commands.command.CommandActor; +import java.io.File; import java.util.List; import java.util.logging.Logger; public abstract class UpdaterImpl { + private final CollectorRegistry collectorRegistry; private final UpdateHandler updateHandler; private final ConfigManager config; public UpdaterImpl() { - updateHandler = new UpdateHandler(); + collectorRegistry = new CollectorRegistry(this); + updateHandler = new UpdateHandler(this); updateHandler.enable(); - config = new ConfigManager(); + config = new ConfigManager(this); config.reloadConfig(); Lamp lamp = prepareLamp() @@ -46,6 +51,10 @@ public void shutdown() { updateHandler.shutdown(); } + public CollectorRegistry getCollectorRegistry() { + return collectorRegistry; + } + public UpdateHandler getUpdateHandler() { return updateHandler; } @@ -58,8 +67,12 @@ public void reloadConfig() { config.reloadConfig(); } + public abstract @Nullable PluginInfo getPlugin(String name); + public abstract List getPlugins(); + public abstract File getDownloadDir(); + public abstract Lamp.Builder prepareLamp(); public abstract boolean hasPermission(CommandActor actor, String permission); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index ca3061f..ec81ab4 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -14,10 +14,15 @@ import java.util.logging.Level; public class UpdateHandler { + private final UpdaterImpl instance; private final ScheduledExecutorService threads = Executors.newScheduledThreadPool(1); private final ArrayDeque queue = new ArrayDeque<>(); private final Map currentlyProcessing = new HashMap<>(); + public UpdateHandler(UpdaterImpl instance) { + this.instance = instance; + } + public ScheduledExecutorService getThreads() { return threads; } @@ -49,13 +54,13 @@ public int remainingWithState(ProcessingData.State state) { } public ProcessingData queueUpdateCheck(String pluginName) { - ProcessingData processingData = new ProcessingData(pluginName, ProcessingData.State.UPDATE_CHECK); + ProcessingData processingData = new ProcessingData(instance, pluginName, ProcessingData.State.UPDATE_CHECK); queue(processingData); return processingData; } public ProcessingData queueDownload(String pluginName) { - ProcessingData processingData = new ProcessingData(pluginName, ProcessingData.State.DOWNLOAD); + ProcessingData processingData = new ProcessingData(instance, pluginName, ProcessingData.State.DOWNLOAD); queue(processingData); return processingData; } @@ -84,7 +89,7 @@ private void processQueue() { pluginData.setCheckRan(true); return; } catch (Exception e) { - PluginUpdater.getInstance().getLogger().log(Level.SEVERE, e.getMessage(), e); + instance.getLogger().log(Level.SEVERE, e.getMessage(), e); } String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); @@ -98,7 +103,7 @@ private void processQueue() { } try { - if (VersionChecker.download(pluginData)) { + if (VersionChecker.download(pluginData, instance.getDownloadDir())) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); processingData.getFuture().complete(true); diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java index ad1fea5..17b7a9e 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java @@ -3,7 +3,9 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.Nullable; import org.lushplugins.chatcolorhandler.paper.PaperColor; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.paper.plugin.PaperPluginInfo; @@ -12,6 +14,7 @@ import revxrsal.commands.bukkit.actor.BukkitCommandActor; import revxrsal.commands.command.CommandActor; +import java.io.File; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; @@ -25,6 +28,12 @@ public PaperUpdaterImpl(Plugin plugin) { this.plugin = plugin; } + @Override + public @Nullable PluginInfo getPlugin(String name) { + Plugin plugin = Bukkit.getPluginManager().getPlugin(name); + return plugin != null ? new PaperPluginInfo(plugin) : null; + } + @Override public List getPlugins() { return Arrays.stream(Bukkit.getPluginManager().getPlugins()) @@ -32,6 +41,11 @@ public List getPlugins() { .toList(); } + @Override + public File getDownloadDir() { + return Bukkit.getUpdateFolderFile(); + } + @Override public Lamp.Builder prepareLamp() { return BukkitLamp.builder(PluginUpdater.getInstance()); From 03a87d62d3600f057a16f9ae4dcc62b53413915e Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:04:25 +0300 Subject: [PATCH 07/57] Continued migrating project to support platforms --- .../pluginupdater/api/updater/Updater.java | 25 ++++++++++++++----- platform/paper/api/build.gradle.kts | 3 +++ .../pluginupdater/paper/api/PaperUpdater.java | 13 ++++++++++ .../paper/api}/plugin/PaperPluginInfo.java | 6 ++--- platform/paper/build.gradle.kts | 5 ++++ platform/paper/plugin/build.gradle.kts | 4 +-- .../pluginupdater/paper/PaperUpdaterImpl.java | 2 +- settings.gradle.kts | 1 + 8 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 platform/paper/api/build.gradle.kts create mode 100644 platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java rename platform/paper/{plugin/src/main/java/org/lushplugins/pluginupdater/paper => api/src/main/java/org/lushplugins/pluginupdater/paper/api}/plugin/PaperPluginInfo.java (81%) create mode 100644 platform/paper/build.gradle.kts diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index 30af1a4..7788ba9 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -21,11 +21,13 @@ public class Updater { private final PluginInfo plugin; private final PluginData pluginData; + private final File downloadDir; private final NotificationHandler notificationHandler; - private Updater(@NotNull PluginInfo plugin, @NotNull PluginData pluginData, boolean notify, String notificationPermission, String notificationMessage) { + private Updater(@NotNull PluginInfo plugin, @NotNull PluginData pluginData, File downloadDir, boolean notify, String notificationPermission, String notificationMessage) { this.plugin = plugin; this.pluginData = pluginData; + this.downloadDir = downloadDir; this.notificationHandler = notify ? new NotificationHandler(this, notificationPermission, notificationMessage) : null; } @@ -37,6 +39,10 @@ public PluginData getPluginData() { return pluginData; } + public File getDownloadDir() { + return downloadDir; + } + public NotificationHandler getNotificationHandler() { return notificationHandler; } @@ -101,7 +107,7 @@ private CompletableFuture download() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { try { - if (VersionChecker.download(pluginData)) { + if (VersionChecker.download(pluginData, downloadDir)) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); completableFuture.complete(true); @@ -117,22 +123,29 @@ private CompletableFuture download() { return completableFuture; } - public static Builder builder(PluginInfo plugin) { - return new Builder(plugin); + public static Builder builder(PluginInfo plugin, File downloadDir) { + return new Builder(plugin, downloadDir); } public static class Builder { private final PluginInfo plugin; private final PluginData pluginData; + private File downloadDir; private long checkFrequency = 600; private boolean notify = true; private String notificationPermission = "pluginupdater.notifications"; private String notificationMessage = "&#ffe27aA new &#e0c01b%plugin% &#ffe27aupdate is now available! &#e0c01b%current_version% &#ffe27a-> &#e0c01b%latest_version%"; private File downloadLogFile; - private Builder(PluginInfo plugin) { + private Builder(PluginInfo plugin, File downloadDir) { this.plugin = plugin; this.pluginData = PluginData.of(plugin); + this.downloadDir = downloadDir; + } + + public Builder downloadDir(File downloadDir) { + this.downloadDir = downloadDir; + return this; } /** @@ -247,7 +260,7 @@ public Updater build() { } DownloadLogger.setLogFile(downloadLogFile); - Updater updater = new Updater(plugin, pluginData, notify, notificationPermission, notificationMessage); + Updater updater = new Updater(plugin, pluginData, downloadDir, notify, notificationPermission, notificationMessage); if (checkFrequency > 0) { Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, updater::checkForUpdate, 0, checkFrequency * 20); diff --git a/platform/paper/api/build.gradle.kts b/platform/paper/api/build.gradle.kts new file mode 100644 index 0000000..7279c5d --- /dev/null +++ b/platform/paper/api/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + compileOnly(project(":common:api")) +} \ No newline at end of file diff --git a/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java b/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java new file mode 100644 index 0000000..ef61817 --- /dev/null +++ b/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java @@ -0,0 +1,13 @@ +package org.lushplugins.pluginupdater.paper.api; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; +import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; + +public class PaperUpdater { + + public static Updater.Builder builder(Plugin plugin) { + return Updater.builder(new PaperPluginInfo(plugin), Bukkit.getUpdateFolderFile()); + } +} diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java b/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java similarity index 81% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java rename to platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java index f06ce3d..bdfe76c 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/plugin/PaperPluginInfo.java +++ b/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java @@ -1,9 +1,8 @@ -package org.lushplugins.pluginupdater.paper.plugin; +package org.lushplugins.pluginupdater.paper.api.plugin; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.paper.PluginUpdater; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -12,6 +11,7 @@ import java.util.logging.Logger; public record PaperPluginInfo(Plugin plugin) implements PluginInfo { + private static final Logger LOGGER = Logger.getLogger("PluginUpdater"); @Override public String getName() { @@ -31,7 +31,7 @@ public File getFile() { return (File) method.invoke(plugin); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst getting plugin file: ", e); + LOGGER.log(Level.WARNING, "[PluginUpdater] Caught error whilst getting plugin file: ", e); return null; } } diff --git a/platform/paper/build.gradle.kts b/platform/paper/build.gradle.kts new file mode 100644 index 0000000..febd9e9 --- /dev/null +++ b/platform/paper/build.gradle.kts @@ -0,0 +1,5 @@ +subprojects { + dependencies { + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") + } +} \ No newline at end of file diff --git a/platform/paper/plugin/build.gradle.kts b/platform/paper/plugin/build.gradle.kts index 92fe2b4..414c18d 100644 --- a/platform/paper/plugin/build.gradle.kts +++ b/platform/paper/plugin/build.gradle.kts @@ -7,9 +7,9 @@ plugins { } dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") - + compileOnly(project(":common:api")) implementation(project(":common:impl")) + implementation(project(":platform:paper:api")) implementation("org.lushplugins.chatcolorhandler:paper:8.1.0") implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") } diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java index 17b7a9e..aef9be0 100644 --- a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java +++ b/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java @@ -8,7 +8,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; -import org.lushplugins.pluginupdater.paper.plugin.PaperPluginInfo; +import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; import revxrsal.commands.Lamp; import revxrsal.commands.bukkit.BukkitLamp; import revxrsal.commands.bukkit.actor.BukkitCommandActor; diff --git a/settings.gradle.kts b/settings.gradle.kts index 841aa9b..ba8d6d9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,6 @@ rootProject.name = "PluginUpdater" include("common:api") include("common:impl") +include("platform:paper:api") include("platform:paper:plugin") include("platform:velocity:plugin") \ No newline at end of file From 5f738677cac650b7d080fdaded3645f4c84c8d5f Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:11:51 +0300 Subject: [PATCH 08/57] Started rewriting workflow --- .github/workflows/pr-tests.yml | 62 ++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 6de72e8..081afb1 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -8,9 +8,56 @@ on: - reopened jobs: - build-project: + build-common: runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: '21' + + - name: Prepare gradle + run: | + chmod +x ./gradlew + + - name: Build common:api + run: | + ./gradlew common:api:shadowJar + + - name: Build common:impl + run: | + ./gradlew common:impl:shadowJar + build-paper: + runs-on: ubuntu-latest + needs: build-common + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: '21' + + - name: Prepare gradle + run: | + chmod +x ./gradlew + - name: Build paper:api + run: | + ./gradlew platform:paper:api:shadowJar + + - name: Build paper:plugin + run: | + ./gradlew platform:paper:plugin:shadowJar + build-velocity: + runs-on: ubuntu-latest + needs: build-common steps: - name: Checkout Repository uses: actions/checkout@v2 @@ -21,7 +68,16 @@ jobs: distribution: 'adopt' java-version: '21' - - name: Build with Gradle + - name: Prepare gradle run: | chmod +x ./gradlew - ./gradlew shadowJar + + - name: Build velocity:plugin + run: | + ./gradlew platform:velocity:plugin:shadowJar + check-success: + runs-on: ubuntu-latest + needs: + - build-common + - build-paper + - build-velocity \ No newline at end of file From e1efb4aa1aeab3fcca2340d5ba32e1865ee614d8 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:13:25 +0300 Subject: [PATCH 09/57] Started rewriting workflow --- .github/workflows/pr-tests.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 081afb1..e41bfea 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -80,4 +80,6 @@ jobs: needs: - build-common - build-paper - - build-velocity \ No newline at end of file + - build-velocity + steps: + - run: echo All builds successfully compiled \ No newline at end of file From a77505f2d7c907c4d3ee88419f4b3910fd5d5f5e Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:29:40 +0300 Subject: [PATCH 10/57] Added main class file for velocity platform --- .../org/lushplugins/pluginupdater/velocity/PluginUpdater.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java diff --git a/platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java b/platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java new file mode 100644 index 0000000..6eef1a0 --- /dev/null +++ b/platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java @@ -0,0 +1,4 @@ +package org.lushplugins.pluginupdater.velocity; + +public class PluginUpdater { +} From 81e2612c7cf942af5cbfe2b98e5efc9fa2d955b9 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:31:15 +0300 Subject: [PATCH 11/57] Corrected build method for common modules --- .github/workflows/pr-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index e41bfea..cdffa68 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -26,11 +26,11 @@ jobs: - name: Build common:api run: | - ./gradlew common:api:shadowJar + ./gradlew common:api:build - name: Build common:impl run: | - ./gradlew common:impl:shadowJar + ./gradlew common:impl:build build-paper: runs-on: ubuntu-latest needs: build-common From 651146b5a2cddbdab477850e4cdb06439750d023 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 01:33:35 +0300 Subject: [PATCH 12/57] Removed unnecessary job --- .github/workflows/pr-tests.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index cdffa68..720030b 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -74,12 +74,4 @@ jobs: - name: Build velocity:plugin run: | - ./gradlew platform:velocity:plugin:shadowJar - check-success: - runs-on: ubuntu-latest - needs: - - build-common - - build-paper - - build-velocity - steps: - - run: echo All builds successfully compiled \ No newline at end of file + ./gradlew platform:velocity:plugin:shadowJar \ No newline at end of file From d112a98997745e8164ec57f01ade599d95406015 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 02:12:56 +0300 Subject: [PATCH 13/57] Attempted to fix circular dependency issue --- .github/workflows/pr-tests.yml | 6 +++--- build.gradle.kts | 1 - common/api/build.gradle.kts | 2 -- platform/build.gradle.kts | 14 -------------- platform/paper/api/build.gradle.kts | 1 + platform/paper/build.gradle.kts | 5 ----- platform/paper/plugin/build.gradle.kts | 8 ++++++-- 7 files changed, 10 insertions(+), 27 deletions(-) delete mode 100644 platform/paper/build.gradle.kts diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 720030b..80715b5 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -50,11 +50,11 @@ jobs: - name: Build paper:api run: | - ./gradlew platform:paper:api:shadowJar + ./gradlew platform:paper:api:build - name: Build paper:plugin run: | - ./gradlew platform:paper:plugin:shadowJar + ./gradlew platform:paper:plugin:build build-velocity: runs-on: ubuntu-latest needs: build-common @@ -74,4 +74,4 @@ jobs: - name: Build velocity:plugin run: | - ./gradlew platform:velocity:plugin:shadowJar \ No newline at end of file + ./gradlew platform:velocity:plugin:build \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 8b7280e..fece3f1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,6 @@ import java.io.InputStreamReader plugins { `java-library` `maven-publish` - id("com.gradleup.shadow") version("9.3.1") } group = "org.lushplugins" diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index c5e89f1..2f636c5 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -4,8 +4,6 @@ dependencies { tasks { processResources{ - expand(project.properties) - inputs.property("version", rootProject.version) filesMatching("settings.properties") { expand("version" to rootProject.version) diff --git a/platform/build.gradle.kts b/platform/build.gradle.kts index 4d65799..c0108c6 100644 --- a/platform/build.gradle.kts +++ b/platform/build.gradle.kts @@ -1,18 +1,4 @@ -plugins { - id("com.gradleup.shadow") version("9.3.1") -} - subprojects { - apply(plugin = "com.gradleup.shadow") - - tasks { - shadowJar { - minimize() - - archiveFileName.set("${project.name}-${project.version}.jar") - } - } - publishing { publications { create("maven") { diff --git a/platform/paper/api/build.gradle.kts b/platform/paper/api/build.gradle.kts index 7279c5d..1923519 100644 --- a/platform/paper/api/build.gradle.kts +++ b/platform/paper/api/build.gradle.kts @@ -1,3 +1,4 @@ dependencies { + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") compileOnly(project(":common:api")) } \ No newline at end of file diff --git a/platform/paper/build.gradle.kts b/platform/paper/build.gradle.kts deleted file mode 100644 index febd9e9..0000000 --- a/platform/paper/build.gradle.kts +++ /dev/null @@ -1,5 +0,0 @@ -subprojects { - dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") - } -} \ No newline at end of file diff --git a/platform/paper/plugin/build.gradle.kts b/platform/paper/plugin/build.gradle.kts index 414c18d..415e691 100644 --- a/platform/paper/plugin/build.gradle.kts +++ b/platform/paper/plugin/build.gradle.kts @@ -2,12 +2,14 @@ import java.io.BufferedReader import java.io.InputStreamReader plugins { + id("com.gradleup.shadow") version("9.3.1") id("com.modrinth.minotaur") version ("2.+") - id("xyz.jpenilla.run-paper") version("3.0.2") + id("xyz.jpenilla.run-paper") version ("3.0.2") } dependencies { - compileOnly(project(":common:api")) + compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") + implementation(project(":common:impl")) implementation(project(":platform:paper:api")) implementation("org.lushplugins.chatcolorhandler:paper:8.1.0") @@ -26,6 +28,8 @@ tasks { shadowJar { relocate("org.lushplugins.lushlib", "org.lushplugins.pluginupdater.libraries.lushlib") + + archiveFileName.set("${project.name}-${project.version}.jar") } runServer { From a297a092283568e5377f8f3b3452656ad476ee2d Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 02:23:07 +0300 Subject: [PATCH 14/57] Fixed circular dependency gradle issue (Caused by https://github.com/gradle/gradle/issues/847) --- platform/{paper/api => paper-api}/build.gradle.kts | 0 .../lushplugins/pluginupdater/paper/api/PaperUpdater.java | 0 .../pluginupdater/paper/api/plugin/PaperPluginInfo.java | 0 platform/{paper/plugin => paper-plugin}/build.gradle.kts | 2 +- .../lushplugins/pluginupdater/paper/PaperUpdaterImpl.java | 0 .../org/lushplugins/pluginupdater/paper/PluginUpdater.java | 0 .../pluginupdater/paper/api/PluginUpdaterAPI.java | 0 .../paper/collector/CommonPluginCollector.java | 0 .../pluginupdater/paper/collector/ModrinthCollector.java | 0 .../pluginupdater/paper/collector/PluginYamlCollector.java | 0 .../pluginupdater/paper/collector/SpigotCollector.java | 0 .../pluginupdater/paper/listener/PlayerListener.java | 0 .../src/main/resources/common-plugins.yml | 0 .../plugin => paper-plugin}/src/main/resources/plugin.yml | 0 .../lushplugins/pluginupdater/velocity/PluginUpdater.java | 0 platform/velocity/build.gradle.kts | 0 settings.gradle.kts | 6 +++--- 17 files changed, 4 insertions(+), 4 deletions(-) rename platform/{paper/api => paper-api}/build.gradle.kts (100%) rename platform/{paper/api => paper-api}/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java (100%) rename platform/{paper/api => paper-api}/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java (100%) rename platform/{paper/plugin => paper-plugin}/build.gradle.kts (98%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java (100%) rename platform/{paper/plugin => paper-plugin}/src/main/resources/common-plugins.yml (100%) rename platform/{paper/plugin => paper-plugin}/src/main/resources/plugin.yml (100%) rename platform/{velocity/plugin => velocity-plugin}/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java (100%) delete mode 100644 platform/velocity/build.gradle.kts diff --git a/platform/paper/api/build.gradle.kts b/platform/paper-api/build.gradle.kts similarity index 100% rename from platform/paper/api/build.gradle.kts rename to platform/paper-api/build.gradle.kts diff --git a/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java similarity index 100% rename from platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java rename to platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java diff --git a/platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java similarity index 100% rename from platform/paper/api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java rename to platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java diff --git a/platform/paper/plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts similarity index 98% rename from platform/paper/plugin/build.gradle.kts rename to platform/paper-plugin/build.gradle.kts index 415e691..7601eb7 100644 --- a/platform/paper/plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") implementation(project(":common:impl")) - implementation(project(":platform:paper:api")) + implementation(project(":platform:paper-api")) implementation("org.lushplugins.chatcolorhandler:paper:8.1.0") implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.16") } diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java diff --git a/platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java similarity index 100% rename from platform/paper/plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java diff --git a/platform/paper/plugin/src/main/resources/common-plugins.yml b/platform/paper-plugin/src/main/resources/common-plugins.yml similarity index 100% rename from platform/paper/plugin/src/main/resources/common-plugins.yml rename to platform/paper-plugin/src/main/resources/common-plugins.yml diff --git a/platform/paper/plugin/src/main/resources/plugin.yml b/platform/paper-plugin/src/main/resources/plugin.yml similarity index 100% rename from platform/paper/plugin/src/main/resources/plugin.yml rename to platform/paper-plugin/src/main/resources/plugin.yml diff --git a/platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java similarity index 100% rename from platform/velocity/plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java rename to platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java diff --git a/platform/velocity/build.gradle.kts b/platform/velocity/build.gradle.kts deleted file mode 100644 index e69de29..0000000 diff --git a/settings.gradle.kts b/settings.gradle.kts index ba8d6d9..81ad69d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,6 @@ rootProject.name = "PluginUpdater" include("common:api") include("common:impl") -include("platform:paper:api") -include("platform:paper:plugin") -include("platform:velocity:plugin") \ No newline at end of file +include("platform:paper-api") +include("platform:paper-plugin") +include("platform:velocity-plugin") \ No newline at end of file From e670d76b52c83bd8eac376f773c5108d24079c15 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 13:47:29 +0300 Subject: [PATCH 15/57] Renamed platform to source and added deprecation log --- .../source/github/GithubVersionChecker.java | 4 +- .../pluginupdater/api/updater/PluginData.java | 6 +- .../pluginupdater/api/updater/Updater.java | 24 ++-- .../api/version/VersionChecker.java | 22 ++-- .../common/config/ConfigManager.java | 16 ++- .../common/updater/UpdateHandler.java | 4 +- common/impl/src/main/resources/config.yml | 4 +- .../collector/CommonPluginCollector.java | 4 +- .../paper/collector/ModrinthCollector.java | 2 +- .../paper/collector/PluginYamlCollector.java | 2 +- .../paper/collector/SpigotCollector.java | 2 +- .../src/main/resources/common-plugins.yml | 106 +++++++++--------- 12 files changed, 102 insertions(+), 94 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java index dccc691..4e591e5 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java @@ -47,8 +47,8 @@ public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throw } @Override - public Map getDownloadHeaders(PluginData pluginData, PlatformData platformData) { - if (!(platformData instanceof GithubData githubData)) { + public Map getDownloadHeaders(PluginData pluginData, SourceData sourceData) { + if (!(sourceData instanceof GithubData githubData)) { return Collections.emptyMap(); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java index 6593ae5..d4b5417 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java @@ -53,7 +53,7 @@ public Optional getOptionalComparator() { return Optional.ofNullable(comparator); } - public void addPlatform(SourceData sourceData) { + public void addSource(SourceData sourceData) { this.sourceData.add(sourceData); } @@ -129,12 +129,12 @@ private Builder(String pluginName, String currentVersion) { this.currentVersion = currentVersion; } - public Builder platformData(SourceData sourceData) { + public Builder sourceData(SourceData sourceData) { this.sourceData = Collections.singletonList(sourceData); return this; } - public Builder platformData(List sourceData) { + public Builder sourceData(List sourceData) { this.sourceData = sourceData; return this; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index 7788ba9..c610b2d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -150,17 +150,17 @@ public Builder downloadDir(File downloadDir) { /** * Add GitHub plugin data to be used for collecting update information - * (Platforms should be added in order of priority). + * (Sources should be added in order of priority). * @param repo The plugin's GitHub repo (e.g. 'OakLoaf/PluginUpdater') * @param token The GitHub access token (if required) */ public Builder github(String repo, @Nullable String token) { - return platform(new GithubData(repo, token)); + return source(new GithubData(repo, token)); } /** * Add GitHub plugin data to be used for collecting update information - * (Platforms should be added in order of priority). + * (Sources should be added in order of priority). * @param repo The plugin's GitHub repo (e.g. 'OakLoaf/PluginUpdater') */ public Builder github(String repo) { @@ -169,29 +169,29 @@ public Builder github(String repo) { /** * Add Hangar plugin data to be used for collecting update information - * (Platforms should be added in order of priority). + * (Sources should be added in order of priority). * @param projectSlug The plugin's hangar project slug. */ public Builder hangar(String projectSlug) { - return platform(new HangarData(projectSlug)); + return source(new HangarData(projectSlug)); } /** * Add Modrinth plugin data to be used for collecting update information - * (Platforms should be added in order of priority). + * (Sources should be added in order of priority). * @param projectId The plugin's modrinth project id. */ public Builder modrinth(String projectId) { - return platform(new ModrinthData(projectId)); + return source(new ModrinthData(projectId)); } /** * Add Spigot plugin data to be used for collecting update information - * (Platforms should be added in order of priority). + * (Sources should be added in order of priority). * @param resourceId The plugin's spigot resource id. */ public Builder spigot(String resourceId) { - return platform(new SpigotData(resourceId)); + return source(new SpigotData(resourceId)); } /** @@ -199,8 +199,8 @@ public Builder spigot(String resourceId) { * (Sources should be added in order of priority). * @param sourceData The source data. */ - public Builder platform(SourceData sourceData) { - this.pluginData.addPlatform(sourceData); + public Builder source(SourceData sourceData) { + this.pluginData.addSource(sourceData); return this; } @@ -256,7 +256,7 @@ public Builder logDownloads(@Nullable File logFile) { */ public Updater build() { if (pluginData.getSourceData().isEmpty()) { - throw new IllegalStateException("At least 1 platform must be registered before building the Updater."); + throw new IllegalStateException("At least 1 source must be registered before building the Updater."); } DownloadLogger.setLogFile(downloadLogFile); diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java index 0f045bb..786a6c9 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java @@ -63,7 +63,7 @@ default boolean download(PluginData pluginData, SourceData sourceData, File dest URL url = URI.create(downloadUrl).toURL(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.addRequestProperty("User-Agent", "PluginUpdater/" + UpdaterConstants.VERSION); - for (Map.Entry header : getDownloadHeaders(pluginData, platformData).entrySet()) { + for (Map.Entry header : getDownloadHeaders(pluginData, sourceData).entrySet()) { connection.addRequestProperty(header.getKey(), header.getValue()); } connection.setInstanceFollowRedirects(true); @@ -97,8 +97,8 @@ default boolean download(PluginData pluginData, SourceData sourceData, File dest static String getLatestVersion(PluginData pluginData) throws IOException { try { - return attemptOnPlatforms(pluginData, (versionChecker, platformData) -> { - return versionChecker.getLatestVersion(pluginData, platformData); + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.getLatestVersion(pluginData, sourceData); }); } catch (IOException e) { throw new IOException("Failed to check plugin '" + pluginData.getPluginName() + "' for latest version."); @@ -107,8 +107,8 @@ static String getLatestVersion(PluginData pluginData) throws IOException { static String getDownloadUrl(PluginData pluginData) throws IOException { try { - return attemptOnPlatforms(pluginData, (versionChecker, platformData) -> { - return versionChecker.getDownloadUrl(pluginData, platformData); + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.getDownloadUrl(pluginData, sourceData); }); } catch (IOException e) { throw new IOException("Failed to get download url for plugin '" + pluginData.getPluginName() + "'."); @@ -117,8 +117,8 @@ static String getDownloadUrl(PluginData pluginData) throws IOException { static boolean isUpdateAvailable(PluginData pluginData) throws IOException { try { - return attemptOnPlatforms(pluginData, (versionChecker, platformData) -> { - return versionChecker.isUpdateAvailable(pluginData, platformData); + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.isUpdateAvailable(pluginData, sourceData); }); } catch (IOException e) { throw new IOException("Failed to check if update is available for plugin '" + pluginData.getPluginName() + "'."); @@ -127,15 +127,15 @@ static boolean isUpdateAvailable(PluginData pluginData) throws IOException { static boolean download(PluginData pluginData, File destinationDir) throws IOException { try { - return attemptOnPlatforms(pluginData, (versionChecker, platformData) -> { - return versionChecker.download(pluginData, platformData, destinationDir); + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.download(pluginData, sourceData, destinationDir); }); } catch (IOException e) { throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'."); } } - private static T attemptOnPlatforms(PluginData pluginData, VersionCheckerCallable callable) throws IOException { + private static T attemptOnSources(PluginData pluginData, VersionCheckerCallable callable) throws IOException { for (SourceData sourceData : pluginData.getSourceData()) { VersionChecker versionChecker = SourceRegistry.getVersionChecker(sourceData.getName()); if (versionChecker == null) { @@ -149,7 +149,7 @@ private static T attemptOnPlatforms(PluginData pluginData, VersionCheckerCal } } - throw new IOException("Failed attempts on all available platforms for plugin '" + pluginData.getPluginName() + "'."); + throw new IOException("Failed attempts on all available sources for plugin '" + pluginData.getPluginName() + "'."); } @FunctionalInterface diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 6b714dc..32b1a3f 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -62,9 +62,17 @@ public void reloadConfig() { return; } - String platform = pluginConfig.get("platform"); + String source = pluginConfig.getOrElse("source", () -> { + String deprecatedSource = pluginConfig.get("platform"); + if (deprecatedSource != null) { + instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'"); + } + + return deprecatedSource; + }); + boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); - if (platform == null) { + if (source == null) { return; } @@ -83,10 +91,10 @@ public void reloadConfig() { } try { - SourceData sourceData = SourceRegistry.getSourceData(platform, pluginConfig); + SourceData sourceData = SourceRegistry.getSourceData(source, pluginConfig); if (sourceData != null) { addPlugin(pluginName, PluginData.builder(currPlugin) - .platformData(sourceData) + .sourceData(sourceData) .comparator(comparator) .allowDownloads(allowDownloads) .build()); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index ec81ab4..c51e3b6 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -93,7 +93,7 @@ private void processQueue() { } String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); - processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined platforms: '" + sourceNames + "'")); + processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined sources: '" + sourceNames + "'")); } case DOWNLOAD -> { PluginData pluginData = processingData.getPluginData(); @@ -116,7 +116,7 @@ private void processQueue() { } String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); - processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined platforms: '%s'".formatted(pluginData.getPluginName(), sourceNames))); + processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined sources: '%s'".formatted(pluginData.getPluginName(), sourceNames))); } } } diff --git a/common/impl/src/main/resources/config.yml b/common/impl/src/main/resources/config.yml index 87ffb29..673a6ea 100644 --- a/common/impl/src/main/resources/config.yml +++ b/common/impl/src/main/resources/config.yml @@ -3,10 +3,10 @@ check-updates-on-reload: true # Set to 'false' to disable all download features of PluginUpdater (May require restart) allow-downloads: true -# To learn how to configure plugins that are on different platforms check out the wiki: https://github.com/OakLoaf/PluginUpdater/wiki/PluginUpdater-Plugin +# To learn how to configure plugins that require different sources check out the wiki: https://github.com/OakLoaf/PluginUpdater/wiki/PluginUpdater-Plugin plugins: PluginUpdater: - platform: modrinth + source: modrinth modrinth-project-id: "IBSpJfbm" channels: release ExamplePlugin: diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index aee06c0..7133047 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -53,10 +53,10 @@ public List collectPluginData(Collection unknownPlugins) comparator = null; } - SourceData sourceData = SourceRegistry.getSourceData(pluginSection.getString("platform"), pluginSection); + SourceData sourceData = SourceRegistry.getSourceData(pluginSection.getString("source"), pluginSection); if (sourceData != null) { pluginDataList.add(PluginData.builder(plugin) - .platformData(sourceData) + .sourceData(sourceData) .comparator(comparator) .build()); } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java index bd8db0b..ee13b7b 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java @@ -71,7 +71,7 @@ public List collectPluginData(Collection unknownPlugins) String projectId = versionJson.get("project_id").getAsString(); pluginDataList.add(PluginData.builder(plugin) - .platformData(new ModrinthData(projectId)) + .sourceData(new ModrinthData(projectId)) .build()); }); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 959af32..3b5e0f5 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -60,7 +60,7 @@ else if (pluginYml.contains("github-repo")) { if (sourceData != null) { pluginDataList.add(PluginData.builder(plugin) - .platformData(sourceData) + .sourceData(sourceData) .build()); } } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index 6c94a9a..3a12243 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -59,7 +59,7 @@ public List collectPluginData(Collection unknownPlugins) JsonObject resultJson = resultsJson.get(0).getAsJsonObject(); return PluginData.builder(unknownPlugin) - .platformData(new SpigotData(resultJson.get("id").getAsString())) + .sourceData(new SpigotData(resultJson.get("id").getAsString())) .blockDownloads() .build(); } diff --git a/platform/paper-plugin/src/main/resources/common-plugins.yml b/platform/paper-plugin/src/main/resources/common-plugins.yml index 5f97218..3ef993e 100644 --- a/platform/paper-plugin/src/main/resources/common-plugins.yml +++ b/platform/paper-plugin/src/main/resources/common-plugins.yml @@ -1,159 +1,159 @@ BlueMap: - platform: modrinth + source: modrinth modrinth-project-id: swbUV1cr Chunky: - platform: modrinth + source: modrinth modrinth-project-id: fALzjamp ChunkyBorder: - platform: modrinth + source: modrinth modrinth-project-id: s86X568j commandtimer: - platform: github + source: github github-repo: titivermeesch/CommandTimer CommandPanels: - platform: spigot + source: spigot spigot-resource-id: 67788 CoreProtect: - platform: modrinth + source: modrinth modrinth-project-id: Lu3KuzdV CrazyCrates: - platform: modrinth + source: modrinth modrinth-project-id: r3BBZyf3 DecentHolograms: - platform: spigot + source: spigot spigot-resource-id: 96927 DeluxeMenus: - platform: spigot + source: spigot spigot-resource-id: 11734 DiscordSRV: - platform: modrinth + source: modrinth modrinth-project-id: UmLGoGij Dynmap: - platform: modrinth + source: modrinth modrinth-project-id: fRQREgAc EpicRename: - platform: spigot + source: spigot spigot-resource-id: 4341 EternalTags: - platform: spigot + source: spigot spigot-resource-id: 91842 ExcellentCrates: - platform: spigot + source: spigot spigot-resource-id: 48732 ExcellentEnchants: - platform: spigot + source: spigot spigot-resource-id: 61693 FastAsyncWorldEdit: - platform: modrinth + source: modrinth modrinth-project-id: z4HZZnLr ForcePack: - platform: spigot + source: spigot spigot-resource-id: 45439 GPFlags: - platform: spigot + source: spigot spigot-resource-id: 55773 GriefPrevention: - platform: modrinth + source: modrinth modrinth-project-id: O4o4mKaq GSit: - platform: spigot + source: spigot spigot-resource-id: 62325 HuskChat: - platform: spigot + source: spigot spigot-resource-id: 94496 HuskHomes: - platform: spigot + source: spigot spigot-resource-id: 83767 Multiverse-Core: - platform: modrinth + source: modrinth modrinth-project-id: 3wmN97b8 Multiverse-Inventories: - platform: modrinth + source: modrinth modrinth-project-id: qvdtDX3s Multiverse-NetherPortals: - platform: modrinth + source: modrinth modrinth-project-id: vtawPsTo Multiverse-Portals: - platform: modrinth + source: modrinth modrinth-project-id: 8VMk6P0I Multiverse-SignPortals: - platform: modrinth + source: modrinth modrinth-project-id: WuErDeI1 NametagEdit: - platform: spigot + source: spigot spigot-resource-id: 3836 nightcore: - platform: github + source: github github-repo: nulli0n/nightcore-spigot LuckPerms: - platform: spigot + source: spigot spigot-resource-id: 28140 packetevents: - platform: modrinth + source: modrinth modrinth-project-id: HYKaKraK PlaceholderAPI: - platform: spigot + source: spigot spigot-resource-id: 6245 Plan: - platform: github + source: github github-repo: "plan-player-analytics/Plan" PlayerParticles: - platform: spigot + source: spigot spigot-resource-id: 40261 SimplePortals: - platform: spigot + source: spigot spigot-resource-id: 56772 SimpleVoiceChat: - platform: modrinth + source: modrinth modrinth-project-id: 9eGKb6K1 SkinsRestorer: - platform: spigot + source: spigot spigot-resource-id: 2124 Skulls: - platform: spigot + source: spigot spigot-resource-id: 90098 spark: - platform: spigot + source: spigot spigot-resource-id: 57242 squaremap: - platform: modrinth + source: modrinth modrinth-project-id: PFb7ZqK6 SunLight: - platform: spigot + source: spigot spigot-resource-id: 67733 TAB: - platform: github + source: github github-repo: "NEZNAMY/TAB" TabTPS: - platform: modrinth + source: modrinth modrinth-project-id: cUhi3iB2 Tebex: - platform: modrinth + source: modrinth modrinth-project-id: nRA0jiJt Tweakin: - platform: spigot + source: spigot spigot-resource-id: 93444 UltraCosmetics: - platform: spigot + source: spigot spigot-resource-id: 10905 Vault: - platform: spigot + source: spigot spigot-resource-id: 34315 VentureChat: - platform: spigot + source: spigot spigot-resource-id: 771 ViaBackwards: - platform: modrinth + source: modrinth modrinth-project-id: NpvuJQoq ViaRewind: - platform: modrinth + source: modrinth modrinth-project-id: TbHIxhx5 ViaVersion: - platform: modrinth + source: modrinth modrinth-project-id: P1OZGk5p VillagerMarket: - platform: spigot + source: spigot spigot-resource-id: 82965 WorldEdit: - platform: modrinth + source: modrinth modrinth-project-id: 1u6JkXh5 From 708933852d67ec625b322ddb12114ce583940d7a Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 22:32:40 +0300 Subject: [PATCH 16/57] Restructured sources and refactored class names for clarity --- .../pluginupdater/api/source/Source.java | 171 ++++++++++++++++-- .../pluginupdater/api/source/SourceData.java | 21 +-- .../api/source/SourceRegistry.java | 61 ++----- .../api/source/github/GithubData.java | 37 ---- .../api/source/hangar/HangarData.java | 27 --- .../api/source/modrinth/ModrinthData.java | 80 -------- .../modrinth/ModrinthVersionChecker.java | 63 ------- .../api/source/spigot/SpigotData.java | 27 --- .../GithubSource.java} | 33 ++-- .../HangarSource.java} | 33 +++- .../api/source/type/ModrinthSource.java | 111 ++++++++++++ .../SpigotSource.java} | 33 +++- .../pluginupdater/api/updater/Updater.java | 6 +- .../api/version/VersionChecker.java | 159 ---------------- .../common/collector/CollectorRegistry.java | 6 +- .../common/command/UpdateCommand.java | 4 +- .../common/command/UpdaterCommand.java | 4 +- .../common/command/UpdatesCommand.java | 4 +- .../annotation/CommandPermissionFactory.java | 6 +- .../common/config/ConfigManager.java | 32 ++-- .../serializer/SourceDataSerializer.java | 51 ++++++ ...{UpdaterImpl.java => UpdaterPlatform.java} | 4 +- .../common/updater/UpdateHandler.java | 20 +- .../pluginupdater/common/util/ConfigUtil.java | 45 +++++ ...terImpl.java => PaperUpdaterPlatform.java} | 6 +- .../pluginupdater/paper/PluginUpdater.java | 22 ++- .../paper/api/PluginUpdaterAPI.java | 8 +- .../collector/CommonPluginCollector.java | 2 +- .../paper/collector/PluginYamlCollector.java | 2 +- .../paper/listener/PlayerListener.java | 2 +- 30 files changed, 519 insertions(+), 561 deletions(-) delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java rename common/api/src/main/java/org/lushplugins/pluginupdater/api/source/{github/GithubVersionChecker.java => type/GithubSource.java} (74%) rename common/api/src/main/java/org/lushplugins/pluginupdater/api/source/{hangar/HangarVersionChecker.java => type/HangarSource.java} (55%) create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java rename common/api/src/main/java/org/lushplugins/pluginupdater/api/source/{spigot/SpigotVersionChecker.java => type/SpigotSource.java} (58%) delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/{UpdaterImpl.java => UpdaterPlatform.java} (97%) create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/util/ConfigUtil.java rename platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/{PaperUpdaterImpl.java => PaperUpdaterPlatform.java} (93%) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java index a80c613..525e8aa 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java @@ -1,19 +1,166 @@ package org.lushplugins.pluginupdater.api.source; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.version.VersionDifference; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import java.util.concurrent.Callable; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Collections; +import java.util.Map; +import java.util.logging.Level; -/** - * @param rateLimit The endpoint's rate limit per second, set to {@code -1} to remove limit - */ -public record Source( - int rateLimit, - Callable updater, - SourceRegistry.SourceDataConstructor sourceDataConstructor -) { +@SuppressWarnings("CodeBlock2Expr") +public interface Source { - public boolean hasRateLimit() { - return this.rateLimit > 0; + String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; + + String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; + + default Map getDownloadHeaders(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + return Collections.emptyMap(); + } + + default boolean isUpdateAvailable(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + String currentVersion = pluginData.getCurrentVersion(); + String latestVersion = getLatestVersion(pluginData, sourceData); + + VersionComparator comparator = pluginData.getOptionalComparator().orElse(sourceData.getDefaultComparator()); + VersionDifference versionDifference; + try { + versionDifference = comparator.getVersionDifference(currentVersion, latestVersion); + } catch (InvalidVersionFormatException e) { + UpdaterConstants.LOGGER.severe("Failed to compare versions for '%s': %s".formatted(pluginData.getPluginName(), e.getMessage())); + return false; + } + + pluginData.setCheckRan(true); + + if (!versionDifference.equals(VersionDifference.LATEST)) { + pluginData.setLatestVersion(latestVersion); + pluginData.setVersionDifference(versionDifference); + return true; + } else { + return false; + } + } + + default boolean download(PluginData pluginData, SourceData sourceData, File destinationDir) throws IOException, InterruptedException { + String pluginName = pluginData.getPluginName(); + String latestVersion = pluginData.getLatestVersion(); + String downloadUrl = getDownloadUrl(pluginData, sourceData); + if (downloadUrl == null) { + return false; + } + + URL url = URI.create(downloadUrl).toURL(); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.addRequestProperty("User-Agent", "PluginUpdater/" + UpdaterConstants.VERSION); + for (Map.Entry header : getDownloadHeaders(pluginData, sourceData).entrySet()) { + connection.addRequestProperty(header.getKey(), header.getValue()); + } + connection.setInstanceFollowRedirects(true); + HttpURLConnection.setFollowRedirects(true); + + if (connection.getResponseCode() != 200) { + throw new IllegalStateException("Response code was " + connection.getResponseCode()); + } + + // Get file name or default to PluginName-Version.jar + String fileName = url.getFile(); + if (fileName.isEmpty() || fileName.contains("/") || fileName.contains("\\")) { + fileName = pluginName + "-" + latestVersion + ".jar"; + } + + // Ensures update folder exists + destinationDir.mkdirs(); + + // Downloads file from url + ReadableByteChannel rbc = Channels.newChannel(connection.getInputStream()); + File out = new File(destinationDir, fileName); + UpdaterConstants.LOGGER.info("Saving '" + fileName + "' to '" + out.getAbsolutePath() + "'"); + FileOutputStream fos = new FileOutputStream(out); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + + DownloadLogger.logDownload(pluginData); + + return true; + } + + /** + * @return The endpoint's rate limit per second or {@code -1} if there is no limit + */ + default int getRateLimit() { + return -1; + } + + static String getLatestVersion(PluginData pluginData) throws IOException { + try { + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.getLatestVersion(pluginData, sourceData); + }); + } catch (IOException e) { + throw new IOException("Failed to check plugin '" + pluginData.getPluginName() + "' for latest version."); + } + } + + static String getDownloadUrl(PluginData pluginData) throws IOException { + try { + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.getDownloadUrl(pluginData, sourceData); + }); + } catch (IOException e) { + throw new IOException("Failed to get download url for plugin '" + pluginData.getPluginName() + "'."); + } + } + + static boolean isUpdateAvailable(PluginData pluginData) throws IOException { + try { + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.isUpdateAvailable(pluginData, sourceData); + }); + } catch (IOException e) { + throw new IOException("Failed to check if update is available for plugin '" + pluginData.getPluginName() + "'."); + } + } + + static boolean download(PluginData pluginData, File destinationDir) throws IOException { + try { + return attemptOnSources(pluginData, (versionChecker, sourceData) -> { + return versionChecker.download(pluginData, sourceData, destinationDir); + }); + } catch (IOException e) { + throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'."); + } + } + + private static T attemptOnSources(PluginData pluginData, SourceSupplier callable) throws IOException { + for (SourceData sourceData : pluginData.getSourceData()) { + Source source = SourceRegistry.getSource(sourceData.name()); + if (source == null) { + continue; + } + + try { + return callable.call(source, sourceData); + } catch (IOException | InterruptedException e) { + UpdaterConstants.LOGGER.log(Level.SEVERE, e.getMessage(), e); + } + } + + throw new IOException("Failed attempts on all available sources for plugin '" + pluginData.getPluginName() + "'."); + } + + @FunctionalInterface + interface SourceSupplier { + T call(Source source, SourceData sourceData) throws IOException, InterruptedException; } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java index 8670961..34b3887 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java @@ -3,24 +3,11 @@ import org.lushplugins.pluginupdater.api.version.comparator.SemVerComparator; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -public abstract class SourceData { - private final String name; - private final VersionComparator defaultComparator; +public interface SourceData { - public SourceData(String name, VersionComparator defaultComparator) { - this.name = name; - this.defaultComparator = defaultComparator; - } - - public SourceData(String name) { - this(name, SemVerComparator.INSTANCE); - } - - public String getName() { - return name; - } + String name(); - public VersionComparator getDefaultComparator() { - return defaultComparator; + default VersionComparator getDefaultComparator() { + return SemVerComparator.INSTANCE; } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java index d8a7fd6..6b0bea6 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java @@ -1,40 +1,32 @@ package org.lushplugins.pluginupdater.api.source; -import org.lushplugins.pluginupdater.api.source.github.GithubData; -import org.lushplugins.pluginupdater.api.source.github.GithubVersionChecker; -import org.lushplugins.pluginupdater.api.source.hangar.HangarData; -import org.lushplugins.pluginupdater.api.source.hangar.HangarVersionChecker; -import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthVersionChecker; -import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; -import org.lushplugins.pluginupdater.api.source.spigot.SpigotVersionChecker; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.type.GithubSource; +import org.lushplugins.pluginupdater.api.source.type.HangarSource; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; +import org.lushplugins.pluginupdater.api.source.type.SpigotSource; -import org.bukkit.configuration.ConfigurationSection; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; -import java.util.concurrent.Callable; public class SourceRegistry { private static final HashMap sources = new HashMap<>(); - private static final HashMap cachedSourceCheckers = new HashMap<>(); static { - register("github", -1, GithubVersionChecker::new, GithubData::new); - register("hangar", 1, HangarVersionChecker::new, HangarData::new); - register("modrinth", 1, ModrinthVersionChecker::new, ModrinthData::new); - register("spigot", 1, SpigotVersionChecker::new, SpigotData::new); + register("github", new GithubSource()); + register("hangar", new HangarSource()); + register("modrinth", new ModrinthSource()); + register("spigot", new SpigotSource()); } @Nullable - public static VersionChecker getVersionChecker(String source) { - return getOrConstructVersionChecker(source); + public static Source getSource(String name) { + return sources.get(name); } @Nullable - public static SourceData getSourceData(String source, ConfigurationSection configurationSection) { + public static SourceData getSourceData(String source, Config configurationSection) { try { return sources.containsKey(source) ? sources.get(source).sourceDataConstructor().apply(configurationSection) : null; } catch (Exception e) { @@ -43,41 +35,20 @@ public static SourceData getSourceData(String source, ConfigurationSection confi } } - public static void register(@NotNull String source, int rateLimit, @NotNull Callable updater, @NotNull SourceRegistry.SourceDataConstructor sourceDataConstructor) { - if (sources.containsKey(source)) { - throw new IllegalStateException("This source is already registered"); + public static void register(@NotNull String name, @NotNull Source source) { + if (sources.containsKey(name)) { + throw new IllegalStateException("A source with this name is already registered"); } - sources.put(source, new Source(rateLimit, updater, sourceDataConstructor)); - } - - public static void register(@NotNull String source, @NotNull Callable updater, @NotNull SourceRegistry.SourceDataConstructor sourceDataConstructor) { - register(source, 1, updater, sourceDataConstructor); + sources.put(name, source); } public static void unregister(String source) { sources.remove(source); } - private static @Nullable VersionChecker getOrConstructVersionChecker(@NotNull String source) { - if (cachedSourceCheckers.containsKey(source)) { - return cachedSourceCheckers.get(source); - } else if (sources.containsKey(source)) { - try { - VersionChecker versionChecker = sources.get(source).updater().call(); - cachedSourceCheckers.put(source, versionChecker); - return versionChecker; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } else { - return null; - } - } - @FunctionalInterface public interface SourceDataConstructor { - SourceData apply(ConfigurationSection configurationSection); + SourceData apply(Config config); } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java deleted file mode 100644 index e721f51..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubData.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.lushplugins.pluginupdater.api.source.github; - -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.source.SourceData; - -public class GithubData extends SourceData { - private static final String NAME = "github"; - - private final String repo; - private final String token; - - public GithubData(ConfigurationSection config) { - super(NAME); - this.repo = config.getString("github-repo"); - this.token = config.getString("token"); - } - - public GithubData(String repo, @Nullable String token) { - super(NAME); - this.repo = repo; - this.token = token; - } - - @Deprecated - public GithubData(String repo) { - this(repo, null); - } - - public String getRepo() { - return repo; - } - - public String getToken() { - return token; - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java deleted file mode 100644 index c6202f5..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarData.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.lushplugins.pluginupdater.api.source.hangar; - -import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.source.SourceData; - -public class HangarData extends SourceData { - private static final String NAME = "hangar"; - - private final String projectSlug; - - public HangarData(ConfigurationSection config) { - super(NAME); - this.projectSlug = config.getString("hangar-project-slug"); - } - - /** - * @param projectSlug The Hangar Project Slug - */ - public HangarData(String projectSlug) { - super(NAME); - this.projectSlug = projectSlug; - } - - public String getProjectSlug() { - return projectSlug; - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java deleted file mode 100644 index 65070dd..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthData.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.lushplugins.pluginupdater.api.source.modrinth; - -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.source.SourceData; - -import java.util.Collections; -import java.util.List; - -public class ModrinthData extends SourceData { - private static final String NAME = "modrinth"; - - private final String projectId; - private final @Nullable List releaseChannels; - - public ModrinthData(ConfigurationSection config) { - super(NAME); - this.projectId = config.getString("modrinth-project-id"); - - if (config.isString("channels")) { - this.releaseChannels = Collections.singletonList(config.getString("channels", ReleaseChannel.RELEASE).toLowerCase()); - } else if (config.isList("channels")) { - this.releaseChannels = config.getStringList("channels").stream() - .map(String::toLowerCase) - .toList(); - } else { - this.releaseChannels = ReleaseChannel.ALL; - } - } - - /** - * @param projectId The Modrinth project id - * @param releaseChannels Which release channels to filter, {@code null} will include all release channels - */ - public ModrinthData(String projectId, @Nullable List releaseChannels) { - super(NAME); - this.projectId = projectId; - this.releaseChannels = releaseChannels; - } - - /** - * @param projectId The Modrinth project id - * @param releaseChannel Which release channel to filter, {@code null} will include all release channels - */ - public ModrinthData(String projectId, @Nullable String releaseChannel) { - this(projectId, Collections.singletonList(releaseChannel)); - } - - /** - * @param projectId The Modrinth project id - */ - public ModrinthData(String projectId) { - this(projectId, ReleaseChannel.ALL); - } - - public String getProjectId() { - return projectId; - } - - public boolean specifiesVersionType() { - return this.releaseChannels != null; - } - - @ApiStatus.Internal - public @Nullable String getVersionType() { - return this.releaseChannels != null ? this.releaseChannels.get(0) : null; - } - - public @Nullable List getReleaseChannels() { - return releaseChannels; - } - - public static class ReleaseChannel { - public static final List ALL = null; - public static final String RELEASE = "release"; - public static final String BETA = "beta"; - public static final String ALPHA = "alpha"; - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java deleted file mode 100644 index 2d2df41..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/modrinth/ModrinthVersionChecker.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.lushplugins.pluginupdater.api.source.modrinth; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import org.lushplugins.pluginupdater.api.util.HttpUtil; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.source.SourceData; - -import java.io.IOException; -import java.net.http.HttpResponse; - -public class ModrinthVersionChecker implements VersionChecker { - - @Override - public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof ModrinthData modrinthData)) { - return null; - } - - JsonObject currVersionJson = getLatestVersion(pluginData, modrinthData); - return currVersionJson.get("version_number").getAsString(); - } - - @Override - public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof ModrinthData modrinthData)) { - return null; - } - - JsonObject currVersionJson = getLatestVersion(pluginData, modrinthData); - return currVersionJson.get("files").getAsJsonArray().get(0).getAsJsonObject().get("url").getAsString(); - } - - private JsonArray getVersions(PluginData pluginData, ModrinthData modrinthData) throws IOException, InterruptedException { - StringBuilder uriBuilder = new StringBuilder(String.format("%s/project/%s/version", UpdaterConstants.Endpoint.MODRINTH, modrinthData.getProjectId())) - .append("?loaders=[%22bukkit%22,%22spigot%22,%22paper%22,%22purpur%22,%22folia%22]") - .append("&include_changelog=false"); - - if (modrinthData.specifiesVersionType()) { - uriBuilder.append("&version_type=").append(modrinthData.getVersionType()); - } - - HttpResponse response = HttpUtil.sendRequest(uriBuilder.toString()); - - if (response.statusCode() != 200) { - throw new IllegalStateException("Received invalid response code (%s) whilst checking '%s' for updates.".formatted(response.statusCode(), pluginData.getPluginName())); - } - - return JsonParser.parseString(response.body()).getAsJsonArray(); - } - - private JsonObject getLatestVersion(PluginData pluginData, ModrinthData modrinthData) throws IOException, InterruptedException { - JsonArray versions = getVersions(pluginData, modrinthData); - if (versions.isEmpty()) { - throw new IllegalStateException("Failed to collect versions for '%s'".formatted(pluginData.getPluginName() )); - } - - return versions.get(0).getAsJsonObject(); - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java deleted file mode 100644 index f971261..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotData.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.lushplugins.pluginupdater.api.source.spigot; - -import org.bukkit.configuration.ConfigurationSection; -import org.lushplugins.pluginupdater.api.source.SourceData; - -public class SpigotData extends SourceData { - private static final String NAME = "spigot"; - - private final String resourceId; - - public SpigotData(ConfigurationSection config) { - super(NAME); - resourceId = config.getString("spigot-resource-id"); - } - - /** - * @param resourceId The Spigot Resource Id - */ - public SpigotData(String resourceId) { - super(NAME); - this.resourceId = resourceId; - } - - public String getResourceId() { - return resourceId; - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java similarity index 74% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java index 4e591e5..f401e5a 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/github/GithubVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java @@ -1,11 +1,12 @@ -package org.lushplugins.pluginupdater.api.source.github; +package org.lushplugins.pluginupdater.api.source.type; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.updater.PluginData; import java.io.IOException; @@ -17,11 +18,11 @@ import java.util.HashMap; import java.util.Map; -public class GithubVersionChecker implements VersionChecker { +public class GithubSource implements Source { @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof GithubData githubData)) { + if (!(sourceData instanceof Data githubData)) { return null; } @@ -31,7 +32,7 @@ public String getLatestVersion(PluginData pluginData, SourceData sourceData) thr @Override public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof GithubData githubData)) { + if (!(sourceData instanceof Data githubData)) { return null; } @@ -48,11 +49,11 @@ public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throw @Override public Map getDownloadHeaders(PluginData pluginData, SourceData sourceData) { - if (!(sourceData instanceof GithubData githubData)) { + if (!(sourceData instanceof Data githubData)) { return Collections.emptyMap(); } - String token = githubData.getToken(); + String token = githubData.token(); if (token == null || token.isEmpty()) { return Collections.emptyMap(); } @@ -63,18 +64,20 @@ public Map getDownloadHeaders(PluginData pluginData, SourceData return headers; } - private JsonObject getLatestRelease(PluginData pluginData, GithubData githubData) throws IOException, InterruptedException { + private JsonObject getLatestRelease(PluginData pluginData, Data githubData) throws IOException, InterruptedException { HttpRequest.Builder requestBuilder = HttpUtil.prepareRequestBuilder(URI.create("%s/repos/%s/releases/latest" - .formatted(UpdaterConstants.Endpoint.GITHUB, githubData.getRepo())), null); + .formatted(UpdaterConstants.Endpoint.GITHUB, githubData.repo())), null); - String token = githubData.getToken(); + String token = githubData.token(); if (token != null && !token.isEmpty()) { requestBuilder.header("Authorization", "Bearer " + token); } - HttpResponse response = HttpClient.newHttpClient().send( + HttpClient client = HttpClient.newHttpClient(); + HttpResponse response = client.send( requestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + client.close(); if (response.statusCode() != 200) { throw new IllegalStateException("Received invalid response code (%s) whilst checking '%s' for updates.".formatted(response.statusCode(), pluginData.getPluginName())); @@ -82,4 +85,12 @@ private JsonObject getLatestRelease(PluginData pluginData, GithubData githubData return JsonParser.parseString(response.body()).getAsJsonObject(); } + + public record Data(String repo, @Nullable String token) implements SourceData { + + @Override + public String name() { + return "github"; + } + } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java similarity index 55% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java index 94322e8..979865b 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/hangar/HangarVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java @@ -1,23 +1,23 @@ -package org.lushplugins.pluginupdater.api.source.hangar; +package org.lushplugins.pluginupdater.api.source.type; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.updater.PluginData; import java.io.IOException; import java.net.http.HttpResponse; -public class HangarVersionChecker implements VersionChecker { +public class HangarSource implements Source { @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof HangarData hangarData)) { + if (!(sourceData instanceof Data(String projectSlug))) { return null; } - HttpResponse response = HttpUtil.sendRequest(String.format("%s/projects/%s/latestrelease", UpdaterConstants.Endpoint.HANGAR, hangarData.getProjectSlug())); + HttpResponse response = HttpUtil.sendRequest(String.format("%s/projects/%s/latestrelease", UpdaterConstants.Endpoint.HANGAR, projectSlug)); if (response.statusCode() != 200) { throw new IllegalStateException("Received invalid response code (" + response.statusCode() + ") whilst checking '" + pluginData.getPluginName() + "' for updates."); @@ -28,8 +28,27 @@ public String getLatestVersion(PluginData pluginData, SourceData sourceData) thr @Override public String getDownloadUrl(PluginData pluginData, SourceData sourceData) { - return sourceData instanceof HangarData hangarData ? - String.format("%s/projects/%s/versions/%s/PAPER/download", UpdaterConstants.Endpoint.HANGAR, hangarData.getProjectSlug(), pluginData.getLatestVersion()) : + return sourceData instanceof Data(String projectSlug) ? + "%s/projects/%s/versions/%s/PAPER/download".formatted( + UpdaterConstants.Endpoint.HANGAR, + projectSlug, + pluginData.getLatestVersion()) : null; } + + @Override + public int getRateLimit() { + return 1; + } + + /** + * @param projectSlug The Hangar Project Slug + */ + public record Data(String projectSlug) implements SourceData { + + @Override + public String name() { + return "hangar"; + } + } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java new file mode 100644 index 0000000..8f62c3b --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java @@ -0,0 +1,111 @@ +package org.lushplugins.pluginupdater.api.source.type; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.util.HttpUtil; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.api.source.Source; +import org.lushplugins.pluginupdater.api.updater.PluginData; + +import java.io.IOException; +import java.net.http.HttpResponse; +import java.util.Collections; +import java.util.List; + +public class ModrinthSource implements Source { + + @Override + public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof Data modrinthData)) { + return null; + } + + JsonObject currVersionJson = getLatestVersion(pluginData, modrinthData); + return currVersionJson.get("version_number").getAsString(); + } + + @Override + public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { + if (!(sourceData instanceof Data modrinthData)) { + return null; + } + + JsonObject currVersionJson = getLatestVersion(pluginData, modrinthData); + return currVersionJson.get("files").getAsJsonArray().get(0).getAsJsonObject().get("url").getAsString(); + } + + private JsonArray getVersions(PluginData pluginData, Data modrinthData) throws IOException, InterruptedException { + StringBuilder uriBuilder = new StringBuilder("%s/project/%s/version" + .formatted(UpdaterConstants.Endpoint.MODRINTH, modrinthData.projectId())) + .append("?loaders=[%22bukkit%22,%22spigot%22,%22paper%22,%22purpur%22,%22folia%22]") + .append("&include_changelog=false"); + + if (modrinthData.filtersReleaseChannel()) { + uriBuilder.append("&version_type=").append(modrinthData.releaseChannel()); + } + + HttpResponse response = HttpUtil.sendRequest(uriBuilder.toString()); + + if (response.statusCode() != 200) { + throw new IllegalStateException("Received invalid response code (%s) whilst checking '%s' for updates." + .formatted(response.statusCode(), pluginData.getPluginName())); + } + + return JsonParser.parseString(response.body()).getAsJsonArray(); + } + + private JsonObject getLatestVersion(PluginData pluginData, Data modrinthData) throws IOException, InterruptedException { + JsonArray versions = getVersions(pluginData, modrinthData); + if (versions.isEmpty()) { + throw new IllegalStateException("Failed to collect versions for '%s'" + .formatted(pluginData.getPluginName() )); + } + + return versions.get(0).getAsJsonObject(); + } + + @Override + public int getRateLimit() { + return 1; + } + + /** + * @param projectId The Modrinth project id + * @param releaseChannels Which release channels to filter, {@code null} will include all release channels + */ + public record Data(String projectId, @Nullable List releaseChannels) implements SourceData { + + /** + * @param projectId The Modrinth project id + * @param releaseChannel Which release channel to filter + */ + public Data(String projectId, String releaseChannel) { + this(projectId, Collections.singletonList(releaseChannel)); + } + + @Override + public String name() { + return "modrinth"; + } + + public boolean filtersReleaseChannel() { + return this.releaseChannels != null; + } + + @ApiStatus.Internal + public @Nullable String releaseChannel() { + return this.releaseChannels != null ? this.releaseChannels.getFirst() : null; + } + } + + public static class ReleaseChannel { + public static final List ALL = null; + public static final String RELEASE = "release"; + public static final String BETA = "beta"; + public static final String ALPHA = "alpha"; + } +} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java similarity index 58% rename from common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java rename to common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java index 9aaf867..127a761 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/spigot/SpigotVersionChecker.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java @@ -1,25 +1,26 @@ -package org.lushplugins.pluginupdater.api.source.spigot; +package org.lushplugins.pluginupdater.api.source.type; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.VersionChecker; -import org.lushplugins.pluginupdater.api.source.SourceData; +import org.lushplugins.pluginupdater.api.source.Source; import java.io.IOException; import java.net.http.HttpResponse; -public class SpigotVersionChecker implements VersionChecker { +public class SpigotSource implements Source { @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - if (!(sourceData instanceof SpigotData spigotData)) { + if (!(sourceData instanceof Data(String resourceId))) { return null; } - HttpResponse response = HttpUtil.sendRequest(String.format("%s/resources/%s/versions/latest", UpdaterConstants.Endpoint.SPIGET, spigotData.getResourceId())); + HttpResponse response = HttpUtil.sendRequest("%s/resources/%s/versions/latest" + .formatted(UpdaterConstants.Endpoint.SPIGET, resourceId)); if (response.statusCode() != 200) { throw new IllegalStateException("Received invalid response code (" + response.statusCode() + ") whilst checking '" + pluginData.getPluginName() + "' for updates."); @@ -31,8 +32,24 @@ public String getLatestVersion(PluginData pluginData, SourceData sourceData) thr @Override public String getDownloadUrl(PluginData pluginData, SourceData sourceData) { - return sourceData instanceof SpigotData spigotData ? - String.format("%s/resources/%s/download", UpdaterConstants.Endpoint.SPIGET, spigotData.getResourceId()) : + return sourceData instanceof Data(String resourceId) ? + String.format("%s/resources/%s/download", UpdaterConstants.Endpoint.SPIGET, resourceId) : null; } + + @Override + public int getRateLimit() { + return 1; + } + + /** + * @param resourceId The Spigot Resource id + */ + public record Data(String resourceId) implements SourceData { + + @Override + public String name() { + return "spigot"; + } + } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index c610b2d..8c67e9d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -9,7 +9,7 @@ import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.version.VersionDifference; import java.io.File; @@ -70,7 +70,7 @@ public CompletableFuture checkForUpdate() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { try { - future.complete(VersionChecker.isUpdateAvailable(pluginData)); + future.complete(Source.isUpdateAvailable(pluginData)); } catch (IOException e) { plugin.getLogger().log(Level.SEVERE, e.getMessage(), e); future.complete(false); @@ -107,7 +107,7 @@ private CompletableFuture download() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { try { - if (VersionChecker.download(pluginData, downloadDir)) { + if (Source.download(pluginData, downloadDir)) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); completableFuture.complete(true); diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java deleted file mode 100644 index 786a6c9..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/version/VersionChecker.java +++ /dev/null @@ -1,159 +0,0 @@ -package org.lushplugins.pluginupdater.api.version; - -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; -import org.lushplugins.pluginupdater.api.source.SourceData; -import org.lushplugins.pluginupdater.api.source.SourceRegistry; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.api.util.UpdaterConstants; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; - -import java.io.*; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URL; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.util.Collections; -import java.util.Map; -import java.util.logging.Level; - -@SuppressWarnings("CodeBlock2Expr") -public interface VersionChecker { - String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; - - String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; - - default Map getDownloadHeaders(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - return Collections.emptyMap(); - } - - default boolean isUpdateAvailable(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { - String currentVersion = pluginData.getCurrentVersion(); - String latestVersion = getLatestVersion(pluginData, sourceData); - - VersionComparator comparator = pluginData.getOptionalComparator().orElse(sourceData.getDefaultComparator()); - VersionDifference versionDifference; - try { - versionDifference = comparator.getVersionDifference(currentVersion, latestVersion); - } catch (InvalidVersionFormatException e) { - UpdaterConstants.LOGGER.severe("Failed to compare versions for '%s': %s".formatted(pluginData.getPluginName(), e.getMessage())); - return false; - } - - pluginData.setCheckRan(true); - - if (!versionDifference.equals(VersionDifference.LATEST)) { - pluginData.setLatestVersion(latestVersion); - pluginData.setVersionDifference(versionDifference); - return true; - } else { - return false; - } - } - - default boolean download(PluginData pluginData, SourceData sourceData, File destinationDir) throws IOException, InterruptedException { - String pluginName = pluginData.getPluginName(); - String latestVersion = pluginData.getLatestVersion(); - String downloadUrl = getDownloadUrl(pluginData, sourceData); - if (downloadUrl == null) { - return false; - } - - URL url = URI.create(downloadUrl).toURL(); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.addRequestProperty("User-Agent", "PluginUpdater/" + UpdaterConstants.VERSION); - for (Map.Entry header : getDownloadHeaders(pluginData, sourceData).entrySet()) { - connection.addRequestProperty(header.getKey(), header.getValue()); - } - connection.setInstanceFollowRedirects(true); - HttpURLConnection.setFollowRedirects(true); - - if (connection.getResponseCode() != 200) { - throw new IllegalStateException("Response code was " + connection.getResponseCode()); - } - - // Get file name or default to PluginName-Version.jar - String fileName = url.getFile(); - if (fileName.isEmpty() || fileName.contains("/") || fileName.contains("\\")) { - fileName = pluginName + "-" + latestVersion + ".jar"; - } - - // Ensures update folder exists - destinationDir.mkdirs(); - - // Downloads file from url - ReadableByteChannel rbc = Channels.newChannel(connection.getInputStream()); - File out = new File(destinationDir, fileName); - UpdaterConstants.LOGGER.info("Saving '" + fileName + "' to '" + out.getAbsolutePath() + "'"); - FileOutputStream fos = new FileOutputStream(out); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - - DownloadLogger.logDownload(pluginData); - - return true; - } - - static String getLatestVersion(PluginData pluginData) throws IOException { - try { - return attemptOnSources(pluginData, (versionChecker, sourceData) -> { - return versionChecker.getLatestVersion(pluginData, sourceData); - }); - } catch (IOException e) { - throw new IOException("Failed to check plugin '" + pluginData.getPluginName() + "' for latest version."); - } - } - - static String getDownloadUrl(PluginData pluginData) throws IOException { - try { - return attemptOnSources(pluginData, (versionChecker, sourceData) -> { - return versionChecker.getDownloadUrl(pluginData, sourceData); - }); - } catch (IOException e) { - throw new IOException("Failed to get download url for plugin '" + pluginData.getPluginName() + "'."); - } - } - - static boolean isUpdateAvailable(PluginData pluginData) throws IOException { - try { - return attemptOnSources(pluginData, (versionChecker, sourceData) -> { - return versionChecker.isUpdateAvailable(pluginData, sourceData); - }); - } catch (IOException e) { - throw new IOException("Failed to check if update is available for plugin '" + pluginData.getPluginName() + "'."); - } - } - - static boolean download(PluginData pluginData, File destinationDir) throws IOException { - try { - return attemptOnSources(pluginData, (versionChecker, sourceData) -> { - return versionChecker.download(pluginData, sourceData, destinationDir); - }); - } catch (IOException e) { - throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'."); - } - } - - private static T attemptOnSources(PluginData pluginData, VersionCheckerCallable callable) throws IOException { - for (SourceData sourceData : pluginData.getSourceData()) { - VersionChecker versionChecker = SourceRegistry.getVersionChecker(sourceData.getName()); - if (versionChecker == null) { - continue; - } - - try { - return callable.call(versionChecker, sourceData); - } catch (IOException | InterruptedException e) { - UpdaterConstants.LOGGER.log(Level.SEVERE, e.getMessage(), e); - } - } - - throw new IOException("Failed attempts on all available sources for plugin '" + pluginData.getPluginName() + "'."); - } - - @FunctionalInterface - interface VersionCheckerCallable { - T call(VersionChecker versionChecker, SourceData sourceData) throws IOException, InterruptedException; - } -} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java index 9ea6a0a..ff81a59 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java @@ -4,17 +4,17 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.config.ConfigManager; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; public class CollectorRegistry { - private final UpdaterImpl instance; + private final UpdaterPlatform instance; private final Map collectors = new LinkedHashMap<>(); - public CollectorRegistry(UpdaterImpl instance) { + public CollectorRegistry(UpdaterPlatform instance) { this.instance = instance; } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index 075195f..563627c 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -1,7 +1,7 @@ package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -13,7 +13,7 @@ import java.util.concurrent.atomic.AtomicInteger; @SuppressWarnings("unused") -public record UpdateCommand(UpdaterImpl instance) { +public record UpdateCommand(UpdaterPlatform instance) { @Command("updater update") @CommandPermission("pluginupdater.downloadupdates") diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java index 7268bd5..c289eb0 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java @@ -2,7 +2,7 @@ import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Subcommand; @@ -11,7 +11,7 @@ @Command("updater") @SuppressWarnings("unused") -public record UpdaterCommand(UpdaterImpl instance) { +public record UpdaterCommand(UpdaterPlatform instance) { @Subcommand("reload") @CommandPermission("pluginupdater.reload") diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index 82f4469..ab638bb 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -1,7 +1,7 @@ package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -11,7 +11,7 @@ import java.util.List; @SuppressWarnings("unused") -public record UpdatesCommand(UpdaterImpl instance) { +public record UpdatesCommand(UpdaterPlatform instance) { @Command({ "updater updates", "updates" }) @CommandPermission("pluginupdater.checkupdates") diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java index 24aaa24..5b3ac0b 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java @@ -2,15 +2,15 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import revxrsal.commands.Lamp; import revxrsal.commands.annotation.list.AnnotationList; import revxrsal.commands.command.CommandActor; public class CommandPermissionFactory implements revxrsal.commands.command.CommandPermission.Factory { - private final UpdaterImpl instance; + private final UpdaterPlatform instance; - public CommandPermissionFactory(UpdaterImpl instance) { + public CommandPermissionFactory(UpdaterPlatform instance) { this.instance = instance; } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 32b1a3f..1af9afe 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -9,20 +9,21 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.common.util.ConfigUtil; import java.util.*; import java.util.logging.Level; public class ConfigManager { - private final UpdaterImpl instance; + private final UpdaterPlatform instance; private boolean allowDownloads; private final Map plugins = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); private final Set disabledPlugins = new HashSet<>(); private Messages messages; - public ConfigManager(UpdaterImpl instance) { + public ConfigManager(UpdaterPlatform instance) { this.instance = instance; PluginUpdater.getInstance().saveDefaultConfig(); } @@ -32,14 +33,10 @@ public void reloadConfig() { FileConfig config = FileConfig.of(""); config.load(); - boolean checkOnReload = config.getOrElse("check-updates-on-reload", () -> { - if (config.contains("check-updates-on-start")) { - instance.getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'"); - return config.get("check-updates-on-start"); - } else { - return true; - } - }); + boolean checkOnReload = ConfigUtil.getOrAliasOrElse( + config, "check-updates-on-reload", "check-updates-on-start", true, + () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'") + ); this.allowDownloads = config.getOrElse("allow-downloads", true); this.messages = config.getOrElse("messages", () -> new Messages(new HashMap<>())); @@ -62,16 +59,8 @@ public void reloadConfig() { return; } - String source = pluginConfig.getOrElse("source", () -> { - String deprecatedSource = pluginConfig.get("platform"); - if (deprecatedSource != null) { - instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'"); - } - - return deprecatedSource; - }); - - boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); + String source = ConfigUtil.getOrAlias(config, "source", "platform", + () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'")); if (source == null) { return; } @@ -90,6 +79,7 @@ public void reloadConfig() { comparator = null; } + boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); try { SourceData sourceData = SourceRegistry.getSourceData(source, pluginConfig); if (sourceData != null) { diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java new file mode 100644 index 0000000..a641238 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java @@ -0,0 +1,51 @@ +package org.lushplugins.pluginupdater.common.config.serializer; + +import com.electronwill.nightconfig.core.Config; +import org.lushplugins.pluginupdater.api.source.type.GithubSource; +import org.lushplugins.pluginupdater.api.source.type.HangarSource; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; +import org.lushplugins.pluginupdater.api.source.type.SpigotSource; +import org.lushplugins.pluginupdater.common.util.ConfigUtil; + +import java.util.Collections; +import java.util.List; + +public class SourceDataSerializer { + + public static GithubSource.Data githubSourceData(Config config) { + return new GithubSource.Data( + config.get("github-repo"), + config.get("token") + ); + } + + public static HangarSource.Data hangarSourceData(Config config) { + return new HangarSource.Data( + config.get("hangar-project-slug") + ); + } + + public static ModrinthSource.Data modrinthSourceData(Config config) { + List releaseChannels; + if (ConfigUtil.isOfType(config, "channels", String.class)) { + releaseChannels = Collections.singletonList(config.getOrElse("channels", ModrinthSource.ReleaseChannel.RELEASE).toLowerCase()); + } else if (ConfigUtil.isOfType(config, "channels", List.class)) { + releaseChannels = config.>get("channels").stream() + .map(String::toLowerCase) + .toList(); + } else { + releaseChannels = ModrinthSource.ReleaseChannel.ALL; + } + + return new ModrinthSource.Data( + config.get("modrinth-project-id"), + releaseChannels + ); + } + + public static SpigotSource.Data spigotSourceData(Config config) { + return new SpigotSource.Data( + config.get("spigot-resource-id") + ); + } +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java similarity index 97% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java index fc250c3..ddb9a28 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterImpl.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java @@ -18,12 +18,12 @@ import java.util.List; import java.util.logging.Logger; -public abstract class UpdaterImpl { +public abstract class UpdaterPlatform { private final CollectorRegistry collectorRegistry; private final UpdateHandler updateHandler; private final ConfigManager config; - public UpdaterImpl() { + public UpdaterPlatform() { collectorRegistry = new CollectorRegistry(this); updateHandler = new UpdateHandler(this); updateHandler.enable(); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index c51e3b6..b59b893 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -2,9 +2,9 @@ import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.version.VersionDifference; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import java.io.IOException; import java.util.ArrayDeque; @@ -14,12 +14,12 @@ import java.util.logging.Level; public class UpdateHandler { - private final UpdaterImpl instance; + private final UpdaterPlatform instance; private final ScheduledExecutorService threads = Executors.newScheduledThreadPool(1); private final ArrayDeque queue = new ArrayDeque<>(); private final Map currentlyProcessing = new HashMap<>(); - public UpdateHandler(UpdaterImpl instance) { + public UpdateHandler(UpdaterPlatform instance) { this.instance = instance; } @@ -85,14 +85,14 @@ private void processQueue() { PluginData pluginData = processingData.getPluginData(); try { - processingData.getFuture().complete(VersionChecker.isUpdateAvailable(pluginData)); + processingData.getFuture().complete(Source.isUpdateAvailable(pluginData)); pluginData.setCheckRan(true); return; } catch (Exception e) { instance.getLogger().log(Level.SEVERE, e.getMessage(), e); } - String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::name).toList()); processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined sources: '" + sourceNames + "'")); } case DOWNLOAD -> { @@ -103,7 +103,7 @@ private void processQueue() { } try { - if (VersionChecker.download(pluginData, instance.getDownloadDir())) { + if (Source.download(pluginData, instance.getDownloadDir())) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); processingData.getFuture().complete(true); @@ -115,7 +115,7 @@ private void processQueue() { processingData.getFuture().completeExceptionally(e); } - String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::getName).toList()); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::name).toList()); processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined sources: '%s'".formatted(pluginData.getPluginName(), sourceNames))); } } @@ -126,12 +126,12 @@ public void sendNotification(ProcessingData.State state) { } public static class ProcessingData { - private final UpdaterImpl instance; + private final UpdaterPlatform instance; private final String pluginName; private final State state; private final CompletableFuture future; - public ProcessingData(UpdaterImpl instance, String pluginName, State state) { + public ProcessingData(UpdaterPlatform instance, String pluginName, State state) { this.instance = instance; this.pluginName = pluginName; this.state = state; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/util/ConfigUtil.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/util/ConfigUtil.java new file mode 100644 index 0000000..c747043 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/util/ConfigUtil.java @@ -0,0 +1,45 @@ +package org.lushplugins.pluginupdater.common.util; + +import com.electronwill.nightconfig.core.Config; + +import java.util.function.Supplier; + +import static com.electronwill.nightconfig.core.NullObject.NULL_OBJECT; + +public class ConfigUtil { + + public static T getOrAlias(Config config, String path, String alternatePath) { + return config.getOrElse(path, () -> config.get(alternatePath)); + } + + public static T getOrAlias(Config config, String path, String alternatePath, Runnable ifAlias) { + return config.getOrElse(path, () -> config.getOrElse(alternatePath, () -> { + ifAlias.run(); + return null; + })); + } + + public static T getOrAliasOrElse(Config config, String path, String alternatePath, Supplier defaultValueSupplier) { + T value = getOrAlias(config, path, alternatePath); + return (value == null || value == NULL_OBJECT) ? defaultValueSupplier.get() : value; + } + + public static T getOrAliasOrElse(Config config, String path, String alternatePath, Supplier defaultValueSupplier, Runnable ifAlias) { + T value = getOrAlias(config, path, alternatePath, ifAlias); + return (value == null || value == NULL_OBJECT) ? defaultValueSupplier.get() : value; + } + + public static T getOrAliasOrElse(Config config, String path, String alternatePath, T defaultValue) { + T value = getOrAlias(config, path, alternatePath); + return (value == null || value == NULL_OBJECT) ? defaultValue : value; + } + + public static T getOrAliasOrElse(Config config, String path, String alternatePath, T defaultValue, Runnable ifAlias) { + T value = getOrAlias(config, path, alternatePath, ifAlias); + return (value == null || value == NULL_OBJECT) ? defaultValue : value; + } + + public static boolean isOfType(Config config, String path, Class type) { + return type.isInstance(config.get(path)); + } +} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java similarity index 93% rename from platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java index aef9be0..3b35e90 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterImpl.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java @@ -6,7 +6,7 @@ import org.jetbrains.annotations.Nullable; import org.lushplugins.chatcolorhandler.paper.PaperColor; import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.common.platform.UpdaterImpl; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; import revxrsal.commands.Lamp; @@ -20,10 +20,10 @@ import java.util.logging.Logger; import java.util.stream.Collectors; -public class PaperUpdaterImpl extends UpdaterImpl { +public class PaperUpdaterPlatform extends UpdaterPlatform { private final Plugin plugin; - public PaperUpdaterImpl(Plugin plugin) { + public PaperUpdaterPlatform(Plugin plugin) { super(); this.plugin = plugin; } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java index d78cfbe..7d3238e 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java @@ -9,29 +9,31 @@ public final class PluginUpdater extends JavaPlugin { private static PluginUpdater plugin; - private PaperUpdaterImpl updaterImpl; + private PaperUpdaterPlatform updater; @Override - public void onEnable() { + public void onLoad() { plugin = this; + } - DownloadLogger.setLogFile(new File(plugin.getDataFolder(), "downloads.log")); - - updaterImpl = new PaperUpdaterImpl(this); + @Override + public void onEnable() { + DownloadLogger.setLogFile(new File(getDataFolder(), "downloads.log")); + updater = new PaperUpdaterPlatform(this); getServer().getPluginManager().registerEvents(new PlayerListener(), this); } @Override public void onDisable() { - if (updaterImpl != null) { - updaterImpl.shutdown(); - updaterImpl = null; + if (updater != null) { + updater.shutdown(); + updater = null; } } - public PaperUpdaterImpl getUpdaterImpl() { - return updaterImpl; + public PaperUpdaterPlatform getUpdater() { + return updater; } public static PluginUpdater getInstance() { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index f0154a6..a42b196 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -2,7 +2,7 @@ import org.lushplugins.pluginupdater.paper.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.VersionChecker; +import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.bukkit.plugin.Plugin; @@ -17,7 +17,7 @@ public class PluginUpdaterAPI { * @param pluginData Relevant update data */ public static void addPlugin(String pluginName, PluginData pluginData) { - PluginUpdater.getInstance().getUpdaterImpl().getConfig().addPlugin(pluginName, pluginData); + PluginUpdater.getInstance().getUpdater().getConfig().addPlugin(pluginName, pluginData); } /** @@ -42,7 +42,7 @@ public static void removePlugin(Plugin plugin) { * @param pluginName Name of plugin to be removed */ public static void removePlugin(String pluginName) { - PluginUpdater.getInstance().getUpdaterImpl().getConfig().removePlugin(pluginName); + PluginUpdater.getInstance().getUpdater().getConfig().removePlugin(pluginName); } /** @@ -51,7 +51,7 @@ public static void removePlugin(String pluginName) { * @param sourceUpdater Constructor for updater * @param dataConstructor Constructor for source data */ - public static void registerSource(String source, Callable sourceUpdater, SourceRegistry.SourceDataConstructor dataConstructor) { + public static void registerSource(String source, Callable sourceUpdater, SourceRegistry.SourceDataConstructor dataConstructor) { SourceRegistry.register(source, sourceUpdater, dataConstructor); } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index 7133047..a1c8e9f 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -20,7 +20,7 @@ public class CommonPluginCollector implements PluginDataCollector { @Override public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); List pluginDataList = new ArrayList<>(); InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 3b5e0f5..601fea4 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -22,7 +22,7 @@ public class PluginYamlCollector implements PluginDataCollector { @Override public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); List pluginDataList = new ArrayList<>(); for (PluginInfo plugin : unknownPlugins) { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java index 9810da1..3d31193 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java @@ -17,7 +17,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); if (player.hasPermission("pluginupdater.notify")) { Bukkit.getScheduler().runTaskLaterAsynchronously(PluginUpdater.getInstance(), () -> { - ConfigManager configManager = PluginUpdater.getInstance().getUpdaterImpl().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); int updatesAvailable = 0; for (PluginData pluginData : configManager.getAllPluginData()) { From 0ae0dac45610ff3a0853e29d6043dc58544c55b2 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 22:39:15 +0300 Subject: [PATCH 17/57] Corrected naming of deserializer classes --- .../{ComparatorSerializer.java => ComparatorDeserializer.java} | 2 +- .../{PluginDataSerializer.java => PluginDataDeserializer.java} | 2 +- .../{SourceDataSerializer.java => SourceDataDeserializer.java} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/{ComparatorSerializer.java => ComparatorDeserializer.java} (96%) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/{PluginDataSerializer.java => PluginDataDeserializer.java} (87%) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/{SourceDataSerializer.java => SourceDataDeserializer.java} (97%) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java similarity index 96% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java index f13fad2..ff1dc6b 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java @@ -8,7 +8,7 @@ import java.time.format.DateTimeFormatter; import java.util.regex.Pattern; -public class ComparatorSerializer { +public class ComparatorDeserializer { public static BuildNumComparator buildNum(Config config) { Pattern pattern = config.contains("pattern") ? Pattern.compile(config.get("pattern")) : BuildNumComparator.DEFAULT_PATTERN; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java similarity index 87% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java index d170ccc..8f253f5 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java @@ -3,7 +3,7 @@ import com.electronwill.nightconfig.core.Config; import org.lushplugins.pluginupdater.api.updater.PluginData; -public class PluginDataSerializer { +public class PluginDataDeserializer { // TODO public static PluginData read(Config config) { diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java similarity index 97% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java index a641238..05310be 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataSerializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java @@ -10,7 +10,7 @@ import java.util.Collections; import java.util.List; -public class SourceDataSerializer { +public class SourceDataDeserializer { public static GithubSource.Data githubSourceData(Config config) { return new GithubSource.Data( From 404b219e2a5e3fea8e18020241e95ebeb17e7fc9 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 22:39:43 +0300 Subject: [PATCH 18/57] Continued progressing on platform refactor --- .../pluginupdater/api/source/SourceRegistry.java | 5 ----- .../pluginupdater/api/updater/Updater.java | 16 ++++++++-------- .../common/config/ComparatorRegistry.java | 8 ++++---- .../paper/api/PluginUpdaterAPI.java | 15 +++++++-------- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java index 6b0bea6..fb21120 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java @@ -46,9 +46,4 @@ public static void register(@NotNull String name, @NotNull Source source) { public static void unregister(String source) { sources.remove(source); } - - @FunctionalInterface - public interface SourceDataConstructor { - SourceData apply(Config config); - } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index 8c67e9d..ecc933d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -4,10 +4,10 @@ import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.listener.NotificationHandler; import org.lushplugins.pluginupdater.api.source.SourceData; -import org.lushplugins.pluginupdater.api.source.github.GithubData; -import org.lushplugins.pluginupdater.api.source.hangar.HangarData; -import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; +import org.lushplugins.pluginupdater.api.source.type.GithubSource; +import org.lushplugins.pluginupdater.api.source.type.HangarSource; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; +import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.util.DownloadLogger; import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -155,7 +155,7 @@ public Builder downloadDir(File downloadDir) { * @param token The GitHub access token (if required) */ public Builder github(String repo, @Nullable String token) { - return source(new GithubData(repo, token)); + return source(new GithubSource.Data(repo, token)); } /** @@ -173,7 +173,7 @@ public Builder github(String repo) { * @param projectSlug The plugin's hangar project slug. */ public Builder hangar(String projectSlug) { - return source(new HangarData(projectSlug)); + return source(new HangarSource.Data(projectSlug)); } /** @@ -182,7 +182,7 @@ public Builder hangar(String projectSlug) { * @param projectId The plugin's modrinth project id. */ public Builder modrinth(String projectId) { - return source(new ModrinthData(projectId)); + return source(new ModrinthSource.Data(projectId, ModrinthSource.ReleaseChannel.ALL)); } /** @@ -191,7 +191,7 @@ public Builder modrinth(String projectId) { * @param resourceId The plugin's spigot resource id. */ public Builder spigot(String resourceId) { - return source(new SpigotData(resourceId)); + return source(new SpigotSource.Data(resourceId)); } /** diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java index d421232..920e0c4 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -4,7 +4,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.common.config.serializer.ComparatorSerializer; +import org.lushplugins.pluginupdater.common.config.serializer.ComparatorDeserializer; import java.util.HashMap; import java.util.Map; @@ -14,9 +14,9 @@ public class ComparatorRegistry { private static final Map> comparators = new HashMap<>(); static { - register("build", ComparatorSerializer::buildNum); - register("cal-ver", ComparatorSerializer::calVer); - register("sem-ver", ComparatorSerializer::semVer); + register("build", ComparatorDeserializer::buildNum); + register("cal-ver", ComparatorDeserializer::calVer); + register("sem-ver", ComparatorDeserializer::semVer); } public static @Nullable VersionComparator readVersionComparator(String id, Config config) { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index a42b196..c4bc335 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -47,19 +47,18 @@ public static void removePlugin(String pluginName) { /** * Register support for a source - * @param source Name of source - * @param sourceUpdater Constructor for updater - * @param dataConstructor Constructor for source data + * @param name Name of source + * @param source Source to register */ - public static void registerSource(String source, Callable sourceUpdater, SourceRegistry.SourceDataConstructor dataConstructor) { - SourceRegistry.register(source, sourceUpdater, dataConstructor); + public static void registerSource(String name, Source source) { + SourceRegistry.register(name, source); } /** * Unregister support for a source - * @param source Name of source + * @param name Name of source */ - public static void unregisterSource(String source) { - SourceRegistry.unregister(source); + public static void unregisterSource(String name) { + SourceRegistry.unregister(name); } } From b25b866dc29781fc07795e2a7e3facb3584f43ab Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 22:40:12 +0300 Subject: [PATCH 19/57] Renamed serializer package to deserializer for clarity --- .../pluginupdater/common/config/ComparatorRegistry.java | 2 +- .../{serializer => deserializer}/ComparatorDeserializer.java | 2 +- .../{serializer => deserializer}/PluginDataDeserializer.java | 2 +- .../{serializer => deserializer}/SourceDataDeserializer.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/{serializer => deserializer}/ComparatorDeserializer.java (94%) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/{serializer => deserializer}/PluginDataDeserializer.java (78%) rename common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/{serializer => deserializer}/SourceDataDeserializer.java (96%) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java index 920e0c4..9ab045d 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -4,7 +4,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; -import org.lushplugins.pluginupdater.common.config.serializer.ComparatorDeserializer; +import org.lushplugins.pluginupdater.common.config.deserializer.ComparatorDeserializer; import java.util.HashMap; import java.util.Map; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/ComparatorDeserializer.java similarity index 94% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/ComparatorDeserializer.java index ff1dc6b..1b25e5c 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/ComparatorDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/ComparatorDeserializer.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.common.config.serializer; +package org.lushplugins.pluginupdater.common.config.deserializer; import com.electronwill.nightconfig.core.Config; import org.lushplugins.pluginupdater.api.version.comparator.BuildNumComparator; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java similarity index 78% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java index 8f253f5..a6a5554 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/PluginDataDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.common.config.serializer; +package org.lushplugins.pluginupdater.common.config.deserializer; import com.electronwill.nightconfig.core.Config; import org.lushplugins.pluginupdater.api.updater.PluginData; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java similarity index 96% rename from common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java index 05310be..068b8dd 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/serializer/SourceDataDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.common.config.serializer; +package org.lushplugins.pluginupdater.common.config.deserializer; import com.electronwill.nightconfig.core.Config; import org.lushplugins.pluginupdater.api.source.type.GithubSource; From 752ffc9724672ff756452f6ce2d24000184dc211 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 22:45:35 +0300 Subject: [PATCH 20/57] Cleaned up source name handling to lower chances of mismatched names --- .../pluginupdater/api/source/Source.java | 4 +++- .../pluginupdater/api/source/SourceData.java | 2 +- .../api/source/SourceRegistry.java | 23 ++++++------------- .../api/source/type/GithubSource.java | 10 ++++++-- .../api/source/type/HangarSource.java | 10 ++++++-- .../api/source/type/ModrinthSource.java | 10 ++++++-- .../api/source/type/SpigotSource.java | 10 ++++++-- .../common/updater/UpdateHandler.java | 4 ++-- 8 files changed, 45 insertions(+), 28 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java index 525e8aa..cf29f46 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java @@ -20,6 +20,8 @@ @SuppressWarnings("CodeBlock2Expr") public interface Source { + String getName(); + String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; String getDownloadUrl(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException; @@ -144,7 +146,7 @@ static boolean download(PluginData pluginData, File destinationDir) throws IOExc private static T attemptOnSources(PluginData pluginData, SourceSupplier callable) throws IOException { for (SourceData sourceData : pluginData.getSourceData()) { - Source source = SourceRegistry.getSource(sourceData.name()); + Source source = SourceRegistry.get(sourceData.sourceName()); if (source == null) { continue; } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java index 34b3887..c074a0d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceData.java @@ -5,7 +5,7 @@ public interface SourceData { - String name(); + String sourceName(); default VersionComparator getDefaultComparator() { return SemVerComparator.INSTANCE; diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java index fb21120..acc197f 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java @@ -14,28 +14,19 @@ public class SourceRegistry { private static final HashMap sources = new HashMap<>(); static { - register("github", new GithubSource()); - register("hangar", new HangarSource()); - register("modrinth", new ModrinthSource()); - register("spigot", new SpigotSource()); + register(new GithubSource()); + register(new HangarSource()); + register(new ModrinthSource()); + register(new SpigotSource()); } @Nullable - public static Source getSource(String name) { + public static Source get(String name) { return sources.get(name); } - @Nullable - public static SourceData getSourceData(String source, Config configurationSection) { - try { - return sources.containsKey(source) ? sources.get(source).sourceDataConstructor().apply(configurationSection) : null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public static void register(@NotNull String name, @NotNull Source source) { + public static void register(@NotNull Source source) { + String name = source.getName(); if (sources.containsKey(name)) { throw new IllegalStateException("A source with this name is already registered"); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java index f401e5a..c4346b1 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java @@ -19,6 +19,12 @@ import java.util.Map; public class GithubSource implements Source { + public static final String NAME = "github"; + + @Override + public String getName() { + return NAME; + } @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { @@ -89,8 +95,8 @@ private JsonObject getLatestRelease(PluginData pluginData, Data githubData) thro public record Data(String repo, @Nullable String token) implements SourceData { @Override - public String name() { - return "github"; + public String sourceName() { + return NAME; } } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java index 979865b..4024202 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/HangarSource.java @@ -10,6 +10,12 @@ import java.net.http.HttpResponse; public class HangarSource implements Source { + public static final String NAME = "hangar"; + + @Override + public String getName() { + return NAME; + } @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { @@ -47,8 +53,8 @@ public int getRateLimit() { public record Data(String projectSlug) implements SourceData { @Override - public String name() { - return "hangar"; + public String sourceName() { + return NAME; } } } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java index 8f62c3b..6d7bee3 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java @@ -17,6 +17,12 @@ import java.util.List; public class ModrinthSource implements Source { + public static final String NAME = "modrinth"; + + @Override + public String getName() { + return NAME; + } @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { @@ -88,8 +94,8 @@ public Data(String projectId, String releaseChannel) { } @Override - public String name() { - return "modrinth"; + public String sourceName() { + return NAME; } public boolean filtersReleaseChannel() { diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java index 127a761..c410d17 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/SpigotSource.java @@ -12,6 +12,12 @@ import java.net.http.HttpResponse; public class SpigotSource implements Source { + public static final String NAME = "spigot"; + + @Override + public String getName() { + return NAME; + } @Override public String getLatestVersion(PluginData pluginData, SourceData sourceData) throws IOException, InterruptedException { @@ -48,8 +54,8 @@ public int getRateLimit() { public record Data(String resourceId) implements SourceData { @Override - public String name() { - return "spigot"; + public String sourceName() { + return NAME; } } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index b59b893..646f25e 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -92,7 +92,7 @@ private void processQueue() { instance.getLogger().log(Level.SEVERE, e.getMessage(), e); } - String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::name).toList()); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::sourceName).toList()); processingData.getFuture().completeExceptionally(new IOException("Failed to run check for plugin '" + pluginData.getPluginName() + "' using defined sources: '" + sourceNames + "'")); } case DOWNLOAD -> { @@ -115,7 +115,7 @@ private void processQueue() { processingData.getFuture().completeExceptionally(e); } - String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::name).toList()); + String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::sourceName).toList()); processingData.getFuture().completeExceptionally(new IOException("Failed to download update for plugin '%s' using defined sources: '%s'".formatted(pluginData.getPluginName(), sourceNames))); } } From 1a5d8d85ecbb00c744813bea90fdf34ae17b367f Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:06:55 +0300 Subject: [PATCH 21/57] Added gson as a dependency --- common/api/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index 2f636c5..fa36b64 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -1,4 +1,5 @@ dependencies { + implementation("com.google.code.gson:gson:2.14.0") compileOnlyApi("org.jetbrains:annotations:26.1.0") } From 756ee3f5904ba07f7ad6ba776f9b1df4d9a218dc Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:08:19 +0300 Subject: [PATCH 22/57] Fixed typo --- .../lushplugins/pluginupdater/api/source/type/GithubSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java index c4346b1..d5d4de6 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/GithubSource.java @@ -45,7 +45,7 @@ public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throw JsonObject releaseJson = getLatestRelease(pluginData, githubData); JsonObject assetJson = releaseJson.get("assets").getAsJsonArray().get(0).getAsJsonObject(); - String token = githubData.getToken(); + String token = githubData.token(); if (token != null && !token.isEmpty()) { return assetJson.get("url").getAsString(); } From b2363602aeb226ec136acfcf42a306d1ef9dbd76 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:30:56 +0300 Subject: [PATCH 23/57] Improved workflows --- .github/actions/setup-gradle.yml | 19 +++++++ .github/workflows/build-platform.yml | 21 ++++++++ .github/workflows/pr-tests.yml | 75 ++++++---------------------- 3 files changed, 55 insertions(+), 60 deletions(-) create mode 100644 .github/actions/setup-gradle.yml create mode 100644 .github/workflows/build-platform.yml diff --git a/.github/actions/setup-gradle.yml b/.github/actions/setup-gradle.yml new file mode 100644 index 0000000..2ff7e35 --- /dev/null +++ b/.github/actions/setup-gradle.yml @@ -0,0 +1,19 @@ +name: Setup Gradle Environment +description: Checkout repository, setup Java and prepare Gradle + +runs: + using: composite + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + cache: 'gradle' + + - name: Prepare Gradle + shell : bash + run: chmod +x ./gradlew \ No newline at end of file diff --git a/.github/workflows/build-platform.yml b/.github/workflows/build-platform.yml new file mode 100644 index 0000000..ebd60f8 --- /dev/null +++ b/.github/workflows/build-platform.yml @@ -0,0 +1,21 @@ +name: Build Platform + +on: + workflow_call: + inputs: + gradle-tasks: + required: true + type: string + display-name: + required: true + type: string + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Setup Gradle Environment + uses: ./.github/actions/setup-gradle + + - name: ${{ inputs.display-name }} + run: ./gradlew ${{ inputs.gradle-tasks }} \ No newline at end of file diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 80715b5..ea7bcb1 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -9,69 +9,24 @@ on: jobs: build-common: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v2 + name: 'Build common modules' + uses: ./.github/workflows/build-platform.yml + with: + display-name: 'Build common modules' + gradle-tasks: 'common:api:build common:impl:build' - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: '21' - - - name: Prepare gradle - run: | - chmod +x ./gradlew - - - name: Build common:api - run: | - ./gradlew common:api:build - - - name: Build common:impl - run: | - ./gradlew common:impl:build build-paper: - runs-on: ubuntu-latest + name: 'Build Paper modules' needs: build-common - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: '21' - - - name: Prepare gradle - run: | - chmod +x ./gradlew + uses: ./.github/workflows/build-platform.yml + with: + display-name: 'Build Paper modules' + gradle-tasks: 'platform:paper:api:build platform:paper:plugin:build' - - name: Build paper:api - run: | - ./gradlew platform:paper:api:build - - - name: Build paper:plugin - run: | - ./gradlew platform:paper:plugin:build build-velocity: - runs-on: ubuntu-latest + name: 'Build Velocity modules' needs: build-common - steps: - - name: Checkout Repository - uses: actions/checkout@v2 - - - name: Setup Java - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: '21' - - - name: Prepare gradle - run: | - chmod +x ./gradlew - - - name: Build velocity:plugin - run: | - ./gradlew platform:velocity:plugin:build \ No newline at end of file + uses: ./.github/workflows/build-platform.yml + with: + display-name: 'Build Velocity modules' + gradle-tasks: 'platform:velocity:plugin:build' \ No newline at end of file From 2ff1c013a507a374db1af4bc2269889e686fd46f Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:32:44 +0300 Subject: [PATCH 24/57] Added missing file extension --- .github/workflows/build-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-platform.yml b/.github/workflows/build-platform.yml index ebd60f8..dca05d1 100644 --- a/.github/workflows/build-platform.yml +++ b/.github/workflows/build-platform.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Gradle Environment - uses: ./.github/actions/setup-gradle + uses: ./.github/actions/setup-gradle.yml - name: ${{ inputs.display-name }} run: ./gradlew ${{ inputs.gradle-tasks }} \ No newline at end of file From 8c4f2003b392272b0d24c12d7e02ab0c88f1d32d Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:33:53 +0300 Subject: [PATCH 25/57] Added missing checkout --- .github/workflows/build-platform.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-platform.yml b/.github/workflows/build-platform.yml index dca05d1..b4edc90 100644 --- a/.github/workflows/build-platform.yml +++ b/.github/workflows/build-platform.yml @@ -14,6 +14,9 @@ jobs: build: runs-on: ubuntu-latest steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Setup Gradle Environment uses: ./.github/actions/setup-gradle.yml From 89e784293f61a1afc1a6dd4ca7ed1bdb166e31e5 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:35:32 +0300 Subject: [PATCH 26/57] Adjusted workflows --- .github/actions/{setup-gradle.yml => setup-gradle/action.yml} | 0 .github/workflows/build-platform.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/actions/{setup-gradle.yml => setup-gradle/action.yml} (100%) diff --git a/.github/actions/setup-gradle.yml b/.github/actions/setup-gradle/action.yml similarity index 100% rename from .github/actions/setup-gradle.yml rename to .github/actions/setup-gradle/action.yml diff --git a/.github/workflows/build-platform.yml b/.github/workflows/build-platform.yml index b4edc90..c215a06 100644 --- a/.github/workflows/build-platform.yml +++ b/.github/workflows/build-platform.yml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v4 - name: Setup Gradle Environment - uses: ./.github/actions/setup-gradle.yml + uses: ./.github/actions/setup-gradle - name: ${{ inputs.display-name }} run: ./gradlew ${{ inputs.gradle-tasks }} \ No newline at end of file From e2cdc00116ab8eabfb07af328fc51750f8f964bd Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:38:33 +0300 Subject: [PATCH 27/57] Adjusted workflows --- .github/workflows/pr-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index ea7bcb1..1bddada 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -18,6 +18,7 @@ jobs: build-paper: name: 'Build Paper modules' needs: build-common + if: always() uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Paper modules' @@ -26,6 +27,7 @@ jobs: build-velocity: name: 'Build Velocity modules' needs: build-common + if: always() uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Velocity modules' From 90ad8360fc64d0fe131a33942dce5208f3ddf9cf Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:41:49 +0300 Subject: [PATCH 28/57] Adjusted workflows --- .github/workflows/pr-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 1bddada..0dc8648 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -22,7 +22,7 @@ jobs: uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Paper modules' - gradle-tasks: 'platform:paper:api:build platform:paper:plugin:build' + gradle-tasks: 'platform:paper-api:build platform:paper-plugin:build' build-velocity: name: 'Build Velocity modules' @@ -31,4 +31,4 @@ jobs: uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Velocity modules' - gradle-tasks: 'platform:velocity:plugin:build' \ No newline at end of file + gradle-tasks: 'platform:velocity-plugin:build' \ No newline at end of file From 83142ff5a133caa8d5cb11bff08012f963f07635 Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:42:53 +0300 Subject: [PATCH 29/57] Removed duplicate build tasks --- .github/workflows/pr-tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 0dc8648..3ee426a 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -13,7 +13,7 @@ jobs: uses: ./.github/workflows/build-platform.yml with: display-name: 'Build common modules' - gradle-tasks: 'common:api:build common:impl:build' + gradle-tasks: 'common:impl:build' build-paper: name: 'Build Paper modules' @@ -21,8 +21,8 @@ jobs: if: always() uses: ./.github/workflows/build-platform.yml with: - display-name: 'Build Paper modules' - gradle-tasks: 'platform:paper-api:build platform:paper-plugin:build' + display-name: 'Build Paper platform' + gradle-tasks: 'platform:paper-plugin:build' build-velocity: name: 'Build Velocity modules' @@ -30,5 +30,5 @@ jobs: if: always() uses: ./.github/workflows/build-platform.yml with: - display-name: 'Build Velocity modules' + display-name: 'Build Velocity platform' gradle-tasks: 'platform:velocity-plugin:build' \ No newline at end of file From 22fb4073d6d0692240c9e4d846144a535732f7eb Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:43:03 +0300 Subject: [PATCH 30/57] Removed duplicate build tasks --- .github/workflows/pr-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 3ee426a..a1e4fb6 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -12,7 +12,7 @@ jobs: name: 'Build common modules' uses: ./.github/workflows/build-platform.yml with: - display-name: 'Build common modules' + display-name: 'Build common' gradle-tasks: 'common:impl:build' build-paper: From 5c22f7528d2357b8d3d52c2ebc17ee68344db42d Mon Sep 17 00:00:00 2001 From: Oak Date: Sun, 3 May 2026 23:57:22 +0300 Subject: [PATCH 31/57] Cleaned up build scripts --- build.gradle.kts | 26 ----------------------- common/api/build.gradle.kts | 4 ++-- platform/build.gradle.kts | 4 ++-- platform/paper-plugin/build.gradle.kts | 4 ---- platform/velocity-plugin/build.gradle.kts | 3 +++ 5 files changed, 7 insertions(+), 34 deletions(-) create mode 100644 platform/velocity-plugin/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index fece3f1..ce0c12a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,3 @@ -import java.io.BufferedReader -import java.io.InputStreamReader - plugins { `java-library` `maven-publish` @@ -59,26 +56,3 @@ allprojects { } } } - -fun getCurrentCommitHash(): String { - val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD").start() - val reader = BufferedReader(InputStreamReader(process.inputStream)) - val commitHash = reader.readLine() - reader.close() - process.waitFor() - if (process.exitValue() == 0) { - return commitHash ?: "" - } else { - throw IllegalStateException("Failed to retrieve the commit hash.") - } -} - -fun getLastTag(): String { - return ProcessBuilder("git", "describe", "--tags", "--abbrev=0") - .start().inputStream.bufferedReader().readText().trim() -} - -fun getChangelogSinceLastTag(): String { - return ProcessBuilder("git", "log", "${getLastTag()}..HEAD", "--pretty=format:* %s ([#%h](https://github.com/OakLoaf/PluginUpdater/commit/%H))") - .start().inputStream.bufferedReader().readText().trim() -} diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index fa36b64..4244959 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -15,8 +15,8 @@ tasks { publishing { publications { create("maven") { - groupId = rootProject.group.toString() + ".pluginupdater" - artifactId = rootProject.name + "-API" + groupId = rootProject.group.toString() + "." + rootProject.name.lowercase() + artifactId = "common-api" version = rootProject.version.toString() from(project.components["java"]) } diff --git a/platform/build.gradle.kts b/platform/build.gradle.kts index c0108c6..04d0869 100644 --- a/platform/build.gradle.kts +++ b/platform/build.gradle.kts @@ -2,8 +2,8 @@ subprojects { publishing { publications { create("maven") { - groupId = rootProject.group.toString() - artifactId = rootProject.name + "-" + project.name + groupId = rootProject.group.toString() + "." + rootProject.name.lowercase() + artifactId = project.name version = rootProject.version.toString() from(project.components["java"]) } diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index 7601eb7..53a49b1 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -18,8 +18,6 @@ dependencies { tasks { processResources { - expand(project.properties) - inputs.property("version", rootProject.version) filesMatching("plugin.yml") { expand("version" to rootProject.version) @@ -27,8 +25,6 @@ tasks { } shadowJar { - relocate("org.lushplugins.lushlib", "org.lushplugins.pluginupdater.libraries.lushlib") - archiveFileName.set("${project.name}-${project.version}.jar") } diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts new file mode 100644 index 0000000..f0ed3eb --- /dev/null +++ b/platform/velocity-plugin/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + implementation(project(":common:impl")) +} \ No newline at end of file From c90c780162da08c31805cd35abf772fd6797a1ac Mon Sep 17 00:00:00 2001 From: Oak Date: Mon, 4 May 2026 00:13:21 +0300 Subject: [PATCH 32/57] Fixed compilation issues --- .../pluginupdater/api/updater/Updater.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index ecc933d..b0f8507 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -15,10 +15,14 @@ import java.io.File; import java.io.IOException; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; @SuppressWarnings("unused") public class Updater { + private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); private final PluginInfo plugin; private final PluginData pluginData; private final File downloadDir; @@ -31,6 +35,10 @@ private Updater(@NotNull PluginInfo plugin, @NotNull PluginData pluginData, File this.notificationHandler = notify ? new NotificationHandler(this, notificationPermission, notificationMessage) : null; } + public ScheduledExecutorService getScheduler() { + return scheduler; + } + public PluginInfo getPluginInfo() { return plugin; } @@ -66,18 +74,14 @@ public boolean isAlreadyDownloaded() { * @return A future containing whether an update is available. */ public CompletableFuture checkForUpdate() { - CompletableFuture future = new CompletableFuture<>(); - - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + return CompletableFuture.supplyAsync(() -> { try { - future.complete(Source.isUpdateAvailable(pluginData)); + return Source.isUpdateAvailable(pluginData); } catch (IOException e) { plugin.getLogger().log(Level.SEVERE, e.getMessage(), e); - future.complete(false); + return false; } }); - - return future; } /** @@ -103,24 +107,24 @@ public CompletableFuture forceDownload() { } private CompletableFuture download() { - CompletableFuture completableFuture = new CompletableFuture<>(); - - Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + return CompletableFuture.supplyAsync(() -> { try { if (Source.download(pluginData, downloadDir)) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); - completableFuture.complete(true); + return true; } else { - completableFuture.complete(false); + return false; } - } catch (Exception e) { - e.printStackTrace(); - completableFuture.completeExceptionally(e); + } catch (IOException e) { + plugin.getLogger().log(Level.SEVERE, e.getMessage(), e); + return false; } }); + } - return completableFuture; + public void shutdown() { + scheduler.shutdown(); } public static Builder builder(PluginInfo plugin, File downloadDir) { @@ -263,7 +267,7 @@ public Updater build() { Updater updater = new Updater(plugin, pluginData, downloadDir, notify, notificationPermission, notificationMessage); if (checkFrequency > 0) { - Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, updater::checkForUpdate, 0, checkFrequency * 20); + updater.getScheduler().scheduleAtFixedRate(updater::checkForUpdate, 0, checkFrequency, TimeUnit.SECONDS); } return updater; From 105cd96fecf26795c6440175fee1910bd8de3bc6 Mon Sep 17 00:00:00 2001 From: Oak Date: Mon, 4 May 2026 00:39:54 +0300 Subject: [PATCH 33/57] Fixed compilation issues --- .../api/listener/NotificationHandler.java | 39 ---------------- .../api/listener/UpdateNotifier.java | 40 +++++++++++++++++ .../pluginupdater/api/updater/Updater.java | 45 +++++++++++++++---- .../pluginupdater/paper/api/PaperUpdater.java | 4 +- .../api/notification/PaperUpdateNotifier.java | 37 +++++++++++++++ 5 files changed, 116 insertions(+), 49 deletions(-) delete mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java create mode 100644 common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/UpdateNotifier.java create mode 100644 platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java deleted file mode 100644 index 275d860..0000000 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/NotificationHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.lushplugins.pluginupdater.api.listener; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.lushplugins.chatcolorhandler.paper.PaperColor; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.updater.Updater; - -public class NotificationHandler implements Listener { - private final Updater updater; - private final String notificationPermission; - private final String notificationMessage; - - public NotificationHandler(Updater updater, String notificationPermission, String notificationMessage) { - this.updater = updater; - this.notificationPermission = notificationPermission; - this.notificationMessage = notificationMessage; - - updater.getPluginInfo().getServer().getPluginManager().registerEvents(this, updater.getPluginInfo()); - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - Player player = event.getPlayer(); - if (notificationPermission == null || player.hasPermission(notificationPermission)) { - PluginData pluginData = updater.getPluginData(); - if (pluginData.isUpdateAvailable() && !pluginData.isAlreadyDownloaded()) { - Bukkit.getScheduler().runTaskLaterAsynchronously(updater.getPluginInfo(), () -> PaperColor.handler().sendMessage(player, notificationMessage - .replace("%plugin%", pluginData.getPluginName()) - .replace("%current_version%", pluginData.getCurrentVersion()) - .replace("%latest_version%", pluginData.getLatestVersion()) - ), 40); - } - } - } -} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/UpdateNotifier.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/UpdateNotifier.java new file mode 100644 index 0000000..aa4cb1f --- /dev/null +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/listener/UpdateNotifier.java @@ -0,0 +1,40 @@ +package org.lushplugins.pluginupdater.api.listener; + +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.Updater; + +import java.util.concurrent.TimeUnit; + +public abstract class UpdateNotifier { + private final Updater updater; + private final String message; + private final String permission; + + public UpdateNotifier(Updater updater, String message, String permission) { + this.updater = updater; + this.message = message; + this.permission = permission; + } + + public abstract boolean hasPermission(T user, String permission); + + public abstract void sendMessage(T user, String message); + + public void handle(T user) { + if (permission == null || hasPermission(user, permission)) { + PluginData pluginData = updater.getPluginData(); + if (pluginData.isUpdateAvailable() && !pluginData.isAlreadyDownloaded()) { + String message = this.message + .replace("%plugin%", pluginData.getPluginName()) + .replace("%current_version%", pluginData.getCurrentVersion()) + .replace("%latest_version%", pluginData.getLatestVersion()); + + updater.getScheduler().schedule(() -> sendMessage(user, message), 3, TimeUnit.SECONDS); + } + } + } + + public interface Constructor { + UpdateNotifier apply(Updater updater, String permission, String message); + } +} diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java index b0f8507..3c7d14d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/Updater.java @@ -2,7 +2,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.listener.NotificationHandler; +import org.lushplugins.pluginupdater.api.listener.UpdateNotifier; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.source.type.GithubSource; import org.lushplugins.pluginupdater.api.source.type.HangarSource; @@ -26,13 +26,21 @@ public class Updater { private final PluginInfo plugin; private final PluginData pluginData; private final File downloadDir; - private final NotificationHandler notificationHandler; - - private Updater(@NotNull PluginInfo plugin, @NotNull PluginData pluginData, File downloadDir, boolean notify, String notificationPermission, String notificationMessage) { + private final UpdateNotifier notifier; + + private Updater( + @NotNull PluginInfo plugin, + @NotNull PluginData pluginData, + File downloadDir, + boolean notify, + String notificationPermission, + String notificationMessage, + UpdateNotifier.Constructor notifierConstructor + ) { this.plugin = plugin; this.pluginData = pluginData; this.downloadDir = downloadDir; - this.notificationHandler = notify ? new NotificationHandler(this, notificationPermission, notificationMessage) : null; + this.notifier = notify ? notifierConstructor.apply(this, notificationMessage, notificationPermission) : null; } public ScheduledExecutorService getScheduler() { @@ -51,8 +59,8 @@ public File getDownloadDir() { return downloadDir; } - public NotificationHandler getNotificationHandler() { - return notificationHandler; + public UpdateNotifier getNotifier() { + return notifier; } /** @@ -139,6 +147,7 @@ public static class Builder { private boolean notify = true; private String notificationPermission = "pluginupdater.notifications"; private String notificationMessage = "&#ffe27aA new &#e0c01b%plugin% &#ffe27aupdate is now available! &#e0c01b%current_version% &#ffe27a-> &#e0c01b%latest_version%"; + private UpdateNotifier.Constructor notifierConstructor; private File downloadLogFile; private Builder(PluginInfo plugin, File downloadDir) { @@ -229,7 +238,7 @@ public Builder notify(boolean shouldSend) { /** * Sets the required permission for players to receive update notifications * @param permission The permission that players need to receive notifications. - * Defaults to 'pluginupdater.notifications'. + * Defaults to {@code pluginupdater.notifications} */ public Builder notificationPermission(@Nullable String permission) { this.notificationPermission = permission; @@ -245,6 +254,16 @@ public Builder notificationMessage(@NotNull String message) { return this; } + /** + * Sets the notification handler constructor, this is mainly to + * allow for supporting multiple different platforms + * @param notifierConstructor The notification handler constructor + */ + public Builder notifier(@NotNull UpdateNotifier.Constructor notifierConstructor) { + this.notifierConstructor = notifierConstructor; + return this; + } + /** * Sets the log file to log downloads in * @param logFile The log file. Defaults to null. @@ -264,7 +283,15 @@ public Updater build() { } DownloadLogger.setLogFile(downloadLogFile); - Updater updater = new Updater(plugin, pluginData, downloadDir, notify, notificationPermission, notificationMessage); + Updater updater = new Updater( + plugin, + pluginData, + downloadDir, + notify, + notificationPermission, + notificationMessage, + notifierConstructor + ); if (checkFrequency > 0) { updater.getScheduler().scheduleAtFixedRate(updater::checkForUpdate, 0, checkFrequency, TimeUnit.SECONDS); diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java index ef61817..3d957da 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java @@ -3,11 +3,13 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.paper.api.notification.PaperUpdateNotifier; import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; public class PaperUpdater { public static Updater.Builder builder(Plugin plugin) { - return Updater.builder(new PaperPluginInfo(plugin), Bukkit.getUpdateFolderFile()); + return Updater.builder(new PaperPluginInfo(plugin), Bukkit.getUpdateFolderFile()) + .notifier(PaperUpdateNotifier::new); } } diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java new file mode 100644 index 0000000..c3b787e --- /dev/null +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java @@ -0,0 +1,37 @@ +package org.lushplugins.pluginupdater.paper.api.notification; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.plugin.Plugin; +import org.lushplugins.pluginupdater.api.listener.UpdateNotifier; +import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; + +public class PaperUpdateNotifier extends UpdateNotifier implements Listener { + + public PaperUpdateNotifier(Updater updater, String message, String permission) { + super(updater, message, permission); + + Plugin plugin = ((PaperPluginInfo) updater.getPluginInfo()).plugin(); + Bukkit.getPluginManager().registerEvents(this, plugin); + } + + @Override + public boolean hasPermission(Player user, String permission) { + return user.hasPermission(permission); + } + + @Override + public void sendMessage(Player user, String message) { + // TODO: Add colour support + user.sendMessage(message); + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + handle(event.getPlayer()); + } +} From ec9ed061c00a4b42153ea7160dfef1e2e865a763 Mon Sep 17 00:00:00 2001 From: Oak Date: Mon, 4 May 2026 00:56:36 +0300 Subject: [PATCH 34/57] Fixed compilation issues --- .../common/config/ConfigManager.java | 12 +++--------- .../deserializer/SourceDataDeserializer.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 1af9afe..c86a9d1 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -5,10 +5,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.source.SourceData; -import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.config.deserializer.SourceDataDeserializer; import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.common.util.ConfigUtil; @@ -25,7 +25,7 @@ public class ConfigManager { public ConfigManager(UpdaterPlatform instance) { this.instance = instance; - PluginUpdater.getInstance().saveDefaultConfig(); + // TODO: Save default config if not there } public void reloadConfig() { @@ -59,12 +59,6 @@ public void reloadConfig() { return; } - String source = ConfigUtil.getOrAlias(config, "source", "platform", - () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'")); - if (source == null) { - return; - } - PluginInfo currPlugin = instance.getPlugin(pluginName); if (currPlugin == null) { return; @@ -81,7 +75,7 @@ public void reloadConfig() { boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); try { - SourceData sourceData = SourceRegistry.getSourceData(source, pluginConfig); + SourceData sourceData = SourceDataDeserializer.deserialize(instance, pluginConfig); if (sourceData != null) { addPlugin(pluginName, PluginData.builder(currPlugin) .sourceData(sourceData) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java index 068b8dd..51538fc 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java @@ -1,17 +1,33 @@ package org.lushplugins.pluginupdater.common.config.deserializer; import com.electronwill.nightconfig.core.Config; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.source.type.GithubSource; import org.lushplugins.pluginupdater.api.source.type.HangarSource; import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.source.type.SpigotSource; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.util.ConfigUtil; import java.util.Collections; import java.util.List; +import java.util.logging.Level; public class SourceDataDeserializer { + public static SourceData deserialize(UpdaterPlatform instance, Config config) { + String source = ConfigUtil.getOrAlias(config, "source", "platform", + () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'")); + + return switch (source) { + case GithubSource.NAME -> githubSourceData(config); + case HangarSource.NAME -> hangarSourceData(config); + case ModrinthSource.NAME -> modrinthSourceData(config); + case SpigotSource.NAME -> spigotSourceData(config); + default -> null; + }; + } + public static GithubSource.Data githubSourceData(Config config) { return new GithubSource.Data( config.get("github-repo"), From 4470249077a57bf25a45f8a31e1d31457581cdb0 Mon Sep 17 00:00:00 2001 From: Oak Date: Mon, 4 May 2026 01:04:23 +0300 Subject: [PATCH 35/57] Fixed compilation issues --- .../paper/api/PluginUpdaterAPI.java | 7 ++----- .../paper/collector/ModrinthCollector.java | 4 ++-- .../paper/collector/PluginYamlCollector.java | 19 ++++++++++--------- .../paper/collector/SpigotCollector.java | 4 ++-- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java index c4bc335..5bcc0c3 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java @@ -6,8 +6,6 @@ import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.bukkit.plugin.Plugin; -import java.util.concurrent.Callable; - @SuppressWarnings("unused") public class PluginUpdaterAPI { @@ -47,11 +45,10 @@ public static void removePlugin(String pluginName) { /** * Register support for a source - * @param name Name of source * @param source Source to register */ - public static void registerSource(String name, Source source) { - SourceRegistry.register(name, source); + public static void registerSource(Source source) { + SourceRegistry.register(source); } /** diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java index ee13b7b..527e3b0 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java @@ -5,10 +5,10 @@ import com.google.common.io.Files; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -71,7 +71,7 @@ public List collectPluginData(Collection unknownPlugins) String projectId = versionJson.get("project_id").getAsString(); pluginDataList.add(PluginData.builder(plugin) - .sourceData(new ModrinthData(projectId)) + .sourceData(new ModrinthSource.Data(projectId, ModrinthSource.ReleaseChannel.ALL)) .build()); }); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 601fea4..c014a9c 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -1,14 +1,14 @@ package org.lushplugins.pluginupdater.paper.collector; import org.bukkit.configuration.file.YamlConfiguration; +import org.lushplugins.pluginupdater.api.source.type.GithubSource; +import org.lushplugins.pluginupdater.api.source.type.HangarSource; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; +import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; import org.lushplugins.pluginupdater.api.source.SourceData; -import org.lushplugins.pluginupdater.api.source.github.GithubData; -import org.lushplugins.pluginupdater.api.source.hangar.HangarData; -import org.lushplugins.pluginupdater.api.source.modrinth.ModrinthData; -import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -37,22 +37,23 @@ public List collectPluginData(Collection unknownPlugins) SourceData sourceData = null; if (pluginYml.contains("modrinth-project-id")) { - sourceData = new ModrinthData( - pluginYml.getString("modrinth-project-id") + sourceData = new ModrinthSource.Data( + pluginYml.getString("modrinth-project-id"), + ModrinthSource.ReleaseChannel.ALL ); } else if (pluginYml.contains("spigot-resource-id")) { - sourceData = new SpigotData( + sourceData = new SpigotSource.Data( pluginYml.getString("spigot-resource-id") ); } else if (pluginYml.contains("hangar-project-slug")) { - sourceData = new HangarData( + sourceData = new HangarSource.Data( pluginYml.getString("hangar-project-slug") ); } else if (pluginYml.contains("github-repo")) { - sourceData = new GithubData( + sourceData = new GithubSource.Data( pluginYml.getString("github-repo"), null ); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index 3a12243..6ad991e 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -4,10 +4,10 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.source.spigot.SpigotData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -59,7 +59,7 @@ public List collectPluginData(Collection unknownPlugins) JsonObject resultJson = resultsJson.get(0).getAsJsonObject(); return PluginData.builder(unknownPlugin) - .sourceData(new SpigotData(resultJson.get("id").getAsString())) + .sourceData(new SpigotSource.Data(resultJson.get("id").getAsString())) .blockDownloads() .build(); } From 5b54bc424409aa5195940d07c8d491aebe42e68c Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 00:17:33 +0300 Subject: [PATCH 36/57] Improved build scripts --- build-logic/build.gradle.kts | 7 ++++ build-logic/src/main/kotlin/extensions.kt | 26 ++++++++++++++ .../kotlin/updater.build-logic.gradle.kts | 0 build.gradle.kts | 14 +++----- common/api/build.gradle.kts | 22 +++++++----- .../pluginupdater/util/BuildParameters.java | 5 +++ .../pluginupdater/api/source/Source.java | 3 +- .../pluginupdater/api/util/HttpUtil.java | 3 +- .../api/util/UpdaterConstants.java | 15 -------- .../src/main/resources/settings.properties | 1 - .../paper/api/plugin/PaperPluginInfo.java | 4 +-- platform/paper-plugin/build.gradle.kts | 36 +++---------------- platform/velocity-api/build.gradle.kts | 4 +++ platform/velocity-plugin/build.gradle.kts | 10 ++++++ settings.gradle.kts | 22 ++++++++++++ 15 files changed, 103 insertions(+), 69 deletions(-) create mode 100644 build-logic/build.gradle.kts create mode 100644 build-logic/src/main/kotlin/extensions.kt create mode 100644 build-logic/src/main/kotlin/updater.build-logic.gradle.kts create mode 100644 common/api/src/main/java-templates/org/lushplugins/pluginupdater/util/BuildParameters.java delete mode 100644 common/api/src/main/resources/settings.properties create mode 100644 platform/velocity-api/build.gradle.kts diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 0000000..cc02e63 --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() +} diff --git a/build-logic/src/main/kotlin/extensions.kt b/build-logic/src/main/kotlin/extensions.kt new file mode 100644 index 0000000..5439895 --- /dev/null +++ b/build-logic/src/main/kotlin/extensions.kt @@ -0,0 +1,26 @@ +import org.gradle.api.Project +import java.io.BufferedReader +import java.io.InputStreamReader + +fun Project.getCurrentCommitHash(): String { + val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD").start() + val reader = BufferedReader(InputStreamReader(process.inputStream)) + val commitHash = reader.readLine() + reader.close() + process.waitFor() + if (process.exitValue() == 0) { + return commitHash ?: "" + } else { + throw IllegalStateException("Failed to retrieve the commit hash.") + } +} + +fun Project.getLastTag(): String { + return ProcessBuilder("git", "describe", "--tags", "--abbrev=0") + .start().inputStream.bufferedReader().readText().trim() +} + +fun Project.getChangelogSinceLastTag(): String { + return ProcessBuilder("git", "log", "${getLastTag()}..HEAD", "--pretty=format:* %s ([#%h](https://github.com/OakLoaf/PluginUpdater/commit/%H))") + .start().inputStream.bufferedReader().readText().trim() +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/updater.build-logic.gradle.kts b/build-logic/src/main/kotlin/updater.build-logic.gradle.kts new file mode 100644 index 0000000..e69de29 diff --git a/build.gradle.kts b/build.gradle.kts index ce0c12a..5af7bef 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,25 +1,19 @@ plugins { `java-library` `maven-publish` + id("updater.build-logic") } group = "org.lushplugins" version = "2.2.0" allprojects { - apply(plugin = "java-library") - apply(plugin = "maven-publish") + plugins.apply("java-library") + plugins.apply("maven-publish") group = rootProject.group version = rootProject.version - repositories { - mavenLocal() - mavenCentral() - maven("https://repo.papermc.io/repository/maven-public/") // Paper - maven("https://repo.lushplugins.org/snapshots") // ChatColorHandler - } - java { toolchain.languageVersion.set(JavaLanguageVersion.of(21)) @@ -55,4 +49,4 @@ allprojects { } } } -} +} \ No newline at end of file diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index 4244959..c83a5aa 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -1,17 +1,23 @@ -dependencies { - implementation("com.google.code.gson:gson:2.14.0") - compileOnlyApi("org.jetbrains:annotations:26.1.0") +plugins { + id("net.kyori.blossom") + id("org.jetbrains.gradle.plugin.idea-ext") } -tasks { - processResources{ - inputs.property("version", rootProject.version) - filesMatching("settings.properties") { - expand("version" to rootProject.version) +sourceSets { + main { + blossom { + javaSources { + property("version", project.version.toString()) + } } } } +dependencies { + implementation("com.google.code.gson:gson:2.14.0") + compileOnlyApi("org.jetbrains:annotations:26.1.0") +} + publishing { publications { create("maven") { diff --git a/common/api/src/main/java-templates/org/lushplugins/pluginupdater/util/BuildParameters.java b/common/api/src/main/java-templates/org/lushplugins/pluginupdater/util/BuildParameters.java new file mode 100644 index 0000000..c9cc1e8 --- /dev/null +++ b/common/api/src/main/java-templates/org/lushplugins/pluginupdater/util/BuildParameters.java @@ -0,0 +1,5 @@ +package org.lushplugins.pluginupdater.util; + +public class BuildParameters { + public static final String VERSION = "{{ version }}"; +} \ No newline at end of file diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java index cf29f46..fe81b92 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java @@ -6,6 +6,7 @@ import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.util.BuildParameters; import java.io.*; import java.net.HttpURLConnection; @@ -64,7 +65,7 @@ default boolean download(PluginData pluginData, SourceData sourceData, File dest URL url = URI.create(downloadUrl).toURL(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.addRequestProperty("User-Agent", "PluginUpdater/" + UpdaterConstants.VERSION); + connection.addRequestProperty("User-Agent", "PluginUpdater/" + BuildParameters.VERSION); for (Map.Entry header : getDownloadHeaders(pluginData, sourceData).entrySet()) { connection.addRequestProperty(header.getKey(), header.getValue()); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java index 2290b95..6b23f8d 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/HttpUtil.java @@ -2,6 +2,7 @@ import com.google.gson.JsonElement; import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.util.BuildParameters; import java.io.IOException; import java.net.URI; @@ -27,7 +28,7 @@ public static HttpResponse sendRequest(URI uri, @Nullable String payload public static HttpRequest.Builder prepareRequestBuilder(URI uri, @Nullable String payload) { HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(uri) - .header("User-Agent", "PluginUpdater/" + UpdaterConstants.VERSION); + .header("User-Agent", "PluginUpdater/" + BuildParameters.VERSION); if (payload != null) { requestBuilder diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java index 8755c21..e23405c 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/util/UpdaterConstants.java @@ -2,27 +2,12 @@ import com.google.gson.Gson; -import java.io.*; -import java.util.Properties; -import java.util.logging.Level; import java.util.logging.Logger; public class UpdaterConstants { - public static final String VERSION; public static final Logger LOGGER = Logger.getLogger("PluginUpdater"); public static final Gson GSON = new Gson(); - static { - Properties properties = new Properties(); - try (InputStream inputStream = UpdaterConstants.class.getClassLoader().getResourceAsStream("settings.properties")) { - properties.load(inputStream); - VERSION = properties.getProperty("version"); - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Failed to access properties file"); - throw new IllegalStateException("Failed to access 'settings.properties' resource."); - } - } - public static class Endpoint { public static final String MODRINTH = "https://api.modrinth.com/v2"; public static final String SPIGET = "https://api.spiget.org/v2"; diff --git a/common/api/src/main/resources/settings.properties b/common/api/src/main/resources/settings.properties deleted file mode 100644 index 046a90f..0000000 --- a/common/api/src/main/resources/settings.properties +++ /dev/null @@ -1 +0,0 @@ -version='${version}' \ No newline at end of file diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java index bdfe76c..404d533 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java @@ -3,6 +3,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -11,7 +12,6 @@ import java.util.logging.Logger; public record PaperPluginInfo(Plugin plugin) implements PluginInfo { - private static final Logger LOGGER = Logger.getLogger("PluginUpdater"); @Override public String getName() { @@ -31,7 +31,7 @@ public File getFile() { return (File) method.invoke(plugin); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - LOGGER.log(Level.WARNING, "[PluginUpdater] Caught error whilst getting plugin file: ", e); + UpdaterConstants.LOGGER.log(Level.WARNING, "[PluginUpdater] Caught error whilst getting plugin file: ", e); return null; } } diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index 53a49b1..5be8d94 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -1,10 +1,7 @@ -import java.io.BufferedReader -import java.io.InputStreamReader - plugins { - id("com.gradleup.shadow") version("9.3.1") - id("com.modrinth.minotaur") version ("2.+") - id("xyz.jpenilla.run-paper") version ("3.0.2") + id("com.gradleup.shadow") + id("com.modrinth.minotaur") + id("xyz.jpenilla.run-paper") } dependencies { @@ -50,9 +47,9 @@ modrinth { projectId.set("IBSpJfbm") if (System.getenv("RELEASE_TYPE") == "release") { versionNumber.set(rootProject.version.toString()) - changelog.set(getChangelogSinceLastTag()) + changelog.set(rootProject.getChangelogSinceLastTag()) } else { - versionNumber.set("${rootProject.version}-${getCurrentCommitHash()}") + versionNumber.set("${rootProject.version}-${rootProject.getCurrentCommitHash()}") } uploadFile.set(file("build/libs/${project.name}-${project.version}.jar")) versionType.set(System.getenv("RELEASE_TYPE")) @@ -67,27 +64,4 @@ modrinth { tasks.modrinth { dependsOn("shadowJar") dependsOn(tasks.modrinthSyncBody) -} - -fun getCurrentCommitHash(): String { - val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD").start() - val reader = BufferedReader(InputStreamReader(process.inputStream)) - val commitHash = reader.readLine() - reader.close() - process.waitFor() - if (process.exitValue() == 0) { - return commitHash ?: "" - } else { - throw IllegalStateException("Failed to retrieve the commit hash.") - } -} - -fun getLastTag(): String { - return ProcessBuilder("git", "describe", "--tags", "--abbrev=0") - .start().inputStream.bufferedReader().readText().trim() -} - -fun getChangelogSinceLastTag(): String { - return ProcessBuilder("git", "log", "${getLastTag()}..HEAD", "--pretty=format:* %s ([#%h](https://github.com/OakLoaf/PluginUpdater/commit/%H))") - .start().inputStream.bufferedReader().readText().trim() } \ No newline at end of file diff --git a/platform/velocity-api/build.gradle.kts b/platform/velocity-api/build.gradle.kts new file mode 100644 index 0000000..5ae1e83 --- /dev/null +++ b/platform/velocity-api/build.gradle.kts @@ -0,0 +1,4 @@ +dependencies { + compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") + compileOnly(project(":common:api")) +} \ No newline at end of file diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index f0ed3eb..d6c0156 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -1,3 +1,13 @@ +plugins { + id("com.gradleup.shadow") + id("com.modrinth.minotaur") + id("xyz.jpenilla.run-paper") +} + dependencies { + compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") + implementation(project(":common:impl")) + implementation(project(":platform:velocity-api")) + implementation("io.github.revxrsal:lamp.velocity:4.0.0-rc.16") } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 81ad69d..a5e87d4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,28 @@ +dependencyResolutionManagement { + repositories { + maven("https://repo.papermc.io/repository/maven-public/") // Paper, Velocity + maven("https://repo.lushplugins.org/snapshots") // ChatColorHandler + mavenCentral() + } +} + +pluginManagement { + plugins { + id("com.gradleup.shadow") version "9.4.1" + id("net.kyori.blossom") version "2.2.0" + id("org.jetbrains.gradle.plugin.idea-ext") version "1.4.1" + id("com.modrinth.minotaur") version "2.+" + id("xyz.jpenilla.run-paper") version "3.0.2" + } +} + rootProject.name = "PluginUpdater" + +includeBuild("build-logic") + include("common:api") include("common:impl") include("platform:paper-api") include("platform:paper-plugin") +include("platform:velocity-api") include("platform:velocity-plugin") \ No newline at end of file From e9c2805af0304c797c1b3bb6a8c323d58189b918 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 01:09:37 +0300 Subject: [PATCH 37/57] Migrated static plugin API to accessible object via main plugin class --- .../common/platform/UpdaterAPI.java | 46 ++++++++++++++ .../common/platform/UpdaterPlatform.java | 13 ++-- .../api/notification/PaperUpdateNotifier.java | 4 +- .../pluginupdater/paper/PluginUpdater.java | 11 +++- .../paper/api/PaperUpdaterAPI.java | 30 +++++++++ .../paper/api/PluginUpdaterAPI.java | 61 ------------------- .../collector/CommonPluginCollector.java | 2 +- .../paper/collector/PluginYamlCollector.java | 2 +- .../paper/listener/PlayerListener.java | 2 +- 9 files changed, 99 insertions(+), 72 deletions(-) create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java create mode 100644 platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java delete mode 100644 platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java new file mode 100644 index 0000000..d3f54d1 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java @@ -0,0 +1,46 @@ +package org.lushplugins.pluginupdater.common.platform; + +import org.lushplugins.pluginupdater.api.source.Source; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginData; + +public class UpdaterAPI { + private final UpdaterPlatform updater; + + public UpdaterAPI(UpdaterPlatform updater) { + this.updater = updater; + } + + /** + * Make a plugin available to be checked/downloaded + * @param pluginName Name of plugin to be added + * @param pluginData Relevant update data + */ + public void addPlugin(String pluginName, PluginData pluginData) { + updater.getConfig().addPlugin(pluginName, pluginData); + } + + /** + * Stop a plugin from being checked/downloaded + * @param pluginName Name of plugin to be removed + */ + public void removePlugin(String pluginName) { + updater.getConfig().removePlugin(pluginName); + } + + /** + * Register support for a source + * @param source Source to register + */ + public void registerSource(Source source) { + SourceRegistry.register(source); + } + + /** + * Unregister support for a source + * @param name Name of source + */ + public void unregisterSource(String name) { + SourceRegistry.unregister(name); + } +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java index ddb9a28..6690563 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java @@ -40,11 +40,8 @@ public UpdaterPlatform() { }) .responseHandler(String.class, new StringMessageResponseHandler()) .build(); - lamp.register(new UpdaterCommand(this), new UpdatesCommand(this)); - if (config.shouldAllowDownloads()) { - lamp.register(new UpdateCommand(this)); - } + registerLampCommands(lamp); } public void shutdown() { @@ -75,6 +72,14 @@ public void reloadConfig() { public abstract Lamp.Builder prepareLamp(); + public void registerLampCommands(Lamp lamp) { + lamp.register(new UpdaterCommand(this), new UpdatesCommand(this)); + + if (config.shouldAllowDownloads()) { + lamp.register(new UpdateCommand(this)); + } + } + public abstract boolean hasPermission(CommandActor actor, String permission); public abstract void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java index c3b787e..b6ec8cd 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/notification/PaperUpdateNotifier.java @@ -1,5 +1,6 @@ package org.lushplugins.pluginupdater.paper.api.notification; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -26,8 +27,7 @@ public boolean hasPermission(Player user, String permission) { @Override public void sendMessage(Player user, String message) { - // TODO: Add colour support - user.sendMessage(message); + user.sendMessage(MiniMessage.miniMessage().deserialize(message)); } @EventHandler diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java index 7d3238e..80e1e75 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java @@ -1,6 +1,7 @@ package org.lushplugins.pluginupdater.paper; import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.paper.api.PaperUpdaterAPI; import org.lushplugins.pluginupdater.paper.listener.PlayerListener; import org.bukkit.plugin.java.JavaPlugin; @@ -10,6 +11,7 @@ public final class PluginUpdater extends JavaPlugin { private static PluginUpdater plugin; private PaperUpdaterPlatform updater; + private PaperUpdaterAPI api; @Override public void onLoad() { @@ -19,7 +21,8 @@ public void onLoad() { @Override public void onEnable() { DownloadLogger.setLogFile(new File(getDataFolder(), "downloads.log")); - updater = new PaperUpdaterPlatform(this); + this.updater = new PaperUpdaterPlatform(this); + this.api = new PaperUpdaterAPI(updater); getServer().getPluginManager().registerEvents(new PlayerListener(), this); } @@ -32,10 +35,14 @@ public void onDisable() { } } - public PaperUpdaterPlatform getUpdater() { + public PaperUpdaterPlatform updater() { return updater; } + public PaperUpdaterAPI api() { + return api; + } + public static PluginUpdater getInstance() { return plugin; } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java new file mode 100644 index 0000000..c4b294b --- /dev/null +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java @@ -0,0 +1,30 @@ +package org.lushplugins.pluginupdater.paper.api; + +import org.bukkit.plugin.Plugin; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.platform.UpdaterAPI; +import org.lushplugins.pluginupdater.paper.PaperUpdaterPlatform; + +public class PaperUpdaterAPI extends UpdaterAPI { + + public PaperUpdaterAPI(PaperUpdaterPlatform updater) { + super(updater); + } + + /** + * Make a plugin available to be checked/downloaded + * @param plugin Plugin to be added + * @param pluginData Relevant update data + */ + public void addPlugin(Plugin plugin, PluginData pluginData) { + addPlugin(plugin.getName(), pluginData); + } + + /** + * Stop a plugin from being checked/downloaded + * @param plugin Plugin to be removed + */ + public void removePlugin(Plugin plugin) { + removePlugin(plugin.getName()); + } +} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java deleted file mode 100644 index 5bcc0c3..0000000 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PluginUpdaterAPI.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.lushplugins.pluginupdater.paper.api; - -import org.lushplugins.pluginupdater.paper.PluginUpdater; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.source.Source; -import org.lushplugins.pluginupdater.api.source.SourceRegistry; -import org.bukkit.plugin.Plugin; - -@SuppressWarnings("unused") -public class PluginUpdaterAPI { - - /** - * Make a plugin available to be checked/downloaded - * @param pluginName Name of plugin to be added - * @param pluginData Relevant update data - */ - public static void addPlugin(String pluginName, PluginData pluginData) { - PluginUpdater.getInstance().getUpdater().getConfig().addPlugin(pluginName, pluginData); - } - - /** - * Make a plugin available to be checked/downloaded - * @param plugin Plugin to be added - * @param pluginData Relevant update data - */ - public static void addPlugin(Plugin plugin, PluginData pluginData) { - addPlugin(plugin.getName(), pluginData); - } - - /** - * Stop a plugin from being checked/downloaded - * @param plugin Plugin to be removed - */ - public static void removePlugin(Plugin plugin) { - removePlugin(plugin.getName()); - } - - /** - * Stop a plugin from being checked/downloaded - * @param pluginName Name of plugin to be removed - */ - public static void removePlugin(String pluginName) { - PluginUpdater.getInstance().getUpdater().getConfig().removePlugin(pluginName); - } - - /** - * Register support for a source - * @param source Source to register - */ - public static void registerSource(Source source) { - SourceRegistry.register(source); - } - - /** - * Unregister support for a source - * @param name Name of source - */ - public static void unregisterSource(String name) { - SourceRegistry.unregister(name); - } -} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java index a1c8e9f..dd92277 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java @@ -20,7 +20,7 @@ public class CommonPluginCollector implements PluginDataCollector { @Override public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); List pluginDataList = new ArrayList<>(); InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index c014a9c..55e5896 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -22,7 +22,7 @@ public class PluginYamlCollector implements PluginDataCollector { @Override public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); List pluginDataList = new ArrayList<>(); for (PluginInfo plugin : unknownPlugins) { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java index 3d31193..b30b82e 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java @@ -17,7 +17,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); if (player.hasPermission("pluginupdater.notify")) { Bukkit.getScheduler().runTaskLaterAsynchronously(PluginUpdater.getInstance(), () -> { - ConfigManager configManager = PluginUpdater.getInstance().getUpdater().getConfig(); + ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); int updatesAvailable = 0; for (PluginData pluginData : configManager.getAllPluginData()) { From 5c86ac376a2f5e4592c8bc1819d0850067e38a02 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 01:10:25 +0300 Subject: [PATCH 38/57] Implemented initial Velocity support --- .../velocity/api/VelocityUpdater.java | 20 +++++ .../notification/VelocityUpdateNotifier.java | 35 ++++++++ .../api/plugin/VelocityPluginInfo.java | 33 +++++++ .../velocity/api/util/VelocityUtil.java | 12 +++ .../pluginupdater/velocity/PluginUpdater.java | 73 +++++++++++++++ .../velocity/VelocityUpdaterPlatform.java | 88 +++++++++++++++++++ .../velocity/api/VelocityUpdaterAPI.java | 30 +++++++ .../velocity/listener/PlayerListener.java | 47 ++++++++++ 8 files changed, 338 insertions(+) create mode 100644 platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java create mode 100644 platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java create mode 100644 platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java create mode 100644 platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/util/VelocityUtil.java create mode 100644 platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java create mode 100644 platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java create mode 100644 platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java new file mode 100644 index 0000000..bb8e8f1 --- /dev/null +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java @@ -0,0 +1,20 @@ +package org.lushplugins.pluginupdater.velocity.api; + +import com.velocitypowered.api.plugin.PluginContainer; +import com.velocitypowered.api.proxy.ProxyServer; +import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.velocity.api.notification.VelocityUpdateNotifier; +import org.lushplugins.pluginupdater.velocity.api.plugin.VelocityPluginInfo; +import org.lushplugins.pluginupdater.velocity.api.util.VelocityUtil; + +import java.util.logging.Logger; + +public class VelocityUpdater { + + public static Updater.Builder builder(ProxyServer server, PluginContainer plugin, Logger logger) { + return Updater.builder(new VelocityPluginInfo(plugin, logger), VelocityUtil.getUpdateFolderFile()) + .notifier((updater, permission, message) -> { + return new VelocityUpdateNotifier(server, updater, permission, message); + }); + } +} diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java new file mode 100644 index 0000000..7f463f7 --- /dev/null +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java @@ -0,0 +1,35 @@ +package org.lushplugins.pluginupdater.velocity.api.notification; + +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.player.configuration.PlayerFinishedConfigurationEvent; +import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.ProxyServer; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.lushplugins.pluginupdater.api.listener.UpdateNotifier; +import org.lushplugins.pluginupdater.api.updater.Updater; +import org.lushplugins.pluginupdater.velocity.api.plugin.VelocityPluginInfo; + +public class VelocityUpdateNotifier extends UpdateNotifier { + + public VelocityUpdateNotifier(ProxyServer server, Updater updater, String message, String permission) { + super(updater, message, permission); + + VelocityPluginInfo pluginInfo = (VelocityPluginInfo) updater.getPluginInfo(); + server.getEventManager().register(this, pluginInfo.plugin()); + } + + @Override + public boolean hasPermission(Player user, String permission) { + return user.hasPermission(permission); + } + + @Override + public void sendMessage(Player user, String message) { + user.sendMessage(MiniMessage.miniMessage().deserialize(message)); + } + + @Subscribe + public void onPlayerJoin(PlayerFinishedConfigurationEvent event) { + handle(event.player()); + } +} diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java new file mode 100644 index 0000000..cf752c7 --- /dev/null +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java @@ -0,0 +1,33 @@ +package org.lushplugins.pluginupdater.velocity.api.plugin; + +import com.velocitypowered.api.plugin.PluginContainer; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; + +import java.io.File; +import java.nio.file.Path; +import java.util.logging.Logger; + +public record VelocityPluginInfo(PluginContainer plugin, @Nullable Logger logger) implements PluginInfo { + + @Override + public String getName() { + return plugin.getDescription().getName().orElseThrow(); + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion().orElseThrow(); + } + + @Override + public File getFile() { + Path path = plugin.getDescription().getSource().orElse(null); + return path != null ? path.toFile() : null; + } + + @Override + public Logger getLogger() { + return logger; + } +} diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/util/VelocityUtil.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/util/VelocityUtil.java new file mode 100644 index 0000000..edb5406 --- /dev/null +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/util/VelocityUtil.java @@ -0,0 +1,12 @@ +package org.lushplugins.pluginupdater.velocity.api.util; + +import java.io.File; +import java.nio.file.Path; + +public class VelocityUtil { + + public static File getUpdateFolderFile() { + String updateFolderName = System.getProperty("velocity.update-folder-name", "update"); + return !updateFolderName.isEmpty() ? Path.of("plugins", updateFolderName).toFile() : null; + } +} diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java index 6eef1a0..063723d 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java @@ -1,4 +1,77 @@ package org.lushplugins.pluginupdater.velocity; +import com.google.inject.Inject; +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; +import com.velocitypowered.api.event.proxy.ProxyShutdownEvent; +import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.plugin.annotation.DataDirectory; +import com.velocitypowered.api.proxy.ProxyServer; +import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.util.BuildParameters; +import org.lushplugins.pluginupdater.velocity.api.VelocityUpdaterAPI; +import org.lushplugins.pluginupdater.velocity.listener.PlayerListener; + +import java.nio.file.Path; +import java.util.logging.Logger; + +@Plugin( + id = "pluginupdater", + name = "PluginUpdater", + version = BuildParameters.VERSION +) public class PluginUpdater { + private static PluginUpdater instance; + + private final ProxyServer server; + private final Logger logger; + private final Path dataFolder; + private VelocityUpdaterPlatform updater; + private VelocityUpdaterAPI api; + + @Inject + public PluginUpdater(ProxyServer server, Logger logger, @DataDirectory Path dataFolder) { + instance = this; + + this.server = server; + this.logger = logger; + this.dataFolder = dataFolder; + } + + @Subscribe + public void onProxyInitialization(ProxyInitializeEvent event) { + DownloadLogger.setLogFile(dataFolder.resolve("downloads.log").toFile()); + this.updater = new VelocityUpdaterPlatform(this); + this.api = new VelocityUpdaterAPI(updater); + + server.getEventManager().register(this, new PlayerListener(this)); + } + + @Subscribe + public void onProxyShutdown(ProxyShutdownEvent event) { + if (updater != null) { + updater.shutdown(); + updater = null; + } + } + + public ProxyServer server() { + return server; + } + + public Logger logger() { + return logger; + } + + public VelocityUpdaterPlatform updater() { + return updater; + } + + public VelocityUpdaterAPI api() { + return api; + } + + public static PluginUpdater getInstance() { + return instance; + } } diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java new file mode 100644 index 0000000..528a3ec --- /dev/null +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java @@ -0,0 +1,88 @@ +package org.lushplugins.pluginupdater.velocity; + +import com.velocitypowered.api.plugin.PluginContainer; +import com.velocitypowered.api.proxy.Player; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.velocity.api.plugin.VelocityPluginInfo; +import org.lushplugins.pluginupdater.velocity.api.util.VelocityUtil; +import revxrsal.commands.Lamp; +import revxrsal.commands.command.CommandActor; +import revxrsal.commands.velocity.VelocityLamp; +import revxrsal.commands.velocity.VelocityVisitors; +import revxrsal.commands.velocity.actor.VelocityCommandActor; + +import java.io.File; +import java.util.List; +import java.util.logging.Logger; + +public class VelocityUpdaterPlatform extends UpdaterPlatform { + private final PluginUpdater instance; + + public VelocityUpdaterPlatform(PluginUpdater instance) { + super(); + this.instance = instance; + } + + @Override + public @Nullable PluginInfo getPlugin(String name) { + PluginContainer plugin = instance.server().getPluginManager().getPlugin(name).orElse(null); + return plugin != null ? new VelocityPluginInfo(plugin, instance.logger()) : null; + } + + @Override + public List getPlugins() { + return instance.server().getPluginManager().getPlugins().stream() + .map((plugin) -> new VelocityPluginInfo(plugin, instance.logger())) + .toList(); + } + + @Override + public File getDownloadDir() { + return VelocityUtil.getUpdateFolderFile(); + } + + @Override + public Lamp.Builder prepareLamp() { + return VelocityLamp.builder(instance, instance.server()); + } + + @Override + public void registerLampCommands(Lamp lamp) { + super.registerLampCommands(lamp); + + ((Lamp) lamp).accept(VelocityVisitors.brigadier(instance.server())); + } + + @Override + public boolean hasPermission(CommandActor actor, String permission) { + return ((VelocityCommandActor) actor).source().hasPermission(permission); + } + + @Override + public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state) { + List players = instance.server().getAllPlayers().stream() + .filter(player -> player.hasPermission("pluginupdater.notify")) + .toList(); + + if (players.isEmpty()) { + return; + } + + int processed = handler.currentlyProcessing().getOrDefault(state, 1); + int total = processed + handler.remainingWithState(state); + + Audience.audience(players).sendActionBar(MiniMessage.miniMessage().deserialize( + "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" + .formatted(processed, total))); + } + + @Override + public Logger getLogger() { + return instance.logger(); + } +} diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java new file mode 100644 index 0000000..9dace16 --- /dev/null +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java @@ -0,0 +1,30 @@ +package org.lushplugins.pluginupdater.velocity.api; + +import com.velocitypowered.api.plugin.PluginContainer; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.platform.UpdaterAPI; +import org.lushplugins.pluginupdater.velocity.VelocityUpdaterPlatform; + +public class VelocityUpdaterAPI extends UpdaterAPI { + + public VelocityUpdaterAPI(VelocityUpdaterPlatform updater) { + super(updater); + } + + /** + * Make a plugin available to be checked/downloaded + * @param plugin Plugin to be added + * @param pluginData Relevant update data + */ + public void addPlugin(PluginContainer plugin, PluginData pluginData) { + addPlugin(plugin.getDescription().getName().orElseThrow(), pluginData); + } + + /** + * Stop a plugin from being checked/downloaded + * @param plugin Plugin to be removed + */ + public void removePlugin(PluginContainer plugin) { + removePlugin(plugin.getDescription().getName().orElseThrow()); + } +} diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java new file mode 100644 index 0000000..d3794fb --- /dev/null +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java @@ -0,0 +1,47 @@ +package org.lushplugins.pluginupdater.velocity.listener; + +import com.velocitypowered.api.event.Subscribe; +import com.velocitypowered.api.event.player.configuration.PlayerFinishedConfigurationEvent; +import com.velocitypowered.api.proxy.Player; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.velocity.PluginUpdater; + +import java.util.concurrent.TimeUnit; + +public class PlayerListener { + private final PluginUpdater instance; + + public PlayerListener(PluginUpdater instance) { + this.instance = instance; + } + + @Subscribe + public void onPlayerJoin(PlayerFinishedConfigurationEvent event) { + Player player = event.player(); + if (!player.hasPermission("pluginupdater.notify")) { + return; + } + + instance.server().getScheduler() + .buildTask(instance, () -> { + ConfigManager configManager = instance.updater().getConfig(); + + int updatesAvailable = 0; + for (PluginData pluginData : configManager.getAllPluginData()) { + if (pluginData.isUpdateAvailable() && !pluginData.isAlreadyDownloaded()) { + updatesAvailable++; + } + } + + if (updatesAvailable > 0) { + player.sendMessage(MiniMessage.miniMessage().deserialize(configManager.getMessage("updates-available", "&#e0c01b%amount% &#ffe27aupdates are available, type &#e0c01b'%updates_command%' &#ffe27afor more information!") + .replace("%amount%", String.valueOf(updatesAvailable)) + .replace("%updates_command%", "/updates list"))); + } + }) + .delay(5L, TimeUnit.SECONDS) + .schedule(); + } +} From a3c63a46cad8f17faaf442c9257908cc77962805 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 01:14:50 +0300 Subject: [PATCH 39/57] Added missing brigadier dependency --- platform/velocity-plugin/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index d6c0156..b210804 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -10,4 +10,5 @@ dependencies { implementation(project(":common:impl")) implementation(project(":platform:velocity-api")) implementation("io.github.revxrsal:lamp.velocity:4.0.0-rc.16") + implementation("io.github.revxrsal:lamp.brigadier:4.0.0-rc.16") } \ No newline at end of file From bea3657e7db2bfbb608caeae94b0cba20856702c Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:44:32 +0300 Subject: [PATCH 40/57] Improved handling of PluginDataCollectors and separated updater implementation into UpdaterImpl and UpdaterPlatform --- common/api/build.gradle.kts | 3 +- .../pluginupdater/common/UpdaterImpl.java | 95 +++++++++++++++++++ .../common/collector/CollectorRegistry.java | 62 ------------ .../collector/CommonPluginCollector.java | 20 ++-- .../common}/collector/ModrinthCollector.java | 22 +++-- .../common/collector/PluginDataCollector.java | 14 ++- .../common/command/UpdateCommand.java | 14 +-- .../common/command/UpdaterCommand.java | 14 +-- .../common/command/UpdatesCommand.java | 13 ++- .../annotation/CommandPermissionFactory.java | 10 +- .../common/config/ConfigManager.java | 22 ++--- .../deserializer/SourceDataDeserializer.java | 4 +- .../common/platform/UpdaterAPI.java | 9 +- .../common/platform/UpdaterPlatform.java | 77 +++------------ .../common/updater/UpdateHandler.java | 26 ++--- .../paper/PaperUpdaterPlugin.java | 63 ++++++++++++ .../pluginupdater/paper/PluginUpdater.java | 49 ---------- .../paper/api/PaperUpdaterAPI.java | 4 +- .../paper/collector/PluginYamlCollector.java | 8 +- .../paper/collector/SpigotCollector.java | 10 +- .../paper/listener/PlayerListener.java | 6 +- .../{ => platform}/PaperUpdaterPlatform.java | 18 ++-- .../src/main/resources/plugin.yml | 2 +- ...pdater.java => VelocityUpdaterPlugin.java} | 24 +++-- .../velocity/api/VelocityUpdaterAPI.java | 4 +- .../velocity/listener/PlayerListener.java | 8 +- .../VelocityUpdaterPlatform.java | 27 +++--- 27 files changed, 328 insertions(+), 300 deletions(-) create mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/UpdaterImpl.java delete mode 100644 common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java rename {platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper => common/impl/src/main/java/org/lushplugins/pluginupdater/common}/collector/CommonPluginCollector.java (79%) rename {platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper => common/impl/src/main/java/org/lushplugins/pluginupdater/common}/collector/ModrinthCollector.java (76%) create mode 100644 platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java delete mode 100644 platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java rename platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/{ => platform}/PaperUpdaterPlatform.java (90%) rename platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/{PluginUpdater.java => VelocityUpdaterPlugin.java} (66%) rename platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/{ => platform}/VelocityUpdaterPlatform.java (83%) diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index c83a5aa..bf5336d 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -14,7 +14,8 @@ sourceSets { } dependencies { - implementation("com.google.code.gson:gson:2.14.0") + api("com.google.guava:guava:33.6.0-jre") + api("com.google.code.gson:gson:2.14.0") compileOnlyApi("org.jetbrains:annotations:26.1.0") } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/UpdaterImpl.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/UpdaterImpl.java new file mode 100644 index 0000000..ac97c52 --- /dev/null +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/UpdaterImpl.java @@ -0,0 +1,95 @@ +package org.lushplugins.pluginupdater.common; + +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; +import org.lushplugins.pluginupdater.common.command.annotation.CommandPermissionFactory; +import org.lushplugins.pluginupdater.common.command.annotation.PluginName; +import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; +import org.lushplugins.pluginupdater.common.config.ConfigManager; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import revxrsal.commands.Lamp; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +public class UpdaterImpl { + private final UpdaterPlatform platform; + private final List collectors; + private final UpdateHandler updateHandler; + private final ConfigManager config; + + public UpdaterImpl(UpdaterPlatform platform, List collectors) { + this.platform = platform; + this.collectors = collectors; + + updateHandler = new UpdateHandler(this); + updateHandler.enable(); + + config = new ConfigManager(this); + config.reload(); + + Lamp lamp = platform.prepareLamp() + .permissionFactory(new CommandPermissionFactory(this)) + .suggestionProviders(providers -> { + providers.addProviderForAnnotation(PluginName.class, (annotation) -> (context) -> { + return config.getPlugins(); + }); + }) + .responseHandler(String.class, new StringMessageResponseHandler()) + .build(); + + platform.registerLampCommands(this, lamp); + } + + public void shutdown() { + updateHandler.shutdown(); + } + + public UpdaterPlatform platform() { + return platform; + } + + public List collectors() { + return collectors; + } + + public UpdateHandler updateHandler() { + return updateHandler; + } + + public ConfigManager config() { + return config; + } + + public CompletableFuture> collectUnknownPlugins() { + return CompletableFuture.supplyAsync(() -> { + Map unknownPlugins = platform.getPlugins().stream() + .filter(plugin -> config.canRegisterPluginData(plugin.getName())) + .collect(Collectors.toMap(PluginInfo::getName, plugin -> plugin)); + if (unknownPlugins.isEmpty()) { + return Collections.emptyList(); + } + + List collectors = this.collectors.stream() + .map(factory -> factory.create(this)) + .toList(); + List collectedPluginData = new ArrayList<>(); + for (PluginDataCollector collector : collectors) { + List foundPluginData = collector.collect(unknownPlugins.values()); + + collectedPluginData.addAll(foundPluginData); + for (PluginData pluginData : foundPluginData) { + unknownPlugins.remove(pluginData.getPluginName()); + } + } + + return collectedPluginData; + }); + } +} diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java deleted file mode 100644 index ff81a59..0000000 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CollectorRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.lushplugins.pluginupdater.common.collector; - -import org.jetbrains.annotations.NotNull; -import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.common.config.ConfigManager; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; - -import java.util.*; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - -public class CollectorRegistry { - private final UpdaterPlatform instance; - private final Map collectors = new LinkedHashMap<>(); - - public CollectorRegistry(UpdaterPlatform instance) { - this.instance = instance; - } - - public void register(@NotNull String id, PluginDataCollector collector) { - if (collectors.containsKey(id)) { - throw new IllegalStateException("This collector is already registered"); - } - - collectors.put(id, collector); - } - - public void unregister(String id) { - collectors.remove(id); - } - - public CompletableFuture> collectUnknownPlugins() { - CompletableFuture> future = new CompletableFuture<>(); - - instance.getUpdateHandler().getThreads().execute(() -> { - ConfigManager config = instance.getConfig(); - Map unknownPlugins = instance.getPlugins().stream() - .filter(plugin -> config.canRegisterPluginData(plugin.getName())) - .collect(Collectors.toMap(PluginInfo::getName, plugin -> plugin)); - - if (unknownPlugins.isEmpty()) { - future.complete(Collections.emptyList()); - return; - } - - List collectedPluginData = new ArrayList<>(); - for (PluginDataCollector collector : collectors.values()) { - List foundPluginData = collector.collectPluginData(unknownPlugins.values()); - - collectedPluginData.addAll(foundPluginData); - for (PluginData pluginData : foundPluginData) { - unknownPlugins.remove(pluginData.getPluginName()); - } - } - - future.complete(collectedPluginData); - }); - - return future; - } -} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java similarity index 79% rename from platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java index dd92277..90e3be3 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/CommonPluginCollector.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java @@ -1,26 +1,28 @@ -package org.lushplugins.pluginupdater.paper.collector; +package org.lushplugins.pluginupdater.common.collector; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.YamlConfiguration; -import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.common.config.ComparatorRegistry; import org.lushplugins.pluginupdater.common.config.ConfigManager; import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.paper.PluginUpdater; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; public class CommonPluginCollector implements PluginDataCollector { + private final UpdaterImpl updater; + + public CommonPluginCollector(UpdaterImpl updater) { + this.updater = updater; + } @Override - public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); + public List collect(Collection plugins) { + ConfigManager config = updater.config(); List pluginDataList = new ArrayList<>(); InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); @@ -29,9 +31,9 @@ public List collectPluginData(Collection unknownPlugins) } YamlConfiguration commonPluginsYml = YamlConfiguration.loadConfiguration(new InputStreamReader(commonPluginsInputStream)); - for (PluginInfo plugin : unknownPlugins) { + for (PluginInfo plugin : plugins) { String pluginName = plugin.getName(); - if (!configManager.canRegisterPluginData(pluginName)) { + if (!config.canRegisterPluginData(pluginName)) { continue; } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/ModrinthCollector.java similarity index 76% rename from platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java rename to common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/ModrinthCollector.java index 527e3b0..b542a06 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/ModrinthCollector.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/ModrinthCollector.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper.collector; +package org.lushplugins.pluginupdater.common.collector; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; @@ -6,12 +6,11 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; -import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.paper.PluginUpdater; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import java.io.File; import java.io.IOException; @@ -20,11 +19,16 @@ import java.util.logging.Level; public class ModrinthCollector implements PluginDataCollector { + private final UpdaterPlatform platform; + + public ModrinthCollector(UpdaterPlatform platform) { + this.platform = platform; + } @Override - public List collectPluginData(Collection unknownPlugins) { + public List collect(Collection plugins) { HashMap pluginHashes = new HashMap<>(); - for (PluginInfo unknownPlugin : unknownPlugins) { + for (PluginInfo unknownPlugin : plugins) { File pluginFile = unknownPlugin.getFile(); if (pluginFile == null) { continue; @@ -35,7 +39,7 @@ public List collectPluginData(Collection unknownPlugins) hash = Files.asByteSource(pluginFile).hash(Hashing.sha512()); pluginHashes.put(hash.toString(), unknownPlugin); } catch (IOException e) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst hashing plugin file: ", e); + platform.getLogger().log(Level.WARNING, "Caught error whilst hashing plugin file: ", e); } } @@ -51,12 +55,12 @@ public List collectPluginData(Collection unknownPlugins) try { response = HttpUtil.sendRequest(String.format("%s/version_files", UpdaterConstants.Endpoint.MODRINTH), payload); } catch (IOException | InterruptedException e) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst getting project data from hashes: ", e); + platform.getLogger().log(Level.WARNING, "Caught error whilst getting project data from hashes: ", e); return Collections.emptyList(); } if (response.statusCode() != 200) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Received invalid response code (" + response.statusCode() + ") whilst getting project data from hashes."); + platform.getLogger().log(Level.WARNING, "Received invalid response code (" + response.statusCode() + ") whilst getting project data from hashes."); return Collections.emptyList(); } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java index 7e2ff07..8fe4113 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/PluginDataCollector.java @@ -2,11 +2,21 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import java.util.Collection; import java.util.List; -import java.util.Set; +@FunctionalInterface public interface PluginDataCollector { - List collectPluginData(Collection unknownPlugins); + List collect(Collection plugins); + + static Factory of(PluginDataCollector collector) { + return (ignored) -> collector; + } + + @FunctionalInterface + interface Factory { + PluginDataCollector create(UpdaterImpl updater); + } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index 563627c..c4f4947 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -1,7 +1,7 @@ package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.version.VersionDifference; @@ -13,16 +13,16 @@ import java.util.concurrent.atomic.AtomicInteger; @SuppressWarnings("unused") -public record UpdateCommand(UpdaterPlatform instance) { +public record UpdateCommand(UpdaterImpl updater) { @Command("updater update") @CommandPermission("pluginupdater.downloadupdates") public String update(@PluginName String pluginName) { - if (!instance.getConfig().shouldAllowDownloads()) { + if (!updater.config().shouldAllowDownloads()) { return "&#ff6969Update downloads have been disabled in the config"; } - PluginData pluginData = instance.getConfig().getPluginData(pluginName); + PluginData pluginData = updater.config().getPluginData(pluginName); if (pluginData == null) { return "&#ff6969That plugin is not registered"; } else if (!pluginData.areDownloadsAllowed()) { @@ -32,7 +32,7 @@ public String update(@PluginName String pluginName) { } else if (!pluginData.isUpdateAvailable()) { return "&#ff6969No update has been found for this plugin"; } else { - instance.getUpdateHandler().queueDownload(pluginData.getPluginName()); + updater.updateHandler().queueDownload(pluginData.getPluginName()); return "&#b7faa2Successfully queued an update for '%s'".formatted(pluginData.getPluginName()); } } @@ -40,10 +40,10 @@ public String update(@PluginName String pluginName) { @Command("updater update all") @CommandPermission("pluginupdater.downloadupdates") public String updateAll(CommandActor actor, @Switch("force") boolean force) { - UpdateHandler updateHandler = instance.getUpdateHandler(); + UpdateHandler updateHandler = updater.updateHandler(); AtomicInteger updateCount = new AtomicInteger(0); AtomicInteger majorUpdateCount = new AtomicInteger(0); - instance.getConfig().getAllPluginData().forEach(pluginData -> { + updater.config().getAllPluginData().forEach(pluginData -> { if (!pluginData.areDownloadsAllowed()) { return; } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java index c289eb0..dd7af47 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java @@ -2,7 +2,7 @@ import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; import org.lushplugins.pluginupdater.common.command.annotation.PluginName; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import revxrsal.commands.annotation.Command; import revxrsal.commands.annotation.Subcommand; @@ -11,15 +11,15 @@ @Command("updater") @SuppressWarnings("unused") -public record UpdaterCommand(UpdaterPlatform instance) { +public record UpdaterCommand(UpdaterImpl updater) { @Subcommand("reload") @CommandPermission("pluginupdater.reload") public String reload() { try { - instance.reloadConfig(); + updater.config().reload(); } catch (Throwable e) { - instance.getLogger().log(Level.SEVERE, "Caught error whilst reloading: ", e); + updater.platform().getLogger().log(Level.SEVERE, "Caught error whilst reloading: ", e); return "&#ff6969Something went wrong whilst reloading the plugin, check the console for errors"; } @@ -29,7 +29,7 @@ public String reload() { @Subcommand("check") @CommandPermission("pluginupdater.checkupdates") public String check(@PluginName String pluginName) { - instance.getUpdateHandler().queueUpdateCheck(pluginName); + updater.updateHandler().queueUpdateCheck(pluginName); return "&#b7faa2Successfully queued check for %s".formatted(pluginName); } @@ -38,8 +38,8 @@ public String check(@PluginName String pluginName) { @CommandPermission("pluginupdater.checkupdates") public String check() { AtomicInteger updateCount = new AtomicInteger(0); - instance.getConfig().getPlugins().forEach(pluginName -> { - instance.getUpdateHandler().queueUpdateCheck(pluginName); + updater.config().getPlugins().forEach(pluginName -> { + updater.updateHandler().queueUpdateCheck(pluginName); updateCount.incrementAndGet(); }); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index ab638bb..f9f4001 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -1,7 +1,7 @@ package org.lushplugins.pluginupdater.common.command; import org.lushplugins.pluginupdater.common.command.annotation.CommandPermission; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.VersionDifference; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -11,12 +11,12 @@ import java.util.List; @SuppressWarnings("unused") -public record UpdatesCommand(UpdaterPlatform instance) { +public record UpdatesCommand(UpdaterImpl updater) { @Command({ "updater updates", "updates" }) @CommandPermission("pluginupdater.checkupdates") public String updates() { - ConfigManager configManager = instance.getConfig(); + ConfigManager configManager = updater.config(); List plugins = configManager.getAllPluginData().stream() .map(pluginData -> { String pluginName = pluginData.getPluginName(); @@ -52,7 +52,7 @@ public String updates() { @Command({ "updater list updates", "updates list" }) @CommandPermission("pluginupdater.checkupdates") public String list() { - ConfigManager configManager = instance.getConfig(); + ConfigManager configManager = updater.config(); String updateAvailableColor = configManager.getMessage("update-available-color", "&#ffda54"); String majorUpdateAvailableColor = configManager.getMessage("major-update-available-color", "&#ff6969"); String latestVersionColor = configManager.getMessage("latest-version-color", "&#b7faa2"); @@ -83,10 +83,9 @@ public String list() { @Command("updater list unregistered") @CommandPermission("pluginupdater.unregisteredplugins") public String unregisteredPlugins() { - ConfigManager configManager = instance.getConfig(); - List unregisteredPlugins = instance.getPlugins().stream() + List unregisteredPlugins = updater.platform().getPlugins().stream() .map(PluginInfo::getName) - .filter(pluginName -> configManager.getPluginData(pluginName) == null) + .filter(pluginName -> updater.config().getPluginData(pluginName) == null) .sorted(String.CASE_INSENSITIVE_ORDER) .toList(); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java index 5b3ac0b..dae8179 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/annotation/CommandPermissionFactory.java @@ -2,16 +2,16 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import revxrsal.commands.Lamp; import revxrsal.commands.annotation.list.AnnotationList; import revxrsal.commands.command.CommandActor; public class CommandPermissionFactory implements revxrsal.commands.command.CommandPermission.Factory { - private final UpdaterPlatform instance; + private final UpdaterImpl updater; - public CommandPermissionFactory(UpdaterPlatform instance) { - this.instance = instance; + public CommandPermissionFactory(UpdaterImpl updater) { + this.updater = updater; } @Override @@ -22,6 +22,6 @@ public CommandPermissionFactory(UpdaterPlatform instance) { } String permission = annotation.value(); - return actor -> instance.hasPermission(actor, permission); + return actor -> updater.platform().hasPermission(actor, permission); } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index c86a9d1..138b7d2 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -9,7 +9,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.config.deserializer.SourceDataDeserializer; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.common.util.ConfigUtil; @@ -17,25 +17,25 @@ import java.util.logging.Level; public class ConfigManager { - private final UpdaterPlatform instance; + private final UpdaterImpl updater; private boolean allowDownloads; private final Map plugins = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); private final Set disabledPlugins = new HashSet<>(); private Messages messages; - public ConfigManager(UpdaterPlatform instance) { - this.instance = instance; + public ConfigManager(UpdaterImpl updater) { + this.updater = updater; // TODO: Save default config if not there } - public void reloadConfig() { + public void reload() { // TODO: Access file location FileConfig config = FileConfig.of(""); config.load(); boolean checkOnReload = ConfigUtil.getOrAliasOrElse( config, "check-updates-on-reload", "check-updates-on-start", true, - () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'") + () -> updater.platform().getLogger().log(Level.WARNING, "Deprecated: The config section 'check-updates-on-start' has been renamed to 'check-updates-on-reload'") ); this.allowDownloads = config.getOrElse("allow-downloads", true); @@ -59,7 +59,7 @@ public void reloadConfig() { return; } - PluginInfo currPlugin = instance.getPlugin(pluginName); + PluginInfo currPlugin = updater.platform().getPlugin(pluginName); if (currPlugin == null) { return; } @@ -75,7 +75,7 @@ public void reloadConfig() { boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); try { - SourceData sourceData = SourceDataDeserializer.deserialize(instance, pluginConfig); + SourceData sourceData = SourceDataDeserializer.deserialize(updater.platform(), pluginConfig); if (sourceData != null) { addPlugin(pluginName, PluginData.builder(currPlugin) .sourceData(sourceData) @@ -84,18 +84,18 @@ public void reloadConfig() { .build()); } } catch (Exception e) { - instance.getLogger().log(Level.SEVERE, "Caught error whilst collecting data for '%s'".formatted(pluginName), e); + updater.platform().getLogger().log(Level.SEVERE, "Caught error whilst collecting data for '%s'".formatted(pluginName), e); } }); } - instance.getCollectorRegistry().collectUnknownPlugins().thenAccept(collectedPluginData -> { + updater.collectUnknownPlugins().thenAccept(collectedPluginData -> { for (PluginData pluginData : collectedPluginData) { addPlugin(pluginData); } if (checkOnReload) { - UpdateHandler updateHandler = instance.getUpdateHandler(); + UpdateHandler updateHandler = updater.updateHandler(); getPlugins().forEach(updateHandler::queueUpdateCheck); } }); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java index 51538fc..3ead476 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/SourceDataDeserializer.java @@ -15,9 +15,9 @@ public class SourceDataDeserializer { - public static SourceData deserialize(UpdaterPlatform instance, Config config) { + public static SourceData deserialize(UpdaterPlatform platform, Config config) { String source = ConfigUtil.getOrAlias(config, "source", "platform", - () -> instance.getLogger().log(Level.WARNING, "Deprecated: The config option 'platform' has been renamed to 'source'")); + () -> platform.getLogger().log(Level.WARNING, "Deprecated: The config option 'updater' has been renamed to 'source'")); return switch (source) { case GithubSource.NAME -> githubSourceData(config); diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java index d3f54d1..e0cac45 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterAPI.java @@ -3,11 +3,12 @@ import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.UpdaterImpl; public class UpdaterAPI { - private final UpdaterPlatform updater; + private final UpdaterImpl updater; - public UpdaterAPI(UpdaterPlatform updater) { + public UpdaterAPI(UpdaterImpl updater) { this.updater = updater; } @@ -17,7 +18,7 @@ public UpdaterAPI(UpdaterPlatform updater) { * @param pluginData Relevant update data */ public void addPlugin(String pluginName, PluginData pluginData) { - updater.getConfig().addPlugin(pluginName, pluginData); + updater.config().addPlugin(pluginName, pluginData); } /** @@ -25,7 +26,7 @@ public void addPlugin(String pluginName, PluginData pluginData) { * @param pluginName Name of plugin to be removed */ public void removePlugin(String pluginName) { - updater.getConfig().removePlugin(pluginName); + updater.config().removePlugin(pluginName); } /** diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java index 6690563..6c84df5 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java @@ -1,15 +1,11 @@ package org.lushplugins.pluginupdater.common.platform; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.common.collector.CollectorRegistry; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.command.UpdateCommand; import org.lushplugins.pluginupdater.common.command.UpdaterCommand; import org.lushplugins.pluginupdater.common.command.UpdatesCommand; -import org.lushplugins.pluginupdater.common.command.annotation.CommandPermissionFactory; -import org.lushplugins.pluginupdater.common.command.annotation.PluginName; -import org.lushplugins.pluginupdater.common.command.response.StringMessageResponseHandler; -import org.lushplugins.pluginupdater.common.config.ConfigManager; -import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import revxrsal.commands.Lamp; import revxrsal.commands.command.CommandActor; @@ -18,71 +14,28 @@ import java.util.List; import java.util.logging.Logger; -public abstract class UpdaterPlatform { - private final CollectorRegistry collectorRegistry; - private final UpdateHandler updateHandler; - private final ConfigManager config; +public interface UpdaterPlatform { - public UpdaterPlatform() { - collectorRegistry = new CollectorRegistry(this); - updateHandler = new UpdateHandler(this); - updateHandler.enable(); + @Nullable PluginInfo getPlugin(String name); - config = new ConfigManager(this); - config.reloadConfig(); + List getPlugins(); - Lamp lamp = prepareLamp() - .permissionFactory(new CommandPermissionFactory(this)) - .suggestionProviders(providers -> { - providers.addProviderForAnnotation(PluginName.class, (annotation) -> (context) -> { - return config.getPlugins(); - }); - }) - .responseHandler(String.class, new StringMessageResponseHandler()) - .build(); + File getDownloadDir(); - registerLampCommands(lamp); - } + Logger getLogger(); - public void shutdown() { - updateHandler.shutdown(); - } + Lamp.Builder prepareLamp(); - public CollectorRegistry getCollectorRegistry() { - return collectorRegistry; - } - - public UpdateHandler getUpdateHandler() { - return updateHandler; - } - - public ConfigManager getConfig() { - return config; - } + default void registerLampCommands(UpdaterImpl updater, Lamp lamp) { + lamp.register(new UpdaterCommand(updater), new UpdatesCommand(updater)); - public void reloadConfig() { - config.reloadConfig(); - } - - public abstract @Nullable PluginInfo getPlugin(String name); - - public abstract List getPlugins(); - - public abstract File getDownloadDir(); - - public abstract Lamp.Builder prepareLamp(); - - public void registerLampCommands(Lamp lamp) { - lamp.register(new UpdaterCommand(this), new UpdatesCommand(this)); - - if (config.shouldAllowDownloads()) { - lamp.register(new UpdateCommand(this)); + if (updater.config().shouldAllowDownloads()) { + lamp.register(new UpdateCommand(updater)); } } - public abstract boolean hasPermission(CommandActor actor, String permission); - - public abstract void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); + boolean hasPermission(CommandActor actor, String permission); - public abstract Logger getLogger(); + // TODO: Reimplement + void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index 646f25e..36f8453 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -4,7 +4,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.source.Source; import org.lushplugins.pluginupdater.api.version.VersionDifference; -import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import java.io.IOException; import java.util.ArrayDeque; @@ -14,13 +14,13 @@ import java.util.logging.Level; public class UpdateHandler { - private final UpdaterPlatform instance; + private final UpdaterImpl updater; private final ScheduledExecutorService threads = Executors.newScheduledThreadPool(1); private final ArrayDeque queue = new ArrayDeque<>(); private final Map currentlyProcessing = new HashMap<>(); - public UpdateHandler(UpdaterPlatform instance) { - this.instance = instance; + public UpdateHandler(UpdaterImpl updater) { + this.updater = updater; } public ScheduledExecutorService getThreads() { @@ -54,13 +54,13 @@ public int remainingWithState(ProcessingData.State state) { } public ProcessingData queueUpdateCheck(String pluginName) { - ProcessingData processingData = new ProcessingData(instance, pluginName, ProcessingData.State.UPDATE_CHECK); + ProcessingData processingData = new ProcessingData(updater, pluginName, ProcessingData.State.UPDATE_CHECK); queue(processingData); return processingData; } public ProcessingData queueDownload(String pluginName) { - ProcessingData processingData = new ProcessingData(instance, pluginName, ProcessingData.State.DOWNLOAD); + ProcessingData processingData = new ProcessingData(updater, pluginName, ProcessingData.State.DOWNLOAD); queue(processingData); return processingData; } @@ -89,7 +89,7 @@ private void processQueue() { pluginData.setCheckRan(true); return; } catch (Exception e) { - instance.getLogger().log(Level.SEVERE, e.getMessage(), e); + updater.platform().getLogger().log(Level.SEVERE, e.getMessage(), e); } String sourceNames = String.join(", ", pluginData.getSourceData().stream().map(SourceData::sourceName).toList()); @@ -103,7 +103,7 @@ private void processQueue() { } try { - if (Source.download(pluginData, instance.getDownloadDir())) { + if (Source.download(pluginData, updater.platform().getDownloadDir())) { pluginData.setVersionDifference(VersionDifference.UNKNOWN); pluginData.setAlreadyDownloaded(true); processingData.getFuture().complete(true); @@ -122,17 +122,17 @@ private void processQueue() { } public void sendNotification(ProcessingData.State state) { - + // TODO } public static class ProcessingData { - private final UpdaterPlatform instance; + private final UpdaterImpl updater; private final String pluginName; private final State state; private final CompletableFuture future; - public ProcessingData(UpdaterPlatform instance, String pluginName, State state) { - this.instance = instance; + public ProcessingData(UpdaterImpl updater, String pluginName, State state) { + this.updater = updater; this.pluginName = pluginName; this.state = state; this.future = new CompletableFuture<>(); @@ -147,7 +147,7 @@ public State getState() { } public PluginData getPluginData() { - return instance.getConfig().getPluginData(pluginName); + return updater.config().getPluginData(pluginName); } public CompletableFuture getFuture() { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java new file mode 100644 index 0000000..86a892c --- /dev/null +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java @@ -0,0 +1,63 @@ +package org.lushplugins.pluginupdater.paper; + +import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.common.UpdaterImpl; +import org.lushplugins.pluginupdater.common.collector.CommonPluginCollector; +import org.lushplugins.pluginupdater.common.collector.ModrinthCollector; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; +import org.lushplugins.pluginupdater.paper.api.PaperUpdaterAPI; +import org.lushplugins.pluginupdater.paper.collector.PluginYamlCollector; +import org.lushplugins.pluginupdater.paper.collector.SpigotCollector; +import org.lushplugins.pluginupdater.paper.listener.PlayerListener; +import org.bukkit.plugin.java.JavaPlugin; +import org.lushplugins.pluginupdater.paper.platform.PaperUpdaterPlatform; + +import java.io.File; +import java.util.List; + +public final class PaperUpdaterPlugin extends JavaPlugin { + private static PaperUpdaterPlugin plugin; + + private UpdaterImpl updater; + private PaperUpdaterAPI api; + + @Override + public void onLoad() { + plugin = this; + } + + @Override + public void onEnable() { + DownloadLogger.setLogFile(new File(getDataFolder(), "downloads.log")); + PaperUpdaterPlatform platform = new PaperUpdaterPlatform(this); + this.updater = new UpdaterImpl(platform, List.of( + CommonPluginCollector::new, + PluginDataCollector.of(new PluginYamlCollector()), + PluginDataCollector.of(new ModrinthCollector(platform)), + PluginDataCollector.of(new SpigotCollector()) + )); + this.api = new PaperUpdaterAPI(updater); + + getServer().getPluginManager().registerEvents(new PlayerListener(), this); + } + + @Override + public void onDisable() { + if (updater != null) { + updater.shutdown(); + updater = null; + } + } + + public UpdaterImpl updater() { + return updater; + } + + public PaperUpdaterAPI api() { + return api; + } + + public static PaperUpdaterPlugin getInstance() { + return plugin; + } +} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java deleted file mode 100644 index 80e1e75..0000000 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PluginUpdater.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.lushplugins.pluginupdater.paper; - -import org.lushplugins.pluginupdater.api.util.DownloadLogger; -import org.lushplugins.pluginupdater.paper.api.PaperUpdaterAPI; -import org.lushplugins.pluginupdater.paper.listener.PlayerListener; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.File; - -public final class PluginUpdater extends JavaPlugin { - private static PluginUpdater plugin; - - private PaperUpdaterPlatform updater; - private PaperUpdaterAPI api; - - @Override - public void onLoad() { - plugin = this; - } - - @Override - public void onEnable() { - DownloadLogger.setLogFile(new File(getDataFolder(), "downloads.log")); - this.updater = new PaperUpdaterPlatform(this); - this.api = new PaperUpdaterAPI(updater); - - getServer().getPluginManager().registerEvents(new PlayerListener(), this); - } - - @Override - public void onDisable() { - if (updater != null) { - updater.shutdown(); - updater = null; - } - } - - public PaperUpdaterPlatform updater() { - return updater; - } - - public PaperUpdaterAPI api() { - return api; - } - - public static PluginUpdater getInstance() { - return plugin; - } -} diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java index c4b294b..6ba5b81 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdaterAPI.java @@ -2,12 +2,12 @@ import org.bukkit.plugin.Plugin; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.platform.UpdaterAPI; -import org.lushplugins.pluginupdater.paper.PaperUpdaterPlatform; public class PaperUpdaterAPI extends UpdaterAPI { - public PaperUpdaterAPI(PaperUpdaterPlatform updater) { + public PaperUpdaterAPI(UpdaterImpl updater) { super(updater); } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 55e5896..e11a0ae 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -7,7 +7,7 @@ import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -21,11 +21,11 @@ public class PluginYamlCollector implements PluginDataCollector { @Override - public List collectPluginData(Collection unknownPlugins) { - ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); + public List collect(Collection plugins) { + ConfigManager configManager = PaperUpdaterPlugin.getInstance().updater().config(); List pluginDataList = new ArrayList<>(); - for (PluginInfo plugin : unknownPlugins) { + for (PluginInfo plugin : plugins) { String pluginName = plugin.getName(); if (!configManager.canRegisterPluginData(pluginName)) { continue; diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index 6ad991e..2fd71a2 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -7,7 +7,7 @@ import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -22,9 +22,9 @@ public class SpigotCollector implements PluginDataCollector { @Override - public List collectPluginData(Collection unknownPlugins) { + public List collect(Collection plugins) { List pluginDataList = new ArrayList<>(); - for (PluginInfo unknownPlugin : unknownPlugins) { + for (PluginInfo unknownPlugin : plugins) { PluginData pluginData = collectPlugin(unknownPlugin); if (pluginData != null) { pluginDataList.add(pluginData); @@ -39,7 +39,7 @@ public List collectPluginData(Collection unknownPlugins) try { response = HttpUtil.sendRequest(String.format("%s/search/resources/%s", UpdaterConstants.Endpoint.SPIGET, unknownPlugin.getName())); } catch (IOException | InterruptedException e) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Caught error whilst searching for project on spiget: ", e); + PaperUpdaterPlugin.getInstance().getLogger().log(Level.WARNING, "Caught error whilst searching for project on spiget: ", e); return null; } @@ -48,7 +48,7 @@ public List collectPluginData(Collection unknownPlugins) } if (response.statusCode() != 200) { - PluginUpdater.getInstance().getLogger().log(Level.WARNING, "Received invalid response code (%s) whilst searching for project on spiget (%s)".formatted(response.statusCode(), response.uri())); + PaperUpdaterPlugin.getInstance().getLogger().log(Level.WARNING, "Received invalid response code (%s) whilst searching for project on spiget (%s)".formatted(response.statusCode(), response.uri())); return null; } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java index b30b82e..93400dc 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/listener/PlayerListener.java @@ -6,7 +6,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.lushplugins.chatcolorhandler.paper.PaperColor; -import org.lushplugins.pluginupdater.paper.PluginUpdater; +import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; @@ -16,8 +16,8 @@ public class PlayerListener implements Listener { public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); if (player.hasPermission("pluginupdater.notify")) { - Bukkit.getScheduler().runTaskLaterAsynchronously(PluginUpdater.getInstance(), () -> { - ConfigManager configManager = PluginUpdater.getInstance().updater().getConfig(); + Bukkit.getScheduler().runTaskLaterAsynchronously(PaperUpdaterPlugin.getInstance(), () -> { + ConfigManager configManager = PaperUpdaterPlugin.getInstance().updater().config(); int updatesAvailable = 0; for (PluginData pluginData : configManager.getAllPluginData()) { diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java similarity index 90% rename from platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java rename to platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java index 3b35e90..ebe8837 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlatform.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.paper; +package org.lushplugins.pluginupdater.paper.platform; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -8,6 +8,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; import revxrsal.commands.Lamp; import revxrsal.commands.bukkit.BukkitLamp; @@ -20,11 +21,10 @@ import java.util.logging.Logger; import java.util.stream.Collectors; -public class PaperUpdaterPlatform extends UpdaterPlatform { +public class PaperUpdaterPlatform implements UpdaterPlatform { private final Plugin plugin; public PaperUpdaterPlatform(Plugin plugin) { - super(); this.plugin = plugin; } @@ -46,9 +46,14 @@ public File getDownloadDir() { return Bukkit.getUpdateFolderFile(); } + @Override + public Logger getLogger() { + return plugin.getLogger(); + } + @Override public Lamp.Builder prepareLamp() { - return BukkitLamp.builder(PluginUpdater.getInstance()); + return BukkitLamp.builder(PaperUpdaterPlugin.getInstance()); } @Override @@ -72,9 +77,4 @@ public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.Proc PaperColor.handler().sendActionBarMessage(players, "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" .formatted(processed, total)); } - - @Override - public Logger getLogger() { - return plugin.getLogger(); - } } diff --git a/platform/paper-plugin/src/main/resources/plugin.yml b/platform/paper-plugin/src/main/resources/plugin.yml index 6586dff..fa3c900 100644 --- a/platform/paper-plugin/src/main/resources/plugin.yml +++ b/platform/paper-plugin/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: PluginUpdater version: '${version}' -main: org.lushplugins.pluginupdater.paper.PluginUpdater +main: org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin api-version: '1.18' modrinth-project-id: "plugin-updater" diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java similarity index 66% rename from platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java rename to platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java index 063723d..18f2f6e 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/PluginUpdater.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java @@ -8,11 +8,17 @@ import com.velocitypowered.api.plugin.annotation.DataDirectory; import com.velocitypowered.api.proxy.ProxyServer; import org.lushplugins.pluginupdater.api.util.DownloadLogger; +import org.lushplugins.pluginupdater.common.UpdaterImpl; +import org.lushplugins.pluginupdater.common.collector.CommonPluginCollector; +import org.lushplugins.pluginupdater.common.collector.ModrinthCollector; +import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; import org.lushplugins.pluginupdater.util.BuildParameters; import org.lushplugins.pluginupdater.velocity.api.VelocityUpdaterAPI; import org.lushplugins.pluginupdater.velocity.listener.PlayerListener; +import org.lushplugins.pluginupdater.velocity.platform.VelocityUpdaterPlatform; import java.nio.file.Path; +import java.util.List; import java.util.logging.Logger; @Plugin( @@ -20,17 +26,17 @@ name = "PluginUpdater", version = BuildParameters.VERSION ) -public class PluginUpdater { - private static PluginUpdater instance; +public class VelocityUpdaterPlugin { + private static VelocityUpdaterPlugin instance; private final ProxyServer server; private final Logger logger; private final Path dataFolder; - private VelocityUpdaterPlatform updater; + private UpdaterImpl updater; private VelocityUpdaterAPI api; @Inject - public PluginUpdater(ProxyServer server, Logger logger, @DataDirectory Path dataFolder) { + public VelocityUpdaterPlugin(ProxyServer server, Logger logger, @DataDirectory Path dataFolder) { instance = this; this.server = server; @@ -41,7 +47,11 @@ public PluginUpdater(ProxyServer server, Logger logger, @DataDirectory Path data @Subscribe public void onProxyInitialization(ProxyInitializeEvent event) { DownloadLogger.setLogFile(dataFolder.resolve("downloads.log").toFile()); - this.updater = new VelocityUpdaterPlatform(this); + VelocityUpdaterPlatform platform = new VelocityUpdaterPlatform(this); + this.updater = new UpdaterImpl(platform, List.of( + CommonPluginCollector::new, + PluginDataCollector.of(new ModrinthCollector(platform)) + )); this.api = new VelocityUpdaterAPI(updater); server.getEventManager().register(this, new PlayerListener(this)); @@ -63,7 +73,7 @@ public Logger logger() { return logger; } - public VelocityUpdaterPlatform updater() { + public UpdaterImpl updater() { return updater; } @@ -71,7 +81,7 @@ public VelocityUpdaterAPI api() { return api; } - public static PluginUpdater getInstance() { + public static VelocityUpdaterPlugin getInstance() { return instance; } } diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java index 9dace16..70925dc 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java @@ -2,12 +2,12 @@ import com.velocitypowered.api.plugin.PluginContainer; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.platform.UpdaterAPI; -import org.lushplugins.pluginupdater.velocity.VelocityUpdaterPlatform; public class VelocityUpdaterAPI extends UpdaterAPI { - public VelocityUpdaterAPI(VelocityUpdaterPlatform updater) { + public VelocityUpdaterAPI(UpdaterImpl updater) { super(updater); } diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java index d3794fb..a87009b 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/listener/PlayerListener.java @@ -6,14 +6,14 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.config.ConfigManager; -import org.lushplugins.pluginupdater.velocity.PluginUpdater; +import org.lushplugins.pluginupdater.velocity.VelocityUpdaterPlugin; import java.util.concurrent.TimeUnit; public class PlayerListener { - private final PluginUpdater instance; + private final VelocityUpdaterPlugin instance; - public PlayerListener(PluginUpdater instance) { + public PlayerListener(VelocityUpdaterPlugin instance) { this.instance = instance; } @@ -26,7 +26,7 @@ public void onPlayerJoin(PlayerFinishedConfigurationEvent event) { instance.server().getScheduler() .buildTask(instance, () -> { - ConfigManager configManager = instance.updater().getConfig(); + ConfigManager configManager = instance.updater().config(); int updatesAvailable = 0; for (PluginData pluginData : configManager.getAllPluginData()) { diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java similarity index 83% rename from platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java rename to platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java index 528a3ec..e160ac5 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlatform.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java @@ -1,4 +1,4 @@ -package org.lushplugins.pluginupdater.velocity; +package org.lushplugins.pluginupdater.velocity.platform; import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.proxy.Player; @@ -6,8 +6,10 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; +import org.lushplugins.pluginupdater.velocity.VelocityUpdaterPlugin; import org.lushplugins.pluginupdater.velocity.api.plugin.VelocityPluginInfo; import org.lushplugins.pluginupdater.velocity.api.util.VelocityUtil; import revxrsal.commands.Lamp; @@ -20,11 +22,10 @@ import java.util.List; import java.util.logging.Logger; -public class VelocityUpdaterPlatform extends UpdaterPlatform { - private final PluginUpdater instance; +public class VelocityUpdaterPlatform implements UpdaterPlatform { + private final VelocityUpdaterPlugin instance; - public VelocityUpdaterPlatform(PluginUpdater instance) { - super(); + public VelocityUpdaterPlatform(VelocityUpdaterPlugin instance) { this.instance = instance; } @@ -46,16 +47,21 @@ public File getDownloadDir() { return VelocityUtil.getUpdateFolderFile(); } + @Override + public Logger getLogger() { + return instance.logger(); + } + @Override public Lamp.Builder prepareLamp() { return VelocityLamp.builder(instance, instance.server()); } @Override - public void registerLampCommands(Lamp lamp) { - super.registerLampCommands(lamp); + public void registerLampCommands(UpdaterImpl updater, Lamp lamp) { + UpdaterPlatform.super.registerLampCommands(updater, lamp); - ((Lamp) lamp).accept(VelocityVisitors.brigadier(instance.server())); + ((Lamp) lamp).accept(VelocityVisitors.brigadier(this.instance.server())); } @Override @@ -80,9 +86,4 @@ public void sendProcessingNotification(UpdateHandler handler, UpdateHandler.Proc "&#b7faa2Updater processing: Bb04f%s&#b7faa2/Bb04f%s" .formatted(processed, total))); } - - @Override - public Logger getLogger() { - return instance.logger(); - } } From c50b40091515432c4cb7a40c20b6d6bd85c9a831 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:45:48 +0300 Subject: [PATCH 41/57] Reintroduced processing notifications --- .../pluginupdater/common/platform/UpdaterPlatform.java | 1 - .../pluginupdater/common/updater/UpdateHandler.java | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java index 6c84df5..18b4874 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java @@ -36,6 +36,5 @@ default void registerLampCommands(UpdaterImpl updater, Lamp lamp) { boolean hasPermission(CommandActor actor, String permission); - // TODO: Reimplement void sendProcessingNotification(UpdateHandler handler, UpdateHandler.ProcessingData.State state); } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java index 36f8453..f25b1a0 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/updater/UpdateHandler.java @@ -78,7 +78,7 @@ private void processQueue() { ProcessingData.State state = processingData.getState(); this.currentlyProcessing.compute(state, (key, oldValue) -> oldValue != null ? oldValue + 1 : 1); - sendNotification(state); + updater.platform().sendProcessingNotification(this, state); switch (state) { case UPDATE_CHECK -> { @@ -121,10 +121,6 @@ private void processQueue() { } } - public void sendNotification(ProcessingData.State state) { - // TODO - } - public static class ProcessingData { private final UpdaterImpl updater; private final String pluginName; From cec8fb8de9d38f3114239a4ba744e2781dd06be2 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:51:48 +0300 Subject: [PATCH 42/57] Added nullable annotation to getFile --- .../org/lushplugins/pluginupdater/api/updater/PluginInfo.java | 4 +++- .../pluginupdater/paper/api/plugin/PaperPluginInfo.java | 3 ++- .../pluginupdater/velocity/api/plugin/VelocityPluginInfo.java | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java index 0cd2ac9..b4df5a6 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginInfo.java @@ -1,5 +1,7 @@ package org.lushplugins.pluginupdater.api.updater; +import org.jetbrains.annotations.Nullable; + import java.io.File; import java.util.logging.Logger; @@ -18,7 +20,7 @@ public interface PluginInfo { /** * @return The jar file that represents this plugin */ - File getFile(); + @Nullable File getFile(); /** * @return The plugin's logger instance diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java index 404d533..e9af4be 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java @@ -2,6 +2,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -24,7 +25,7 @@ public String getVersion() { } @Override - public File getFile() { + public @Nullable File getFile() { try { Method method = JavaPlugin.class.getDeclaredMethod("getFile"); method.setAccessible(true); diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java index cf752c7..5ddf4ea 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java @@ -3,6 +3,7 @@ import com.velocitypowered.api.plugin.PluginContainer; import org.jetbrains.annotations.Nullable; import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.File; import java.nio.file.Path; @@ -21,7 +22,7 @@ public String getVersion() { } @Override - public File getFile() { + public @Nullable File getFile() { Path path = plugin.getDescription().getSource().orElse(null); return path != null ? path.toFile() : null; } From fa4b24233a235a23caaf8f8639c07c14a5aa5aff Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:52:07 +0300 Subject: [PATCH 43/57] Ensured VelocityPluginInfo always returns a logger --- .../pluginupdater/velocity/api/plugin/VelocityPluginInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java index 5ddf4ea..9c148e4 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java @@ -29,6 +29,6 @@ public String getVersion() { @Override public Logger getLogger() { - return logger; + return logger != null ? logger : UpdaterConstants.LOGGER; } } From 67f2e57def93c839178527755ab276d0636855cf Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:52:32 +0300 Subject: [PATCH 44/57] Removed duplicate log header --- .../pluginupdater/paper/api/plugin/PaperPluginInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java index e9af4be..656fc12 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java @@ -32,7 +32,7 @@ public String getVersion() { return (File) method.invoke(plugin); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - UpdaterConstants.LOGGER.log(Level.WARNING, "[PluginUpdater] Caught error whilst getting plugin file: ", e); + UpdaterConstants.LOGGER.log(Level.WARNING, "Caught error whilst getting plugin file: ", e); return null; } } From 3ae88be32c5cedbd0fa9688acf4f9b6bddfc0b7e Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:54:34 +0300 Subject: [PATCH 45/57] Made platform tasks skip building if common fails --- .github/workflows/pr-tests.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index a1e4fb6..3aacc5c 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -18,7 +18,6 @@ jobs: build-paper: name: 'Build Paper modules' needs: build-common - if: always() uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Paper platform' @@ -27,7 +26,6 @@ jobs: build-velocity: name: 'Build Velocity modules' needs: build-common - if: always() uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Velocity platform' From afbfad3a885534b6e1beb70edd439b722512d036 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 02:57:57 +0300 Subject: [PATCH 46/57] Renamed GitHub jobs --- .github/workflows/build-platform.yml | 1 + .github/workflows/pr-tests.yml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-platform.yml b/.github/workflows/build-platform.yml index c215a06..ea11d99 100644 --- a/.github/workflows/build-platform.yml +++ b/.github/workflows/build-platform.yml @@ -12,6 +12,7 @@ on: jobs: build: + name: "Build" runs-on: ubuntu-latest steps: - name: Checkout Repository diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 3aacc5c..a1715bc 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -9,14 +9,14 @@ on: jobs: build-common: - name: 'Build common modules' + name: 'Common Modules' uses: ./.github/workflows/build-platform.yml with: display-name: 'Build common' gradle-tasks: 'common:impl:build' build-paper: - name: 'Build Paper modules' + name: 'Paper Platform' needs: build-common uses: ./.github/workflows/build-platform.yml with: @@ -24,7 +24,7 @@ jobs: gradle-tasks: 'platform:paper-plugin:build' build-velocity: - name: 'Build Velocity modules' + name: 'Velocity Platform' needs: build-common uses: ./.github/workflows/build-platform.yml with: From 00673356d58a69b7bcf311b71143b3d45a60299a Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 03:16:58 +0300 Subject: [PATCH 47/57] Finished migration to NightConfig --- .../collector/CommonPluginCollector.java | 53 ++++-------- .../common/config/ComparatorRegistry.java | 2 +- .../common/config/ConfigManager.java | 30 +------ .../deserializer/PluginDataDeserializer.java | 39 ++++++++- .../paper/PaperUpdaterPlugin.java | 4 +- .../paper/collector/PluginYamlCollector.java | 83 ++++++++++--------- .../paper/collector/SpigotCollector.java | 11 ++- 7 files changed, 109 insertions(+), 113 deletions(-) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java index 90e3be3..cf69285 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java @@ -1,16 +1,12 @@ package org.lushplugins.pluginupdater.common.collector; -import org.lushplugins.pluginupdater.common.config.ComparatorRegistry; -import org.lushplugins.pluginupdater.common.config.ConfigManager; +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.core.file.FileConfig; import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.api.source.SourceData; -import org.lushplugins.pluginupdater.api.source.SourceRegistry; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.UpdaterImpl; +import org.lushplugins.pluginupdater.common.config.deserializer.PluginDataDeserializer; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.*; public class CommonPluginCollector implements PluginDataCollector { @@ -22,48 +18,29 @@ public CommonPluginCollector(UpdaterImpl updater) { @Override public List collect(Collection plugins) { - ConfigManager config = updater.config(); - List pluginDataList = new ArrayList<>(); + // TODO: Access resource location (not file) + FileConfig config = FileConfig.of("common-plugins.yml"); + config.load(); - InputStream commonPluginsInputStream = PluginUpdater.getInstance().getResource("common-plugins.yml"); - if (commonPluginsInputStream == null) { - return Collections.emptyList(); - } - - YamlConfiguration commonPluginsYml = YamlConfiguration.loadConfiguration(new InputStreamReader(commonPluginsInputStream)); + List collectedPluginData = new ArrayList<>(); for (PluginInfo plugin : plugins) { String pluginName = plugin.getName(); - if (!config.canRegisterPluginData(pluginName)) { + if (!updater.config().canRegisterPluginData(pluginName)) { continue; } - if (!commonPluginsYml.contains(pluginName)) { + if (!config.contains(pluginName)) { continue; } - ConfigurationSection pluginSection = commonPluginsYml.getConfigurationSection(pluginName); - if (pluginSection == null) { - continue; - } - - VersionComparator comparator; - ConfigurationSection comparatorSection = pluginSection.getConfigurationSection("comparator"); - if (comparatorSection != null) { - String comparatorType = comparatorSection.getString("type", "sem-ver"); - comparator = ComparatorRegistry.readVersionComparator(comparatorType, comparatorSection); - } else { - comparator = null; - } - - SourceData sourceData = SourceRegistry.getSourceData(pluginSection.getString("source"), pluginSection); - if (sourceData != null) { - pluginDataList.add(PluginData.builder(plugin) - .sourceData(sourceData) - .comparator(comparator) - .build()); + Config pluginConfig = config.get(pluginName); + PluginData pluginData = PluginDataDeserializer.deserialize(updater, pluginName, pluginConfig); + if (pluginData != null) { + collectedPluginData.add(pluginData); } } - return pluginDataList; + config.close(); + return collectedPluginData; } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java index 9ab045d..82f4352 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ComparatorRegistry.java @@ -19,7 +19,7 @@ public class ComparatorRegistry { register("sem-ver", ComparatorDeserializer::semVer); } - public static @Nullable VersionComparator readVersionComparator(String id, Config config) { + public static @Nullable VersionComparator deserializeVersionComparator(String id, Config config) { try { return comparators.containsKey(id) ? comparators.get(id).apply(config) : null; } catch (Exception e) { diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 138b7d2..30a2e5f 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -8,6 +8,7 @@ import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.config.deserializer.PluginDataDeserializer; import org.lushplugins.pluginupdater.common.config.deserializer.SourceDataDeserializer; import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; @@ -59,32 +60,9 @@ public void reload() { return; } - PluginInfo currPlugin = updater.platform().getPlugin(pluginName); - if (currPlugin == null) { - return; - } - - VersionComparator comparator; - Config comparatorConfig = pluginConfig.get("comparator"); - if (comparatorConfig != null) { - String comparatorType = comparatorConfig.getOrElse("type", "sem-ver"); - comparator = ComparatorRegistry.readVersionComparator(comparatorType, comparatorConfig); - } else { - comparator = null; - } - - boolean allowDownloads = pluginConfig.getOrElse("allow-downloads", true); - try { - SourceData sourceData = SourceDataDeserializer.deserialize(updater.platform(), pluginConfig); - if (sourceData != null) { - addPlugin(pluginName, PluginData.builder(currPlugin) - .sourceData(sourceData) - .comparator(comparator) - .allowDownloads(allowDownloads) - .build()); - } - } catch (Exception e) { - updater.platform().getLogger().log(Level.SEVERE, "Caught error whilst collecting data for '%s'".formatted(pluginName), e); + PluginData pluginData = PluginDataDeserializer.deserialize(updater, pluginName, pluginConfig); + if (pluginData != null) { + addPlugin(pluginName, pluginData); } }); } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java index a6a5554..0cf8c85 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/deserializer/PluginDataDeserializer.java @@ -1,12 +1,47 @@ package org.lushplugins.pluginupdater.common.config.deserializer; import com.electronwill.nightconfig.core.Config; +import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; +import org.lushplugins.pluginupdater.common.UpdaterImpl; +import org.lushplugins.pluginupdater.common.config.ComparatorRegistry; + +import java.util.logging.Level; public class PluginDataDeserializer { - // TODO - public static PluginData read(Config config) { + public static PluginData deserialize(UpdaterImpl updater, String pluginName, Config config) { + PluginInfo currPlugin = updater.platform().getPlugin(pluginName); + if (currPlugin == null) { + return null; + } + + VersionComparator comparator; + Config comparatorConfig = config.get("comparator"); + if (comparatorConfig != null) { + String comparatorType = comparatorConfig.getOrElse("type", "sem-ver"); + comparator = ComparatorRegistry.deserializeVersionComparator(comparatorType, comparatorConfig); + } else { + comparator = null; + } + + boolean allowDownloads = config.getOrElse("allow-downloads", true); + try { + SourceData sourceData = SourceDataDeserializer.deserialize(updater.platform(), config); + if (sourceData != null) { + return PluginData.builder(currPlugin) + .sourceData(sourceData) + .comparator(comparator) + .allowDownloads(allowDownloads) + .build(); + } + } catch (Exception e) { + updater.platform().getLogger().log(Level.SEVERE, "Caught error whilst reading data for '%s'" + .formatted(pluginName), e); + } + return null; } } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java index 86a892c..f0b1fe5 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/PaperUpdaterPlugin.java @@ -32,9 +32,9 @@ public void onEnable() { PaperUpdaterPlatform platform = new PaperUpdaterPlatform(this); this.updater = new UpdaterImpl(platform, List.of( CommonPluginCollector::new, - PluginDataCollector.of(new PluginYamlCollector()), + PluginYamlCollector::new, PluginDataCollector.of(new ModrinthCollector(platform)), - PluginDataCollector.of(new SpigotCollector()) + PluginDataCollector.of(new SpigotCollector(platform)) )); this.api = new PaperUpdaterAPI(updater); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index e11a0ae..112e1ea 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -1,72 +1,73 @@ package org.lushplugins.pluginupdater.paper.collector; -import org.bukkit.configuration.file.YamlConfiguration; +import com.electronwill.nightconfig.core.file.FileConfig; import org.lushplugins.pluginupdater.api.source.type.GithubSource; import org.lushplugins.pluginupdater.api.source.type.HangarSource; import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.common.config.ConfigManager; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class PluginYamlCollector implements PluginDataCollector { + private final UpdaterImpl updater; + + public PluginYamlCollector(UpdaterImpl updater) { + this.updater = updater; + } @Override public List collect(Collection plugins) { - ConfigManager configManager = PaperUpdaterPlugin.getInstance().updater().config(); - List pluginDataList = new ArrayList<>(); - + List collectedPluginData = new ArrayList<>(); for (PluginInfo plugin : plugins) { String pluginName = plugin.getName(); - if (!configManager.canRegisterPluginData(pluginName)) { + if (!updater.config().canRegisterPluginData(pluginName)) { continue; } - InputStream pluginInputStream = plugin.getResource("plugin.yml"); - if (pluginInputStream != null) { - YamlConfiguration pluginYml = YamlConfiguration.loadConfiguration(new InputStreamReader(pluginInputStream)); + // TODO: Access resource location (not file) + FileConfig config = FileConfig.of("plugin.yml"); + config.load(); - SourceData sourceData = null; - if (pluginYml.contains("modrinth-project-id")) { - sourceData = new ModrinthSource.Data( - pluginYml.getString("modrinth-project-id"), - ModrinthSource.ReleaseChannel.ALL - ); - } - else if (pluginYml.contains("spigot-resource-id")) { - sourceData = new SpigotSource.Data( - pluginYml.getString("spigot-resource-id") - ); - } - else if (pluginYml.contains("hangar-project-slug")) { - sourceData = new HangarSource.Data( - pluginYml.getString("hangar-project-slug") - ); - } - else if (pluginYml.contains("github-repo")) { - sourceData = new GithubSource.Data( - pluginYml.getString("github-repo"), - null - ); - } + SourceData sourceData = null; + if (config.contains("modrinth-project-id")) { + sourceData = new ModrinthSource.Data( + config.get("modrinth-project-id"), + ModrinthSource.ReleaseChannel.ALL + ); + } + else if (config.contains("spigot-resource-id")) { + sourceData = new SpigotSource.Data( + config.get("spigot-resource-id") + ); + } + else if (config.contains("hangar-project-slug")) { + sourceData = new HangarSource.Data( + config.get("hangar-project-slug") + ); + } + else if (config.contains("github-repo")) { + sourceData = new GithubSource.Data( + config.get("github-repo"), + null + ); + } - if (sourceData != null) { - pluginDataList.add(PluginData.builder(plugin) - .sourceData(sourceData) - .build()); - } + if (sourceData != null) { + collectedPluginData.add(PluginData.builder(plugin) + .sourceData(sourceData) + .build()); } + + config.close(); } - return pluginDataList; + return collectedPluginData; } } diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index 2fd71a2..c994f41 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -7,10 +7,10 @@ import org.lushplugins.pluginupdater.api.source.type.SpigotSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.common.collector.PluginDataCollector; -import org.lushplugins.pluginupdater.paper.PaperUpdaterPlugin; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.util.HttpUtil; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.common.platform.UpdaterPlatform; import java.io.IOException; import java.net.http.HttpResponse; @@ -20,6 +20,11 @@ import java.util.logging.Level; public class SpigotCollector implements PluginDataCollector { + private final UpdaterPlatform platform; + + public SpigotCollector(UpdaterPlatform platform) { + this.platform = platform; + } @Override public List collect(Collection plugins) { @@ -39,7 +44,7 @@ public List collect(Collection plugins) { try { response = HttpUtil.sendRequest(String.format("%s/search/resources/%s", UpdaterConstants.Endpoint.SPIGET, unknownPlugin.getName())); } catch (IOException | InterruptedException e) { - PaperUpdaterPlugin.getInstance().getLogger().log(Level.WARNING, "Caught error whilst searching for project on spiget: ", e); + platform.getLogger().log(Level.WARNING, "Caught error whilst searching for project on spiget: ", e); return null; } @@ -48,7 +53,7 @@ public List collect(Collection plugins) { } if (response.statusCode() != 200) { - PaperUpdaterPlugin.getInstance().getLogger().log(Level.WARNING, "Received invalid response code (%s) whilst searching for project on spiget (%s)".formatted(response.statusCode(), response.uri())); + platform.getLogger().log(Level.WARNING, "Received invalid response code (%s) whilst searching for project on spiget (%s)".formatted(response.statusCode(), response.uri())); return null; } From 126ebcf19bf5c2e8f42459647af5320e9cf32c28 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 03:19:52 +0300 Subject: [PATCH 48/57] Fixed typo --- .../pluginupdater/paper/collector/SpigotCollector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java index c994f41..738305e 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/SpigotCollector.java @@ -22,7 +22,7 @@ public class SpigotCollector implements PluginDataCollector { private final UpdaterPlatform platform; - public SpigotCollector(UpdaterPlatform platform) { + public SpigotCollector(UpdaterPlatform platform) { this.platform = platform; } From b08a1c5856e6e57d8e03ffac95f821af7a8cbef6 Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 23:40:16 +0300 Subject: [PATCH 49/57] Updated build scripts and setup Modrinth syncing/publishing --- .github/workflows/sync-modrinth-page.yml | 30 +++++++++++++++++++ .github/workflows/version-release.yml | 4 +-- build-logic/build.gradle.kts | 4 +++ .../kotlin/updater.modrinth-base.gradle.kts | 8 +++++ .../updater.publish-modrinth.gradle.kts | 22 ++++++++++++++ .../updater.sync-modrinth-page.gradle.kts | 7 +++++ build.gradle.kts | 1 + platform/paper-plugin/build.gradle.kts | 22 +------------- platform/velocity-plugin/build.gradle.kts | 6 +++- settings.gradle.kts | 1 - 10 files changed, 80 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/sync-modrinth-page.yml create mode 100644 build-logic/src/main/kotlin/updater.modrinth-base.gradle.kts create mode 100644 build-logic/src/main/kotlin/updater.publish-modrinth.gradle.kts create mode 100644 build-logic/src/main/kotlin/updater.sync-modrinth-page.gradle.kts diff --git a/.github/workflows/sync-modrinth-page.yml b/.github/workflows/sync-modrinth-page.yml new file mode 100644 index 0000000..2b6191e --- /dev/null +++ b/.github/workflows/sync-modrinth-page.yml @@ -0,0 +1,30 @@ +name: Sync Modrinth Page + +permissions: + contents: write + +on: + push: + branches: + - main + paths: + - README.md + +jobs: + create_release: + runs-on: ubuntu-latest + + env: + MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Sync Modrinth Page + if: env.MODRINTH_TOKEN != '' + run: | + chmod +x ./gradlew + ./gradlew modrinthSyncBody diff --git a/.github/workflows/version-release.yml b/.github/workflows/version-release.yml index c08404c..5e5284b 100644 --- a/.github/workflows/version-release.yml +++ b/.github/workflows/version-release.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -78,4 +78,4 @@ jobs: if: env.MODRINTH_TOKEN != '' run: | chmod +x ./gradlew - ./gradlew modrinth + ./gradlew platform:paper-plugin:modrinth diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index cc02e63..f937b6f 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -5,3 +5,7 @@ plugins { repositories { gradlePluginPortal() } + +dependencies { + implementation("com.modrinth.minotaur:Minotaur:2.9.0") +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/updater.modrinth-base.gradle.kts b/build-logic/src/main/kotlin/updater.modrinth-base.gradle.kts new file mode 100644 index 0000000..e02aa94 --- /dev/null +++ b/build-logic/src/main/kotlin/updater.modrinth-base.gradle.kts @@ -0,0 +1,8 @@ +plugins { + id("com.modrinth.minotaur") +} + +modrinth { + token.set(System.getenv("MODRINTH_TOKEN")) + projectId.set("IBSpJfbm") +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/updater.publish-modrinth.gradle.kts b/build-logic/src/main/kotlin/updater.publish-modrinth.gradle.kts new file mode 100644 index 0000000..ccff5be --- /dev/null +++ b/build-logic/src/main/kotlin/updater.publish-modrinth.gradle.kts @@ -0,0 +1,22 @@ +plugins { + id("updater.modrinth-base") +} + +modrinth { + if (System.getenv("RELEASE_TYPE") == "release") { + versionNumber.set(rootProject.version.toString()) + changelog.set(rootProject.getChangelogSinceLastTag()) + } else { + versionNumber.set("${rootProject.version}-${rootProject.getCurrentCommitHash()}") + } + uploadFile.set(file("build/libs/${project.name}-${project.version}.jar")) + versionType.set(System.getenv("RELEASE_TYPE")) + gameVersions.addAll( + "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11", + "21.6" + ) +} + +tasks.modrinth { + dependsOn("shadowJar") +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/updater.sync-modrinth-page.gradle.kts b/build-logic/src/main/kotlin/updater.sync-modrinth-page.gradle.kts new file mode 100644 index 0000000..189183e --- /dev/null +++ b/build-logic/src/main/kotlin/updater.sync-modrinth-page.gradle.kts @@ -0,0 +1,7 @@ +plugins { + id("updater.modrinth-base") +} + +modrinth { + syncBodyFrom.set(rootProject.file("README.md").readText()) +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 5af7bef..fd86379 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,6 +2,7 @@ plugins { `java-library` `maven-publish` id("updater.build-logic") + id("updater.sync-modrinth-page") } group = "org.lushplugins" diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index 5be8d94..4329d2e 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("com.gradleup.shadow") - id("com.modrinth.minotaur") id("xyz.jpenilla.run-paper") + id("updater.publish-modrinth") } dependencies { @@ -43,25 +43,5 @@ tasks { } modrinth { - token.set(System.getenv("MODRINTH_TOKEN")) - projectId.set("IBSpJfbm") - if (System.getenv("RELEASE_TYPE") == "release") { - versionNumber.set(rootProject.version.toString()) - changelog.set(rootProject.getChangelogSinceLastTag()) - } else { - versionNumber.set("${rootProject.version}-${rootProject.getCurrentCommitHash()}") - } - uploadFile.set(file("build/libs/${project.name}-${project.version}.jar")) - versionType.set(System.getenv("RELEASE_TYPE")) - gameVersions.addAll( - "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10", "1.21.11", - "21.6" - ) loaders.addAll("paper", "purpur", "folia") - syncBodyFrom.set(rootProject.file("README.md").readText()) -} - -tasks.modrinth { - dependsOn("shadowJar") - dependsOn(tasks.modrinthSyncBody) } \ No newline at end of file diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index b210804..cc13f47 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("com.gradleup.shadow") - id("com.modrinth.minotaur") id("xyz.jpenilla.run-paper") + id("updater.publish-modrinth") } dependencies { @@ -11,4 +11,8 @@ dependencies { implementation(project(":platform:velocity-api")) implementation("io.github.revxrsal:lamp.velocity:4.0.0-rc.16") implementation("io.github.revxrsal:lamp.brigadier:4.0.0-rc.16") +} + +modrinth { + loaders.addAll("velocity") } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index a5e87d4..3dbdefd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,6 @@ pluginManagement { id("com.gradleup.shadow") version "9.4.1" id("net.kyori.blossom") version "2.2.0" id("org.jetbrains.gradle.plugin.idea-ext") version "1.4.1" - id("com.modrinth.minotaur") version "2.+" id("xyz.jpenilla.run-paper") version "3.0.2" } } From edacb748cccfbf72bb0d75cb7c8e08287779d5af Mon Sep 17 00:00:00 2001 From: Oak Date: Tue, 5 May 2026 23:49:04 +0300 Subject: [PATCH 50/57] Finalised maven publishing --- common/api/build.gradle.kts | 13 +------------ common/build.gradle.kts | 12 ++++++++++++ platform/build.gradle.kts | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) create mode 100644 common/build.gradle.kts diff --git a/common/api/build.gradle.kts b/common/api/build.gradle.kts index bf5336d..491a3a4 100644 --- a/common/api/build.gradle.kts +++ b/common/api/build.gradle.kts @@ -17,15 +17,4 @@ dependencies { api("com.google.guava:guava:33.6.0-jre") api("com.google.code.gson:gson:2.14.0") compileOnlyApi("org.jetbrains:annotations:26.1.0") -} - -publishing { - publications { - create("maven") { - groupId = rootProject.group.toString() + "." + rootProject.name.lowercase() - artifactId = "common-api" - version = rootProject.version.toString() - from(project.components["java"]) - } - } -} +} \ No newline at end of file diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 0000000..d8cac6c --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,12 @@ +subprojects { + publishing { + publications { + create("maven") { + groupId = rootProject.group.toString() + "." + rootProject.name.lowercase() + artifactId = "updater.common-" + project.name + version = rootProject.version.toString() + from(project.components["java"]) + } + } + } +} \ No newline at end of file diff --git a/platform/build.gradle.kts b/platform/build.gradle.kts index 04d0869..ba1e1ea 100644 --- a/platform/build.gradle.kts +++ b/platform/build.gradle.kts @@ -3,7 +3,7 @@ subprojects { publications { create("maven") { groupId = rootProject.group.toString() + "." + rootProject.name.lowercase() - artifactId = project.name + artifactId = "updater." + project.name version = rootProject.version.toString() from(project.components["java"]) } From 040b0759d9fb7b62331d6da9462c534510910013 Mon Sep 17 00:00:00 2001 From: Oak Date: Wed, 6 May 2026 00:04:41 +0300 Subject: [PATCH 51/57] Migrated ModrinthSource to Paper and Velocity with separate loader lists to improve accuracy --- .../pluginupdater/api/source/SourceRegistry.java | 4 +--- .../api/source/type/ModrinthSource.java | 12 +++++++++++- .../pluginupdater/paper/api/PaperUpdater.java | 10 ++++++++++ .../pluginupdater/velocity/api/VelocityUpdater.java | 7 +++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java index acc197f..712c9e2 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/SourceRegistry.java @@ -16,12 +16,10 @@ public class SourceRegistry { static { register(new GithubSource()); register(new HangarSource()); - register(new ModrinthSource()); register(new SpigotSource()); } - @Nullable - public static Source get(String name) { + public static @Nullable Source get(String name) { return sources.get(name); } diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java index 6d7bee3..91c3a95 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/type/ModrinthSource.java @@ -15,10 +15,17 @@ import java.net.http.HttpResponse; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class ModrinthSource implements Source { public static final String NAME = "modrinth"; + private final List loaders; + + public ModrinthSource(List loaders) { + this.loaders = loaders; + } + @Override public String getName() { return NAME; @@ -47,9 +54,12 @@ public String getDownloadUrl(PluginData pluginData, SourceData sourceData) throw private JsonArray getVersions(PluginData pluginData, Data modrinthData) throws IOException, InterruptedException { StringBuilder uriBuilder = new StringBuilder("%s/project/%s/version" .formatted(UpdaterConstants.Endpoint.MODRINTH, modrinthData.projectId())) - .append("?loaders=[%22bukkit%22,%22spigot%22,%22paper%22,%22purpur%22,%22folia%22]") + .append("?loaders=").append(this.loaders.stream() + .map(s -> "%22" + s + "%22") + .collect(Collectors.joining(",", "[", "]"))) .append("&include_changelog=false"); + if (modrinthData.filtersReleaseChannel()) { uriBuilder.append("&version_type=").append(modrinthData.releaseChannel()); } diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java index 3d957da..28c705f 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java @@ -2,12 +2,22 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.updater.Updater; import org.lushplugins.pluginupdater.paper.api.notification.PaperUpdateNotifier; import org.lushplugins.pluginupdater.paper.api.plugin.PaperPluginInfo; +import java.util.List; + public class PaperUpdater { + static { + SourceRegistry.register(new ModrinthSource(List.of( + "bukkit", "spigot", "paper", "purpur", "folia" + ))); + } + public static Updater.Builder builder(Plugin plugin) { return Updater.builder(new PaperPluginInfo(plugin), Bukkit.getUpdateFolderFile()) .notifier(PaperUpdateNotifier::new); diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java index bb8e8f1..665c41a 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java @@ -2,15 +2,22 @@ import com.velocitypowered.api.plugin.PluginContainer; import com.velocitypowered.api.proxy.ProxyServer; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.updater.Updater; import org.lushplugins.pluginupdater.velocity.api.notification.VelocityUpdateNotifier; import org.lushplugins.pluginupdater.velocity.api.plugin.VelocityPluginInfo; import org.lushplugins.pluginupdater.velocity.api.util.VelocityUtil; +import java.util.List; import java.util.logging.Logger; public class VelocityUpdater { + static { + SourceRegistry.register(new ModrinthSource(List.of("velocity"))); + } + public static Updater.Builder builder(ProxyServer server, PluginContainer plugin, Logger logger) { return Updater.builder(new VelocityPluginInfo(plugin, logger), VelocityUtil.getUpdateFolderFile()) .notifier((updater, permission, message) -> { From e4a7486a6f118e09954f1085f3ac4f856e6e7431 Mon Sep 17 00:00:00 2001 From: Oak Date: Wed, 6 May 2026 00:09:14 +0300 Subject: [PATCH 52/57] Bumped version to 3.0.0 in advance --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index fd86379..965db0c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "org.lushplugins" -version = "2.2.0" +version = "3.0.0" allprojects { plugins.apply("java-library") From dfc6187c6fe489efa2cc61709c31924067a902a9 Mon Sep 17 00:00:00 2001 From: Oak Date: Wed, 6 May 2026 00:50:57 +0300 Subject: [PATCH 53/57] Updated paper dependency --- build.gradle.kts | 27 ++++++++++++++++++++++++++- platform/paper-api/build.gradle.kts | 2 +- settings.gradle.kts | 4 ++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 965db0c..fb98ef3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,8 +15,30 @@ allprojects { group = rootProject.group version = rootProject.version + dependencies { + components.all { + withVariant("apiElements") { + attributes { + attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 21) + } + } + withVariant("runtimeElements") { + attributes { + attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 21) + } + } + } + } + java { - toolchain.languageVersion.set(JavaLanguageVersion.of(21)) + // Ensures all code is written against Java 21 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + + // Allows compileOnly dependencies that require Java 25 + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) + } withSourcesJar() } @@ -24,6 +46,9 @@ allprojects { tasks { withType { options.encoding = "UTF-8" + + // Ensures the output jar is compatible with Java 21 + options.release.set(21) } } diff --git a/platform/paper-api/build.gradle.kts b/platform/paper-api/build.gradle.kts index 1923519..4bbd470 100644 --- a/platform/paper-api/build.gradle.kts +++ b/platform/paper-api/build.gradle.kts @@ -1,4 +1,4 @@ dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:26.1.2.build.60-stable") compileOnly(project(":common:api")) } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 3dbdefd..9a6f598 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,6 +15,10 @@ pluginManagement { } } +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} + rootProject.name = "PluginUpdater" includeBuild("build-logic") From 51fa90d03101c182d1247d3c6a35184e20fafd46 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Sun, 10 May 2026 23:07:55 +0100 Subject: [PATCH 54/57] Completed remaining TODOs --- .../pluginupdater/api/updater/PluginData.java | 1 - .../collector/CommonPluginCollector.java | 9 ++++----- .../common/config/ConfigManager.java | 14 +++++++------- .../common/platform/UpdaterPlatform.java | 12 ++++++++++++ .../paper/collector/PluginYamlCollector.java | 11 +++++------ .../paper/platform/PaperUpdaterPlatform.java | 17 +++++++++++++++++ .../notification/VelocityUpdateNotifier.java | 2 +- .../api/plugin/VelocityPluginInfo.java | 8 ++++---- .../velocity/VelocityUpdaterPlugin.java | 4 ++++ .../velocity/api/VelocityUpdaterAPI.java | 4 ++-- .../platform/VelocityUpdaterPlatform.java | 18 ++++++++++++++++++ 11 files changed, 74 insertions(+), 26 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java index d4b5417..1406feb 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/updater/PluginData.java @@ -36,7 +36,6 @@ public String getPluginName() { return pluginName; } - // TODO: Ensure all uses do not get broken by version formatting not being applied here public String getCurrentVersion() { return currentVersion; } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java index cf69285..0f0ce81 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/collector/CommonPluginCollector.java @@ -1,12 +1,13 @@ package org.lushplugins.pluginupdater.common.collector; import com.electronwill.nightconfig.core.Config; -import com.electronwill.nightconfig.core.file.FileConfig; +import com.electronwill.nightconfig.yaml.YamlFormat; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.config.deserializer.PluginDataDeserializer; +import java.io.InputStream; import java.util.*; public class CommonPluginCollector implements PluginDataCollector { @@ -18,9 +19,8 @@ public CommonPluginCollector(UpdaterImpl updater) { @Override public List collect(Collection plugins) { - // TODO: Access resource location (not file) - FileConfig config = FileConfig.of("common-plugins.yml"); - config.load(); + InputStream resource = updater.platform().getResourceStream("common-plugins.yml"); + Config config = YamlFormat.defaultInstance().createParser().parse(resource); List collectedPluginData = new ArrayList<>(); for (PluginInfo plugin : plugins) { @@ -40,7 +40,6 @@ public List collect(Collection plugins) { } } - config.close(); return collectedPluginData; } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index 30a2e5f..db30fbd 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -4,16 +4,14 @@ import com.electronwill.nightconfig.core.file.FileConfig; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; -import org.lushplugins.pluginupdater.api.updater.PluginInfo; -import org.lushplugins.pluginupdater.api.version.comparator.VersionComparator; import org.lushplugins.pluginupdater.common.config.deserializer.PluginDataDeserializer; -import org.lushplugins.pluginupdater.common.config.deserializer.SourceDataDeserializer; import org.lushplugins.pluginupdater.common.UpdaterImpl; import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.common.util.ConfigUtil; +import java.io.IOException; +import java.nio.file.Files; import java.util.*; import java.util.logging.Level; @@ -26,12 +24,14 @@ public class ConfigManager { public ConfigManager(UpdaterImpl updater) { this.updater = updater; - // TODO: Save default config if not there } public void reload() { - // TODO: Access file location - FileConfig config = FileConfig.of(""); + updater.platform().getDataPath().toFile().mkdirs(); + + FileConfig config = FileConfig.builder(updater.platform().getDataPath().resolve("config.yml")) + .defaultData(updater.platform().getClass().getResource("/config.yml")) + .build(); config.load(); boolean checkOnReload = ConfigUtil.getOrAliasOrElse( diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java index 18b4874..8a32067 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/platform/UpdaterPlatform.java @@ -11,6 +11,8 @@ import revxrsal.commands.command.CommandActor; import java.io.File; +import java.io.InputStream; +import java.nio.file.Path; import java.util.List; import java.util.logging.Logger; @@ -20,8 +22,18 @@ public interface UpdaterPlatform { List getPlugins(); + Path getDataPath(); + File getDownloadDir(); + InputStream getResourceStream(String path); + + InputStream getResourceStream(PluginInfo pluginInfo, String path); + + default InputStream getResourceStreamFor(String pluginName, String path) { + return getResourceStream(getPlugin(pluginName), path); + } + Logger getLogger(); Lamp.Builder prepareLamp(); diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java index 112e1ea..0a31c4e 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/collector/PluginYamlCollector.java @@ -1,6 +1,7 @@ package org.lushplugins.pluginupdater.paper.collector; -import com.electronwill.nightconfig.core.file.FileConfig; +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.yaml.YamlFormat; import org.lushplugins.pluginupdater.api.source.type.GithubSource; import org.lushplugins.pluginupdater.api.source.type.HangarSource; import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; @@ -11,6 +12,7 @@ import org.lushplugins.pluginupdater.api.source.SourceData; import org.lushplugins.pluginupdater.api.updater.PluginData; +import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -31,9 +33,8 @@ public List collect(Collection plugins) { continue; } - // TODO: Access resource location (not file) - FileConfig config = FileConfig.of("plugin.yml"); - config.load(); + InputStream resource = updater.platform().getResourceStream("plugin.yml"); + Config config = YamlFormat.defaultInstance().createParser().parse(resource); SourceData sourceData = null; if (config.contains("modrinth-project-id")) { @@ -64,8 +65,6 @@ else if (config.contains("github-repo")) { .sourceData(sourceData) .build()); } - - config.close(); } return collectedPluginData; diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java index ebe8837..7c87227 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java @@ -16,6 +16,8 @@ import revxrsal.commands.command.CommandActor; import java.io.File; +import java.io.InputStream; +import java.nio.file.Path; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; @@ -41,11 +43,26 @@ public List getPlugins() { .toList(); } + @Override + public Path getDataPath() { + return plugin.getDataPath(); + } + @Override public File getDownloadDir() { return Bukkit.getUpdateFolderFile(); } + @Override + public InputStream getResourceStream(String path) { + return plugin.getResource(path); + } + + @Override + public InputStream getResourceStream(PluginInfo pluginInfo, String path) { + return ((PaperPluginInfo) pluginInfo).plugin().getResource(path); + } + @Override public Logger getLogger() { return plugin.getLogger(); diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java index 7f463f7..eaabb3e 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/notification/VelocityUpdateNotifier.java @@ -15,7 +15,7 @@ public VelocityUpdateNotifier(ProxyServer server, Updater updater, String messag super(updater, message, permission); VelocityPluginInfo pluginInfo = (VelocityPluginInfo) updater.getPluginInfo(); - server.getEventManager().register(this, pluginInfo.plugin()); + server.getEventManager().register(this, pluginInfo.container()); } @Override diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java index 9c148e4..d53fbd5 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java @@ -9,21 +9,21 @@ import java.nio.file.Path; import java.util.logging.Logger; -public record VelocityPluginInfo(PluginContainer plugin, @Nullable Logger logger) implements PluginInfo { +public record VelocityPluginInfo(PluginContainer container, @Nullable Logger logger) implements PluginInfo { @Override public String getName() { - return plugin.getDescription().getName().orElseThrow(); + return container.getDescription().getName().orElseThrow(); } @Override public String getVersion() { - return plugin.getDescription().getVersion().orElseThrow(); + return container.getDescription().getVersion().orElseThrow(); } @Override public @Nullable File getFile() { - Path path = plugin.getDescription().getSource().orElse(null); + Path path = container.getDescription().getSource().orElse(null); return path != null ? path.toFile() : null; } diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java index 18f2f6e..21f5977 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/VelocityUpdaterPlugin.java @@ -73,6 +73,10 @@ public Logger logger() { return logger; } + public Path dataFolder() { + return dataFolder; + } + public UpdaterImpl updater() { return updater; } diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java index 70925dc..30b26cb 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdaterAPI.java @@ -12,7 +12,7 @@ public VelocityUpdaterAPI(UpdaterImpl updater) { } /** - * Make a plugin available to be checked/downloaded + * Make a container available to be checked/downloaded * @param plugin Plugin to be added * @param pluginData Relevant update data */ @@ -21,7 +21,7 @@ public void addPlugin(PluginContainer plugin, PluginData pluginData) { } /** - * Stop a plugin from being checked/downloaded + * Stop a container from being checked/downloaded * @param plugin Plugin to be removed */ public void removePlugin(PluginContainer plugin) { diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java index e160ac5..f279a58 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java @@ -19,6 +19,8 @@ import revxrsal.commands.velocity.actor.VelocityCommandActor; import java.io.File; +import java.io.InputStream; +import java.nio.file.Path; import java.util.List; import java.util.logging.Logger; @@ -42,11 +44,27 @@ public List getPlugins() { .toList(); } + @Override + public Path getDataPath() { + return instance.dataFolder(); + } + @Override public File getDownloadDir() { return VelocityUtil.getUpdateFolderFile(); } + @Override + public InputStream getResourceStream(String path) { + return instance.getClass().getResourceAsStream(path); + } + + @Override + public InputStream getResourceStream(PluginInfo pluginInfo, String path) { + PluginContainer container = ((VelocityPluginInfo) pluginInfo).container(); + return container.getInstance().orElseThrow().getClass().getResourceAsStream(path); + } + @Override public Logger getLogger() { return instance.logger(); From daf82754cd32ca220f56579d361bca5f6b59e640 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Sun, 10 May 2026 23:26:56 +0100 Subject: [PATCH 55/57] Fixed compile errors --- .../pluginupdater/api/source/Source.java | 8 +++---- .../common/config/ConfigManager.java | 24 ++++++++++++++++--- .../pluginupdater/paper/api/PaperUpdater.java | 6 ----- .../paper/api/plugin/PaperPluginInfo.java | 9 +++++++ .../velocity/api/VelocityUpdater.java | 4 ---- .../api/plugin/VelocityPluginInfo.java | 7 ++++++ 6 files changed, 41 insertions(+), 17 deletions(-) diff --git a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java index fe81b92..a9a4824 100644 --- a/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java +++ b/common/api/src/main/java/org/lushplugins/pluginupdater/api/source/Source.java @@ -111,7 +111,7 @@ static String getLatestVersion(PluginData pluginData) throws IOException { return versionChecker.getLatestVersion(pluginData, sourceData); }); } catch (IOException e) { - throw new IOException("Failed to check plugin '" + pluginData.getPluginName() + "' for latest version."); + throw new IOException("Failed to check plugin '" + pluginData.getPluginName() + "' for latest version.", e); } } @@ -121,7 +121,7 @@ static String getDownloadUrl(PluginData pluginData) throws IOException { return versionChecker.getDownloadUrl(pluginData, sourceData); }); } catch (IOException e) { - throw new IOException("Failed to get download url for plugin '" + pluginData.getPluginName() + "'."); + throw new IOException("Failed to get download url for plugin '" + pluginData.getPluginName() + "'.", e); } } @@ -131,7 +131,7 @@ static boolean isUpdateAvailable(PluginData pluginData) throws IOException { return versionChecker.isUpdateAvailable(pluginData, sourceData); }); } catch (IOException e) { - throw new IOException("Failed to check if update is available for plugin '" + pluginData.getPluginName() + "'."); + throw new IOException("Failed to check if update is available for plugin '" + pluginData.getPluginName() + "'.", e); } } @@ -141,7 +141,7 @@ static boolean download(PluginData pluginData, File destinationDir) throws IOExc return versionChecker.download(pluginData, sourceData, destinationDir); }); } catch (IOException e) { - throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'."); + throw new IOException("Failed to download update for plugin '" + pluginData.getPluginName() + "'.", e); } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java index db30fbd..be0e491 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/config/ConfigManager.java @@ -1,6 +1,7 @@ package org.lushplugins.pluginupdater.common.config; import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.core.UnmodifiableConfig; import com.electronwill.nightconfig.core.file.FileConfig; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -10,10 +11,9 @@ import org.lushplugins.pluginupdater.common.updater.UpdateHandler; import org.lushplugins.pluginupdater.common.util.ConfigUtil; -import java.io.IOException; -import java.nio.file.Files; import java.util.*; import java.util.logging.Level; +import java.util.stream.Collectors; public class ConfigManager { private final UpdaterImpl updater; @@ -40,7 +40,13 @@ public void reload() { ); this.allowDownloads = config.getOrElse("allow-downloads", true); - this.messages = config.getOrElse("messages", () -> new Messages(new HashMap<>())); + + Config messagesConfig = config.get("messages"); + if (messagesConfig != null) { + this.messages = new Messages(messagesConfig); + } else { + this.messages = new Messages(); + } Collection dataSnapshot = new ArrayList<>(plugins.values()); for (PluginData snapshot : dataSnapshot) { @@ -124,6 +130,18 @@ public String getMessage(String name, String def) { public record Messages(Map messages) { + public Messages() { + this(new HashMap<>()); + } + + public Messages(Config config) { + this(config.entrySet().stream() + .collect(Collectors.toMap( + UnmodifiableConfig.Entry::getKey, + UnmodifiableConfig.Entry::getValue + ))); + } + public String get(String key) { return messages.get(key); } diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java index 28c705f..bfd56ca 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/PaperUpdater.java @@ -12,12 +12,6 @@ public class PaperUpdater { - static { - SourceRegistry.register(new ModrinthSource(List.of( - "bukkit", "spigot", "paper", "purpur", "folia" - ))); - } - public static Updater.Builder builder(Plugin plugin) { return Updater.builder(new PaperPluginInfo(plugin), Bukkit.getUpdateFolderFile()) .notifier(PaperUpdateNotifier::new); diff --git a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java index 656fc12..5d00a37 100644 --- a/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java +++ b/platform/paper-api/src/main/java/org/lushplugins/pluginupdater/paper/api/plugin/PaperPluginInfo.java @@ -3,17 +3,26 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public record PaperPluginInfo(Plugin plugin) implements PluginInfo { + static { + SourceRegistry.register(new ModrinthSource(List.of( + "bukkit", "spigot", "paper", "purpur", "folia" + ))); + } + @Override public String getName() { return plugin.getName(); diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java index 665c41a..e146535 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/VelocityUpdater.java @@ -14,10 +14,6 @@ public class VelocityUpdater { - static { - SourceRegistry.register(new ModrinthSource(List.of("velocity"))); - } - public static Updater.Builder builder(ProxyServer server, PluginContainer plugin, Logger logger) { return Updater.builder(new VelocityPluginInfo(plugin, logger), VelocityUtil.getUpdateFolderFile()) .notifier((updater, permission, message) -> { diff --git a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java index d53fbd5..8df8c88 100644 --- a/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java +++ b/platform/velocity-api/src/main/java/org/lushplugins/pluginupdater/velocity/api/plugin/VelocityPluginInfo.java @@ -2,15 +2,22 @@ import com.velocitypowered.api.plugin.PluginContainer; import org.jetbrains.annotations.Nullable; +import org.lushplugins.pluginupdater.api.source.SourceRegistry; +import org.lushplugins.pluginupdater.api.source.type.ModrinthSource; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; import java.io.File; import java.nio.file.Path; +import java.util.List; import java.util.logging.Logger; public record VelocityPluginInfo(PluginContainer container, @Nullable Logger logger) implements PluginInfo { + static { + SourceRegistry.register(new ModrinthSource(List.of("velocity"))); + } + @Override public String getName() { return container.getDescription().getName().orElseThrow(); From 803b3fc3b7a371d7d7bce9c784f19d4a6a1c144c Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Sun, 10 May 2026 23:45:15 +0100 Subject: [PATCH 56/57] Integrated MiniMessage support on Paper and Velocity --- .../common/command/UpdateCommand.java | 18 +++++++++--------- .../common/command/UpdaterCommand.java | 8 ++++---- .../common/command/UpdatesCommand.java | 18 +++++++++--------- common/impl/src/main/resources/config.yml | 12 ++++++------ .../paper/platform/PaperUpdaterPlatform.java | 5 ++++- .../platform/VelocityUpdaterPlatform.java | 5 ++++- 6 files changed, 36 insertions(+), 30 deletions(-) diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java index c4f4947..f006eea 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdateCommand.java @@ -19,21 +19,21 @@ public record UpdateCommand(UpdaterImpl updater) { @CommandPermission("pluginupdater.downloadupdates") public String update(@PluginName String pluginName) { if (!updater.config().shouldAllowDownloads()) { - return "&#ff6969Update downloads have been disabled in the config"; + return "<#ff6969>Update downloads have been disabled in the config"; } PluginData pluginData = updater.config().getPluginData(pluginName); if (pluginData == null) { - return "&#ff6969That plugin is not registered"; + return "<#ff6969>That plugin is not registered"; } else if (!pluginData.areDownloadsAllowed()) { - return "&#ff6969Downloads are disabled for that plugin, to allow downloads manually add it to your config"; + return "<#ff6969>Downloads are disabled for that plugin, to allow downloads manually add it to your config"; } else if (pluginData.isAlreadyDownloaded()) { - return "&#ffda54You have already downloaded an update for this plugin - please restart your server"; + return "<#ffda54>You have already downloaded an update for this plugin - please restart your server"; } else if (!pluginData.isUpdateAvailable()) { - return "&#ff6969No update has been found for this plugin"; + return "<#ff6969>No update has been found for this plugin"; } else { updater.updateHandler().queueDownload(pluginData.getPluginName()); - return "&#b7faa2Successfully queued an update for '%s'".formatted(pluginData.getPluginName()); + return "<#b7faa2>Successfully queued an update for '%s'".formatted(pluginData.getPluginName()); } } @@ -65,13 +65,13 @@ public String updateAll(CommandActor actor, @Switch("force") boolean force) { int finalMajorCount = majorUpdateCount.get(); if (finalCount == 0 && finalMajorCount == 0) { - actor.reply("&#ff6969No updates found"); + actor.reply("<#ff6969>No updates found"); } else if (finalCount > 0) { - actor.reply("&#b7faa2Successfully queued an update for %s plugins".formatted(finalCount)); + actor.reply("<#b7faa2>Successfully queued an update for %s plugins".formatted(finalCount)); } if (finalMajorCount > 0) { - actor.reply("&#e0c01b%s &#ffe27aplugins require major updates, run &#e0c01b/updater update all --force &#ffe27ato force all possible updates".formatted(finalMajorCount)); + actor.reply("<#e0c01b>%s <#ffe27a>plugins require major updates, run <#e0c01b>/updater update all --force <#ffe27a>to force all possible updates".formatted(finalMajorCount)); } return null; diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java index dd7af47..744cc96 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdaterCommand.java @@ -20,10 +20,10 @@ public String reload() { updater.config().reload(); } catch (Throwable e) { updater.platform().getLogger().log(Level.SEVERE, "Caught error whilst reloading: ", e); - return "&#ff6969Something went wrong whilst reloading the plugin, check the console for errors"; + return "<#ff6969>Something went wrong whilst reloading the plugin, check the console for errors"; } - return "&#b7faa2Successfully reloaded PluginUpdater"; + return "<#b7faa2>Successfully reloaded PluginUpdater"; } @Subcommand("check") @@ -31,7 +31,7 @@ public String reload() { public String check(@PluginName String pluginName) { updater.updateHandler().queueUpdateCheck(pluginName); - return "&#b7faa2Successfully queued check for %s".formatted(pluginName); + return "<#b7faa2>Successfully queued check for %s".formatted(pluginName); } @Subcommand("check all") @@ -43,6 +43,6 @@ public String check() { updateCount.incrementAndGet(); }); - return "&#b7faa2Successfully queued checks for %s plugins".formatted(updateCount.get()); + return "<#b7faa2>Successfully queued checks for %s plugins".formatted(updateCount.get()); } } diff --git a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java index f9f4001..e2c51bf 100644 --- a/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java +++ b/common/impl/src/main/java/org/lushplugins/pluginupdater/common/command/UpdatesCommand.java @@ -43,9 +43,9 @@ public String updates() { .toList(); if (!plugins.isEmpty()) { - return "&fRegistered Plugins (%s):\n%s".formatted(plugins.size(), String.join("&7, ", plugins)); + return "Registered Plugins (%s):\n%s".formatted(plugins.size(), String.join(", ", plugins)); } else { - return "&#ff6969Could not find any registered plugins in PluginUpdater"; + return "<#ff6969>Could not find any registered plugins in PluginUpdater"; } } @@ -53,9 +53,9 @@ public String updates() { @CommandPermission("pluginupdater.checkupdates") public String list() { ConfigManager configManager = updater.config(); - String updateAvailableColor = configManager.getMessage("update-available-color", "&#ffda54"); - String majorUpdateAvailableColor = configManager.getMessage("major-update-available-color", "&#ff6969"); - String latestVersionColor = configManager.getMessage("latest-version-color", "&#b7faa2"); + String updateAvailableColor = configManager.getMessage("update-available-color", "<#ffda54>"); + String majorUpdateAvailableColor = configManager.getMessage("major-update-available-color", "<#ff6969>"); + String latestVersionColor = configManager.getMessage("latest-version-color", "<#b7faa2>"); List plugins = new ArrayList<>(); configManager.getAllPluginData().forEach(pluginData -> { @@ -64,7 +64,7 @@ public String list() { return; } - String message = "&f" + pluginData.getPluginName() + ": &7" + pluginData.getCurrentVersion() + " &f-> " + (versionDifference.equals(VersionDifference.MAJOR) ? majorUpdateAvailableColor : updateAvailableColor) + pluginData.getLatestVersion(); + String message = "" + pluginData.getPluginName() + ": " + pluginData.getCurrentVersion() + " -> " + (versionDifference.equals(VersionDifference.MAJOR) ? majorUpdateAvailableColor : updateAvailableColor) + pluginData.getLatestVersion(); if (pluginData.isAlreadyDownloaded()) { message += latestVersionColor + " ᴅᴏᴡɴʟᴏᴀᴅᴇᴅ"; @@ -76,7 +76,7 @@ public String list() { if (!plugins.isEmpty()) { return String.join("&r\n", plugins); } else { - return "&#ff6969No updates found"; + return "<#ff6969>No updates found"; } } @@ -90,9 +90,9 @@ public String unregisteredPlugins() { .toList(); if (!unregisteredPlugins.isEmpty()) { - return "&fUnregistered Plugins (%s):\n&#ff6969%s".formatted(unregisteredPlugins.size(), String.join("&7, &#ff6969", unregisteredPlugins)); + return "Unregistered Plugins (%s):\n<#ff6969>%s".formatted(unregisteredPlugins.size(), String.join(", <#ff6969>", unregisteredPlugins)); } else { - return "&#ff6969No unregistered plugins found"; + return "<#ff6969>No unregistered plugins found"; } } } diff --git a/common/impl/src/main/resources/config.yml b/common/impl/src/main/resources/config.yml index 673a6ea..17571d3 100644 --- a/common/impl/src/main/resources/config.yml +++ b/common/impl/src/main/resources/config.yml @@ -13,9 +13,9 @@ plugins: enabled: false messages: - unchecked-color: "&8" - update-available-color: "&#ffda54" - major-update-available-color: "&#ff6969" - update-prepared-color: "&#ffda54" - latest-version-color: "&#b7faa2" - updates-available: "&#e0c01b%amount% &#ffe27aupdates are available, type &#e0c01b'%updates_command%' &#ffe27afor more information!" + unchecked-color: "" + update-available-color: "<#ffda54>" + major-update-available-color: "<#ff6969>" + update-prepared-color: "<#ffda54>" + latest-version-color: "<#b7faa2>" + updates-available: "<#e0c01b>%amount% <#ffe27a>updates are available, type <#e0c01b>'%updates_command%' <#ffe27a>for more information!" diff --git a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java index 7c87227..78c0f66 100644 --- a/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java +++ b/platform/paper-plugin/src/main/java/org/lushplugins/pluginupdater/paper/platform/PaperUpdaterPlatform.java @@ -70,7 +70,10 @@ public Logger getLogger() { @Override public Lamp.Builder prepareLamp() { - return BukkitLamp.builder(PaperUpdaterPlugin.getInstance()); + return BukkitLamp.builder(PaperUpdaterPlugin.getInstance()) + .defaultMessageSender((actor, message) -> { + PaperColor.handler().sendMessage(actor.sender(), message); + }); } @Override diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java index f279a58..682928a 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java @@ -72,7 +72,10 @@ public Logger getLogger() { @Override public Lamp.Builder prepareLamp() { - return VelocityLamp.builder(instance, instance.server()); + return VelocityLamp.builder(instance, instance.server()) + .defaultMessageSender((actor, message) -> { + actor.source().sendMessage(MiniMessage.miniMessage().deserialize(message)); + }); } @Override From a5685d4911c73aff666d107bdbcbb07e580c9af4 Mon Sep 17 00:00:00 2001 From: OakLoaf Date: Mon, 11 May 2026 00:27:30 +0100 Subject: [PATCH 57/57] Fixed platform related issues --- platform/paper-plugin/build.gradle.kts | 4 ++- platform/velocity-plugin/build.gradle.kts | 21 +++++++++++- .../platform/VelocityUpdaterPlatform.java | 2 +- .../src/main/resources/common-plugins.yml | 33 +++++++++++++++++++ settings.gradle.kts | 1 + 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 platform/velocity-plugin/src/main/resources/common-plugins.yml diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index 4329d2e..8b4acce 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -22,7 +22,9 @@ tasks { } shadowJar { - archiveFileName.set("${project.name}-${project.version}.jar") + archiveFileName.set("${rootProject.name}-${project.version}.jar") + + relocate("com.electronwill.nightconfig", "org.lushplugins.pluginupdater.libraries.nightconfig") } runServer { diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index cc13f47..271c190 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -1,11 +1,12 @@ plugins { id("com.gradleup.shadow") - id("xyz.jpenilla.run-paper") + id("xyz.jpenilla.run-velocity") id("updater.publish-modrinth") } dependencies { compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") + annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") implementation(project(":common:impl")) implementation(project(":platform:velocity-api")) @@ -13,6 +14,24 @@ dependencies { implementation("io.github.revxrsal:lamp.brigadier:4.0.0-rc.16") } +tasks { + shadowJar { + archiveFileName.set("${rootProject.name}-${project.version}.jar") + + relocate("com.electronwill.nightconfig", "org.lushplugins.pluginupdater.libraries.nightconfig") + } + + runVelocity { + velocityVersion("3.5.0-SNAPSHOT") + + downloadPlugins { + modrinth("viaversion", "5.7.1") // ViaVersion + modrinth("viabackwards", "5.7.1") // ViaBackwards + // The following plugins are intentionally outdated for testing purposes + } + } +} + modrinth { loaders.addAll("velocity") } \ No newline at end of file diff --git a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java index 682928a..ea882ed 100644 --- a/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java +++ b/platform/velocity-plugin/src/main/java/org/lushplugins/pluginupdater/velocity/platform/VelocityUpdaterPlatform.java @@ -56,7 +56,7 @@ public File getDownloadDir() { @Override public InputStream getResourceStream(String path) { - return instance.getClass().getResourceAsStream(path); + return instance.getClass().getResourceAsStream("/" + path); } @Override diff --git a/platform/velocity-plugin/src/main/resources/common-plugins.yml b/platform/velocity-plugin/src/main/resources/common-plugins.yml new file mode 100644 index 0000000..8c7bca0 --- /dev/null +++ b/platform/velocity-plugin/src/main/resources/common-plugins.yml @@ -0,0 +1,33 @@ +ForcePack: + source: spigot + spigot-resource-id: 45439 +LuckPerms: + source: spigot + spigot-resource-id: 28140 +packetevents: + source: modrinth + modrinth-project-id: HYKaKraK +Plan: + source: github + github-repo: "plan-player-analytics/Plan" +spark: + source: spigot + spigot-resource-id: 57242 +TAB: + source: github + github-repo: "NEZNAMY/TAB" +Tebex: + source: modrinth + modrinth-project-id: nRA0jiJt +VentureChat: + source: spigot + spigot-resource-id: 771 +ViaBackwards: + source: modrinth + modrinth-project-id: NpvuJQoq +ViaRewind: + source: modrinth + modrinth-project-id: TbHIxhx5 +ViaVersion: + source: modrinth + modrinth-project-id: P1OZGk5p diff --git a/settings.gradle.kts b/settings.gradle.kts index 9a6f598..42e3637 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,6 +12,7 @@ pluginManagement { id("net.kyori.blossom") version "2.2.0" id("org.jetbrains.gradle.plugin.idea-ext") version "1.4.1" id("xyz.jpenilla.run-paper") version "3.0.2" + id("xyz.jpenilla.run-velocity") version "3.0.2" } }