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