Backup before major refactor of AdminMode based on user feedback
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package org.blz.adminmode.moderation;
|
||||
|
||||
import org.blz.adminmode.config.ConfigManager;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
public class ModeSessionLogger {
|
||||
|
||||
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
private final Plugin plugin;
|
||||
private final ConfigManager configManager;
|
||||
|
||||
public ModeSessionLogger(Plugin plugin, ConfigManager configManager) {
|
||||
this.plugin = plugin;
|
||||
this.configManager = configManager;
|
||||
}
|
||||
|
||||
public void logEnter(ModeSession session) {
|
||||
writeLine("ENTER_" + modeSuffix(session), session, "-");
|
||||
}
|
||||
|
||||
public void logExit(ModeSession session) {
|
||||
writeLine("EXIT_" + modeSuffix(session), session, formatDuration(session.getDurationMillis()));
|
||||
}
|
||||
|
||||
public void logRecovered(ModeSession session) {
|
||||
writeLine("RECOVER_" + modeSuffix(session), session, formatDuration(session.getDurationMillis()));
|
||||
}
|
||||
|
||||
private void writeLine(String action, ModeSession session, String duration) {
|
||||
if (!configManager.isSessionLoggingEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
File logFile = new File(plugin.getDataFolder(), configManager.getSessionLogFile());
|
||||
File parent = logFile.getParentFile();
|
||||
if (parent != null && !parent.exists()) {
|
||||
parent.mkdirs();
|
||||
}
|
||||
|
||||
String line = String.format(
|
||||
"[%s] %s | Player: %s | UUID: %s | Duration: %s%n",
|
||||
LocalDateTime.now().format(DATE_TIME_FORMATTER),
|
||||
action,
|
||||
session.getPlayerName(),
|
||||
session.getPlayerId(),
|
||||
duration);
|
||||
|
||||
try (FileWriter writer = new FileWriter(logFile, true)) {
|
||||
writer.write(line);
|
||||
} catch (IOException exception) {
|
||||
plugin.getLogger().warning("Не удалось записать сессионный лог: " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private String modeSuffix(ModeSession session) {
|
||||
return session.getProfile().isHardProfile() ? "HARD" : "SOFT";
|
||||
}
|
||||
|
||||
private String formatDuration(long millis) {
|
||||
Duration duration = Duration.ofMillis(Math.max(0L, millis));
|
||||
long hours = duration.toHours();
|
||||
long minutes = duration.toMinutesPart();
|
||||
long seconds = duration.toSecondsPart();
|
||||
|
||||
if (hours > 0) {
|
||||
return hours + "h " + minutes + "m " + seconds + "s";
|
||||
}
|
||||
if (minutes > 0) {
|
||||
return minutes + "m " + seconds + "s";
|
||||
}
|
||||
return seconds + "s";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user