From 9a139df5233253df7c081033dfb3a7caa7a529cb Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 7 May 2026 19:49:51 +0000 Subject: [PATCH] Delete src/main/java/net/viper/statusapibridge/StatusAPIBridge.java via Git Manager GUI --- .../statusapibridge/StatusAPIBridge.java | 142 ------------------ 1 file changed, 142 deletions(-) delete mode 100644 src/main/java/net/viper/statusapibridge/StatusAPIBridge.java diff --git a/src/main/java/net/viper/statusapibridge/StatusAPIBridge.java b/src/main/java/net/viper/statusapibridge/StatusAPIBridge.java deleted file mode 100644 index 636c655..0000000 --- a/src/main/java/net/viper/statusapibridge/StatusAPIBridge.java +++ /dev/null @@ -1,142 +0,0 @@ -package net.viper.statusapibridge; - -import net.milkbowl.vault.economy.Economy; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -public class StatusAPIBridge extends JavaPlugin implements Listener { - - private Economy economy; - private String statusApiUrl; - private int pushDelayTicks; - private int liveSyncIntervalTicks; - private final Map lastPushedBalance = new ConcurrentHashMap<>(); - private final ExecutorService httpExecutor = Executors.newSingleThreadExecutor(r -> { - Thread t = new Thread(r, "StatusAPIBridge-HTTP"); - t.setDaemon(true); - return t; - }); - - @Override - public void onEnable() { - saveDefaultConfig(); - statusApiUrl = getConfig().getString("statusapi-url", "http://127.0.0.1:9191").trim(); - pushDelayTicks = getConfig().getInt("push-delay-ticks", 40); - liveSyncIntervalTicks = Math.max(20, getConfig().getInt("live-sync-interval-ticks", 20)); - - if (!setupEconomy()) { - getLogger().warning("Vault/Economy nicht gefunden – Economy-Push deaktiviert."); - } else { - getLogger().info("Vault Economy gefunden: " + economy.getName()); - } - - Bukkit.getPluginManager().registerEvents(this, this); - - // Live-Sync: Alle X Ticks online Spieler prüfen und bei Balance-Änderung pushen. - Bukkit.getScheduler().runTaskTimer(this, this::pushChangedBalancesForOnlinePlayers, liveSyncIntervalTicks, liveSyncIntervalTicks); - getLogger().info("StatusAPIBridge gestartet. Ziel: " + statusApiUrl); - } - - @Override - public void onDisable() { - httpExecutor.shutdownNow(); - } - - private boolean setupEconomy() { - if (getServer().getPluginManager().getPlugin("Vault") == null) return false; - RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Economy.class); - if (rsp == null) return false; - economy = rsp.getProvider(); - return economy != null; - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onJoin(PlayerJoinEvent e) { - if (economy == null) return; - Player player = e.getPlayer(); - // Verzögert pushen, damit das Economy-Plugin den Account vollständig geladen hat - Bukkit.getScheduler().runTaskLater(this, () -> { - if (player.isOnline()) pushEconomy(player); - }, pushDelayTicks); - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onQuit(PlayerQuitEvent e) { - if (economy == null) return; - Player player = e.getPlayer(); - // Synchron lesen, dann async senden - double balance = economy.getBalance(player); - pushEconomyAsync(player.getUniqueId(), player.getName(), balance); - lastPushedBalance.remove(player.getUniqueId()); - } - - public void pushEconomy(Player player) { - double balance = economy.getBalance(player); - pushEconomyAsync(player.getUniqueId(), player.getName(), balance); - } - - private void pushEconomyAsync(UUID uuid, String name, double balance) { - httpExecutor.execute(() -> { - try { - String json = "{\"uuid\":\"" + uuid + "\",\"name\":\"" + escapeName(name) + "\",\"balance\":" + balance + "}"; - sendPost(statusApiUrl + "/economy/update", json); - lastPushedBalance.put(uuid, balance); - } catch (Exception e) { - getLogger().warning("Economy-Push fehlgeschlagen fuer " + name + ": " + e.getMessage()); - } - }); - } - - private void pushChangedBalancesForOnlinePlayers() { - if (economy == null) return; - for (Player player : Bukkit.getOnlinePlayers()) { - double current = economy.getBalance(player); - Double last = lastPushedBalance.get(player.getUniqueId()); - if (last == null || Math.abs(current - last) > 0.000001d) { - pushEconomyAsync(player.getUniqueId(), player.getName(), current); - } - } - } - - private void sendPost(String urlStr, String json) throws Exception { - URL url = new URL(urlStr); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("POST"); - conn.setDoOutput(true); - conn.setConnectTimeout(3000); - conn.setReadTimeout(3000); - conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - byte[] body = json.getBytes(StandardCharsets.UTF_8); - conn.setRequestProperty("Content-Length", String.valueOf(body.length)); - try (OutputStream os = conn.getOutputStream()) { - os.write(body); - } - int code = conn.getResponseCode(); - if (code != 200) { - getLogger().warning("StatusAPI antwortete mit Code " + code + " fuer " + urlStr); - } - conn.disconnect(); - } - - private String escapeName(String name) { - if (name == null) return ""; - return name.replace("\\", "\\\\").replace("\"", "\\\""); - } -}