diff --git a/src/main/java/de/fanta/challenges/SaveSlot.java b/src/main/java/de/fanta/challenges/SaveSlot.java index 8260ef7..6ec00b0 100644 --- a/src/main/java/de/fanta/challenges/SaveSlot.java +++ b/src/main/java/de/fanta/challenges/SaveSlot.java @@ -1,22 +1,25 @@ package de.fanta.challenges; -import java.nio.file.Path; - public enum SaveSlot { - SLOT_1("1"), - SLOT_2("2"), - SLOT_3("3"), - SLOT_AUTO("autosave"); + SLOT_1("1", "challenge.save.slot1"), + SLOT_2("2", "challenge.save.slot2"), + SLOT_3("3", "challenge.save.slot3"), + SLOT_AUTO("autosave", "challenge.save.slotauto"); private final String slot; + private final String permission; - SaveSlot(String prefix) { + SaveSlot(String prefix, String permission) { this.slot = prefix; + this.permission = permission; } public String getSlot() { return slot; } + public String getPermission() { + return permission; + } } diff --git a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java b/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java index 1fa4fc3..ab66b3d 100644 --- a/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java +++ b/src/main/java/de/fanta/challenges/guis/savegui/ChallengeSaveGui.java @@ -11,9 +11,12 @@ import de.iani.playerUUIDCache.CachedPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import java.io.File; import java.io.IOException; @@ -21,7 +24,9 @@ import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; import java.util.HashMap; +import java.util.List; import java.util.UUID; +import java.util.logging.Level; public class ChallengeSaveGui extends AbstractWindow { private static final Challenges plugin = Challenges.getPlugin(); @@ -60,53 +65,10 @@ for (int i = 0; i < WINDOW_SIZE; i++) { ItemStack item; switch (i) { - case SAVE_1_INDEX -> { - if (player.hasPermission("challenge.save.slot1")) { - if (save1.isDirectory()) { - item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 1", ChatUtil.GREEN + "Gespeichert am " + getFileDate(save1)); - } else { - item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei"); - } - } else { - item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte"); - } - } - - case SAVE_2_INDEX -> { - if (player.hasPermission("challenge.save.slot2")) { - if (save2.isDirectory()) { - item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 2", ChatUtil.GREEN + "Gespeichert am " + getFileDate(save2)); - } else { - item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei"); - } - } else { - item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP"); - } - } - - case SAVE_3_INDEX -> { - if (player.hasPermission("challenge.save.slot3")) { - if (save3.isDirectory()) { - item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 3", ChatUtil.GREEN + "Gespeichert am " + getFileDate(save3)); - } else { - item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei"); - } - } else { - item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP"); - } - } - - case SAVE_AUTO_INDEX -> { - if (player.hasPermission("challenge.save.slotauto")) { - if (saveAuto.isDirectory()) { - item = GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "AutoSave", ChatUtil.RED + "AutoSave kann nicht überschrieben werden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(saveAuto)); - } else { - item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "AutoSave", ChatUtil.RED + "AutoSave kann nicht überschrieben werden."); - } - } else { - item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte"); - } - } + case SAVE_1_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_1, save1); + case SAVE_2_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_2, save2); + case SAVE_3_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_3, save3); + case SAVE_AUTO_INDEX -> item = getDisplayItem(player, SaveSlot.SLOT_AUTO, saveAuto); default -> item = GUIUtils.EMPTY_ICON; } this.getInventory().setItem(i, item); @@ -168,11 +130,11 @@ } case SAVE_3_INDEX -> { if (!p.hasPermission("challenge.save.slot3")) { - player.closeInventory(); ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); return; } if (!save3.isDirectory()) { + player.closeInventory(); SaveWorldUtils.saveWorld(player, savePlayerID.toString(), SaveSlot.SLOT_3); return; } @@ -194,4 +156,51 @@ return StringUtil.formatDate(fileTime.toMillis()); } + private static ItemStack getDisplayItem(Player player, SaveSlot saveSlot, File save) { + ItemStack item; + if (player.hasPermission(saveSlot.getPermission())) { + if (save.isDirectory()) { + File mapConfig = new File(save, "/Challenges/serverconfig.yml"); + Material displayItem = null; + String displayName = null; + try { + YamlConfiguration serverConfig = new YamlConfiguration(); + serverConfig.load(mapConfig); + String itemType = serverConfig.getString("displayItem.item"); + String itemName = serverConfig.getString("displayItem.name"); + if (itemType != null) { + try { + displayItem = Material.valueOf(itemType); + } catch (IllegalArgumentException ignore) { + } + } + if (itemName != null) { + displayName = itemName; + } + } catch (IOException | InvalidConfigurationException ex) { + plugin.getLogger().log(Level.SEVERE, "Fehler beim laden der config", ex); + } + + ItemStack stack = new ItemStack(displayItem != null ? displayItem : Material.MAP); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(displayName != null ? displayName : ChatUtil.GREEN + "Save " + saveSlot.getSlot()); + + if (saveSlot == SaveSlot.SLOT_AUTO) { + meta.setLore(List.of(ChatUtil.RED + "AutoSave kann nicht überschrieben werden!", ChatUtil.GREEN + "Gespeichert am " + getFileDate(save))); + } else { + meta.setLore(List.of(ChatUtil.GREEN + "Gespeichert am " + getFileDate(save))); + } + + stack.setItemMeta(meta); + item = stack; + + + } else { + item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei"); + } + } else { + item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP"); + } + return item; + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9c0d29c..f62427f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ main: ${mainClass} version: ${project.version} author: ${project.author} -api-version: 1.13 +api-version: 1.16 depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] softdepend: [CubesideStatistics] commands: