diff --git a/src/main/java/de/fussball/plugin/Fussball.java b/src/main/java/de/fussball/plugin/Fussball.java index a37ef56..42fc840 100644 --- a/src/main/java/de/fussball/plugin/Fussball.java +++ b/src/main/java/de/fussball/plugin/Fussball.java @@ -10,11 +10,15 @@ import de.fussball.plugin.placeholders.FussballPlaceholders; import de.fussball.plugin.stats.MatchHistory; import de.fussball.plugin.stats.StatsManager; import de.fussball.plugin.utils.Messages; +import de.fussball.plugin.utils.UpdateChecker; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.plugin.java.JavaPlugin; public class Fussball extends JavaPlugin { + /** SpigotMC-Ressourcen-ID – anpassen sobald das Plugin hochgeladen ist! */ + private static final int SPIGOT_RESOURCE_ID = 132994; + private static Fussball instance; private ArenaManager arenaManager; private GameManager gameManager; @@ -50,6 +54,17 @@ public class Fussball extends JavaPlugin { } getLogger().info("⚽ Fußball-Plugin v" + getDescription().getVersion() + " gestartet!"); + + // ── Update-Check (asynchron, blockiert den Server nicht) ────────────── + new UpdateChecker(this, SPIGOT_RESOURCE_ID).getVersion(latestVersion -> { + if (getDescription().getVersion().equals(latestVersion)) { + getLogger().info("[Fussball] Plugin ist aktuell (v" + latestVersion + ")."); + } else { + getLogger().warning("[Fussball] Neue Version verfügbar: v" + latestVersion + + " (installiert: v" + getDescription().getVersion() + ")"); + getLogger().warning("[Fussball] Download: https://www.spigotmc.org/resources/" + SPIGOT_RESOURCE_ID); + } + }); } @Override diff --git a/src/main/java/de/fussball/plugin/utils/UpdateChecker.java b/src/main/java/de/fussball/plugin/utils/UpdateChecker.java new file mode 100644 index 0000000..90a3dcb --- /dev/null +++ b/src/main/java/de/fussball/plugin/utils/UpdateChecker.java @@ -0,0 +1,51 @@ +package de.fussball.plugin.utils; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Scanner; +import java.util.function.Consumer; + +/** + * Prüft asynchron, ob eine neuere Version des Plugins auf SpigotMC verfügbar ist. + * Basiert auf: https://www.spigotmc.org/wiki/creating-an-update-checker-that-checks-for-updates + * + * Verwendung in onEnable(): + * new UpdateChecker(this, RESOURCE_ID).getVersion(version -> { ... }); + */ +public class UpdateChecker { + + private final JavaPlugin plugin; + private final int resourceId; + + public UpdateChecker(JavaPlugin plugin, int resourceId) { + this.plugin = plugin; + this.resourceId = resourceId; + } + + /** + * Ruft asynchron die neueste Version von der Spigot-API ab + * und übergibt sie dem angegebenen Consumer. + * + * @param consumer Callback, der die aktuelle SpigotMC-Version erhält + */ + public void getVersion(final Consumer consumer) { + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + try (InputStream is = new URL( + "https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceId + "/~" + ).openStream(); + Scanner scanner = new Scanner(is)) { + + if (scanner.hasNext()) { + consumer.accept(scanner.next()); + } + + } catch (IOException e) { + plugin.getLogger().warning("[Fussball] Update-Check fehlgeschlagen: " + e.getMessage()); + } + }); + } +} \ No newline at end of file