Dateien nach "src/main/java/de/mviper/adventskalender" hochladen
This commit is contained in:
56
src/main/java/de/mviper/adventskalender/AdminCommand.java
Normal file
56
src/main/java/de/mviper/adventskalender/AdminCommand.java
Normal file
@@ -0,0 +1,56 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.Material;
|
||||
|
||||
public class AdminCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length == 1 && args[0].equalsIgnoreCase("reload")) {
|
||||
Adventskalender.getInstance().reloadConfig();
|
||||
LanguageManager.setup();
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.reload_success"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (args.length == 3 && args[0].equalsIgnoreCase("open")) {
|
||||
Player target = Bukkit.getPlayer(args[1]);
|
||||
if (target == null) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.player_not_found").replace("%player%", args[1]));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
int day = Integer.parseInt(args[2]);
|
||||
if (day < 1 || day > 24) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.invalid_day"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (target.getInventory().firstEmpty() == -1) {
|
||||
target.getWorld().dropItemNaturally(target.getLocation(), AdventInventory.getRewardItem(day));
|
||||
} else {
|
||||
target.getInventory().addItem(AdventInventory.getRewardItem(day));
|
||||
}
|
||||
|
||||
CalendarData.setClaimed(target, day);
|
||||
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.open_success").replace("%player%", target.getName()).replace("%day%", String.valueOf(day)));
|
||||
target.sendMessage(LanguageManager.getString("messages.reward_received").replace("%day%", String.valueOf(day)));
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.invalid_day"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
sender.sendMessage("§cUsage: /adventskalender admin reload");
|
||||
sender.sendMessage("§cUsage: /adventskalender admin open <player> <day>");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import org.bukkit.entity.Player;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
|
||||
public class AdventCalendarExpansion extends PlaceholderExpansion {
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
// Der Identifier ist jetzt nur noch "ak"
|
||||
return "ak";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return "mviper";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return "1.1.0";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRegister() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player player, String identifier) {
|
||||
if (player == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Die Platzhalter sind jetzt viel kürzer
|
||||
switch (identifier) {
|
||||
case "c": // Geöffnet (claimed)
|
||||
return String.valueOf(CalendarData.getClaimedCount(player));
|
||||
|
||||
case "n": // Nächstes (next)
|
||||
for (int day = 1; day <= 24; day++) {
|
||||
if (!CalendarData.hasClaimed(player, day)) {
|
||||
return String.valueOf(day);
|
||||
}
|
||||
}
|
||||
return "None";
|
||||
|
||||
case "d": // Tage (days)
|
||||
LocalDate today = LocalDate.now();
|
||||
LocalDate christmas = LocalDate.of(today.getYear(), Month.DECEMBER, 25);
|
||||
if (today.isAfter(christmas)) {
|
||||
christmas = christmas.plusYears(1);
|
||||
}
|
||||
return String.valueOf((int) java.time.temporal.ChronoUnit.DAYS.between(today, christmas));
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
87
src/main/java/de/mviper/adventskalender/AdventCommand.java
Normal file
87
src/main/java/de/mviper/adventskalender/AdventCommand.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class AdventCommand implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
|
||||
// --- Admin-Befehle (/ak admin ...) ---
|
||||
if (args.length >= 1 && args[0].equalsIgnoreCase("admin")) {
|
||||
// Prüfen, ob der Spieler die Admin-Berechtigung hat
|
||||
if (!sender.hasPermission("adventskalender.admin")) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.no_permission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
// /ak admin reload
|
||||
if (args.length == 2 && args[1].equalsIgnoreCase("reload")) {
|
||||
Adventskalender.getInstance().reloadConfig();
|
||||
LanguageManager.setup();
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.reload_success"));
|
||||
return true;
|
||||
}
|
||||
|
||||
// /ak admin open <player> <day>
|
||||
if (args.length == 4 && args[1].equalsIgnoreCase("open")) {
|
||||
Player target = Bukkit.getPlayer(args[2]);
|
||||
if (target == null) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.player_not_found").replace("%player%", args[2]));
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
int day = Integer.parseInt(args[3]);
|
||||
if (day < 1 || day > 24) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.invalid_day"));
|
||||
return true;
|
||||
}
|
||||
|
||||
ItemStack reward = AdventInventory.getRewardItem(day);
|
||||
if (reward != null && reward.getType() != Material.AIR) {
|
||||
if (target.getInventory().firstEmpty() == -1) {
|
||||
target.getWorld().dropItemNaturally(target.getLocation(), reward);
|
||||
} else {
|
||||
target.getInventory().addItem(reward);
|
||||
}
|
||||
}
|
||||
CalendarData.setClaimed(target, day);
|
||||
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.open_success").replace("%player%", target.getName()).replace("%day%", String.valueOf(day)));
|
||||
target.sendMessage(LanguageManager.getString("messages.reward_received").replace("%day%", String.valueOf(day)));
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.admin.invalid_day"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Falsche Nutzung der Admin-Befehle
|
||||
sender.sendMessage("§cUsage: /ak admin reload");
|
||||
sender.sendMessage("§cUsage: /ak admin open <player> <day>");
|
||||
return true;
|
||||
}
|
||||
|
||||
// --- Hauptbefehl (/ak) ---
|
||||
if (!(sender instanceof Player)) {
|
||||
sender.sendMessage(LanguageManager.getString("messages.only_player"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
if (!player.hasPermission("adventskalender.use")) {
|
||||
player.sendMessage(LanguageManager.getString("messages.no_permission"));
|
||||
return true;
|
||||
}
|
||||
|
||||
AdventInventory.openCalendar(player);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
120
src/main/java/de/mviper/adventskalender/AdventInventory.java
Normal file
120
src/main/java/de/mviper/adventskalender/AdventInventory.java
Normal file
@@ -0,0 +1,120 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class AdventInventory {
|
||||
|
||||
public static void openCalendar(org.bukkit.entity.Player player) {
|
||||
// KORREKTUR: Wir lesen den Titel direkt aus der Sprachdatei.
|
||||
// Der Pfad "gui.title" entspricht der Struktur in deiner messages_de.yml
|
||||
String title = LanguageManager.getString("gui.title");
|
||||
Inventory inv = Bukkit.createInventory(null, 54, title);
|
||||
|
||||
for (int i = 0; i < 24; i++) {
|
||||
int day = i + 1;
|
||||
ItemStack item = getCalendarItem(player, day);
|
||||
inv.setItem(i, item);
|
||||
}
|
||||
|
||||
ItemStack filler = new ItemStack(Material.GRAY_STAINED_GLASS_PANE);
|
||||
ItemMeta fillerMeta = filler.getItemMeta();
|
||||
fillerMeta.setDisplayName(" ");
|
||||
filler.setItemMeta(fillerMeta);
|
||||
for (int i = 24; i < 54; i++) {
|
||||
inv.setItem(i, filler);
|
||||
}
|
||||
|
||||
player.openInventory(inv);
|
||||
}
|
||||
|
||||
public static ItemStack getCalendarItem(org.bukkit.entity.Player player, int day) {
|
||||
LocalDate today = LocalDate.now();
|
||||
String prefix = LanguageManager.getString("prefix");
|
||||
|
||||
if (today.getMonth() != Month.DECEMBER || today.getDayOfMonth() < day) {
|
||||
ItemStack item = new ItemStack(Material.BARRIER);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(prefix + "§cTag " + day);
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(prefix + "§7Noch nicht verfügbar.");
|
||||
lore.add(prefix + "§7Komme am " + day + ". Dezember wieder.");
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
|
||||
if (CalendarData.hasClaimed(player, day)) {
|
||||
ItemStack item = new ItemStack(Material.GREEN_STAINED_GLASS_PANE);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(prefix + "§aTag " + day + " - Geöffnet");
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(prefix + LanguageManager.getString("messages.day_already_claimed"));
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
|
||||
ItemStack item = new ItemStack(Material.CHEST);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(prefix + "§eTag " + day + " - Noch zu holen!");
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(prefix + "§7Klicke, um dein Geschenk zu erhalten.");
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
|
||||
public static ItemStack getRewardItem(int day) {
|
||||
String path = "rewards." + day;
|
||||
if (!Adventskalender.getInstance().getConfig().contains(path)) {
|
||||
return new ItemStack(Material.AIR);
|
||||
}
|
||||
|
||||
String materialName = Adventskalender.getInstance().getConfig().getString(path + ".material");
|
||||
int amount = Adventskalender.getInstance().getConfig().getInt(path + ".amount");
|
||||
String key = Adventskalender.getInstance().getConfig().getString(path + ".key");
|
||||
|
||||
Material material = Material.getMaterial(materialName);
|
||||
if (material == null) {
|
||||
Adventskalender.getInstance().getLogger().warning("Material '" + materialName + "' für Tag " + day + " nicht gefunden!");
|
||||
return new ItemStack(Material.BARRIER);
|
||||
}
|
||||
|
||||
ItemStack item = new ItemStack(material, amount);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
String namePath = key + ".name";
|
||||
String lorePath = key + ".lore";
|
||||
|
||||
meta.setDisplayName(LanguageManager.getString(namePath));
|
||||
meta.setLore(LanguageManager.getStringList(lorePath));
|
||||
|
||||
List<Map<?, ?>> enchantmentList = Adventskalender.getInstance().getConfig().getMapList(path + ".enchantments");
|
||||
if (enchantmentList != null) {
|
||||
for (Map<?, ?> enchantmentMap : enchantmentList) {
|
||||
String enchantName = (String) enchantmentMap.get("type");
|
||||
int level = (int) enchantmentMap.get("level");
|
||||
Enchantment enchantment = Enchantment.getByName(enchantName);
|
||||
if (enchantment != null) {
|
||||
meta.addEnchant(enchantment, level, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
}
|
||||
58
src/main/java/de/mviper/adventskalender/AdventListener.java
Normal file
58
src/main/java/de/mviper/adventskalender/AdventListener.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.Month;
|
||||
|
||||
public class AdventListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
// KORREKTUR: Wir verwenden den gleichen Schlüssel wie in der AdventInventory.java,
|
||||
// um den Titel zu laden. So sind beide Titel identisch.
|
||||
String translatedTitle = LanguageManager.getString("gui.title");
|
||||
|
||||
if (event.getView().getTitle().equals(translatedTitle)) {
|
||||
event.setCancelled(true); // Diese Zeile wird jetzt wieder ausgeführt!
|
||||
|
||||
if (!(event.getWhoClicked() instanceof Player)) return;
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
int slot = event.getSlot();
|
||||
if (slot < 0 || slot > 23) return;
|
||||
|
||||
int day = slot + 1;
|
||||
LocalDate today = LocalDate.now();
|
||||
|
||||
if (today.getMonth() == Month.DECEMBER && today.getDayOfMonth() >= day && !CalendarData.hasClaimed(player, day)) {
|
||||
ItemStack reward = AdventInventory.getRewardItem(day);
|
||||
if (reward != null && reward.getType() != Material.AIR) {
|
||||
if (player.getInventory().firstEmpty() == -1) {
|
||||
player.getWorld().dropItemNaturally(player.getLocation(), reward);
|
||||
player.sendMessage(LanguageManager.getString("messages.inventory_full"));
|
||||
} else {
|
||||
player.getInventory().addItem(reward);
|
||||
}
|
||||
player.sendMessage(LanguageManager.getString("messages.reward_received").replace("%day%", String.valueOf(day)));
|
||||
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0f, 1.0f);
|
||||
player.spawnParticle(Particle.VILLAGER_HAPPY, player.getLocation().add(0, 1, 0), 20, 0.5, 0.5, 0.5, 0);
|
||||
}
|
||||
|
||||
CalendarData.setClaimed(player, day);
|
||||
ItemStack newItem = AdventInventory.getCalendarItem(player, day);
|
||||
event.getInventory().setItem(slot, newItem);
|
||||
|
||||
} else {
|
||||
player.sendMessage(LanguageManager.getString("messages.day_not_available"));
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1.0f, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
40
src/main/java/de/mviper/adventskalender/Adventskalender.java
Normal file
40
src/main/java/de/mviper/adventskalender/Adventskalender.java
Normal file
@@ -0,0 +1,40 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public final class Adventskalender extends JavaPlugin {
|
||||
private static Adventskalender instance;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
saveDefaultConfig();
|
||||
|
||||
LanguageManager.setup();
|
||||
CalendarData.setup();
|
||||
|
||||
getCommand("adventskalender").setExecutor(new AdventCommand());
|
||||
getServer().getPluginManager().registerEvents(new AdventListener(), this);
|
||||
|
||||
// Prüfen, ob PlaceholderAPI vorhanden ist und unsere neue Erweiterung registrieren
|
||||
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
||||
// HIER IST DIE ÄNDERUNG: Wir erstellen eine Instanz der neuen Klasse
|
||||
new AdventCalendarExpansion().register();
|
||||
getLogger().info("PlaceholderAPI expansion registered.");
|
||||
} else {
|
||||
getLogger().warning("PlaceholderAPI not found. Placeholders will not work.");
|
||||
}
|
||||
|
||||
getLogger().info("Adventskalender-Plugin wurde erfolgreich aktiviert!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getLogger().info("Adventskalender-Plugin wurde deaktiviert.");
|
||||
}
|
||||
|
||||
public static Adventskalender getInstance() {
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
68
src/main/java/de/mviper/adventskalender/CalendarData.java
Normal file
68
src/main/java/de/mviper/adventskalender/CalendarData.java
Normal file
@@ -0,0 +1,68 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class CalendarData {
|
||||
|
||||
private static File file;
|
||||
private static FileConfiguration customFile;
|
||||
|
||||
public static void setup() {
|
||||
file = new File(Adventskalender.getInstance().getDataFolder(), "calendar.yml");
|
||||
if (!file.exists()) {
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
Adventskalender.getInstance().getLogger().severe("Konnte calendar.yml nicht erstellen: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
customFile = YamlConfiguration.loadConfiguration(file);
|
||||
}
|
||||
|
||||
public static void save() {
|
||||
try {
|
||||
customFile.save(file);
|
||||
} catch (IOException e) {
|
||||
Adventskalender.getInstance().getLogger().severe("Konnte calendar.yml nicht speichern: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean hasClaimed(Player player, int day) {
|
||||
boolean isGlobal = Adventskalender.getInstance().getConfig().getBoolean("calendar.use_global_calendar");
|
||||
if (isGlobal) {
|
||||
List<Integer> claimedDays = customFile.getIntegerList("global_claimed_days");
|
||||
return claimedDays.contains(day);
|
||||
} else {
|
||||
List<Integer> claimedDays = customFile.getIntegerList(player.getUniqueId().toString());
|
||||
return claimedDays.contains(day);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setClaimed(Player player, int day) {
|
||||
boolean isGlobal = Adventskalender.getInstance().getConfig().getBoolean("calendar.use_global_calendar");
|
||||
if (isGlobal) {
|
||||
List<Integer> claimedDays = customFile.getIntegerList("global_claimed_days");
|
||||
claimedDays.add(day);
|
||||
customFile.set("global_claimed_days", claimedDays);
|
||||
} else {
|
||||
List<Integer> claimedDays = customFile.getIntegerList(player.getUniqueId().toString());
|
||||
claimedDays.add(day);
|
||||
customFile.set(player.getUniqueId().toString(), claimedDays);
|
||||
}
|
||||
save();
|
||||
}
|
||||
|
||||
public static int getClaimedCount(Player player) {
|
||||
if (Adventskalender.getInstance().getConfig().getBoolean("calendar.use_global_calendar")) {
|
||||
return customFile.getIntegerList("global_claimed_days").size();
|
||||
} else {
|
||||
return customFile.getIntegerList(player.getUniqueId().toString()).size();
|
||||
}
|
||||
}
|
||||
}
|
||||
41
src/main/java/de/mviper/adventskalender/LanguageManager.java
Normal file
41
src/main/java/de/mviper/adventskalender/LanguageManager.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class LanguageManager {
|
||||
|
||||
private static FileConfiguration languageConfig;
|
||||
|
||||
public static void setup() {
|
||||
String lang = Adventskalender.getInstance().getConfig().getString("general.language", "de");
|
||||
File languageFile = new File(Adventskalender.getInstance().getDataFolder(), "messages_" + lang + ".yml");
|
||||
|
||||
if (!languageFile.exists()) {
|
||||
Adventskalender.getInstance().saveResource("messages_" + lang + ".yml", false);
|
||||
}
|
||||
|
||||
languageConfig = YamlConfiguration.loadConfiguration(languageFile);
|
||||
}
|
||||
|
||||
public static String getString(String path) {
|
||||
if (languageConfig.contains(path)) {
|
||||
return format(languageConfig.getString(path));
|
||||
}
|
||||
return "§cLanguage key not found: " + path;
|
||||
}
|
||||
|
||||
public static List<String> getStringList(String path) {
|
||||
if (languageConfig.contains(path)) {
|
||||
return languageConfig.getStringList(path).stream().map(LanguageManager::format).toList();
|
||||
}
|
||||
return List.of("§cLanguage key list not found: " + path);
|
||||
}
|
||||
|
||||
private static String format(String message) {
|
||||
return org.bukkit.ChatColor.translateAlternateColorCodes('&', message);
|
||||
}
|
||||
}
|
||||
75
src/main/java/de/mviper/adventskalender/PlayerData.java
Normal file
75
src/main/java/de/mviper/adventskalender/PlayerData.java
Normal file
@@ -0,0 +1,75 @@
|
||||
package de.mviper.adventskalender;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Verwaltet die Spielerdaten in einer separaten YAML-Datei.
|
||||
* Speichert, welcher Spieler an welchem Tag sein Geschenk bereits geholt hat.
|
||||
*/
|
||||
public class PlayerData {
|
||||
|
||||
private static File file;
|
||||
private static FileConfiguration customFile;
|
||||
|
||||
/**
|
||||
* Erstellt die playerdata.yml-Datei, falls sie nicht existiert.
|
||||
*/
|
||||
public static void setup() {
|
||||
file = new File(Adventskalender.getInstance().getDataFolder(), "playerdata.yml");
|
||||
if (!file.exists()) {
|
||||
try {
|
||||
file.createNewFile();
|
||||
} catch (IOException e) {
|
||||
Adventskalender.getInstance().getLogger().severe("Konnte playerdata.yml nicht erstellen: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
customFile = YamlConfiguration.loadConfiguration(file);
|
||||
}
|
||||
|
||||
public static FileConfiguration get() {
|
||||
return customFile;
|
||||
}
|
||||
|
||||
public static void save() {
|
||||
try {
|
||||
customFile.save(file);
|
||||
} catch (IOException e) {
|
||||
Adventskalender.getInstance().getLogger().severe("Konnte playerdata.yml nicht speichern: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static void reload() {
|
||||
customFile = YamlConfiguration.loadConfiguration(file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prüft, ob ein Spieler ein Geschenk für einen bestimmten Tag bereits geholt hat.
|
||||
* @param uuid Die UUID des Spielers
|
||||
* @param day Der Tag (1-24)
|
||||
* @return true, wenn bereits geholt, sonst false
|
||||
*/
|
||||
public static boolean hasClaimed(UUID uuid, int day) {
|
||||
// Wir speichern eine Liste der geöffneten Tage für jeden Spieler
|
||||
List<Integer> claimedDays = customFile.getIntegerList(uuid.toString());
|
||||
return claimedDays.contains(day);
|
||||
}
|
||||
|
||||
/**
|
||||
* Markiert einen Tag für einen Spieler als geholt.
|
||||
* @param uuid Die UUID des Spielers
|
||||
* @param day Der Tag (1-24)
|
||||
*/
|
||||
public static void setClaimed(UUID uuid, int day) {
|
||||
List<Integer> claimedDays = customFile.getIntegerList(uuid.toString());
|
||||
claimedDays.add(day);
|
||||
customFile.set(uuid.toString(), claimedDays);
|
||||
save();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user