Upload folder via GUI - src
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user