feat: gui base

This commit is contained in:
aroooo 2022-10-27 19:52:16 +02:00
parent acc50e55cd
commit 9890c6b1a7
7 changed files with 195 additions and 1 deletions

View file

@ -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;

View file

@ -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();
}
}

View file

@ -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()) {
}
}
}

View file

@ -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();
}
}
}

View file

@ -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();
}
}
}

View file

@ -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();
}
}
}

View file

@ -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();
}
}
}