src/main/java/TpPlugin.java aktualisiert
This commit is contained in:
@@ -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");
|
||||
|
Reference in New Issue
Block a user