Delete src/main/java/net/viper/statusapibridge/StatusAPIBridge.java via Git Manager GUI

This commit is contained in:
2026-05-07 19:49:51 +00:00
parent bedbf19c6d
commit 9a139df523

View File

@@ -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<UUID, Double> 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<Economy> 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("\"", "\\\"");
}
}