From 3dc7758bc2ab70b61ba3fb70048bcb682b1cf79b Mon Sep 17 00:00:00 2001 From: rockyhawk64 Date: Fri, 15 Jan 2021 22:47:22 +1100 Subject: [PATCH] v3.15.1.2 --- resource/config.yml | 1 + resource/plugin.yml | 2 +- resource/template.yml | 4 +- src/me/rockyhawk/commandpanels/Utils.java | 6 ++- .../commandpanels/api/CommandPanelsAPI.java | 7 ++++ .../commandpanels/api/PanelClosedEvent.java | 38 +++++++++++++++++++ .../classresources/ExecuteOpenVoids.java | 5 +++ .../classresources/ItemCreation.java | 2 +- .../interactives/Commandpanelrefresher.java | 18 ++++++++- .../openpanelsmanager/OpenGUI.java | 2 +- .../openpanelsmanager/OpenPanelsLoader.java | 25 ++++++------ .../openpanelsmanager/UtilsPanelsLoader.java | 26 +++++++++---- 12 files changed, 107 insertions(+), 29 deletions(-) create mode 100644 src/me/rockyhawk/commandpanels/api/PanelClosedEvent.java diff --git a/resource/config.yml b/resource/config.yml index e38053b..0d83efb 100644 --- a/resource/config.yml +++ b/resource/config.yml @@ -12,6 +12,7 @@ config: hotbar-items: true custom-commands: true auto-register-commands: false + auto-update-panels: false refresh-delay: 20 server-ping-timeout: 10 stop-sound: true diff --git a/resource/plugin.yml b/resource/plugin.yml index 569e92a..0218f44 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.15.1.1 +version: 3.15.1.2 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk diff --git a/resource/template.yml b/resource/template.yml index bd3b97f..dfa8dde 100644 --- a/resource/template.yml +++ b/resource/template.yml @@ -1,11 +1,11 @@ # |------------------------------------------------------------------------ # | CommandPanels Template File -# | By RockyHawk v1.0 +# | By RockyHawk v1.1 # | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/ # |------------------------------------------------------------------------ panels: template: - perm: default + perm: admin rows: 1 title: '&8Template Panel' empty: GLASS_PANE diff --git a/src/me/rockyhawk/commandpanels/Utils.java b/src/me/rockyhawk/commandpanels/Utils.java index 5830720..070b78b 100644 --- a/src/me/rockyhawk/commandpanels/Utils.java +++ b/src/me/rockyhawk/commandpanels/Utils.java @@ -26,6 +26,11 @@ public class Utils implements Listener { } Panel panel = plugin.openPanels.getOpenPanel(p.getName()); //this is the panel cf section + if(e.getSlot() == -999){return;} + if(e.getClickedInventory().getType() == InventoryType.PLAYER){ + return; + } + //loop through possible hasvalue/hasperm 1,2,3,etc //this loops through all the items in the panel @@ -37,7 +42,6 @@ public class Utils implements Listener { } if(!foundSlot){ e.setCancelled(true); - p.updateInventory(); return; } diff --git a/src/me/rockyhawk/commandpanels/api/CommandPanelsAPI.java b/src/me/rockyhawk/commandpanels/api/CommandPanelsAPI.java index 56b7d08..87d0de2 100644 --- a/src/me/rockyhawk/commandpanels/api/CommandPanelsAPI.java +++ b/src/me/rockyhawk/commandpanels/api/CommandPanelsAPI.java @@ -1,8 +1,10 @@ package me.rockyhawk.commandpanels.api; import me.rockyhawk.commandpanels.CommandPanels; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.io.File; import java.io.IOException; @@ -59,6 +61,11 @@ public class CommandPanelsAPI { return null; } + //make custom item using items section + public ItemStack makeItem(Player p, ConfigurationSection itemSection){ + return plugin.itemCreate.makeCustomItemFromConfig(itemSection, p, true, true, false); + } + //will return item slots of hotbar stationary items public Set getHotbarItems(){ return plugin.hotbar.getStationaryItemSlots(); diff --git a/src/me/rockyhawk/commandpanels/api/PanelClosedEvent.java b/src/me/rockyhawk/commandpanels/api/PanelClosedEvent.java new file mode 100644 index 0000000..26d33bc --- /dev/null +++ b/src/me/rockyhawk/commandpanels/api/PanelClosedEvent.java @@ -0,0 +1,38 @@ +package me.rockyhawk.commandpanels.api; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.Inventory; + +public class PanelClosedEvent extends Event{ + + private final Player p; + private final Panel panel; + + public PanelClosedEvent(Player player, Panel panel) { + this.p = player; + this.panel = panel; + } + + public Player getPlayer(){ + return this.p; + } + + public Inventory getInventory(){ + return this.p.getInventory(); + } + + public Panel getPanel(){ + return this.panel; + } + + private static final HandlerList HANDLERS = new HandlerList(); + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } +} diff --git a/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java b/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java index 94ce6b7..b52e13d 100644 --- a/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java +++ b/src/me/rockyhawk/commandpanels/classresources/ExecuteOpenVoids.java @@ -8,6 +8,7 @@ import org.bukkit.ChatColor; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; @@ -27,6 +28,10 @@ public class ExecuteOpenVoids { //avoid plugin glitches when sleeping return; } + if(plugin.debug || plugin.config.getBoolean("config.auto-update-panels")){ + //reload the panel is debug is enabled + panel.setConfig(YamlConfiguration.loadConfiguration(panel.getFile())); + } if (!sender.hasPermission("commandpanel.panel." + panel.getConfig().getString("perm"))) { sender.sendMessage(plugin.papi(plugin.tag + plugin.config.getString("config.format.perms"))); return; diff --git a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java index d457165..0bb1fe7 100644 --- a/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java +++ b/src/me/rockyhawk/commandpanels/classresources/ItemCreation.java @@ -200,7 +200,7 @@ public class ItemCreation { } if(addNBT){ - s = NBTEditor.set(s,"CommandPanels","plugin"); + s = NBTEditor.set(s,"CommandPanels","CommandPanels"); } if (itemSection.contains("map")) { diff --git a/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java b/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java index f1919ce..0f3f9e8 100644 --- a/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java +++ b/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java @@ -3,11 +3,13 @@ package me.rockyhawk.commandpanels.interactives; import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.api.Panel; import me.rockyhawk.commandpanels.api.PanelOpenedEvent; +import me.rockyhawk.commandpanels.ioclasses.NBTEditor; import org.bukkit.*; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import java.util.Objects; @@ -77,6 +79,10 @@ public class Commandpanelrefresher implements Listener { } } try { + if(plugin.debug){ + //reload the panel is debug is enabled + pn.setConfig(YamlConfiguration.loadConfiguration(pn.getFile())); + } plugin.createGUI.openGui(pn, p, 0,animatecount); } catch (Exception e) { //error opening gui @@ -95,9 +101,17 @@ public class Commandpanelrefresher implements Listener { } c = 0; this.cancel(); + //remove duplicate items here + p.updateInventory(); + for(ItemStack itm : p.getInventory().getContents()){ + if(itm != null){ + if (NBTEditor.contains(itm, "CommandPanels")) { + p.getInventory().remove(itm); + } + } + } } } }.runTaskTimer(this.plugin, 1,1); //20 ticks == 1 second (5 ticks = 0.25 of a second) - } } diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java index ad96fbf..3fc0878 100644 --- a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java +++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenGUI.java @@ -132,7 +132,7 @@ public class OpenGUI { id = Short.parseShort(pconfig.getString("emptyID")); } empty = new ItemStack(Objects.requireNonNull(Material.matchMaterial(Objects.requireNonNull(pconfig.getString("empty")).toUpperCase())), 1,id); - empty = NBTEditor.set(empty,"CommandPanels","plugin"); + empty = NBTEditor.set(empty,"CommandPanels","CommandPanels"); if (empty.getType() == Material.AIR) { continue; } diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java index aa793cf..bb54b90 100644 --- a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java +++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java @@ -2,9 +2,9 @@ package me.rockyhawk.commandpanels.openpanelsmanager; import me.rockyhawk.commandpanels.CommandPanels; import me.rockyhawk.commandpanels.api.Panel; +import me.rockyhawk.commandpanels.api.PanelClosedEvent; import me.rockyhawk.commandpanels.ioclasses.NBTEditor; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.*; @@ -78,13 +78,17 @@ public class OpenPanelsLoader { return; } panelCloseCommands(playerName,openPanels.get(playerName)); - checkNBTItems(Bukkit.getPlayer(playerName)); plugin.customCommand.removeCCP(openPanels.get(playerName).getName(), playerName); if (plugin.config.contains("config.panel-snooper")) { if (Objects.requireNonNull(plugin.config.getString("config.panel-snooper")).equalsIgnoreCase("true")) { Bukkit.getConsoleSender().sendMessage("[CommandPanels] " + playerName + " Closed " + openPanels.get(playerName).getName()); } } + + //fire PanelClosedEvent + PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(playerName),openPanels.get(playerName)); + Bukkit.getPluginManager().callEvent(closedEvent); + openPanels.remove(playerName); } @@ -108,19 +112,12 @@ public class OpenPanelsLoader { } } - //ensure the player has not duplicated items - public void checkNBTItems(Player p){ - try { - for(ItemStack playerItem : p.getInventory().getContents()){ - //ensure the item is not a panel item - try { - if (NBTEditor.getString(playerItem, "plugin").equalsIgnoreCase("CommandPanels")) { - p.getInventory().removeItem(playerItem); - } - }catch(Exception ignore){} + public boolean isNBTInjected(ItemStack itm){ + if(itm != null){ + if (NBTEditor.contains(itm, "CommandPanels")) { + return true; } - }catch(Exception e){ - //oof } + return false; } } diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java index 45258f3..6f75cd7 100644 --- a/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java +++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java @@ -1,13 +1,13 @@ package me.rockyhawk.commandpanels.openpanelsmanager; import me.rockyhawk.commandpanels.CommandPanels; +import me.rockyhawk.commandpanels.ioclasses.NBTEditor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.event.inventory.*; import org.bukkit.event.player.PlayerQuitEvent; - +import org.bukkit.inventory.ItemStack; import java.util.Objects; public class UtilsPanelsLoader implements Listener { @@ -20,6 +20,15 @@ public class UtilsPanelsLoader implements Listener { @EventHandler public void onPlayerClosePanel(PlayerQuitEvent e){ plugin.openPanels.closePanelForLoader(e.getPlayer().getName()); + Player p = e.getPlayer(); + p.updateInventory(); + for(ItemStack itm : p.getInventory().getContents()){ + if(itm != null){ + if (NBTEditor.contains(itm, "CommandPanels")) { + p.getInventory().remove(itm); + } + } + } } //tell panel loader that player has closed the panel (there is also one of these in EditorUtils) @@ -35,10 +44,13 @@ public class UtilsPanelsLoader implements Listener { @EventHandler public void onInventoryItemClick(InventoryClickEvent e){ //this will check to ensure an item is not from CommandPanels on inventory open - try { - plugin.openPanels.checkNBTItems((Player) e.getWhoClicked()); - }catch(Exception ex){ - plugin.debug(ex); + Player p = (Player)e.getWhoClicked(); + if(!plugin.openPanels.hasPanelOpen(p.getName())){ + for(ItemStack itm : p.getInventory().getContents()){ + if(plugin.openPanels.isNBTInjected(itm)){ + p.getInventory().remove(itm); + } + } } } }