Upload via Git Manager GUI - StatsModule.java

This commit is contained in:
2026-04-01 10:14:30 +00:00
parent 7e6a9f15ce
commit 92d6b22924

View File

@@ -1,100 +1,100 @@
package net.viper.status.stats; package net.viper.status.stats;
import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.event.PlayerDisconnectEvent;
import net.md_5.bungee.api.event.PostLoginEvent; import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventHandler;
import net.viper.status.module.Module; import net.viper.status.module.Module;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
* StatsModule: Kümmert sich eigenständig um das Tracking der Spielerdaten. * StatsModule: Kümmert sich eigenständig um das Tracking der Spielerdaten.
* Implementiert Module (für das Lifecycle) und Listener (für die Events). * Implementiert Module (für das Lifecycle) und Listener (für die Events).
*/ */
public class StatsModule implements Module, Listener { public class StatsModule implements Module, Listener {
private StatsManager manager; private StatsManager manager;
private StatsStorage storage; private StatsStorage storage;
@Override @Override
public String getName() { public String getName() {
return "StatsModule"; return "StatsModule";
} }
@Override @Override
public void onEnable(Plugin plugin) { public void onEnable(Plugin plugin) {
// Initialisierung // Initialisierung
manager = new StatsManager(); manager = new StatsManager();
storage = new StatsStorage(plugin.getDataFolder()); storage = new StatsStorage(plugin.getDataFolder());
// Laden // Laden
try { try {
storage.load(manager); storage.load(manager);
plugin.getLogger().info("Player-Stats wurden erfolgreich geladen."); plugin.getLogger().info("Player-Stats wurden erfolgreich geladen.");
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().warning("Fehler beim Laden der Stats: " + e.getMessage()); plugin.getLogger().warning("Fehler beim Laden der Stats: " + e.getMessage());
} }
// Event Listener registrieren // Event Listener registrieren
plugin.getProxy().getPluginManager().registerListener(plugin, this); plugin.getProxy().getPluginManager().registerListener(plugin, this);
// Auto-Save Task (alle 5 Minuten) // Auto-Save Task (alle 5 Minuten)
plugin.getProxy().getScheduler().schedule(plugin, () -> { plugin.getProxy().getScheduler().schedule(plugin, () -> {
try { try {
storage.save(manager); storage.save(manager);
plugin.getLogger().info("Auto-Save: Player-Stats gespeichert."); plugin.getLogger().info("Auto-Save: Player-Stats gespeichert.");
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().warning("Fehler beim Auto-Save: " + e.getMessage()); plugin.getLogger().warning("Fehler beim Auto-Save: " + e.getMessage());
} }
}, 5, 5, TimeUnit.MINUTES); }, 5, 5, TimeUnit.MINUTES);
} }
@Override @Override
public void onDisable(Plugin plugin) { public void onDisable(Plugin plugin) {
if (manager != null && storage != null) { if (manager != null && storage != null) {
// Laufende Sessions beenden vor dem Speichern // Laufende Sessions beenden vor dem Speichern
long now = System.currentTimeMillis() / 1000L; long now = System.currentTimeMillis() / 1000L;
for (PlayerStats ps : manager.all()) { for (PlayerStats ps : manager.all()) {
synchronized (ps) { synchronized (ps) {
if (ps.currentSessionStart > 0) { if (ps.currentSessionStart > 0) {
long delta = now - ps.currentSessionStart; long delta = now - ps.currentSessionStart;
if (delta > 0) { if (delta > 0) {
ps.totalPlaytime += delta; ps.totalPlaytime += delta;
} }
ps.currentSessionStart = 0; // Session beenden ps.currentSessionStart = 0; // Session beenden
} }
} }
} }
try { try {
storage.save(manager); storage.save(manager);
plugin.getLogger().info("Player-Stats beim Shutdown gespeichert."); plugin.getLogger().info("Player-Stats beim Shutdown gespeichert.");
} catch (Exception e) { } catch (Exception e) {
plugin.getLogger().warning("Fehler beim Speichern (Shutdown): " + e.getMessage()); plugin.getLogger().warning("Fehler beim Speichern (Shutdown): " + e.getMessage());
} }
} }
} }
// Öffentlicher Zugriff für den WebServer // Öffentlicher Zugriff für den WebServer
public StatsManager getManager() { public StatsManager getManager() {
return manager; return manager;
} }
// --- Events --- // --- Events ---
@EventHandler @EventHandler
public void onJoin(PostLoginEvent e) { public void onJoin(PostLoginEvent e) {
try { try {
manager.get(e.getPlayer().getUniqueId(), e.getPlayer().getName()).onJoin(); manager.get(e.getPlayer().getUniqueId(), e.getPlayer().getName()).onJoin();
} catch (Exception ignored) {} } catch (Exception ignored) {}
} }
@EventHandler @EventHandler
public void onQuit(PlayerDisconnectEvent e) { public void onQuit(PlayerDisconnectEvent e) {
try { try {
PlayerStats ps = manager.getIfPresent(e.getPlayer().getUniqueId()); PlayerStats ps = manager.getIfPresent(e.getPlayer().getUniqueId());
if (ps != null) ps.onQuit(); if (ps != null) ps.onQuit();
} catch (Exception ignored) {} } catch (Exception ignored) {}
} }
} }