src/main/java/TpPlugin.java aktualisiert

This commit is contained in:
2025-08-11 15:35:52 +00:00
parent c7f91112a6
commit f5750bc2cf

View File

@@ -19,6 +19,19 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.block.Sign;
import org.bukkit.ChatColor;
// NEU: bStats
import org.bstats.bukkit.Metrics;
// NEU: Spigot UpdateChecker
import org.bukkit.Bukkit;
import org.bukkit.event.player.PlayerJoinEvent;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.function.Consumer;
import org.json.JSONObject; // Wichtig für JSON Parsing
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -44,27 +57,119 @@ public class TpPlugin extends JavaPlugin implements Listener {
private static final String CONFIG_VERSION = "1.3.3";
private static final String PLUGIN_AUTHOR = "M_Viper";
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
tps = new HashMap<>();
signLocations = new HashMap<>();
loadConfig();
updateConfig();
loadConfig();
loadTps();
// Konsolenmeldung beim Plugin-Start
getLogger().info("[>] ========================================== [<]");
getLogger().info(" TpPlugin - " + getDescription().getVersion());
getLogger().info(" Ersteller: " + PLUGIN_AUTHOR);
getLogger().info("[>] ========================================== [<]");
}
// NEU: bStats & Updater
private Metrics metrics;
private String latestVersion = null;
private static final int RESOURCE_ID = 127829; // Spigot-Resource-ID anpassen
private static final int BSTATS_ID = 26873; // bStats-Service-ID anpassen
@Override
public void onDisable() {
saveTps();
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
getServer().getPluginManager().registerEvents(new UpdateNotifyListener(), this);
tps = new HashMap<>();
signLocations = new HashMap<>();
loadConfig();
updateConfig();
loadConfig();
loadTps();
// bStats initialisieren
metrics = new Metrics(this, BSTATS_ID);
getLogger().info("bStats initialisiert.");
// Update-Check starten (Spiget API mit JSON Parsing, Normalisierung & numerischem Vergleich)
getLatestVersion(latest -> {
String current = getDescription().getVersion();
// Führendes "version", "v" oder "v." am Anfang entfernen, danach trimmen
String normalizedLatest = latest.replaceFirst("(?i)^(version\\s*|v\\.?\\s*)", "").trim();
String normalizedCurrent = current.replaceFirst("(?i)^(version\\s*|v\\.?\\s*)", "").trim();
if (isNewerVersion(normalizedLatest, normalizedCurrent)) {
latestVersion = latest;
getLogger().info("Neue Version verfügbar: " + latest + " (aktuell: " + current + ")");
getLogger().info("Download: https://www.spigotmc.org/resources/" + RESOURCE_ID + "/");
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.isOp()) {
player.sendMessage("§aEine neue Version von §e" + getDescription().getName()
+ " §aist verfügbar: §e" + latest + " §7(aktuell: " + current + ")");
player.sendMessage("§eDownload: §bhttps://www.spigotmc.org/resources/" + RESOURCE_ID + "/");
}
}
}
});
// Konsolenmeldung beim Plugin-Start
getLogger().info("[>] ========================================== [<]");
getLogger().info(" TpPlugin - " + getDescription().getVersion());
getLogger().info(" Ersteller: " + PLUGIN_AUTHOR);
getLogger().info("[>] ========================================== [<]");
}
@Override
public void onDisable() {
saveTps();
}
// NEU: UpdateChecker-Methode mit Spiget-API und JSON Parsing
private void getLatestVersion(Consumer<String> consumer) {
getServer().getScheduler().runTaskAsynchronously(this, () -> {
try {
HttpURLConnection connection = (HttpURLConnection)
new URL("https://api.spiget.org/v2/resources/" + RESOURCE_ID + "/versions/latest").openConnection();
connection.setRequestMethod("GET");
connection.addRequestProperty("User-Agent", "Mozilla/5.0");
try (Scanner scanner = new Scanner(connection.getInputStream())) {
String response = scanner.useDelimiter("\\A").next();
JSONObject json = new JSONObject(response);
String versionName = json.optString("name", "").trim();
consumer.accept(versionName);
}
} catch (Exception e) {
getLogger().warning("Konnte keine Update-Info abrufen: " + e.getMessage());
consumer.accept("");
}
});
}
// Numerischer Versionsvergleich (SemVer-ähnlich)
private boolean isNewerVersion(String latest, String current) {
try {
String[] latestParts = latest.split("\\.");
String[] currentParts = current.split("\\.");
int length = Math.max(latestParts.length, currentParts.length);
for (int i = 0; i < length; i++) {
int latestPart = (i < latestParts.length) ? Integer.parseInt(latestParts[i]) : 0;
int currentPart = (i < currentParts.length) ? Integer.parseInt(currentParts[i]) : 0;
if (latestPart > currentPart) return true;
if (latestPart < currentPart) return false;
}
return false; // gleich oder älter
} catch (NumberFormatException e) {
// Fallback: falls Versionsstring nicht als Zahl parsebar ist
return !latest.equalsIgnoreCase(current);
}
}
// NEU: Listener für Join-Nachricht
public class UpdateNotifyListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (player.isOp() && latestVersion != null) {
String currentVersion = getDescription().getVersion();
player.sendMessage("§aEine neue Version von §e" + getDescription().getName()
+ " §aist verfügbar: §e" + latestVersion
+ " §7(aktuell: " + currentVersion + ")");
player.sendMessage("§eDownload: §bhttps://www.spigotmc.org/resources/" + RESOURCE_ID + "/");
}
}
}
private void loadConfig() {
configFile = new File(getDataFolder(), "config.yml");