diff --git a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java index 6514650..56f4cfd 100644 --- a/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java +++ b/src/main/java/de/fanta/challengesjoinentities/ChallengesJoinEntities.java @@ -13,9 +13,9 @@ import de.fanta.challengesjoinentities.commands.AdventureCommand.AdventureTestMapCommand; import de.fanta.challengesjoinentities.commands.AdventureCommand.ChallengeClearSavesCommand; import de.fanta.challengesjoinentities.commands.AdventureCommand.ChallengesRemovePlayerServer; +import de.fanta.challengesjoinentities.commands.ChallengesCommand.ChallengeLoadCommand; import de.fanta.challengesjoinentities.commands.ChallengesCommand.ChallengeSetStatsCommand; import de.fanta.challengesjoinentities.commands.ChallengesCommand.ChallengesStatsCommand; -import de.fanta.challengesjoinentities.commands.ChallengesCommand.ChallengesloadCommand; import de.fanta.challengesjoinentities.commands.PiglinCommand.AddEntityCommand; import de.fanta.challengesjoinentities.commands.PiglinCommand.Entitytphere; import de.fanta.challengesjoinentities.commands.PiglinCommand.ListPiglinCommand; @@ -25,8 +25,6 @@ import de.fanta.challengesjoinentities.listeners.ChallengesEventListener; import de.fanta.challengesjoinentities.listeners.EntityListener; import de.fanta.challengesjoinentities.listeners.PlayerListener; -import de.fanta.challengesjoinentities.loadgui.AdventureLoadGUI; -import de.fanta.challengesjoinentities.loadgui.ChallengeLoadGUI; import de.fanta.challengesjoinentities.utils.Statistics; import de.iani.cubesidestats.api.CubesideStatisticsAPI; import de.iani.cubesideutils.bukkit.commands.CommandRouter; @@ -118,7 +116,7 @@ router.addCommandMapping(new ToggleArenaCommand(this, false), "disable"); CommandRouter challengesrouter = new CommandRouter(getCommand("challenges")); - challengesrouter.addCommandMapping(new ChallengesloadCommand(this), "load"); + challengesrouter.addCommandMapping(new ChallengeLoadCommand(this), "load"); challengesrouter.addCommandMapping(new ChallengesStatsCommand(plugin.getStatistics()), "stats"); challengesrouter.addCommandMapping(new ChallengeSetStatsCommand(plugin), "setstats"); challengesrouter.addCommandMapping(new ChallengeClearSavesCommand(), "clearoldsaves"); @@ -135,8 +133,6 @@ Bukkit.getPluginManager().registerEvents(new EntityListener(this), this); Bukkit.getPluginManager().registerEvents(new PlayerListener(this), this); - Bukkit.getPluginManager().registerEvents(new AdventureLoadGUI(), this); - Bukkit.getPluginManager().registerEvents(new ChallengeLoadGUI(), this); } Bukkit.getPluginManager().registerEvents(globalDataHelper, this); diff --git a/src/main/java/de/fanta/challengesjoinentities/Server.java b/src/main/java/de/fanta/challengesjoinentities/Server.java index 995612e..faa7426 100644 --- a/src/main/java/de/fanta/challengesjoinentities/Server.java +++ b/src/main/java/de/fanta/challengesjoinentities/Server.java @@ -85,21 +85,21 @@ } - public void loadSaved(Player p, String mapname, String slot) { + public void loadSaved(Player p, UUID playerID, String slot) { this.online = true; serverPlayers.put(this, p.getUniqueId()); File dir; - dir = new File("/home/minecraft/" + this.serverType.getDir() + "/" + mapname + "/" + slot); - mapname = mapname + "/" + slot; + dir = new File("/home/minecraft/" + this.serverType.getDir() + "/" + playerID + "/" + slot); + String path = playerID + "/" + slot; if (!dir.isDirectory()) { - ChatUtil.sendErrorMessage(p, "Map " + mapname + " nicht gefunden!"); + ChatUtil.sendErrorMessage(p, "Map " + path + " nicht gefunden!"); this.online = false; serverPlayers.remove(this); return; } - load(p, this.serverType.getDir(), mapname, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG + load(p, this.serverType.getDir(), path, getMapVersion(new File(dir + "/Challenges/serverconfig.yml"))); //TODO LOAD VERSION FROM ADVENTURE CONFIG } public void loadNewAdventure(Player player, String category, String map) { diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureLoadCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureLoadCommand.java index 35a4e33..b9ab892 100644 --- a/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureLoadCommand.java +++ b/src/main/java/de/fanta/challengesjoinentities/commands/AdventureCommand/AdventureLoadCommand.java @@ -2,10 +2,10 @@ import de.fanta.challengesjoinentities.ChallengesJoinEntities; import de.fanta.challengesjoinentities.ChatUtil; -import de.fanta.challengesjoinentities.Server; import de.fanta.challengesjoinentities.loadgui.AdventureLoadGUI; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; +import de.iani.playerUUIDCache.CachedPlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -22,28 +22,24 @@ ChatUtil.sendErrorMessage(sender, "Du musst ein Spieler sein!"); return true; } - if (!args.hasNext()) { - AdventureLoadGUI.createloadGUI(p); - return true; - } else { - if (sender.hasPermission("challenges.load.admin")) { - if (args.remaining() != 1 && args.remaining() != 2) { - ChatUtil.sendWarningMessage(p, "/adventure load [key] [Slot]"); - return true; - } - String next = args.getNext(); - String slot = args.getNext(); - if (!Server.serverPlayers.containsValue(p.getUniqueId())) { - this.plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, next.toLowerCase(), slot), () -> ChatUtil.sendErrorMessage(sender, "Aktuell ist kein Server Frei!")); - } else { - ChatUtil.sendErrorMessage(sender, "Du kannst nur einen Server starten!"); - } + CachedPlayer savePlayer; + if (args.hasNext()) { + if (!p.hasPermission("challenges.load.admin")) { + ChatUtil.sendErrorMessage(p, "Keine Rechte! (Du kannst nur eigene maps Laden)"); + return true; } + String savePlayerName = args.getNext(); + savePlayer = plugin.getPlayerUUIDCache().getPlayer(savePlayerName); + } else { + savePlayer = plugin.getPlayerUUIDCache().getPlayer(p.getUniqueId()); } - - + if (savePlayer != null) { + new AdventureLoadGUI(p, savePlayer).open(); + } else { + ChatUtil.sendErrorMessage(p, "Spieler nicht gefunden!"); + } return true; } } diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengeLoadCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengeLoadCommand.java new file mode 100644 index 0000000..ff1f09f --- /dev/null +++ b/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengeLoadCommand.java @@ -0,0 +1,46 @@ +package de.fanta.challengesjoinentities.commands.ChallengesCommand; + +import de.fanta.challengesjoinentities.ChallengesJoinEntities; +import de.fanta.challengesjoinentities.ChatUtil; +import de.fanta.challengesjoinentities.loadgui.AdventureLoadGUI; +import de.fanta.challengesjoinentities.loadgui.ChallengeLoadGUI; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import de.iani.playerUUIDCache.CachedPlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengeLoadCommand extends SubCommand { + private final ChallengesJoinEntities plugin; + + public ChallengeLoadCommand(ChallengesJoinEntities plugin) { + this.plugin = plugin; + } + + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "Du musst ein Spieler sein!"); + return true; + } + + CachedPlayer savePlayer; + if (args.hasNext()) { + if (!p.hasPermission("challenges.load.admin")) { + ChatUtil.sendErrorMessage(p, "Keine Rechte! (Du kannst nur eigene maps Laden)"); + return true; + } + String savePlayerName = args.getNext(); + savePlayer = plugin.getPlayerUUIDCache().getPlayer(savePlayerName); + } else { + savePlayer = plugin.getPlayerUUIDCache().getPlayer(p.getUniqueId()); + } + + if (savePlayer != null) { + new ChallengeLoadGUI(p, savePlayer).open(); + } else { + ChatUtil.sendErrorMessage(p, "Spieler nicht gefunden!"); + } + return true; + } +} diff --git a/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengesloadCommand.java b/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengesloadCommand.java deleted file mode 100644 index 6d56750..0000000 --- a/src/main/java/de/fanta/challengesjoinentities/commands/ChallengesCommand/ChallengesloadCommand.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.fanta.challengesjoinentities.commands.ChallengesCommand; - -import de.fanta.challengesjoinentities.ChallengesJoinEntities; -import de.fanta.challengesjoinentities.ChatUtil; -import de.fanta.challengesjoinentities.Server; -import de.fanta.challengesjoinentities.loadgui.ChallengeLoadGUI; -import de.iani.cubesideutils.bukkit.commands.SubCommand; -import de.iani.cubesideutils.commands.ArgsParser; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class ChallengesloadCommand extends SubCommand { - private final ChallengesJoinEntities plugin; - - public ChallengesloadCommand(ChallengesJoinEntities plugin) { - this.plugin = plugin; - } - - public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { - if (!(sender instanceof Player p)) { - ChatUtil.sendErrorMessage(sender, "Du musst ein Spieler sein!"); - return true; - } - if (!args.hasNext()) { - ChallengeLoadGUI.createloadGUI(p); - return true; - } - if (sender.hasPermission("challenges.load.admin")) { - if (args.remaining() != 1 && args.remaining() != 2) { - ChatUtil.sendWarningMessage(p, "/challenges load [key] [Slot]"); - return true; - } - - String next = args.getNext(); - String slot = args.getNext(); - - if (!Server.serverPlayers.containsValue(p.getUniqueId())) { - this.plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, next.toLowerCase(), slot), () -> ChatUtil.sendErrorMessage(sender, "Aktuell ist kein Server Frei!")); - } else { - ChatUtil.sendErrorMessage(sender, "Du kannst nur einen Server starten!"); - } - } - return true; - } -} diff --git a/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java b/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java index e012240..0b63a7b 100644 --- a/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java +++ b/src/main/java/de/fanta/challengesjoinentities/loadgui/AdventureLoadGUI.java @@ -4,14 +4,13 @@ import de.fanta.challengesjoinentities.ChatUtil; import de.fanta.challengesjoinentities.Server; import de.fanta.challengesjoinentities.utils.guiutils.GUIUtils; +import de.fanta.challengesjoinentities.utils.ui.AbstractWindow; import de.iani.cubesideutils.StringUtil; +import de.iani.playerUUIDCache.CachedPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; 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.Inventory; import org.bukkit.inventory.ItemStack; import java.io.File; @@ -19,8 +18,10 @@ import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; +import java.util.HashMap; +import java.util.UUID; -public class AdventureLoadGUI implements Listener { +public class AdventureLoadGUI extends AbstractWindow { private static final ChallengesJoinEntities plugin = ChallengesJoinEntities.getPlugin(); @@ -28,157 +29,168 @@ private static final int SAVE_2_INDEX = 3; private static final int SAVE_3_INDEX = 5; private static final int SAVE_AUTO_INDEX = 7; + private static final int WINDOW_SIZE = 9; + private static final HashMap savePlayerList = new HashMap<>(); - public static final Inventory CHALLENGE_LOAD_GUI = Bukkit.createInventory(null, 9, ChallengesJoinEntities.ADVENTUREGUIPREFIX + " >> Map laden"); - public static final int INVENTORY_SIZE = CHALLENGE_LOAD_GUI.getSize(); - - - public static void createloadGUI(Player p) { - File adventureSave1 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/1"); - File adventureSave2 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/2"); - File adventureSave3 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/3"); - File adventureSaveAuto = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/autosave"); - - if (p.hasPermission("challenge.save.slot1")) { - if (adventureSave1.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 1", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave1))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte")); - } - - if (p.hasPermission("challenge.save.slot2")) { - if (adventureSave2.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 2", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave2))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP")); - } - - - if (p.hasPermission("challenge.save.slot3")) { - if (adventureSave3.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 3", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave3))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP")); - } - - if (p.hasPermission("challenge.save.slotauto")) { - if (adventureSaveAuto.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "AutoSave", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSaveAuto))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "AutoSave")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte")); - } - - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item = CHALLENGE_LOAD_GUI.getItem(i); - if (item == null || item.getType() == Material.AIR) { - CHALLENGE_LOAD_GUI.setItem(i, GUIUtils.EMPTY_ICON); - } - } - p.openInventory(CHALLENGE_LOAD_GUI); + public AdventureLoadGUI(Player player, CachedPlayer savePlayer) { + super(player, Bukkit.createInventory(player, WINDOW_SIZE, ChallengesJoinEntities.ADVENTUREGUIPREFIX + " >> Map laden")); + savePlayerList.put(player.getUniqueId(), savePlayer.getUniqueId()); } - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - int slot = e.getRawSlot(); - Player p = (Player) e.getWhoClicked(); - File adventureSave1 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/1"); - File adventureSave2 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/2"); - File adventureSave3 = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/3"); - File adventureSaveAuto = new File("/home/minecraft/Adventure-saves/" + p.getUniqueId() + "/autosave"); - if (CHALLENGE_LOAD_GUI.equals(e.getClickedInventory())) { - if (slot == SAVE_1_INDEX) { + @Override + protected void rebuildInventory() { + Player p = getPlayer(); + UUID savePlayerID = savePlayerList.get(p.getUniqueId()); + File adventureSave1 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/1"); + File adventureSave2 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/2"); + File adventureSave3 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/3"); + File adventureSaveAuto = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/autosave"); + + for (int i = 0; i < WINDOW_SIZE; i++) { + ItemStack item; + switch (i) { + case SAVE_1_INDEX -> { + if (p.hasPermission("challenge.save.slot1")) { + if (adventureSave1.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 1", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave1)); + } 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 (p.hasPermission("challenge.save.slot2")) { + if (adventureSave2.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 2", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave2)); + } 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 (p.hasPermission("challenge.save.slot3")) { + if (adventureSave3.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 3", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSave3)); + } 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 (p.hasPermission("challenge.save.slotauto")) { + if (adventureSaveAuto.isDirectory()) { + item = GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "AutoSave", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(adventureSaveAuto)); + } else { + item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "AutoSave"); + } + } else { + item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte"); + } + } + default -> item = GUIUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + Player p = getPlayer(); + UUID savePlayerID = savePlayerList.get(p.getUniqueId()); + + File adventureSave1 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/1"); + File adventureSave2 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/2"); + File adventureSave3 = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/3"); + File adventureSaveAuto = new File("/home/minecraft/Adventure-saves/" + savePlayerID + "/autosave"); + + + int slot = event.getSlot(); + switch (slot) { + case SAVE_1_INDEX -> { if (!p.hasPermission("challenge.save.slot1")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); return; } if (!adventureSave1.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, "1"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "1"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - if (slot == SAVE_2_INDEX) { + case SAVE_2_INDEX -> { if (!p.hasPermission("challenge.save.slot2")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); return; } if (!adventureSave2.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { - e.setCancelled(true); p.closeInventory(); - plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, "2"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "2"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - e.setCancelled(true); - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - if (slot == SAVE_3_INDEX) { + case SAVE_3_INDEX -> { if (!p.hasPermission("challenge.save.slot3")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); return; } if (!adventureSave3.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, "3"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "3"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - - if (slot == SAVE_AUTO_INDEX) { + case SAVE_AUTO_INDEX -> { if (!p.hasPermission("challenge.save.slotauto")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); return; } if (!adventureSaveAuto.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, "autosave"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineAdventureServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "autosave"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - e.setCancelled(true); + default -> { + } } } diff --git a/src/main/java/de/fanta/challengesjoinentities/loadgui/ChallengeLoadGUI.java b/src/main/java/de/fanta/challengesjoinentities/loadgui/ChallengeLoadGUI.java index c065a33..122d82c 100644 --- a/src/main/java/de/fanta/challengesjoinentities/loadgui/ChallengeLoadGUI.java +++ b/src/main/java/de/fanta/challengesjoinentities/loadgui/ChallengeLoadGUI.java @@ -4,14 +4,13 @@ import de.fanta.challengesjoinentities.ChatUtil; import de.fanta.challengesjoinentities.Server; import de.fanta.challengesjoinentities.utils.guiutils.GUIUtils; +import de.fanta.challengesjoinentities.utils.ui.AbstractWindow; import de.iani.cubesideutils.StringUtil; +import de.iani.playerUUIDCache.CachedPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; 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.Inventory; import org.bukkit.inventory.ItemStack; import java.io.File; @@ -19,8 +18,10 @@ import java.nio.file.Files; import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.FileTime; +import java.util.HashMap; +import java.util.UUID; -public class ChallengeLoadGUI implements Listener { +public class ChallengeLoadGUI extends AbstractWindow { private static final ChallengesJoinEntities plugin = ChallengesJoinEntities.getPlugin(); @@ -28,157 +29,168 @@ private static final int SAVE_2_INDEX = 3; private static final int SAVE_3_INDEX = 5; private static final int SAVE_AUTO_INDEX = 7; + private static final int WINDOW_SIZE = 9; + private static final HashMap savePlayerList = new HashMap<>(); - public static final Inventory CHALLENGE_LOAD_GUI = Bukkit.createInventory(null, 9, ChallengesJoinEntities.CHALLENGEGUIPREFIX + " >> Map laden"); - public static final int INVENTORY_SIZE = CHALLENGE_LOAD_GUI.getSize(); - - - public static void createloadGUI(Player p) { - File challengeSave1 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/1"); - File challengeSave2 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/2"); - File challengeSave3 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/3"); - File challengeSaveAuto = new File("/home/minecraft/saves/" + p.getUniqueId() + "/autosave"); - - if (p.hasPermission("challenge.save.slot1")) { - if (challengeSave1.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 1", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave1))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_1_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte")); - } - - if (p.hasPermission("challenge.save.slot2")) { - if (challengeSave2.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 2", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave2))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_2_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP")); - } - - - if (p.hasPermission("challenge.save.slot3")) { - if (challengeSave3.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 3", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave3))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "Frei")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_3_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot brauchst du VIP")); - } - - if (p.hasPermission("challenge.save.slotauto")) { - if (challengeSaveAuto.isDirectory()) { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "AutoSave", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSaveAuto))); - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "AutoSave")); - } - } else { - CHALLENGE_LOAD_GUI.setItem(SAVE_AUTO_INDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte")); - } - - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item = CHALLENGE_LOAD_GUI.getItem(i); - if (item == null || item.getType() == Material.AIR) { - CHALLENGE_LOAD_GUI.setItem(i, GUIUtils.EMPTY_ICON); - } - } - p.openInventory(CHALLENGE_LOAD_GUI); + public ChallengeLoadGUI(Player player, CachedPlayer savePlayer) { + super(player, Bukkit.createInventory(player, WINDOW_SIZE, ChallengesJoinEntities.CHALLENGEGUIPREFIX + " >> Map laden")); + savePlayerList.put(player.getUniqueId(), savePlayer.getUniqueId()); } - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - int slot = e.getRawSlot(); - Player p = (Player) e.getWhoClicked(); - File challengeSave1 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/1"); - File challengeSave2 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/2"); - File challengeSave3 = new File("/home/minecraft/saves/" + p.getUniqueId() + "/3"); - File challengeSaveAuto = new File("/home/minecraft/saves/" + p.getUniqueId() + "/autosave"); - if (CHALLENGE_LOAD_GUI.equals(e.getClickedInventory())) { - if (slot == SAVE_1_INDEX) { + @Override + protected void rebuildInventory() { + Player p = getPlayer(); + UUID savePlayerID = savePlayerList.get(p.getUniqueId()); + File challengeSave1 = new File("/home/minecraft/saves/" + savePlayerID + "/1"); + File challengeSave2 = new File("/home/minecraft/saves/" + savePlayerID + "/2"); + File challengeSave3 = new File("/home/minecraft/saves/" + savePlayerID + "/3"); + File challengeSaveAuto = new File("/home/minecraft/saves/" + savePlayerID + "/autosave"); + + for (int i = 0; i < WINDOW_SIZE; i++) { + ItemStack item; + switch (i) { + case SAVE_1_INDEX -> { + if (p.hasPermission("challenge.save.slot1")) { + if (challengeSave1.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 1", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave1)); + } 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 (p.hasPermission("challenge.save.slot2")) { + if (challengeSave2.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 2", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave2)); + } 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 (p.hasPermission("challenge.save.slot3")) { + if (challengeSave3.isDirectory()) { + item = GUIUtils.createGuiItem(Material.MAP, ChatUtil.GREEN + "Save 3", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSave3)); + } 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 (p.hasPermission("challenge.save.slotauto")) { + if (challengeSaveAuto.isDirectory()) { + item = GUIUtils.createGuiItem(Material.CLOCK, ChatUtil.GREEN + "AutoSave", ChatUtil.GREEN + "Klicken zum laden.", ChatUtil.GREEN + "Gespeichert am " + getFileDate(challengeSaveAuto)); + } else { + item = GUIUtils.createGuiItem(Material.LIME_STAINED_GLASS_PANE, ChatUtil.GREEN + "AutoSave"); + } + } else { + item = GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Für diesen Slot hast du keine Rechte"); + } + } + default -> item = GUIUtils.EMPTY_ICON; + } + this.getInventory().setItem(i, item); + } + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + Player p = getPlayer(); + UUID savePlayerID = savePlayerList.get(p.getUniqueId()); + + File challengeSave1 = new File("/home/minecraft/saves/" + savePlayerID + "/1"); + File challengeSave2 = new File("/home/minecraft/saves/" + savePlayerID + "/2"); + File challengeSave3 = new File("/home/minecraft/saves/" + savePlayerID + "/3"); + File challengeSaveAuto = new File("/home/minecraft/saves/" + savePlayerID + "/autosave"); + + + int slot = event.getSlot(); + switch (slot) { + case SAVE_1_INDEX -> { if (!p.hasPermission("challenge.save.slot1")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); return; } if (!challengeSave1.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, "1"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "1"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - if (slot == SAVE_2_INDEX) { + case SAVE_2_INDEX -> { if (!p.hasPermission("challenge.save.slot2")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); return; } if (!challengeSave2.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { - e.setCancelled(true); p.closeInventory(); - plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, "2"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "2"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - e.setCancelled(true); - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - if (slot == SAVE_3_INDEX) { + case SAVE_3_INDEX -> { if (!p.hasPermission("challenge.save.slot3")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot brauchst du VIP!"); return; } if (!challengeSave3.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, "3"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "3"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - - if (slot == SAVE_AUTO_INDEX) { + case SAVE_AUTO_INDEX -> { if (!p.hasPermission("challenge.save.slotauto")) { - e.setCancelled(true); ChatUtil.sendErrorMessage(p, "Für diesen Slot hast du keine Rechte!"); return; } if (!challengeSaveAuto.isDirectory()) { - e.setCancelled(true); return; } if (!Server.serverPlayers.containsValue(p.getUniqueId())) { p.closeInventory(); - plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, "autosave"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); - p.closeInventory(); + plugin.getPluginConfig().getOnlineChanllengeServer().ifPresentOrElse(server -> server.loadSaved(p, savePlayerID, "autosave"), () -> ChatUtil.sendErrorMessage(p, "Aktuell ist kein Server Frei!")); } else { - ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); p.closeInventory(); + ChatUtil.sendErrorMessage(p, "Du kannst nur einen Server starten!"); } } - e.setCancelled(true); + default -> { + } } }