Dateien nach "src/main/java/me/viper/teamplugin/manager" hochladen

This commit is contained in:
2025-10-05 14:41:30 +00:00
parent c56fcae2a5
commit 79242dcbdc
3 changed files with 310 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
package me.viper.teamplugin.manager;
import me.viper.teamplugin.Main;
import me.viper.teamplugin.util.Utils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class BackupManager {
// Liefert das Backup-Verzeichnis
private static File backupsFolder() {
String folderName = Main.getInstance().getConfig().getString("backup.folder", "backups");
File folder = new File(Main.getInstance().getDataFolder(), folderName);
if (!folder.exists()) folder.mkdirs();
return folder;
}
// Erstellt ein Backup der data.yml
public static String createBackup() {
File dataFile = new File(Main.getInstance().getDataFolder(), "data.yml");
if (!dataFile.exists()) return null;
File backups = backupsFolder();
String timestamp = Utils.formatIsoNow().replace(":", "-");
String backupName = "data-backup-" + timestamp + ".yml";
File dest = new File(backups, backupName);
try {
Files.copy(dataFile.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
pruneBackups(backups); // alte Backups löschen
return backupName;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// Stellt ein Backup wieder her
public static boolean restoreBackup(String fileName) {
File dataFile = new File(Main.getInstance().getDataFolder(), "data.yml");
File backup = new File(backupsFolder(), fileName);
if (!backup.exists()) return false;
try {
Files.copy(backup.toPath(), dataFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
// DataManager neu laden
DataManager.getData(); // Lädt data.yml neu
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
// Listet alle Backups auf
public static List<String> listBackups() {
File backups = backupsFolder();
if (!backups.exists()) return Collections.emptyList();
return Arrays.stream(Objects.requireNonNull(backups.listFiles((d, name) -> name.toLowerCase().endsWith(".yml"))))
.filter(File::isFile)
.map(File::getName)
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
}
// Löscht alte Backups und behält nur die letzten X (Konfigurierbar)
private static void pruneBackups(File backupsFolder) {
int keep = Main.getInstance().getConfig().getInt("backup.keep", 10);
List<File> files = Arrays.stream(Objects.requireNonNull(backupsFolder.listFiles((d, name) -> name.toLowerCase().endsWith(".yml"))))
.filter(File::isFile)
.sorted(Comparator.comparingLong(File::lastModified).reversed())
.collect(Collectors.toList());
for (int i = keep; i < files.size(); i++) {
files.get(i).delete();
}
}
}

View File

@@ -0,0 +1,180 @@
package me.viper.teamplugin.manager;
import me.viper.teamplugin.Main;
import me.viper.teamplugin.util.Utils;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.*;
import java.util.stream.Collectors;
public class DataManager {
private static File file;
private static FileConfiguration data;
public static void setup() {
try {
file = new File(Main.getInstance().getDataFolder(), "data.yml");
if (!file.exists()) {
Main.getInstance().getDataFolder().mkdirs();
file.createNewFile();
data = YamlConfiguration.loadConfiguration(file);
data.createSection("Team");
save();
} else {
data = YamlConfiguration.loadConfiguration(file);
if (data.getConfigurationSection("Team") == null) {
data.createSection("Team");
save();
}
}
// Ensure backup folder exists if enabled
if (Main.getInstance().getConfig().getBoolean("backup.enabled", true)) {
File backups = new File(Main.getInstance().getDataFolder(),
Main.getInstance().getConfig().getString("backup.folder", "backups"));
if (!backups.exists()) backups.mkdirs();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/** Reload data.yml from disk (used after restore). */
public static void reloadData() {
if (file == null) file = new File(Main.getInstance().getDataFolder(), "data.yml");
data = YamlConfiguration.loadConfiguration(file);
if (data.getConfigurationSection("Team") == null) {
data.createSection("Team");
save();
}
}
public static FileConfiguration getData() {
if (data == null) setup();
return data;
}
public static void save() {
try {
if (data != null && file != null) data.save(file);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addMember(String rank, String name) {
List<String> list = data.getStringList("Team." + rank);
if (!list.contains(name)) {
list.add(name);
data.set("Team." + rank, list);
// store join date if enabled
if (Main.getInstance().getConfig().getBoolean("storeJoinDate", true)) {
data.set("JoinDates." + name, Utils.formatIsoNow());
}
save();
}
}
public static boolean removeMember(String name) {
boolean removed = false;
if (data.getConfigurationSection("Team") != null) {
for (String rank : data.getConfigurationSection("Team").getKeys(false)) {
List<String> members = data.getStringList("Team." + rank);
if (members.removeIf(s -> s.equalsIgnoreCase(name))) {
data.set("Team." + rank, members);
removed = true;
}
}
if (removed) {
data.set("JoinDates." + name, null);
save();
}
}
return removed;
}
// Backups
public static String createBackup() {
String folderName = Main.getInstance().getConfig().getString("backup.folder", "backups");
File backupsFolder = new File(Main.getInstance().getDataFolder(), folderName);
if (!backupsFolder.exists()) backupsFolder.mkdirs();
String timestamp = Utils.formatIsoNow().replace(":", "-");
String fileName = "data-backup-" + timestamp + ".yml";
File dest = new File(backupsFolder, fileName);
try {
// ensure current file exists
if (file == null) file = new File(Main.getInstance().getDataFolder(), "data.yml");
if (!file.exists()) {
// nothing to backup
return null;
}
Files.copy(file.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING);
// prune backups
pruneBackups(backupsFolder);
return fileName;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* Restore a backup by filename (relative to backup folder).
* Returns true on success.
*/
public static boolean restoreBackup(String fileName) {
String folderName = Main.getInstance().getConfig().getString("backup.folder", "backups");
File backupsFolder = new File(Main.getInstance().getDataFolder(), folderName);
File src = new File(backupsFolder, fileName);
if (!src.exists()) return false;
try {
if (file == null) file = new File(Main.getInstance().getDataFolder(), "data.yml");
Files.copy(src.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING);
// reload data from the restored file
reloadData();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public static List<String> listBackups() {
String folderName = Main.getInstance().getConfig().getString("backup.folder", "backups");
File backupsFolder = new File(Main.getInstance().getDataFolder(), folderName);
if (!backupsFolder.exists()) return Collections.emptyList();
return Arrays.stream(Objects.requireNonNull(backupsFolder.listFiles()))
.filter(File::isFile)
.map(File::getName)
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
}
private static void pruneBackups(File backupsFolder) {
int keep = Main.getInstance().getConfig().getInt("backup.keep", 10);
List<File> files = Arrays.stream(Objects.requireNonNull(backupsFolder.listFiles()))
.filter(File::isFile)
.sorted(Comparator.comparingLong(File::lastModified).reversed())
.collect(Collectors.toList());
for (int i = keep; i < files.size(); i++) {
files.get(i).delete();
}
}
// helper
public static String getJoinDate(String name) {
return data.getString("JoinDates." + name, "");
}
}

View File

@@ -0,0 +1,40 @@
package me.viper.teamplugin.manager;
import me.viper.teamplugin.Main;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class LangManager {
private static File file;
private static FileConfiguration cfg;
public static void setup() {
file = new File(Main.getInstance().getDataFolder(), "lang.yml");
if (!file.exists()) {
Main.getInstance().saveResource("lang.yml", false);
}
cfg = YamlConfiguration.loadConfiguration(file);
}
public static String get(String path) {
if (cfg == null) setup();
return cfg.getString(path, "Missing:" + path).replace("%prefix%", cfg.getString("prefix", ""));
}
public static List<String> getList(String path) {
if (cfg == null) setup();
return cfg.getStringList(path);
}
public static void save() {
try {
if (cfg != null && file != null) cfg.save(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}