diff --git a/pom.xml b/pom.xml index 9d21007..270d30e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ ChestSort https://www.chestsort.de Allows automatic chest sorting! - 13.5.1 + 13.6.0 jar @@ -87,6 +87,11 @@ de.jeff_media.chestsort.paperlib + + com.jeff_media.morepersistentdatatypes + com.jeff_media.chestsort.morepersistentdatatypes + + @@ -204,10 +209,17 @@ compile + + com.jeff_media + MorePersistentDataTypes + 2.3.1 + compile + + com.jeff_media JeffLib - 12.0.0 + 12.3.1 compile diff --git a/src/main/java/de/jeff_media/chestsort/gui/GUIListener.java b/src/main/java/de/jeff_media/chestsort/gui/GUIListener.java index f8988ee..ff556e7 100644 --- a/src/main/java/de/jeff_media/chestsort/gui/GUIListener.java +++ b/src/main/java/de/jeff_media/chestsort/gui/GUIListener.java @@ -1,8 +1,11 @@ package de.jeff_media.chestsort.gui; +import com.jeff_media.morepersistentdatatypes.DataType; import de.jeff_media.chestsort.ChestSortPlugin; import de.jeff_media.chestsort.data.PlayerSetting; +import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -10,6 +13,10 @@ import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + public class GUIListener implements Listener { private static final ChestSortPlugin main = ChestSortPlugin.getInstance(); @@ -26,8 +33,12 @@ public class GUIListener implements Listener { if(!(event.getWhoClicked() instanceof Player)) return; Player player = (Player) event.getWhoClicked(); PlayerSetting setting = main.getPlayerSetting(player); - String function = clicked.getItemMeta().getPersistentDataContainer().getOrDefault(new NamespacedKey(main,"function"), PersistentDataType.STRING,""); + String function = Objects.requireNonNull(clicked.getItemMeta()).getPersistentDataContainer().getOrDefault(new NamespacedKey(main,"function"), PersistentDataType.STRING,""); + List userCommands = clicked.getItemMeta().getPersistentDataContainer().getOrDefault(new NamespacedKey(main,"user-commands"), DataType.asList(DataType.STRING), new ArrayList<>()); + List adminCommands = clicked.getItemMeta().getPersistentDataContainer().getOrDefault(new NamespacedKey(main,"admin-commands"), DataType.asList(DataType.STRING), new ArrayList<>()); + executeCommands(player, player, userCommands); + executeCommands(player, Bukkit.getConsoleSender(), adminCommands); //System.out.println("Click in GUI: " + function); switch (function) { @@ -44,6 +55,12 @@ public class GUIListener implements Listener { } new NewUI(player).showGUI(); - } + + private void executeCommands(Player player, CommandSender sender, List commands) { + for(String command : commands) { + main.getServer().dispatchCommand(sender, command.replace("{player}", player.getName())); + } + } + } diff --git a/src/main/java/de/jeff_media/chestsort/gui/NewUI.java b/src/main/java/de/jeff_media/chestsort/gui/NewUI.java index 3ace300..0e7edc8 100644 --- a/src/main/java/de/jeff_media/chestsort/gui/NewUI.java +++ b/src/main/java/de/jeff_media/chestsort/gui/NewUI.java @@ -1,5 +1,6 @@ package de.jeff_media.chestsort.gui; +import com.jeff_media.morepersistentdatatypes.DataType; import de.jeff_media.chestsort.ChestSortPlugin; import de.jeff_media.chestsort.enums.Hotkey; import com.jeff_media.jefflib.ItemStackUtils; @@ -13,6 +14,8 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; +import java.util.List; + public class NewUI { private static final ChestSortPlugin main = ChestSortPlugin.getInstance(); @@ -44,6 +47,10 @@ public class NewUI { ItemMeta meta = button.getItemMeta(); assert meta != null; meta.getPersistentDataContainer().set(new NamespacedKey(main,"function"),PersistentDataType.STRING, buttonName.split("-")[0]); + List userCommands = conf.getStringList("items." + buttonName + ".commands.player"); + List adminCommands = conf.getStringList("items." + buttonName + ".commands.console"); + meta.getPersistentDataContainer().set(new NamespacedKey(main,"user-commands"), DataType.asList(DataType.STRING), userCommands); + meta.getPersistentDataContainer().set(new NamespacedKey(main,"admin-commands"), DataType.asList(DataType.STRING), adminCommands); button.setItemMeta(meta); } return button; diff --git a/src/main/resources/gui.yml b/src/main/resources/gui.yml index 08c47b1..405d370 100644 --- a/src/main/resources/gui.yml +++ b/src/main/resources/gui.yml @@ -21,6 +21,11 @@ # enchantments: # unbreaking: 3 # efficiency: 5 +# commands: +# player: +# - "say Hello" # command that will be run as the player +# console: +# - "tell {player} Hello" # command that will be run as the console title: "<#000000>&l[<#007700>&lChest<#339933>&lSort<#000000>&l] &rSettings" size: 45