diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java b/nicko-core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java index 4f24e42..87fbb45 100644 --- a/nicko-core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java +++ b/nicko-core/src/main/java/net/artelnatif/nicko/command/NickoCommand.java @@ -5,16 +5,19 @@ import net.artelnatif.nicko.command.sub.NickoCheckSubCmd; import net.artelnatif.nicko.command.sub.NickoDebugSubCmd; import net.artelnatif.nicko.command.sub.NickoDisguiseSubCmd; import net.artelnatif.nicko.command.sub.NickoGUISubCmd; +import net.artelnatif.nicko.gui.MainGUI; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; public class NickoCommand implements CommandExecutor { private final String opPrefix = "§c(OP)"; private String helpMessage = """ §cNicko §8§o[{version}] §f- §2Help: + §6/nicko §f- §7Open the GUI. §6/nicko disguise §f- §7Change your appearance. §6/nicko revert §f- §7Revert your appearance to your default skin and name. §6/nicko help §f- §7Prints this help message. @@ -36,7 +39,13 @@ public class NickoCommand implements CommandExecutor { default -> sendHelpMessages(sender); } } else { - sendHelpMessages(sender); + if (sender instanceof Player player) { + new MainGUI(player).open(); + return false; + } + + sender.sendMessage("The GUI can only be opened in-game."); + return false; } return false; diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/MainGUI.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/MainGUI.java new file mode 100644 index 0000000..4feb502 --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/MainGUI.java @@ -0,0 +1,45 @@ +package net.artelnatif.nicko.gui; + +import de.studiocode.invui.gui.GUI; +import de.studiocode.invui.gui.builder.GUIBuilder; +import de.studiocode.invui.gui.builder.guitype.GUIType; +import de.studiocode.invui.gui.structure.Structure; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.SimpleItem; +import de.studiocode.invui.window.impl.single.SimpleWindow; +import net.artelnatif.nicko.gui.items.*; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +public class MainGUI { + private final Player player; + private final GUI gui; + private String[] structureIngredients = new String[]{"# # # # # # # # #", + "# % % % % % % % #", + "# % # # B # # % #", + "# % # N A S # % #", + "# % % % % % % % #", + "E # # # # # # # #"}; + + public MainGUI(Player player) { + if (!player.hasPermission("nicko.admin") || !player.isOp()) { + structureIngredients[3] = structureIngredients[3].replace("A", "#"); + } + + this.gui = new GUIBuilder<>(GUIType.NORMAL) + .setStructure(new Structure(structureIngredients)) + .addIngredient('#', new SimpleItem(new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE))) + .addIngredient('%', new SimpleItem(new ItemBuilder(Material.ORANGE_STAINED_GLASS_PANE))) + .addIngredient('E', new ExitDoorItem()) + .addIngredient('N', new ChangeNameItem()) + .addIngredient('S', new ChangeSkinItem()) + .addIngredient('A', new AdminPanelAccessItem()) + .addIngredient('B', new ChangeNameAndSkinItem()) + .build(); + this.player = player; + } + + public void open() { + new SimpleWindow(player, "Nicko", gui).show(); + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/AdminPanelAccessItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/AdminPanelAccessItem.java new file mode 100644 index 0000000..d756363 --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/AdminPanelAccessItem.java @@ -0,0 +1,26 @@ +package net.artelnatif.nicko.gui.items; + +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; + +public class AdminPanelAccessItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + final ItemBuilder builder = new ItemBuilder(Material.PISTON); + builder.setDisplayName("§cAdministration panel"); + builder.addLoreLines("§7Access the administration panel."); + return builder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick() || clickType.isRightClick()) { + } + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameAndSkinItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameAndSkinItem.java new file mode 100644 index 0000000..453fa15 --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameAndSkinItem.java @@ -0,0 +1,30 @@ +package net.artelnatif.nicko.gui.items; + +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import net.artelnatif.nicko.anvil.AnvilManager; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; + +public class ChangeNameAndSkinItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + final ItemBuilder builder = new ItemBuilder(Material.WRITABLE_BOOK); + builder.setDisplayName("§6Skin §fand §6name §fchange"); + builder.addLoreLines("§7Change both your skin and name."); + return builder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick() || clickType.isRightClick()) { + event.getView().close(); + final AnvilManager manager = new AnvilManager(player); + manager.openNameAndSkinAnvil(); + } + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameItem.java new file mode 100644 index 0000000..56cc5ec --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeNameItem.java @@ -0,0 +1,30 @@ +package net.artelnatif.nicko.gui.items; + +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import net.artelnatif.nicko.anvil.AnvilManager; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; + +public class ChangeNameItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + final ItemBuilder builder = new ItemBuilder(Material.NAME_TAG); + builder.setDisplayName("§6Name §fchange"); + builder.addLoreLines("§7Only change your name."); + return builder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick() || clickType.isRightClick()) { + event.getView().close(); + final AnvilManager manager = new AnvilManager(player); + manager.openNameAnvil(); + } + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeSkinItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeSkinItem.java new file mode 100644 index 0000000..78febbc --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ChangeSkinItem.java @@ -0,0 +1,30 @@ +package net.artelnatif.nicko.gui.items; + +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import net.artelnatif.nicko.anvil.AnvilManager; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; + +public class ChangeSkinItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + final ItemBuilder builder = new ItemBuilder(Material.PAINTING); + builder.setDisplayName("§6Skin §fchange"); + builder.addLoreLines("§7Only change your skin."); + return builder; + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if(clickType.isLeftClick() || clickType.isRightClick()) { + event.getView().close(); + final AnvilManager manager = new AnvilManager(player); + manager.openSkinAnvil(); + } + } +} diff --git a/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ExitDoorItem.java b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ExitDoorItem.java new file mode 100644 index 0000000..c1cedfc --- /dev/null +++ b/nicko-core/src/main/java/net/artelnatif/nicko/gui/items/ExitDoorItem.java @@ -0,0 +1,24 @@ +package net.artelnatif.nicko.gui.items; + +import de.studiocode.invui.item.ItemProvider; +import de.studiocode.invui.item.builder.ItemBuilder; +import de.studiocode.invui.item.impl.BaseItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.jetbrains.annotations.NotNull; + +public class ExitDoorItem extends BaseItem { + @Override + public ItemProvider getItemProvider() { + return new ItemBuilder(Material.OAK_DOOR).setDisplayName("§fExit"); + } + + @Override + public void handleClick(@NotNull ClickType clickType, @NotNull Player player, @NotNull InventoryClickEvent event) { + if (clickType.isLeftClick() || clickType.isRightClick()) { + event.getView().close(); + } + } +}