From 7b5b8f4d1c132b4086c60e97fddd692f1df23b8a Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 12 Mar 2024 09:51:35 +0100 Subject: [PATCH] first code --- .idea/.gitignore | 3 + .idea/artifacts/MenuMaker_jar.xml | 19 +++ .idea/compiler.xml | 13 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 30 +++++ .idea/misc.xml | 14 ++ .idea/modules.xml | 8 ++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ .idea/vcs.xml | 6 + MenuMaker.iml | 13 ++ pom.xml | 86 ++++++++++++ .../java/xyz/soukup/menumaker/MenuMaker.java | 56 ++++++++ src/main/java/xyz/soukup/menumaker/PDC.java | 39 ++++++ .../soukup/menumaker/commands/createItem.java | 78 +++++++++++ .../menumaker/commands/enchantitem.java | 60 +++++++++ .../menumaker/commands/hideEnchant.java | 29 ++++ .../soukup/menumaker/commands/menumaker.java | 124 ++++++++++++++++++ .../soukup/menumaker/commands/setsize.java | 15 +++ .../menumaker/events/saveInventory.java | 60 +++++++++ src/main/resources/plugin.yml | 21 +++ target/classes/plugin.yml | 21 +++ .../xyz/soukup/menumaker/MenuMaker.class | Bin 0 -> 2936 bytes target/classes/xyz/soukup/menumaker/PDC.class | Bin 0 -> 2597 bytes .../menumaker/commands/createItem.class | Bin 0 -> 4567 bytes .../menumaker/commands/enchantitem.class | Bin 0 -> 4170 bytes .../menumaker/commands/hideEnchant.class | Bin 0 -> 2983 bytes .../soukup/menumaker/commands/menumaker.class | Bin 0 -> 6681 bytes .../soukup/menumaker/commands/setsize.class | Bin 0 -> 1880 bytes .../menumaker/events/saveInventory.class | Bin 0 -> 4000 bytes 29 files changed, 826 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/MenuMaker_jar.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 MenuMaker.iml create mode 100644 pom.xml create mode 100644 src/main/java/xyz/soukup/menumaker/MenuMaker.java create mode 100644 src/main/java/xyz/soukup/menumaker/PDC.java create mode 100644 src/main/java/xyz/soukup/menumaker/commands/createItem.java create mode 100644 src/main/java/xyz/soukup/menumaker/commands/enchantitem.java create mode 100644 src/main/java/xyz/soukup/menumaker/commands/hideEnchant.java create mode 100644 src/main/java/xyz/soukup/menumaker/commands/menumaker.java create mode 100644 src/main/java/xyz/soukup/menumaker/commands/setsize.java create mode 100644 src/main/java/xyz/soukup/menumaker/events/saveInventory.java create mode 100644 src/main/resources/plugin.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/classes/xyz/soukup/menumaker/MenuMaker.class create mode 100644 target/classes/xyz/soukup/menumaker/PDC.class create mode 100644 target/classes/xyz/soukup/menumaker/commands/createItem.class create mode 100644 target/classes/xyz/soukup/menumaker/commands/enchantitem.class create mode 100644 target/classes/xyz/soukup/menumaker/commands/hideEnchant.class create mode 100644 target/classes/xyz/soukup/menumaker/commands/menumaker.class create mode 100644 target/classes/xyz/soukup/menumaker/commands/setsize.class create mode 100644 target/classes/xyz/soukup/menumaker/events/saveInventory.class diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/artifacts/MenuMaker_jar.xml b/.idea/artifacts/MenuMaker_jar.xml new file mode 100644 index 0000000..3015c7d --- /dev/null +++ b/.idea/artifacts/MenuMaker_jar.xml @@ -0,0 +1,19 @@ + + + $USER_HOME$/Plocha/betaserver/plugins + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..83f9044 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..861936a --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..82dbec8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3f3edd2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/MenuMaker.iml b/MenuMaker.iml new file mode 100644 index 0000000..a589521 --- /dev/null +++ b/MenuMaker.iml @@ -0,0 +1,13 @@ + + + + + + + SPIGOT + + 1 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5a98064 --- /dev/null +++ b/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + xyz.soukup + MenuMaker + 1.0-SNAPSHOT + jar + + MenuMaker + + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.20.1-R0.1-SNAPSHOT + provided + + + net.kyori + adventure-text-minimessage + 4.16.0 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.13.1 + + + com.fasterxml.jackson.core + jackson-core + 2.13.1 + + + diff --git a/src/main/java/xyz/soukup/menumaker/MenuMaker.java b/src/main/java/xyz/soukup/menumaker/MenuMaker.java new file mode 100644 index 0000000..6a7ce7d --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/MenuMaker.java @@ -0,0 +1,56 @@ +package xyz.soukup.menumaker; + +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.plugin.java.JavaPlugin; +import xyz.soukup.menumaker.commands.*; +import xyz.soukup.menumaker.events.saveInventory; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class MenuMaker extends JavaPlugin { + public static Logger logger = Bukkit.getLogger(); + + @Override + public void onEnable() { + Objects.requireNonNull(getCommand("menumaker")).setExecutor(new menumaker()); + Objects.requireNonNull(getCommand("menumaker")).setTabCompleter(new menumaker()); + Objects.requireNonNull(getCommand("createitem")).setTabCompleter(new createItem()); + Objects.requireNonNull(getCommand("enchantitem")).setExecutor(new enchantitem()); + Objects.requireNonNull(getCommand("enchantitem")).setTabCompleter(new enchantitem()); + Objects.requireNonNull(getCommand("createitem")).setExecutor(new createItem()); + Objects.requireNonNull(getCommand("hideenchant")).setExecutor(new hideEnchant()); + Objects.requireNonNull(getCommand("setsize")).setExecutor(new setsize()); + getServer().getPluginManager().registerEvents(new saveInventory(), this); + logger.info("plugin enabled"); + + + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } + + public static List getArgs(String input) { + List result = new ArrayList<>(); + Pattern pattern = Pattern.compile("\"([^\"]*)\"|([^\\s]+)"); + Matcher matcher = pattern.matcher(input); + while (matcher.find()) { + String match = matcher.group(1); // Check if the first group (quoted string) matched + if (match == null) { + match = matcher.group(2); // If not, use the second group (unquoted string) + } + result.add(match); + } + return result; + } + +} diff --git a/src/main/java/xyz/soukup/menumaker/PDC.java b/src/main/java/xyz/soukup/menumaker/PDC.java new file mode 100644 index 0000000..1773015 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/PDC.java @@ -0,0 +1,39 @@ +package xyz.soukup.menumaker; + +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +public class PDC { + public static void WritePlayerPDC(Player player, String key, PersistentDataType type, Object value){ + NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); + PersistentDataContainer pdc = player.getPersistentDataContainer(); + pdc.set(nKey, type, value); + + } + public static Object GetPlayerPDC(Player player, String key, PersistentDataType type){ + NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); + PersistentDataContainer pdc = player.getPersistentDataContainer(); + return pdc.get(nKey, type); + } + public static void DeletePlayerPDC(Player player, String key){ + NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); + PersistentDataContainer pdc = player.getPersistentDataContainer(); + pdc.remove(nKey); + + } + public static ItemMeta WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){ + NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); + PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); + pdc.set(nKey, type, value); + return itemMeta; + + } + public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){ + NamespacedKey nKey = new NamespacedKey(MenuMaker.getPlugin(MenuMaker.class), key); + PersistentDataContainer pdc = itemMeta.getPersistentDataContainer(); + return pdc.get(nKey, type); + } +} diff --git a/src/main/java/xyz/soukup/menumaker/commands/createItem.java b/src/main/java/xyz/soukup/menumaker/commands/createItem.java new file mode 100644 index 0000000..30e5f19 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/commands/createItem.java @@ -0,0 +1,78 @@ +package xyz.soukup.menumaker.commands; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.soukup.menumaker.MenuMaker; + +import javax.annotation.Nonnull; +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class createItem implements TabExecutor { + @Override + public boolean onCommand(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { + StringBuilder argsString = new StringBuilder(); + for (String ss : args){ + argsString.append(ss).append(" "); + } + List processedArgs = MenuMaker.getArgs(argsString.toString()); + if (!processedArgs.isEmpty() && Material.getMaterial(processedArgs.get(0).toUpperCase()) != null){ + ItemStack item = new ItemStack(Objects.requireNonNull(Material.getMaterial(processedArgs.get(0).toUpperCase()))); + if (processedArgs.size() > 1){ + ItemMeta itemMeta = item.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', processedArgs.get(1))); + if (processedArgs.size() > 2){ + processedArgs.remove(0); + processedArgs.remove(0); + int i = 0; + while (i< processedArgs.size()){ + processedArgs.set(i, ChatColor.translateAlternateColorCodes('&', processedArgs.get(i))); + i++; + } + itemMeta.setLore(processedArgs); + } + item.setItemMeta(itemMeta); + } + ((Player) commandSender).getInventory().addItem(item); + return true; + }else{ + commandSender.sendMessage(ChatColor.RED + "chybí argument"); + return false; + } + } + + @Override + public List onTabComplete(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { + List completetion = new ArrayList<>(); + StringBuilder argsString = new StringBuilder(); + for (String ss : args){ + argsString.append(ss).append(" "); + } + List processedArgs = MenuMaker.getArgs(argsString.toString()); + if (args.length == 1){ + for (Material m: Material.values()){ + String mname = m.name().toLowerCase(); + if (mname.contains(args[0])){ + completetion.add(mname); + } + + } + }else if (processedArgs.size() > 2){ + + completetion.add("\"lore linka\""); + }else{ + completetion.add("\"název itemu\""); + } + + return completetion; + } +} diff --git a/src/main/java/xyz/soukup/menumaker/commands/enchantitem.java b/src/main/java/xyz/soukup/menumaker/commands/enchantitem.java new file mode 100644 index 0000000..4ccd579 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/commands/enchantitem.java @@ -0,0 +1,60 @@ +package xyz.soukup.menumaker.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.NamespacedKey; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import xyz.soukup.menumaker.PDC; + +import java.util.ArrayList; +import java.util.List; + +public class enchantitem implements TabExecutor { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + Player player = (Player) commandSender; + ItemStack item = player.getInventory().getItemInMainHand(); + if (item == null) { + commandSender.sendMessage("No item"); + return false; + } + + for (Enchantment enchantment : Enchantment.values()) { + if (enchantment.getKey().toString().equals(args[0])){ + int level = 1; + if (Integer.getInteger(args[1]) != null){ + level = Integer.parseInt(args[1]); + } + item.addUnsafeEnchantment(enchantment, level); + return true; + } + } + commandSender.sendMessage(ChatColor.RED + "Wrong enchant"); + return false; + } + @Nullable + @Override + public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + List completetions = new ArrayList<>(); + + if (args.length <= 1){ + for (Enchantment enchantment: Enchantment.values()){ + completetions.add(enchantment.getKey().toString()); + } + }else{ + completetions.add("1"); + completetions.add("2"); + completetions.add("3"); + completetions.add("4"); + completetions.add("5"); + } + return completetions; + } +} diff --git a/src/main/java/xyz/soukup/menumaker/commands/hideEnchant.java b/src/main/java/xyz/soukup/menumaker/commands/hideEnchant.java new file mode 100644 index 0000000..9a1da11 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/commands/hideEnchant.java @@ -0,0 +1,29 @@ +package xyz.soukup.menumaker.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +public class hideEnchant implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { + ItemStack item = ((Player) commandSender).getInventory().getItemInMainHand(); + ItemMeta meta = item.getItemMeta(); + assert meta != null; + if (meta.hasItemFlag(ItemFlag.HIDE_ENCHANTS)){ + meta.removeItemFlags(ItemFlag.HIDE_ENCHANTS); + commandSender.sendMessage(ChatColor.AQUA + "Enchants will be shown"); + }else { + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + commandSender.sendMessage(ChatColor.AQUA + "Enchants won' be shown"); + + } + return true; + } +} diff --git a/src/main/java/xyz/soukup/menumaker/commands/menumaker.java b/src/main/java/xyz/soukup/menumaker/commands/menumaker.java new file mode 100644 index 0000000..fff6f03 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/commands/menumaker.java @@ -0,0 +1,124 @@ +package xyz.soukup.menumaker.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; + +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; +import xyz.soukup.menumaker.MenuMaker; +import xyz.soukup.menumaker.PDC; + + +import javax.annotation.Nonnull; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class menumaker implements TabExecutor { + MenuMaker plugin = MenuMaker.getPlugin(MenuMaker.class); + @Override + public boolean onCommand(@Nonnull CommandSender commandSender,@Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { + Player player = (Player) commandSender; + StringBuilder nameBuilder; + int i; + switch (args[0]){ + case "create": + File menuFile = new File(plugin.getDataFolder() + "/menus/", args[2] + ".yml"); + if (menuFile.exists()){ + commandSender.sendMessage(ChatColor.RED + "Menu already exists. Use /mm edit " + args[2]); + return false; + } + nameBuilder = new StringBuilder(); + i = 3; + while (i < args.length){ + nameBuilder.append(args[i]).append(" "); + i++; + } + Inventory inventory = Bukkit.createInventory(null, Integer.parseInt(args[1]), ChatColor.translateAlternateColorCodes('&', nameBuilder.toString())); + PDC.WritePlayerPDC(player, "opened-inv", PersistentDataType.STRING, args[2]); + player.openInventory(inventory); + return true; + case "edit": + File mFile = new File(plugin.getDataFolder() + "/menus/", args[1] + ".yml"); + if (!mFile.exists()){ + commandSender.sendMessage(ChatColor.RED + "Menu does not exists. Use /mm create "); + return false; + } + YamlConfiguration menuConfig = YamlConfiguration.loadConfiguration(mFile); + String name = menuConfig.getString("data.name"); + int size = menuConfig.getInt("data.size"); + if (args.length > 2){ + nameBuilder = new StringBuilder(); + i = 2; + while (i < args.length){ + nameBuilder.append(args[i]).append(" "); + i++; + } + name = ChatColor.translateAlternateColorCodes('&', nameBuilder.toString()); + + } + assert name != null; + Inventory menu = Bukkit.createInventory(null, size, name); + for (int ii = 0; ii < size; ii++) { + if (menuConfig.getObject("data.items." + ii + ".itemstack", ItemStack.class) != null){ + menu.setItem(ii, menuConfig.getObject("data.items." + ii + ".itemstack", ItemStack.class)); + } + } + PDC.WritePlayerPDC(player, "opened-inv", PersistentDataType.STRING, args[1]); + + player.openInventory(menu); + + } + return false; + } + + @Override + public List onTabComplete(@Nonnull CommandSender commandSender, @Nonnull Command command,@Nonnull String s,@Nonnull String[] args) { + List completetions = new ArrayList<>(); + switch (args.length){ + case 1: + completetions.add("create"); + completetions.add("edit"); + completetions.add("delete"); + case 2: + if (args[0].equals("create")) { + completetions.add("9"); + completetions.add("18"); + completetions.add("27"); + completetions.add("36"); + completetions.add("45"); + completetions.add("54"); + } + } + return completetions; + } + + public static Inventory loadInventoryFromFile(File file) { + YamlConfiguration config = YamlConfiguration.loadConfiguration(file); + + // Check if the "data" key exists + if (!config.contains("data")) { + return null; // If "data" key doesn't exist, return null + } + + ConfigurationSection dataSection = config.getConfigurationSection("data"); + Inventory inventory = Bukkit.createInventory(null, dataSection.getInt("size"), dataSection.getString("title")); + + // Deserialize ItemStacks from the YAML configuration + for (String key : dataSection.getKeys(false)) { + if (!key.equals("size") && !key.equals("title")) { + ItemStack item = dataSection.getItemStack(key); + inventory.addItem(item); + } + } + + return inventory; + } +} diff --git a/src/main/java/xyz/soukup/menumaker/commands/setsize.java b/src/main/java/xyz/soukup/menumaker/commands/setsize.java new file mode 100644 index 0000000..6351616 --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/commands/setsize.java @@ -0,0 +1,15 @@ +package xyz.soukup.menumaker.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class setsize implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + ((Player) commandSender).getInventory().getItemInMainHand().setAmount(Integer.getInteger(args[0])); + return true; + } +} diff --git a/src/main/java/xyz/soukup/menumaker/events/saveInventory.java b/src/main/java/xyz/soukup/menumaker/events/saveInventory.java new file mode 100644 index 0000000..059a0cf --- /dev/null +++ b/src/main/java/xyz/soukup/menumaker/events/saveInventory.java @@ -0,0 +1,60 @@ +package xyz.soukup.menumaker.events; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import org.bukkit.ChatColor; +import org.bukkit.Material; +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.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; +import xyz.soukup.menumaker.MenuMaker; +import xyz.soukup.menumaker.PDC; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class saveInventory implements Listener { + + @EventHandler + public void onPlayerCloseMenuEditor(InventoryCloseEvent event) throws IOException { + Player player = (Player) event.getPlayer(); + String inventoryName = (String) PDC.GetPlayerPDC(player, "opened-inv", PersistentDataType.STRING); + if (inventoryName != null){ + PDC.DeletePlayerPDC(player, "opened-inv"); + + MenuMaker plugin = MenuMaker.getPlugin(MenuMaker.class); + Files.createDirectories(Paths.get(plugin.getDataFolder() + "/menus")); + File menuFile = new File(plugin.getDataFolder() + "/menus/", inventoryName + ".yml"); + + YamlConfiguration menuConfig = YamlConfiguration.loadConfiguration(menuFile); + Inventory menu = event.getInventory(); + InventoryView view = event.getView(); + menuConfig.set("data.name", view.getTitle()); + menuConfig.set("data.size", menu.getSize()); + int i = 0; + for (ItemStack item: menu.getContents()){ + if(item != null){ + menuConfig.set("data.items." + i + ".itemstack", item); + menuConfig.set("data.items." + i + ".identifier", null); + }else{ + menuConfig.set("data.items." + i + ".itemstack", null); + menuConfig.set("data.items." + i + ".identifier", null); + } + i++; + } + menuConfig.save(menuFile); + player.sendMessage(ChatColor.AQUA + "menu saved as plugins/menumaker/menus/"+ inventoryName + ".yml"); + + + + } + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..901c53d --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,21 @@ +name: MenuMaker +version: '${project.version}' +main: xyz.soukup.menumaker.MenuMaker +api-version: '1.20' +commands: + menumaker: + permission: menumaker.commands.menumaker + aliases: + - "mm" + createitem: + permission: menumaker.commands.createitem + aliases: + - "ci" + enchantitem: + permission: menumaker.commands.enchantitem + aliases: + - "ei" + hideenchant: + permission: menumaker.commands.hideenchand + aliases: + - "he" \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..7670b78 --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,21 @@ +name: MenuMaker +version: '1.0-SNAPSHOT' +main: xyz.soukup.menumaker.MenuMaker +api-version: '1.20' +commands: + menumaker: + permission: menumaker.commands.menumaker + aliases: + - "mm" + createitem: + permission: menumaker.commands.createitem + aliases: + - "ci" + enchantitem: + permission: menumaker.commands.enchantitem + aliases: + - "ei" + hideenchant: + permission: menumaker.commands.hideenchand + aliases: + - "he" \ No newline at end of file diff --git a/target/classes/xyz/soukup/menumaker/MenuMaker.class b/target/classes/xyz/soukup/menumaker/MenuMaker.class new file mode 100644 index 0000000000000000000000000000000000000000..ef05a34e8f3cc2f2e4d9688736b62c9b592b580b GIT binary patch literal 2936 zcmai0TXWM^5dKc=AV(1)m_P`(1QUqukO)e+6sHsjp$)YItsz`OXcgz+h}e>mr8J@R ze!t%z+CR`&+RhkKW;%UpXZlcnK_B`zIvv_Qk{wInh8O8*&+fOo-`QQA-|zqQGk_s{ zEu#q`31J1zSjDj2wDRh-GdHK(YN_Dlbwjo@dYo~;8CDJJhHf8W2*nc<5kweT zirjFD+8noJ$Y_Sx3!~c1CD3$a!v$n8l)I%rG2?r(I_S z&B&`++tQ7EDv|a@l=C!IFOsTVN=7@@N{A|0hYp6dE{0?41@-jwHJ-D}3~d&_?&uaD zH;r+pP+-{Qcjc*(tGf59NWun&o<~I>VIxCd!&Ivgm+RTf=tM}ydTds(1zQVCjX4oD^k|D7&hEH8aLVyeq$gDoYt2+|ZM}i3T zQO~c8K>_j@gG5A>^&4Em5W~)uqo}IN*e8xd#z6&#@Ho{nRb-Z1^Mc0p@j&@`;#4bA z7?$vaf+Kj6>djXkHN$oS@rpE~8CqUo?FeF3n=7D{l5p(*66f>Wu*+&$o9APOSew?O zjH3v(;siz|oK)}>o@VIwMbpTK+Y5QUOl30aLNXi*6pQOfO$!Z!TPc4v2JonWT8Oq& z3Z6llhC;#2yLoQ%y2$N6A)_W%)9zj>f^l;1q4aP=n=bGf8E5dUgy$4wah73Yy?KMi z3}M~4YKk-QwP|fgOh}kuSXVbbW?9;zNJ7RrQ5+W;qOthomDp4=5xYr?%jK#5gp5gC zmN2E@3Z7@^tlL{W&ll7)noT?zR9Mu&C1erqT1)R5#*BRA!R%xLgKh8A+KN-dV^4_dPLJzUCdIN&6kADoPq+149$7V zbV`E0G5?&a64(k8B?;FRSPKB&V74>?8QkC-z=^P047@NuU&%`KW*g7|3K%xQ%Q&Cg-i9BJ@d%}`I%{jWxr|nF zNtEy@#ra?|#8Otz8=CD{#63-j2NeRPx`MOFaIR3jF34Hav2y&R+edB7hchUkv6p5^ z6J1Hju^1?{YNj>aN$7clzEpZMAx+)}`<@m}c!{238;Ig2Jrz#@FXI*ZVtBP?%(f%s z?%hj9r3zZ^V9hUBe;1t>Z=z#kbgoTj<8GbYb`dJA8EATc+!^8eQmj=_3m34m_UYK0{VDY{BbzgHA&n z(qHs$ruXn&oTG5hr=u6{;8JEcrSZb}Km{}3AT|)L;M(DESNJ!`1I_Nbzbm{1qY3A~ z`}fcOTVx-0&o)UV0SYEUDYan$9rT~yOob4`9`sSc4AQUrAl+dPW4{~M5c!VLwdhSs zIV_^U+q44N58)lWOBK*YHt*qmin0T7n#vzgU3^FyqH;W~k7)HVN$8Gt9~}}*36m1| sKj@P1$=}5CXSCUb&q@7@Wxl%I;sT^Quz$puV2$~za~*ws>6(4@A1kF4QUCw| literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/menumaker/PDC.class b/target/classes/xyz/soukup/menumaker/PDC.class new file mode 100644 index 0000000000000000000000000000000000000000..1ddc92e68603f563903ddbb66bcc7b13d6e97f4b GIT binary patch literal 2597 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 literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/menumaker/commands/menumaker.class b/target/classes/xyz/soukup/menumaker/commands/menumaker.class new file mode 100644 index 0000000000000000000000000000000000000000..aaebc4636d4abc31101343f649512d629a72d590 GIT binary patch literal 6681 zcmc&&dwdkt75?tNX0w^R782M95}rvQWEC+;k|HsHMgyhAYG1b2zU{kO0ioZWnceIri`akKJ6~#~miu&|qS2)#YLi^G zjR?{zt-oK7h6H98vMR@Ad26GT8Qb z@qPhO<3l%AC|IeY2de}sh9U2WCiOn4&D*cV6FP5?qpHJ4ELN*ngS7$^l5s7X2$RHZ z;iMjqa$sU1iB9Nh>)H#zJo=Fj7vW+B>r`943ACAU z6N>4HnrJLJDsU`r)U+my%k%{`tx+u^FN=&sKeKbqGI{I6R%}x+pyD!oKp>do!QNPO zgVC3YYe^#(4Q^m64X)NA;r86eBxN|Jg+@GUv-3(OXXb6_y{P5xKEw(bVj^yoR!b|d zQ1M}0Y1PF{uA5OHfsIa>)OK}7n}kAYyGF%FWT<m$RYl4z9K{U({+KgFa_*D=~Q zyAILBn;BV+=B%XFyIH|!*e&FEBZnx|+%09~K0c@7R_w4)$+R8w3ZRn1(oFv_yc3(Z z#kdW(EBJznFJk9$SI;CAmaqh|qcH;0>N;{Grhu)iA`0##xaO*0v#odvPzFGT)1@3ph?a!;9U#&Y9=M z9$rst^5P+0=br9Gn%C3kdNIfXC_N)ldql-PJj$d_GA1=6I%&i9mY+z~6=Qg_Mv0Ptrh1&tg14a`Q*;0%b@LdJpQ}H6c&xAD$J>L=}l9EY4R`RM$ zZ(+`*@6G2_@Dg5D@Iw_pk}ZONSV2aF7O>G% z@G})Z$1m8=$sot`K$ z9lufVTNS^P8!j_9Y+7#y7lC4(H{yCInF8P#kh1iM0Sgk7O*;h7FB@k~MC z7P3AT{7A`(lkD^1hKD!LQEh94JS)S`i96_2nsk;6?NvBVmw(U0R$_Fb}jv*?^dx0&S``f!P++vJZpH zV$oO_)$2&Kl^9YCk|H!*DO*zWU+zT<&uMDE- z0F;MO@&I2t@F)J4CqKY=xOlAb21hEVN~M3sUw9SxEB;0aDs#O=wOq>4KkER-G`j;X z=bUD*qp2w1O{4N23iD?^{~Y)0JCE=>0l}z`*M@-Ce^MF~Z$*`}sc09LqITv(C`qF(jRyZIY0OFEbo)iX<>uWS|9tD| zUbHm(0=_gB+=|*+w#*)!B`2Ok5nG(|hj1>ByzaF{nmwK-rBVsF_TPy>z!Pv)DyG^l z&RMlx5xb7PE&?vsoIxxvpAqnI{va+G#D&ep0k?ns9)zUgL2L@R1I0t=cVLx^s^5$G zu94=e0hQ+OK+OpAlhzJxy94SVwltRnO8g&8~uTki@SKTbRSy8ZnTO)9x6SH1>yxP6tAFNyn#jHEi88Mqt`JFXFIw$ z?jeUl=yXJJz8O1d#>dN8j=$p{wDBOH{uBS=f!t19OIzN8kJeP<-*_9vTxYf=$JJ(9 za^es!#39b85bH!44s(V|`(DElyn_;2`3jEW7)ojDi+GZ9WwdB3L*;Fh%eb^-mLnmA zOb~M96fPNA9Jx8yX^uRCN4@YkHVLmNf?LQaeG?VOa0+}1N)?=^h++j*iYQU|_0Jtt zQCXQ|U! z%#I$;jCONDml+{VDB*Yoim;M#unKc<0a~$|N1AKN%M1B?5jNmr^kW?lNiM;5Xt)s} zlf4V9&1G1Gn=&lo$Yv2oHj6m2SX6}TgkOvyi^g(gSv{;Ll{T+bIFF!C!QB%N^H{Y? zLLoqcbmh`s^~no{|T0%9jN8#X>&BOA>bauPaSCX z%yvD7TUI**p6(&MN)PTj_ULShvz3V&NklLQxp|0JiZJ6ZMuzpH0SR;=NkmgT*4u*1 zu?<%eX<1n%zEPBmYUU#kr5eQqMxrzy zt%mD}jDW32QLo@B5?sMchtYnBl3p>Hdac4gmsj~y;V(_&*E^uNcERO*5Z4YDeksbr TZ>n{}p)O=AE~fC2Lrnb-5yc;- literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/menumaker/commands/setsize.class b/target/classes/xyz/soukup/menumaker/commands/setsize.class new file mode 100644 index 0000000000000000000000000000000000000000..8134026988eec33912e3865931e9e6398684777b GIT binary patch literal 1880 zcmbVNTTdHD6#fRUy^C2IVj3E9-GHg>a9K)8+tieXQWD%6LgNSt`cRF{;4a>awU-Fz z*YvGY)t5?DLR$6mR;fQK$(i*M%%v!*rJe80%(JEY}Jb8B)d4rV5SWvgbF=demxJp()(Z3OnY8%{#&$fQqb+ z0q6{RQ-l@w3Eg{shoM+3ReQv&!<$6%4QF`(@8E)pAsrWyW5~aa5W_`jEfh}0UE`L! z%H17?vHvnD8EYYLw8~k$i%Tj-bi9Ylq~$33iW`ci@ENjk9Lc6otRAt{Lf>+mZgM*kaRw_{+`vs0hK^epW4Li3#aEm=xE>53WI!qn{feBKvr&yRJ|W>!ZTV_A%2fnjmUZ${Kvp|R`v z#=XR{(LOX|6efa#;q4j|!OTQpI8hK96opY2hD$DLSky41VOGPOhItKn4O7R)OSg6^ z?$d-J6Aq{TzI(>=>P=&JBprKkNek#$1wE|?_=@U$^h7JREt=dujAdoNA=)y}Dyj^Z z&ahV6l!I_Ri#0qvQNzTzif^d3;_{7f2BsL`5%qN%DDdm!ijEwa6U!PtxWuBF5avWc14 zc}dOU1LBs{96lsnlA6aIDENqI1Ih@&$G`{$C4qP)q-2al;1l{r6$(vmPOU>(*>-d; zL;jWAkYd}p&oh6Z@5)a^U#Cz0q+vq&|Bkio@1A4hFOp<&I#!W>g*+HTpNa=69=)Q!um7_neRoM~A3l8z32oUn literal 0 HcmV?d00001 diff --git a/target/classes/xyz/soukup/menumaker/events/saveInventory.class b/target/classes/xyz/soukup/menumaker/events/saveInventory.class new file mode 100644 index 0000000000000000000000000000000000000000..1530016f65db174530d298fe21dab2291246fbc2 GIT binary patch literal 4000 zcmb7HX?GLX8GbI7J+eH8pu|a(uoxVOg|P;b)NQ3Ctz#Q-@D{wJF6lCs#$xbjM%9cA zrb}8%laMwcX`6<0Z@SRE4Q+%84W;cleCX$VXn#QeLwin7=yPWzGcp3xqoY~wz3=|K z%l!TQcP;~X1b>TR9hwwGR5YVS;EtpEqOMuGo!7?ajv84{pyg51HoeCMn!1xSF+|a- zAf}=XszAyq<+Zu;!h-2(#-d?+nrX|MQ(Dr7Yfl4~;~GP9S)es3;Q`&8VIP1N)F(h1FV$_wS9 zRxoUuv0#+6iNOH@b$`uj|8=1|EQNlNb_X_PMy>~7(kq#EJ`+B>hDON{br3$fa7$fO z1Ex~-P8Hj*U0}nYVHutg$oKWr{xAKKGYTFM*wWDaQ95E&IwFQH>{Rg}x@#aP=S^Fn zuREmkfTg=`rVbTFOPsv*5O7fG2`k-?(^QO^m^3*1#x*w4%=mlz($M-+TiML(VpxYM`Drb+WONt@8U zBQBGcrVC`krc}ufha6w8R~-+!dQf0TJ#*b7Hs{Ko;k&QD_7=lF>{oC=#W0?{K_lsD zYP2z1GIY-vG)pWmPRW#OhpPJ3ORj3TvUn4z1Wdhl(sZgl!o&+lIf^j>C5Vs~#e_g4 zwN$WTIEX{C{7nix*uYN>+{7|C4Z{9u6(7T_fEFq>S;w9?^W~E6nT{QVVpcC$1L0*l z!E*H6s zuyaj9d5-YUGO=?^vXreCj2H~eE6A%jBB8uJq`8t z5tmwW&P2hI5@_L?CyX`}@figr6)wnS%dNEttezyD-|L2BSi~^}$5kxh1ViRy$xpyx z+cWaAkSL3~RW`=w1@7)14rg`sL`G`xITfGB7X;d9A4ASAzyo8q(oKf)#US$;u`ETHePGc;GPKfkBHQi4SgsoZGrVZa9 zh-5?Tlwxw7y4x8PbvM)|<-V)6p&hTO_!eHLvM!78sNuSLp1O53NKDyy-e8|^*m(SD z#MPw8l`K&39f3s1h+t$H@h1Zr&d7k1qp%GlrfrOs3v)(kN}sd15+8B0x;3MhO!;12 zjCe;(2C`@5wiU>*XE}DzY5l24w#T8I$ucPLaDCTZdz#85XQ;9au|Q|o`Hi5&-V}IU zo^7b`N~@-pQ5g?euLafz^{-Zxh$^`klrDk2VY#O~(d3NCWsT{GboT)JtQs#OI>VCZ<(D9ZlgD!5$hvy9O2_{t7}eyB{n3&xD; zngngXZ9AUdl!)1_b>{g{8ncgHz%5xF_mtiA|FpHynZqrO|-=4 z6445B6_|W3B$SJA1eQ_eLQ`L>eE+OKI+loC?rUr6Q#;g-wl{G$5$jMNO1CH4uVN_C zQWY3~mclw(EBI3UR3J9d?(@BI|G8jaaQhtkZ^1#HXtW(-aH>_DQpLGz`9w>ixq=sV zSH+#j*QEQtPElc3T*NomK}N9&GKzDIAh3yp#%6wIZ9xKC`P;_6v>oFdxldvTPGcv| zaMXVd-HdD!=dlZKqX+L{H~xuU{0Av?;vc-E1HIL?NxQccKXB9*h`LJ0*mx6-|rWF(w z7(&6aAd>%!DFyF5c8#)Pw>l17qxq5W5eoVf{}C$kF8<6XnHpDk7x)XW>+skA0Z|8w A8UO$Q literal 0 HcmV?d00001