Upload folder via GUI - src

This commit is contained in:
Git Manager GUI
2026-05-10 23:10:34 +02:00
parent 7a8261a6e5
commit 6694c40842

View File

@@ -39,6 +39,7 @@ public class StatusAPIBridge extends JavaPlugin implements Listener {
private final Map<UUID, String> lastPushedWorld = new ConcurrentHashMap<>();
private final Map<UUID, String> lastPushedData = new ConcurrentHashMap<>();
private final Map<UUID, String> lastPushedStats = new ConcurrentHashMap<>();
private String lastPushedTicketGlobal = "";
private final ExecutorService httpExecutor = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r, "StatusAPIBridge-HTTP");
@@ -66,6 +67,9 @@ public class StatusAPIBridge extends JavaPlugin implements Listener {
Bukkit.getScheduler().runTaskTimer(this, this::pushScoreboardData,
scoreboardSyncIntervalTicks, scoreboardSyncIntervalTicks);
// TicketSystem-Daten alle 5 Sekunden pushen (100 Ticks)
Bukkit.getScheduler().runTaskTimerAsynchronously(this, this::pushTicketData, 100L, 100L);
getLogger().info("StatusAPIBridge gestartet. Ziel: " + statusApiUrl);
}
@@ -298,6 +302,69 @@ public class StatusAPIBridge extends JavaPlugin implements Listener {
});
}
// ── TicketSystem Push ──────────────────────────────────────────────────
/**
* Pushed TicketSystem-Daten an die StatusAPI.
* Globale Werte (offene Tickets, Bewertungen) werden einmal pro Intervall gesendet.
* Pro Spieler wird die Anzahl eigener aktiver Tickets mitgeschickt.
*
* Voraussetzung: TicketSystem muss auf demselben Bukkit-Server laufen.
*/
private void pushTicketData() {
try {
Class<?> pluginClass = Class.forName("de.ticketsystem.TicketPlugin");
Object tsPlugin = Bukkit.getPluginManager().getPlugin("TicketSystem");
if (tsPlugin == null) return;
Object db = pluginClass.getMethod("getDatabaseManager").invoke(tsPlugin);
if (db == null) return;
Class<?> dbClass = db.getClass();
Class<?> statsClass = Class.forName("de.ticketsystem.database.DatabaseManager$TicketStats");
Object stats = dbClass.getMethod("getTicketStats").invoke(db);
int totalOpen = (int) statsClass.getField("open").get(stats);
int totalClaimed = (int) statsClass.getField("closed").get(stats); // "closed" im stats-Kontext = bearbeitet
// CLAIMED direkt zählen via getTicketsByStatus
Class<?> statusEnum = Class.forName("de.ticketsystem.model.TicketStatus");
Object claimed = statusEnum.getField("CLAIMED").get(null);
@SuppressWarnings("unchecked")
java.util.List<?> claimedTickets = (java.util.List<?>) dbClass
.getMethod("getTicketsByStatus", statusEnum.arrayType())
.invoke(db, (Object) new Object[]{claimed});
int totalClaimedCount = claimedTickets == null ? 0 : claimedTickets.size();
int ratGood = (int) statsClass.getField("thumbsUp").get(stats);
int ratBad = (int) statsClass.getField("thumbsDown").get(stats);
// Globale Werte nur senden wenn geändert
String globalKey = totalOpen + "," + totalClaimedCount + "," + ratGood + "," + ratBad;
if (!globalKey.equals(lastPushedTicketGlobal)) {
lastPushedTicketGlobal = globalKey;
String globalJson = "{\"total_open\":" + totalOpen
+ ",\"total_claimed\":" + totalClaimedCount
+ ",\"rating_good\":" + ratGood
+ ",\"rating_bad\":" + ratBad + "}";
sendPost(statusApiUrl + "/ticket/update", globalJson);
}
// Pro Spieler: eigene aktive Tickets
for (org.bukkit.entity.Player player : Bukkit.getOnlinePlayers()) {
int myOpen = (int) dbClass
.getMethod("countOpenTicketsByPlayer", java.util.UUID.class)
.invoke(db, player.getUniqueId());
String playerJson = "{\"uuid\":\"" + player.getUniqueId() + "\",\"my_open\":" + myOpen + "}";
sendPost(statusApiUrl + "/ticket/update", playerJson);
}
} catch (ClassNotFoundException e) {
// TicketSystem nicht installiert kein Fehler loggen
} catch (Exception e) {
getLogger().warning("[TicketPush] Fehler: " + e.getMessage());
}
}
private void pushTpsAsync(UUID uuid, double tps) {
httpExecutor.execute(() -> {
try {