From 4033ae1074406659f52b90e9880726d4e094cc08 Mon Sep 17 00:00:00 2001 From: montlikadani Date: Sun, 3 Nov 2019 16:19:26 +0100 Subject: [PATCH] Temporary fix for button click options --- .../gamingmesh/jobs/CMIGUI/GUIListener.java | 36 ++++++++++++------- .../gamingmesh/jobs/CMIGUI/GUIManager.java | 36 +++++++++++++++---- .../com/gamingmesh/jobs/Gui/GUIInfoList.java | 27 ++++++++++++++ .../com/gamingmesh/jobs/Gui/GuiManager.java | 28 ++++++++++++--- .../gamingmesh/jobs/container/JobsPlayer.java | 13 ++----- 5 files changed, 105 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/gamingmesh/jobs/Gui/GUIInfoList.java diff --git a/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIListener.java b/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIListener.java index 813f9e18..6cc14778 100644 --- a/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIListener.java +++ b/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIListener.java @@ -17,18 +17,24 @@ import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; +import com.gamingmesh.jobs.Jobs; import com.gamingmesh.jobs.CMILib.Reflections; +import com.gamingmesh.jobs.container.Job; public class GUIListener implements Listener { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onNormalInventoryClose(InventoryCloseEvent event) { - final Player player = (Player) event.getPlayer(); + Player player = (Player) event.getPlayer(); if (GUIManager.isOpenedGui(player)) { if (GUIManager.removePlayer(player)) { player.updateInventory(); clearIconItems(player); } + + if (Jobs.getGUIManager().isInGui(player)) { + Jobs.getGUIManager().GuiList.remove(player.getUniqueId()); + } } } @@ -61,13 +67,14 @@ public class GUIListener implements Listener { @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onInventoryClick(final InventoryClickEvent event) { - final Player player = (Player) event.getWhoClicked(); + Player player = (Player) event.getWhoClicked(); if (!GUIManager.isOpenedGui(player)) return; CMIGui gui = GUIManager.getGui(player); - if (event.getClick() == ClickType.DOUBLE_CLICK || event.getHotbarButton() != -1) { + ClickType click = event.getClick(); + if (click == ClickType.DOUBLE_CLICK || event.getHotbarButton() != -1) { event.setCancelled(true); return; } @@ -90,8 +97,10 @@ public class GUIListener implements Listener { return; } - final List buttons = new ArrayList(); - buttons.add(event.getRawSlot()); + int slot = event.getRawSlot(); + + List buttons = new ArrayList(); + buttons.add(slot); if (!GUIManager.canClick(player, buttons)) { event.setCancelled(true); } @@ -99,13 +108,15 @@ public class GUIListener implements Listener { if (GUIManager.isLockedPart(player, buttons)) event.setCancelled(true); - InventoryAction action = event.getAction(); - if (!GUIManager.processClick(player, event.getCurrentItem(), buttons, GUIManager.getClickType(event.isLeftClick(), event.isShiftClick(), action))) { + Job job = Jobs.getGUIManager().getJobBySlot(player, slot >= 0 ? slot : 0); + if (!GUIManager.processClick(player, event.getCurrentItem(), buttons, + GUIManager.getClickType(event.isLeftClick(), event.isRightClick(), event.isShiftClick(), event.getAction()), job)) { event.setCancelled(true); return; } - if (gui.isAllowShift() && event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) && event.getClickedInventory().getType().equals(InventoryType.PLAYER)) { + if (gui.isAllowShift() && event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) && + event.getClickedInventory().getType().equals(InventoryType.PLAYER)) { event.setCancelled(true); @@ -124,8 +135,8 @@ public class GUIListener implements Listener { } @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) - public void onInventoryMove(final InventoryDragEvent event) { - final Player player = (Player) event.getWhoClicked(); + public void onInventoryMove(InventoryDragEvent event) { + Player player = (Player) event.getWhoClicked(); if (!GUIManager.isOpenedGui(player)) return; @@ -135,7 +146,7 @@ public class GUIListener implements Listener { return; } - final List buttons = new ArrayList(); + List buttons = new ArrayList(); buttons.addAll(event.getRawSlots()); if (!GUIManager.canClick(player, buttons)) { event.setCancelled(true); @@ -145,10 +156,9 @@ public class GUIListener implements Listener { event.setCancelled(true); } - if (!GUIManager.processClick(player, null, buttons, GUIManager.getClickType(true, false, null))) { + if (!GUIManager.processClick(player, null, buttons, GUIManager.getClickType(true, false, false, null), null)) { event.setCancelled(true); return; - } } } diff --git a/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIManager.java b/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIManager.java index 64e48be9..513e65ad 100644 --- a/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIManager.java +++ b/src/main/java/com/gamingmesh/jobs/CMIGUI/GUIManager.java @@ -17,6 +17,7 @@ import org.bukkit.inventory.ItemStack; import com.gamingmesh.jobs.Jobs; import com.gamingmesh.jobs.CMILib.Reflections; +import com.gamingmesh.jobs.container.Job; public class GUIManager { @@ -163,11 +164,22 @@ public class GUIManager { } } - public static GUIClickType getClickType(boolean left, boolean shift, InventoryAction action) { - + public static GUIClickType getClickType(boolean left, boolean right, boolean shift, InventoryAction action) { if (!left && !shift && (action.equals(InventoryAction.NOTHING) || action.equals(InventoryAction.CLONE_STACK))) return GUIClickType.MiddleMouse; + if (!Jobs.getGCManager().JobsGUISwitcheButtons && left || + Jobs.getGCManager().JobsGUISwitcheButtons && right) { + return GUIClickType.Left; + } else if (!Jobs.getGCManager().JobsGUISwitcheButtons && right || + Jobs.getGCManager().JobsGUISwitcheButtons && left) { + if (Jobs.getGCManager().UseInversedClickToLeave) { + return GUIClickType.Left; + } + + return GUIClickType.Right; + } + if (left && !shift) { return GUIClickType.Left; } else if (left && shift) { @@ -179,20 +191,31 @@ public class GUIManager { } } - public static boolean processClick(final Player player, ItemStack currentItem, List buttons, final GUIClickType clickType) { + public static boolean processClick(final Player player, ItemStack currentItem, List buttons, final GUIClickType clickType, + Job job) { CMIGui gui = map.get(player.getUniqueId()); if (gui == null) return true; for (Integer one : buttons) { - - final CMIGuiButton button = gui.getButtons().get(one); - if (!gui.click(one, clickType, currentItem)) return false; + final CMIGuiButton button = gui.getButtons().get(one); if (button == null) continue; + + if (job != null) { + if (!Jobs.getGCManager().JobsGUISwitcheButtons && clickType.equals(GUIClickType.Right) || + Jobs.getGCManager().JobsGUISwitcheButtons && clickType.equals(GUIClickType.Left)) { + if (Jobs.getGCManager().UseInversedClickToLeave) { + button.addCommand(GUIClickType.Left, "jobs leave " + job.getName()); + } else { + button.addCommand(GUIClickType.Right, "jobs join " + job.getName()); + } + } + } + boolean canClick = true; for (String oneC : button.getPermissions()) { if (!player.hasPermission(oneC)) @@ -203,7 +226,6 @@ public class GUIManager { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Jobs.getInstance(), new Runnable() { @Override public void run() { - for (GUIButtonCommand oneC : button.getCommands(clickType)) { performCommand(player, oneC.getCommand(), oneC.getCommandType()); } diff --git a/src/main/java/com/gamingmesh/jobs/Gui/GUIInfoList.java b/src/main/java/com/gamingmesh/jobs/Gui/GUIInfoList.java new file mode 100644 index 00000000..5691dd97 --- /dev/null +++ b/src/main/java/com/gamingmesh/jobs/Gui/GUIInfoList.java @@ -0,0 +1,27 @@ +package com.gamingmesh.jobs.Gui; + +import java.util.HashMap; + +import com.gamingmesh.jobs.container.Job; + +public class GUIInfoList { + + private String name; + private HashMap jobList = new HashMap<>(); + + public GUIInfoList(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public HashMap getJobList() { + return jobList; + } + + public void addJob(int slot, Job job) { + jobList.put(slot, job); + } +} \ No newline at end of file diff --git a/src/main/java/com/gamingmesh/jobs/Gui/GuiManager.java b/src/main/java/com/gamingmesh/jobs/Gui/GuiManager.java index 8d24c53e..7b1bf499 100644 --- a/src/main/java/com/gamingmesh/jobs/Gui/GuiManager.java +++ b/src/main/java/com/gamingmesh/jobs/Gui/GuiManager.java @@ -2,7 +2,9 @@ package com.gamingmesh.jobs.Gui; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -27,8 +29,22 @@ import com.gamingmesh.jobs.container.JobsPlayer; public class GuiManager { - public void openJobsBrowseGUI(Player player) { + public HashMap GuiList = new HashMap<>(); + public boolean isInGui(Player player) { + return GuiList.containsKey(player.getUniqueId()); + } + + public GUIInfoList getGuiInfo(Player p) { + return GuiList.get(p.getUniqueId()); + } + + public Job getJobBySlot(Player player, int slot) { + GUIInfoList info = GuiList.get(player.getUniqueId()); + return info.getJobList().get(slot); + } + + public void openJobsBrowseGUI(Player player) { ArrayList JobsList = new ArrayList<>(); for (Job job : Jobs.getJobs()) { if (Jobs.getGCManager().getHideJobsWithoutPermission()) @@ -37,8 +53,10 @@ public class GuiManager { JobsList.add(job); } + GUIInfoList guiInfo = new GUIInfoList(player.getName()); + GuiList.put(player.getUniqueId(), guiInfo); + JobsPlayer JPlayer = Jobs.getPlayerManager().getJobsPlayer(player); - List pJobs = JPlayer.getJobProgression(); CMIGui gui = new CMIGui(player); gui.setTitle(Jobs.getLanguage().getMessage("command.info.gui.pickjob")); @@ -82,7 +100,7 @@ public class GuiManager { ArrayList Lore = new ArrayList<>(); - for (JobProgression onePJob : pJobs) { + for (JobProgression onePJob : JPlayer.getJobProgression()) { if (onePJob.getJob().getName().equalsIgnoreCase(job.getName())) Lore.add(Jobs.getLanguage().getMessage("command.info.gui.working")); } @@ -131,11 +149,12 @@ public class GuiManager { meta.setLore(Lore); GuiItem.setItemMeta(meta); + guiInfo.addJob(pos, job); + gui.addButton(new CMIGuiButton(pos, GuiItem) { @Override public void click(GUIClickType type) { - switch (type) { case Left: case LeftShift: @@ -156,7 +175,6 @@ public class GuiManager { } }); i++; - } gui.fillEmptyButtons(); diff --git a/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java b/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java index d37f7a6f..9d87d982 100644 --- a/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java +++ b/src/main/java/com/gamingmesh/jobs/container/JobsPlayer.java @@ -879,9 +879,10 @@ public class JobsPlayer { public void resetQuests(Job job) { for (QuestProgression oneQ : getQuestProgressions(job)) { oneQ.setValidUntil(0l); - for (java.util.Map.Entry obj : oneQ.getQuest().getObjectives().entrySet()) { + for (Entry obj : oneQ.getQuest().getObjectives().entrySet()) { oneQ.setAmountDone(obj.getValue(), 0); } + setDoneQuests(0); getQuestProgressions(job).clear(); } @@ -889,15 +890,7 @@ public class JobsPlayer { public void resetQuests() { for (JobProgression one : getJobProgression()) { - for (QuestProgression oneQ : getQuestProgressions(one.getJob())) { - for (java.util.Map.Entry obj : oneQ.getQuest().getObjectives().entrySet()) { - oneQ.setAmountDone(obj.getValue(), 0); - } - oneQ.setValidUntil(0L); - } - - setDoneQuests(0); - getQuestProgressions(one.getJob()).clear(); + resetQuests(one.getJob()); } }