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> lastPushedWorld = new ConcurrentHashMap<>();
|
||||||
private final Map<UUID, String> lastPushedData = new ConcurrentHashMap<>();
|
private final Map<UUID, String> lastPushedData = new ConcurrentHashMap<>();
|
||||||
private final Map<UUID, String> lastPushedStats = new ConcurrentHashMap<>();
|
private final Map<UUID, String> lastPushedStats = new ConcurrentHashMap<>();
|
||||||
|
private String lastPushedTicketGlobal = "";
|
||||||
|
|
||||||
private final ExecutorService httpExecutor = Executors.newSingleThreadExecutor(r -> {
|
private final ExecutorService httpExecutor = Executors.newSingleThreadExecutor(r -> {
|
||||||
Thread t = new Thread(r, "StatusAPIBridge-HTTP");
|
Thread t = new Thread(r, "StatusAPIBridge-HTTP");
|
||||||
@@ -66,6 +67,9 @@ public class StatusAPIBridge extends JavaPlugin implements Listener {
|
|||||||
Bukkit.getScheduler().runTaskTimer(this, this::pushScoreboardData,
|
Bukkit.getScheduler().runTaskTimer(this, this::pushScoreboardData,
|
||||||
scoreboardSyncIntervalTicks, scoreboardSyncIntervalTicks);
|
scoreboardSyncIntervalTicks, scoreboardSyncIntervalTicks);
|
||||||
|
|
||||||
|
// TicketSystem-Daten alle 5 Sekunden pushen (100 Ticks)
|
||||||
|
Bukkit.getScheduler().runTaskTimerAsynchronously(this, this::pushTicketData, 100L, 100L);
|
||||||
|
|
||||||
getLogger().info("StatusAPIBridge gestartet. Ziel: " + statusApiUrl);
|
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) {
|
private void pushTpsAsync(UUID uuid, double tps) {
|
||||||
httpExecutor.execute(() -> {
|
httpExecutor.execute(() -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user