diff --git a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java index b920bdc..20a6fa8 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/EcoCraftCore.java @@ -9,13 +9,11 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; +import xyz.soukup.ecoCraftCore.commands.GuiCommand; import xyz.soukup.ecoCraftCore.commands.MoneyCommand; import xyz.soukup.ecoCraftCore.commands.RulerCommand; import xyz.soukup.ecoCraftCore.commands.ShopCommand; -import xyz.soukup.ecoCraftCore.events.PreparePlayer; -import xyz.soukup.ecoCraftCore.events.RulerMarking; -import xyz.soukup.ecoCraftCore.events.ShopLogic; -import xyz.soukup.ecoCraftCore.events.VirtualChestLogic; +import xyz.soukup.ecoCraftCore.events.*; import xyz.soukup.ecoCraftCore.objects.Account; import xyz.soukup.ecoCraftCore.objects.Shop; import xyz.soukup.ecoCraftCore.objects.Transaction; @@ -98,6 +96,7 @@ public final class EcoCraftCore extends JavaPlugin { lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(ShopCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(RulerCommand.createCommand().build())); lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(MoneyCommand.createCommand().build())); + lm.registerEventHandler(LifecycleEvents.COMMANDS, event -> event.registrar().register(GuiCommand.createCommand().build())); } private void registerEvents(){ @@ -107,6 +106,8 @@ public final class EcoCraftCore extends JavaPlugin { pm.registerEvents(new VirtualChestLogic(), this); pm.registerEvents(new ShopLogic(), this); pm.registerEvents(new PreparePlayer(), this); + pm.registerEvents(new InventoryActionCancel(), this); + } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java new file mode 100644 index 0000000..20a69cd --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/GuiCommand.java @@ -0,0 +1,116 @@ +package xyz.soukup.ecoCraftCore.commands; + +import com.mojang.brigadier.arguments.StringArgumentType; +import dev.triumphteam.gui.builder.item.ItemBuilder; +import dev.triumphteam.gui.guis.GuiItem; +import io.papermc.paper.command.brigadier.CommandSourceStack; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import io.papermc.paper.command.brigadier.Commands; +import com.mojang.brigadier.context.CommandContext; +import xyz.soukup.ecoCraftCore.utilities.Messages; +import net.kyori.adventure.text.Component; +import org.bukkit.command.CommandSender; +import dev.triumphteam.gui.guis.Gui; +import org.bukkit.entity.Player; +import org.bukkit.Material; + +import java.util.HashMap; +import java.util.Map; + +public class GuiCommand { + public static LiteralArgumentBuilder createCommand() { + return Commands.literal("gopen") + .then(Commands.argument("id", StringArgumentType.string()) + .executes(GuiCommand::openGui)) + .executes(GuiCommand::getAll); + } + + private static int openGui(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + String guiId = context.getArgument("id", String.class); + + if (!(commandSender instanceof Player)){ + Messages.send(commandSender, "generic.error.not-player"); + return 0; + } + + Gui gui = getGui(guiId, false, commandSender); // Pokud najdeme gui vrátíme ho, pokud ne vrátíme default gui + gui.open((Player) commandSender); + return 1; + } + + private static int getAll(CommandContext context){ + CommandSender commandSender = context.getSource().getSender(); + + if (!(commandSender instanceof Player)){ + Messages.send(commandSender, "generic.error.not-player"); + return 0; + } + + getGui("", true, commandSender); // Pokud najdeme gui vrátíme ho, pokud ne vrátíme default gui + return 1; + } + + private static Gui getGui(String guiId, Boolean getAll, CommandSender commandSender){ + // Mapa gui objektů + Map guiMap = new HashMap<>(); + + // Default gui + Gui gui1 = Gui.gui() // U custom gui dávat vždycky "GUI -" -> ../events/InventoryActionCancel + .title(Component.text("GUI - Default")) + .rows(6) + .create(); + + // Shop Admin gui + Gui shopAdminGui = Gui.gui() + .title(Messages.get("gui.shopadmin.title")) + .rows(3) + .create(); + shopAdminGui.getFiller().fill(ItemBuilder.from(Material.BLACK_STAINED_GLASS_PANE) + .name(Messages.get("gui.shopadmin.items.background")).asGuiItem()); + GuiItem deleteShop = ItemBuilder.from(Material.BARRIER).name(Messages.get("gui.shopadmin.items.deleteshop")) + .asGuiItem(event -> { + // Zde delete shop + }); + GuiItem changeSellPrice = ItemBuilder.from(Material.OAK_SIGN).name(Messages.get("gui.shopadmin.items.changesellprice")) + .asGuiItem(event -> { + // Zde change sell price + }); + GuiItem changeBuyPrice = ItemBuilder.from(Material.DARK_OAK_SIGN).name(Messages.get("gui.shopadmin.items.changebuyprice")) + .asGuiItem(event -> { + // Zde change buy price + }); + GuiItem changeAmounts = ItemBuilder.from(Material.GOLD_BLOCK).name(Messages.get("gui.shopadmin.items.changeamounts")) + .asGuiItem(event -> { + // Zde change amounts + }); + + shopAdminGui.setItem(22, deleteShop); + shopAdminGui.setItem(15, changeBuyPrice); + shopAdminGui.setItem(11, changeSellPrice); + shopAdminGui.setItem(13, changeAmounts); + + guiMap.put("default", gui1); + guiMap.put("shop-admin", shopAdminGui); + + if (getAll){ + printAll(guiMap, commandSender); + } + + return guiMap.getOrDefault(guiId, gui1); + } + + private static void printAll(Map guiMap, CommandSender commandSender){ + HashMap stringGuis = new HashMap<>(); + int index = 1; + + for (Map.Entry entry : guiMap.entrySet()) { + String guiName = entry.getKey(); + stringGuis.put(String.valueOf(index), guiName); + index++; // Každý číslo je placeholder v messages, pokud se změní počet gui musí se editnout i messages.yml + } + + Messages.send(commandSender, "gui.all", stringGuis); + } +} + diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java b/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java new file mode 100644 index 0000000..6b77ec9 --- /dev/null +++ b/src/main/java/xyz/soukup/ecoCraftCore/events/InventoryActionCancel.java @@ -0,0 +1,17 @@ +package xyz.soukup.ecoCraftCore.events; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class InventoryActionCancel implements Listener { + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (event.getView().getTitle().contains("GUI -")) { + if (!ClickType.valueOf(event.getClick().name()).toString().isEmpty()) { + event.setCancelled(true); + } + } + } +} diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java index 03bf012..8ec0439 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java @@ -40,6 +40,10 @@ public class Messages { return MiniMessage.miniMessage().deserialize(string); } + public static String getAsString(String key){ + return MiniMessage.miniMessage().serialize(Messages.get(key)); + } + public static Component get(String key, HashMap placeholders){ String string = getString(key); diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 3479051..2651e95 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -46,4 +46,14 @@ marker: menu: shop: buy: "Koupit ks za $" - sell: "Prodat ks za $" \ No newline at end of file + sell: "Prodat ks za $" +gui: + all: "Seznam guis: <1>, <2>" + shopadmin: + title: "GUI - Shop Admin" + items: + background: " " + deleteshop: "Smazat Obchod" + changesellprice: "Změnit Prodávající Cenu" + changebuyprice: "Změnit Kupující Cenu" + changeamounts: "Změnit Množství Prodeje a Výkupu"