diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 5f2fe3a..f8595a0 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -10,7 +10,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_kyori_adventure_api_4_11_0.xml b/.idea/libraries/Maven__net_kyori_adventure_api_4_11_0.xml
deleted file mode 100644
index 101abe7..0000000
--- a/.idea/libraries/Maven__net_kyori_adventure_api_4_11_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_kyori_adventure_key_4_11_0.xml b/.idea/libraries/Maven__net_kyori_adventure_key_4_11_0.xml
deleted file mode 100644
index ec1cb5c..0000000
--- a/.idea/libraries/Maven__net_kyori_adventure_key_4_11_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_kyori_adventure_text_minimessage_4_11_0.xml b/.idea/libraries/Maven__net_kyori_adventure_text_minimessage_4_11_0.xml
deleted file mode 100644
index a59d7d8..0000000
--- a/.idea/libraries/Maven__net_kyori_adventure_text_minimessage_4_11_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_kyori_examination_api_1_3_0.xml b/.idea/libraries/Maven__net_kyori_examination_api_1_3_0.xml
deleted file mode 100644
index 5b4190e..0000000
--- a/.idea/libraries/Maven__net_kyori_examination_api_1_3_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_kyori_examination_string_1_3_0.xml b/.idea/libraries/Maven__net_kyori_examination_string_1_3_0.xml
deleted file mode 100644
index 7b7a7c3..0000000
--- a/.idea/libraries/Maven__net_kyori_examination_string_1_3_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jetbrains_annotations_23_0_0.xml b/.idea/libraries/Maven__org_jetbrains_annotations_23_0_0.xml
deleted file mode 100644
index b271e07..0000000
--- a/.idea/libraries/Maven__org_jetbrains_annotations_23_0_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT.xml b/.idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT1.xml
similarity index 57%
rename from .idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT.xml
rename to .idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT1.xml
index eeaf356..c3d3148 100644
--- a/.idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT.xml
+++ b/.idea/libraries/spigot_api_1_19_R0_1_SNAPSHOT1.xml
@@ -1,7 +1,7 @@
-
+
-
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 5755a99..4bd9b3a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -7,7 +7,7 @@
-
+
\ No newline at end of file
diff --git a/CommandPanels.iml b/CommandPanels.iml
index 6f9e61e..7eee2ff 100644
--- a/CommandPanels.iml
+++ b/CommandPanels.iml
@@ -10,7 +10,7 @@
-
+
@@ -25,12 +25,12 @@
+
-
\ No newline at end of file
diff --git a/resource/config.yml b/resource/config.yml
index 8d25d0b..59dd39b 100644
--- a/resource/config.yml
+++ b/resource/config.yml
@@ -20,7 +20,7 @@ config:
update-notifications: true
panel-snooper: false
format:
- tag: '&6[&bCommandPanels&6]'
+ tag: '&6[&bCommandPanels&6] '
perms: '&cNo permission.'
reload: '&aReloaded.'
nopanel: '&cPanel not found.'
@@ -48,7 +48,7 @@ placeholders:
start: '{'
end: '}'
updater:
- auto-update: true
+ auto-update: false
minor-updates-only: true
update-checks: true
purchase:
diff --git a/resource/plugin.yml b/resource/plugin.yml
index 00d6bf9..20229fd 100644
--- a/resource/plugin.yml
+++ b/resource/plugin.yml
@@ -1,4 +1,4 @@
-version: 3.18.0.0
+version: 3.18.1.0
main: me.rockyhawk.commandpanels.CommandPanels
name: CommandPanels
author: RockyHawk
diff --git a/resource_editor/BottomSettings.yml b/resource_editor/BottomSettings.yml
index 5d35ed7..de4e93f 100644
--- a/resource_editor/BottomSettings.yml
+++ b/resource_editor/BottomSettings.yml
@@ -15,6 +15,7 @@ panels:
stack: 1
name: '&cExit'
commands:
+ - event= CommandPanels_EditorClosed
- cpc
'4':
material: CHEST
@@ -28,11 +29,11 @@ panels:
name: '&fItem Settings'
commands:
- "event= CommandPanels_OpenItemSettings"
- '8':
- material: COMPASS
- stack: 1
- name: '&fItem Sections'
- lore:
- - "&cIN PROGRESS"
- commands:
- - "event= CommandPanels_OpenItemSections"
\ No newline at end of file
+ #'8':
+ # material: COMPASS
+ # stack: 1
+ # name: '&fItem Sections'
+ # lore:
+ # - "&cIN PROGRESS"
+ # commands:
+ # - "event= CommandPanels_OpenItemSections"
\ No newline at end of file
diff --git a/resource_editor/ItemEditMenu.yml b/resource_editor/ItemEditMenu.yml
index 6fe7bf1..da32290 100644
--- a/resource_editor/ItemEditMenu.yml
+++ b/resource_editor/ItemEditMenu.yml
@@ -79,7 +79,7 @@ panels:
- cpc
player-input:
- "event= CPEditor_itemnbt %cp-player-input%"
- '0':
+ '18':
material: LAVA_BUCKET
name: '&cDelete Item'
lore:
@@ -98,7 +98,7 @@ panels:
- cpc
player-input:
- "event= CPEditor_itemslot %cp-player-input%"
- '18':
+ '0':
material: ENDER_CHEST
name: '&fMove Item'
lore:
diff --git a/src/me/rockyhawk/commandpanels/Utils.java b/src/me/rockyhawk/commandpanels/Utils.java
index 2785b72..9c7b47c 100644
--- a/src/me/rockyhawk/commandpanels/Utils.java
+++ b/src/me/rockyhawk/commandpanels/Utils.java
@@ -86,6 +86,16 @@ public class Utils implements Listener {
//the panels proper position
panel = plugin.openPanels.getOpenPanel(p.getName(),position);
+ //this will cancel click on editor open and then change the slot clicked
+ if(plugin.editorMain.settings.containsKey(p.getUniqueId())) {
+ if (plugin.editorMain.settings.get(p.getUniqueId()).hasEditorOpen && position == PanelPosition.Top) {
+ plugin.editorMain.settings.get(p.getUniqueId()).slotSelected = String.valueOf(e.getSlot());
+ plugin.editorMain.openGuiPage(plugin.editorMain.settings.get(p.getUniqueId()).menuOpen, p, PanelPosition.Middle);
+ e.setCancelled(true);
+ return;
+ }
+ }
+
//this loops through all the items in the panel
boolean foundSlot = false;
for(String slot : Objects.requireNonNull(panel.getConfig().getConfigurationSection("item")).getKeys(false)){
diff --git a/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java b/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java
index 8c88f62..cf70ad0 100644
--- a/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java
+++ b/src/me/rockyhawk/commandpanels/classresources/SerializerUtils.java
@@ -6,7 +6,6 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
public class SerializerUtils {
public static Component serializeText(String msg){
- Component parsedText = MiniMessage.miniMessage().deserialize(msg);
- return parsedText;
+ return MiniMessage.miniMessage().deserialize(msg);
}
}
diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java b/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
index 8bb3d71..e33ba76 100644
--- a/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
+++ b/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
@@ -45,6 +45,9 @@ public class Commandpanelsreload implements CommandExecutor {
//reloadHotbarSlots
plugin.hotbar.reloadHotbarSlots();
+ //reload tag
+ plugin.tag = plugin.tex.colour(plugin.config.getString("config.format.tag"));
+
//add custom commands to commands.yml
if(plugin.config.getString("config.auto-register-commands").equalsIgnoreCase("true")) {
registerCommands();
diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/other/SpecialTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/other/SpecialTags.java
index 50682ef..60b3175 100644
--- a/src/me/rockyhawk/commandpanels/commandtags/tags/other/SpecialTags.java
+++ b/src/me/rockyhawk/commandpanels/commandtags/tags/other/SpecialTags.java
@@ -66,7 +66,7 @@ public class SpecialTags implements Listener {
plugin.openPanels.closePanelForLoader(e.p.getName(),PanelPosition.Bottom);
}else if(position == PanelPosition.Top && plugin.openPanels.hasPanelOpen(e.p.getName(),position)){
//closing top closes all
- e.p.closeInventory();
+ plugin.commandTags.runCommand(e.panel,e.pos,e.p,"cpc");
}
return;
}
diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
index 2b4ff01..83a5e38 100644
--- a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
+++ b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
@@ -6,6 +6,7 @@ import me.rockyhawk.commandpanels.classresources.SerializerUtils;
import me.rockyhawk.commandpanels.commandtags.CommandTagEvent;
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelOpenType;
+import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
@@ -24,8 +25,18 @@ public class BasicTags implements Listener {
public void commandTag(CommandTagEvent e){
if(e.name.equalsIgnoreCase("cpc")){
e.commandTagUsed();
+
+ //unclosable panels are at the Top only
+ if(plugin.openPanels.getOpenPanel(e.p.getName(),PanelPosition.Top).getConfig().contains("panelType")){
+ if(plugin.openPanels.getOpenPanel(e.p.getName(),PanelPosition.Top).getConfig().getStringList("panelType").contains("unclosable")){
+ plugin.openPanels.closePanelForLoader(e.p.getName(),PanelPosition.Top);
+ plugin.openPanels.skipPanelClose.add(e.p.getName());
+ }
+ }
+
//this will close the current inventory
e.p.closeInventory();
+ plugin.openPanels.skipPanelClose.remove(e.p.getName());
return;
}
if(e.name.equalsIgnoreCase("refresh")) {
diff --git a/src/me/rockyhawk/commandpanels/editor/CPEventHandler.java b/src/me/rockyhawk/commandpanels/editor/CPEventHandler.java
index 8602220..188b9df 100644
--- a/src/me/rockyhawk/commandpanels/editor/CPEventHandler.java
+++ b/src/me/rockyhawk/commandpanels/editor/CPEventHandler.java
@@ -195,7 +195,11 @@ public class CPEventHandler implements Listener {
panel.getConfig().set("title", playerInput);
break;
case "panelrows":
- panel.getConfig().set("rows", playerInput);
+ if(isNumeric(playerInput)){
+ panel.getConfig().set("rows", Integer.parseInt(playerInput));
+ }else {
+ panel.getConfig().set("rows", playerInput);
+ }
break;
case "panelrefreshdelay":
panel.getConfig().set("refresh-delay", playerInput);
diff --git a/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java b/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java
index ca0813a..5c896b8 100644
--- a/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java
+++ b/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java
@@ -56,7 +56,6 @@ public class GenUtils implements Listener {
}
}
- @SuppressWarnings("deprecation")
void generatePanel(Player p, Inventory inv){
ArrayList apanels = new ArrayList();
for(Panel panel : plugin.panelList){
diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java
index eb5944a..930a213 100644
--- a/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java
+++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/OpenPanelsLoader.java
@@ -77,18 +77,26 @@ public class OpenPanelsLoader {
//close all of the panels for a player currently open
public void closePanelForLoader(String playerName, PanelPosition position){
- if(!openPanels.containsKey(playerName) || skipPanelClose.contains(playerName)){
+ //close if not panel
+ if(!plugin.openPanels.openPanels.containsKey(playerName) || plugin.openPanels.skipPanelClose.contains(playerName)){
return;
}
- panelCloseCommands(playerName,position,openPanels.get(playerName).getPanel(position));
+
+ //snooper
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).getPanel(position).getName() + " at " + position);
}
}
+ //panel instance
+ Panel panel = openPanels.get(playerName).getPanel(position);
+
+ //run close commands once panel is closed
+ panelCloseCommands(playerName,position,panel);
+
//fire PanelClosedEvent
- PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(playerName),openPanels.get(playerName).getPanel(position),position);
+ PanelClosedEvent closedEvent = new PanelClosedEvent(Bukkit.getPlayer(playerName),panel,position);
Bukkit.getPluginManager().callEvent(closedEvent);
openPanels.get(playerName).setPanel(null,position);
diff --git a/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java b/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java
index ac8d6d8..f0b521f 100644
--- a/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java
+++ b/src/me/rockyhawk/commandpanels/openpanelsmanager/UtilsPanelsLoader.java
@@ -1,5 +1,6 @@
package me.rockyhawk.commandpanels.openpanelsmanager;
+import me.realized.tokenmanager.command.commands.subcommands.TopCommand;
import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.api.Panel;
import me.rockyhawk.commandpanels.api.PanelClosedEvent;
@@ -40,7 +41,34 @@ public class UtilsPanelsLoader implements Listener {
//tell panel loader that player has closed the panel (there is also one of these in EditorUtils)
@EventHandler
public void onPlayerClosePanel(InventoryCloseEvent e){
- //only do this if editor is disabled as it will disabled this code
+ String playerName = e.getPlayer().getName();
+
+ //close if not panel
+ if(!plugin.openPanels.openPanels.containsKey(playerName) || plugin.openPanels.skipPanelClose.contains(playerName)){
+ return;
+ }
+
+ //check for panelType unclosable (unclosable is Top only)
+ if(plugin.openPanels.getOpenPanel(playerName,PanelPosition.Top).getConfig().contains("panelType")){
+ if(plugin.openPanels.getOpenPanel(playerName,PanelPosition.Top).getConfig().getStringList("panelType").contains("unclosable")){
+ plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
+ public void run() {
+ plugin.openPanels.getOpenPanel(playerName,PanelPosition.Top).open(Bukkit.getPlayer(playerName), PanelPosition.Top);
+ }
+ });
+ return;
+ }
+ }
+
+ //run commands-on-close for panels
+ if(plugin.openPanels.hasPanelOpen(e.getPlayer().getName(),PanelPosition.Bottom)){
+ plugin.openPanels.panelCloseCommands(playerName,PanelPosition.Bottom,plugin.openPanels.getOpenPanel(playerName,PanelPosition.Bottom));
+ }
+ if(plugin.openPanels.hasPanelOpen(e.getPlayer().getName(),PanelPosition.Middle)){
+ plugin.openPanels.panelCloseCommands(playerName,PanelPosition.Middle,plugin.openPanels.getOpenPanel(playerName,PanelPosition.Middle));
+ }
+
+ //close panels and run commands for Top panel
plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
}
diff --git a/src/me/rockyhawk/commandpanels/panelblocks/Commandpanelblocks.java b/src/me/rockyhawk/commandpanels/panelblocks/Commandpanelblocks.java
index 4844b14..2238a40 100644
--- a/src/me/rockyhawk/commandpanels/panelblocks/Commandpanelblocks.java
+++ b/src/me/rockyhawk/commandpanels/panelblocks/Commandpanelblocks.java
@@ -64,9 +64,8 @@ public class Commandpanelblocks implements CommandExecutor {
return true;
}
//make the material name look okay
- String materialNameFormatted = blockType.getType().toString().substring(0, 1).toUpperCase() + blockType.getType().toString().substring(1).toLowerCase();
- materialNameFormatted = materialNameFormatted.replaceAll("_"," ");
- sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.WHITE + args[1] + ChatColor.GREEN + " will now open when right clicking " + ChatColor.WHITE + materialNameFormatted));
+ String coordinates = blockLocation.getBlockX() + ", " + blockLocation.getBlockY() + ", " + blockLocation.getBlockZ();
+ sender.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.WHITE + args[1] + ChatColor.GREEN + "will now open when right clicking a block in the coordinates " + ChatColor.WHITE + coordinates));
}else{
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms")));
}
diff --git a/src/me/rockyhawk/commandpanels/panelblocks/PanelBlockOnClick.java b/src/me/rockyhawk/commandpanels/panelblocks/PanelBlockOnClick.java
index 7e36180..b04be7e 100644
--- a/src/me/rockyhawk/commandpanels/panelblocks/PanelBlockOnClick.java
+++ b/src/me/rockyhawk/commandpanels/panelblocks/PanelBlockOnClick.java
@@ -3,11 +3,11 @@ package me.rockyhawk.commandpanels.panelblocks;
import me.rockyhawk.commandpanels.CommandPanels;
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
import org.bukkit.Location;
-import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import java.util.Objects;
@@ -17,41 +17,50 @@ public class PanelBlockOnClick implements Listener {
public PanelBlockOnClick(CommandPanels pl) {
this.plugin = pl;
}
+
@EventHandler
public void onInteract(PlayerInteractEvent e){
+ if(e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock() != null) {
+ e.setCancelled(blockClickEventTrigger(e.getClickedBlock().getLocation(), e.getPlayer()));
+ }
+ }
+
+ @EventHandler
+ public void onInteractEntity(PlayerInteractEntityEvent e){
+ if(!e.getPlayer().isSneaking()) {
+ e.setCancelled(blockClickEventTrigger(e.getRightClicked().getLocation().getBlock().getLocation(), e.getPlayer()));
+ }
+ }
+
+ public boolean blockClickEventTrigger(Location location, Player p){
//if panel blocks are disabled return
if(Objects.requireNonNull(plugin.config.getString("config.panel-blocks")).equalsIgnoreCase("false")){
- return;
+ return false;
}
- if(e.getAction() != Action.RIGHT_CLICK_BLOCK) {
- return;
- }
- Block block = e.getClickedBlock();
- Player p = e.getPlayer();
- assert block != null;
if(!plugin.blockConfig.contains("blocks")){
- return;
+ return false;
}
if(plugin.openPanels.hasPanelOpen(p.getName(), PanelPosition.Top)) {
//some blocks run this event twice, skip if panel already open
//as blocks cannot be clicked obviously if a panel is open
- return;
+ return false;
}
for (String configLocation : Objects.requireNonNull(plugin.blockConfig.getConfigurationSection("blocks")).getKeys(false)) {
String[] loc = configLocation.split("_");
Location tempLocation = new Location(plugin.getServer().getWorld(loc[0].replaceAll("%dash%","_")),Double.parseDouble(loc[1]),Double.parseDouble(loc[2]),Double.parseDouble(loc[3]));
- if(tempLocation.equals(block.getLocation())){
- e.setCancelled(true);
+ if(tempLocation.equals(location)){
if(plugin.blockConfig.contains("blocks." + configLocation + ".commands")){
for(String command : plugin.blockConfig.getStringList("blocks." + configLocation + ".commands")){
plugin.commandTags.runCommand(null,PanelPosition.Top,p, command);
}
- return;
+ return true;
}
//uses the open= tag because it will open a panel with panel names, but also works with open= features like placeholders
String command = "open= " + plugin.blockConfig.getString("blocks." + configLocation + ".panel");
plugin.commandTags.runCommand(null,PanelPosition.Top,p, command);
+ return true;
}
}
+ return false;
}
}
\ No newline at end of file