Backup before major refactor of AdminMode based on user feedback

This commit is contained in:
2026-03-26 22:38:29 +07:00
parent b439a42134
commit ef128cc08d
25 changed files with 2130 additions and 582 deletions

View File

@@ -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";
}
}