From a80fb99bdc38d059848a2209213a023723ff287d Mon Sep 17 00:00:00 2001 From: fzorb Date: Mon, 21 Jul 2025 22:04:19 +0300 Subject: [PATCH] add chestgui --- .../NoThankYouMicrosoft.java | 13 +++++ .../flagFrontend/menuEvents.java | 22 ++++++++ .../flagFrontend/prideCommand.java | 18 +++++++ .../flagFrontend/prideMenu.java | 52 +++++++++++++++++++ .../noThankYouMicrosoft/flagManager.java | 9 +++- 5 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java create mode 100644 src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java create mode 100644 src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java index 14997bc..3e51cfc 100644 --- a/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/NoThankYouMicrosoft.java @@ -4,6 +4,8 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.java.JavaPlugin; +import xyz.fzorb.noThankYouMicrosoft.flagFrontend.menuEvents; +import xyz.fzorb.noThankYouMicrosoft.flagFrontend.prideCommand; import java.io.File; import java.io.IOException; @@ -20,6 +22,8 @@ public final class NoThankYouMicrosoft extends JavaPlugin { this.saveDefaultConfig(); createDatabaseConfig(); this.getServer().getPluginManager().registerEvents(new messageListener(), this); + this.getServer().getPluginManager().registerEvents(new menuEvents(), this); + this.getCommand("pride").setExecutor(new prideCommand()); } private void createDatabaseConfig() { @@ -47,6 +51,15 @@ public final class NoThankYouMicrosoft extends JavaPlugin { } } + public static void saveDatabase(JavaPlugin instance) { + File databaseFile = new File(instance.getDataFolder(), "database.yml"); + try { + databaseFileConfig.save(databaseFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + public static JavaPlugin getInstance() { return instance; } diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java new file mode 100644 index 0000000..e76d5f2 --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/menuEvents.java @@ -0,0 +1,22 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import xyz.fzorb.noThankYouMicrosoft.flagManager; + +public class menuEvents implements Listener { + @EventHandler + public static void onPlayerInteractWithChestGUI(InventoryClickEvent event) { + if (event.getInventory().equals(prideMenu.prideMenus.get(event.getWhoClicked().getUniqueId()))) { + event.setCancelled(true); + event.getInventory().close(); + prideMenu.prideMenus.remove(event.getWhoClicked().getUniqueId()); + ItemStack item = event.getCurrentItem(); + String pride = PlainTextComponentSerializer.plainText().serialize(item.getItemMeta().displayName()); + flagManager.setUserPride(event.getWhoClicked().getUniqueId(), pride); + } + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java new file mode 100644 index 0000000..f1676bb --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideCommand.java @@ -0,0 +1,18 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import xyz.fzorb.noThankYouMicrosoft.flagManager; + +public class prideCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { return true; } + prideMenu.prideMenus.put(((Player) sender).getUniqueId(), prideMenu.generatePrideMenu()); + ((Player) sender).openInventory(prideMenu.prideMenus.get(((Player) sender).getUniqueId())); + return true; + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java new file mode 100644 index 0000000..c1ed7f3 --- /dev/null +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagFrontend/prideMenu.java @@ -0,0 +1,52 @@ +package xyz.fzorb.noThankYouMicrosoft.flagFrontend; + +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import xyz.fzorb.noThankYouMicrosoft.NoThankYouMicrosoft; + +import java.util.*; + +public class prideMenu { + + public static final Map prideMenus = new HashMap<>(); + + public static Integer calculateRows(Integer number) { + if (number <= 9) { return 9; } + else if (number <= 18) { return 18; } + else if (number <= 27) { return 27; } + else if (number <= 36) { return 36; } + else if (number <= 45) { return 45; } + else if (number <= 54) { return 54; } + return 0; // this can NEVER be the case, can it? who am I kidding, I DOUBT there will ever be more than 54 flags! + } + + public static ItemStack generatePrideItem(String pride) { + ItemStack is = new ItemStack(Material.PAPER, 1); + ItemMeta im = is.getItemMeta(); + im.displayName(MiniMessage.miniMessage().deserialize("" + pride + "")); + is.setItemMeta(im); + return is; + } + + public static ItemStack generateNoPrideItem() { + ItemStack is = new ItemStack(Material.BARRIER, 1); + ItemMeta im = is.getItemMeta(); + im.displayName(MiniMessage.miniMessage().deserialize("none")); + is.setItemMeta(im); + return is; + } + + public static Inventory generatePrideMenu() { + List prides = NoThankYouMicrosoft.getInstance().getConfig().getStringList("prides"); + Inventory inventory = Bukkit.createInventory(null, calculateRows(prides.toArray().length + 1), MiniMessage.miniMessage().deserialize("Choose your flag")); + for (String pride : prides) { + inventory.addItem(generatePrideItem(pride)); + } + inventory.addItem(generateNoPrideItem()); + return inventory; + } +} diff --git a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java index e834468..449efc9 100644 --- a/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java +++ b/src/main/java/xyz/fzorb/noThankYouMicrosoft/flagManager.java @@ -4,11 +4,18 @@ import java.util.UUID; public class flagManager { public static String getUserPride(UUID uuid) { - String pride = NoThankYouMicrosoft.getDatabase().getString("player.%s.flag".formatted(uuid.toString())); + NoThankYouMicrosoft.reReadDatabase(NoThankYouMicrosoft.getInstance()); + String pride = NoThankYouMicrosoft.getDatabase().getString("players.%s.flag".formatted(uuid.toString())); if (pride == null) { return "none"; } else { return pride; } } + + public static void setUserPride(UUID uuid, String pride) { + NoThankYouMicrosoft.reReadDatabase(NoThankYouMicrosoft.getInstance()); + NoThankYouMicrosoft.getDatabase().set("players.%s.flag".formatted(uuid.toString()), pride); + NoThankYouMicrosoft.saveDatabase(NoThankYouMicrosoft.getInstance()); + } }