diff --git a/src/main/java/xyz/atnrch/nicko/gui/ConfirmGUI.java b/src/main/java/xyz/atnrch/nicko/gui/ConfirmGUI.java new file mode 100644 index 0000000..b761bc2 --- /dev/null +++ b/src/main/java/xyz/atnrch/nicko/gui/ConfirmGUI.java @@ -0,0 +1,34 @@ +package xyz.atnrch.nicko.gui; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import xyz.atnrch.nicko.gui.items.confirm.ActionCallback; +import xyz.atnrch.nicko.gui.items.confirm.Cancel; +import xyz.atnrch.nicko.gui.items.confirm.Confirm; +import xyz.xenondevs.invui.gui.Gui; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.SimpleItem; +import xyz.xenondevs.invui.window.Window; + +public class ConfirmGUI { + private final Player player; + private final Gui gui; + + public ConfirmGUI(Player player, ActionCallback callback) { + this.gui = Gui.normal() + .setStructure( + "@ @ @ @ % & & & &", + "@ @ @ @ I & & & &", + "@ @ @ @ % & & & &" + ) + .addIngredient('@', new Confirm(callback)) + .addIngredient('&', new Cancel(callback)) + .addIngredient('I', new SimpleItem(new ItemBuilder(Material.PAPER).setDisplayName("§6Select an option").get())) + .build(); + this.player = player; + } + + public void open() { + Window.single().setGui(gui).setTitle("... > Invalidate > Confirm").open(player); + } +} diff --git a/src/main/java/xyz/atnrch/nicko/gui/admin/cache/CacheDetailedGUI.java b/src/main/java/xyz/atnrch/nicko/gui/admin/cache/CacheDetailedGUI.java index 901d479..cfe413e 100644 --- a/src/main/java/xyz/atnrch/nicko/gui/admin/cache/CacheDetailedGUI.java +++ b/src/main/java/xyz/atnrch/nicko/gui/admin/cache/CacheDetailedGUI.java @@ -8,7 +8,7 @@ import xyz.xenondevs.invui.gui.ScrollGui; import xyz.xenondevs.invui.gui.structure.Markers; import xyz.xenondevs.invui.item.Item; import xyz.atnrch.nicko.NickoBukkit; -import xyz.atnrch.nicko.gui.items.admin.cache.EntryPlaceholder; +import xyz.atnrch.nicko.gui.items.admin.cache.CacheEntry; import xyz.atnrch.nicko.gui.admin.CacheManagementGUI; import xyz.atnrch.nicko.gui.items.common.ScrollDown; import org.bukkit.entity.Player; @@ -34,7 +34,7 @@ public class CacheDetailedGUI { .collect(Collectors.toList()); final List items = loadedSkins.stream() - .map(EntryPlaceholder::new) + .map(CacheEntry::new) .collect(Collectors.toList()); final CacheManagementGUI parent = new CacheManagementGUI(player); diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/EntryPlaceholder.java b/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java similarity index 63% rename from src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/EntryPlaceholder.java rename to src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java index 077321f..cbf8ee9 100644 --- a/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/EntryPlaceholder.java +++ b/src/main/java/xyz/atnrch/nicko/gui/items/admin/cache/CacheEntry.java @@ -5,14 +5,19 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.jetbrains.annotations.NotNull; +import xyz.atnrch.nicko.gui.ConfirmGUI; +import xyz.atnrch.nicko.gui.admin.cache.CacheDetailedGUI; +import xyz.atnrch.nicko.gui.items.confirm.ActionCallback; import xyz.xenondevs.invui.item.builder.ItemBuilder; import xyz.xenondevs.invui.item.builder.SkullBuilder; import xyz.xenondevs.invui.item.impl.AsyncItem; import java.util.UUID; -public class EntryPlaceholder extends AsyncItem { - public EntryPlaceholder(String name) { +public class CacheEntry extends AsyncItem { + private final String name; + + public CacheEntry(String name) { super(new ItemBuilder(Material.PAINTING).setDisplayName("§7§oLoading..."), () -> { final String stringUUID = name.replaceAll("(.{8})(.{4})(.{4})(.{4})(.+)", "$1-$2-$3-$4-$5"); final UUID uuid = UUID.fromString(stringUUID); @@ -21,12 +26,24 @@ public class EntryPlaceholder extends AsyncItem { skull.addLoreLines("§7Click to invalidate skin"); return skull; }); + this.name = name; } @Override public void handleClick(@NotNull ClickType click, @NotNull Player player, @NotNull InventoryClickEvent event) { if (click.isLeftClick() || click.isRightClick()) { event.getView().close(); + new ConfirmGUI(player, new ActionCallback() { + @Override + public void onConfirm() { + player.sendMessage(name + " cleared"); + } + + @Override + public void onCancel() { + new CacheDetailedGUI(player).open(); + } + }).open(); } } } diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/confirm/ActionCallback.java b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/ActionCallback.java new file mode 100644 index 0000000..bebd9a0 --- /dev/null +++ b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/ActionCallback.java @@ -0,0 +1,7 @@ +package xyz.atnrch.nicko.gui.items.confirm; + +public interface ActionCallback { + void onConfirm(); + + void onCancel(); +} diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Cancel.java b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Cancel.java new file mode 100644 index 0000000..d3cdb28 --- /dev/null +++ b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Cancel.java @@ -0,0 +1,19 @@ +package xyz.atnrch.nicko.gui.items.confirm; + +import org.bukkit.Material; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.SuppliedItem; + +public class Cancel extends SuppliedItem { + public Cancel(ActionCallback callback) { + super(() -> { + final ItemBuilder builder = new ItemBuilder(Material.RED_STAINED_GLASS_PANE); + builder.setDisplayName("§cCancel"); + return builder; + }, click -> { + click.getEvent().getView().close(); + callback.onCancel(); + return true; + }); + } +} \ No newline at end of file diff --git a/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Confirm.java b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Confirm.java new file mode 100644 index 0000000..f381afb --- /dev/null +++ b/src/main/java/xyz/atnrch/nicko/gui/items/confirm/Confirm.java @@ -0,0 +1,19 @@ +package xyz.atnrch.nicko.gui.items.confirm; + +import org.bukkit.Material; +import xyz.xenondevs.invui.item.builder.ItemBuilder; +import xyz.xenondevs.invui.item.impl.SuppliedItem; + +public class Confirm extends SuppliedItem { + public Confirm(ActionCallback callback) { + super(() -> { + final ItemBuilder builder = new ItemBuilder(Material.GREEN_STAINED_GLASS_PANE); + builder.setDisplayName("§aConfirm"); + return builder; + }, click -> { + click.getEvent().getView().close(); + callback.onConfirm(); + return true; + }); + } +}