From 8a1055eae4e4787929b789393c606d0a13d8b7b8 Mon Sep 17 00:00:00 2001 From: Snabeldier <79211348+Snabeldier@users.noreply.github.com> Date: Sat, 18 Jan 2025 17:55:09 +0100 Subject: [PATCH] add new methods --- src/main/java/minevalley/core/api/Core.java | 10 ++++--- .../java/minevalley/core/api/CoreServer.java | 3 +- .../minevalley/core/api/gui/FillItem.java | 29 +++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 src/main/java/minevalley/core/api/gui/FillItem.java diff --git a/src/main/java/minevalley/core/api/Core.java b/src/main/java/minevalley/core/api/Core.java index eedbe69b..957b2a9d 100644 --- a/src/main/java/minevalley/core/api/Core.java +++ b/src/main/java/minevalley/core/api/Core.java @@ -9,6 +9,7 @@ import minevalley.core.api.discord.Webhook; import minevalley.core.api.economy.BankAccount; import minevalley.core.api.enums.DebugType; +import minevalley.core.api.gui.FillItem; import minevalley.core.api.gui.InventoryGui; import minevalley.core.api.gui.MultiPageGui; import minevalley.core.api.npc.NPC; @@ -547,14 +548,15 @@ public static InventoryGui createGui(@Nonnull Component title, @Nonnegative int *
* {@code %o%} will be replaced with the amount of pages * - * @param title title of the inventory - * @param size size of the inventory + * @param title title of the inventory + * @param size size of the inventory + * @param fillItems items to fill the inventory with * @return new gui-builder * @throws IllegalArgumentException if the size is invalid (negative, higher than 54 or not a multiple of 9 while being higher than 6) */ @Nonnull - public static MultiPageGui createMultiPageGui(@Nonnull Component title, @Nonnegative int size) throws IllegalArgumentException { - return server.createMultiPageGui(size); + public static MultiPageGui createMultiPageGui(@Nonnull Component title, @Nonnegative int size, @Nonnull List fillItems) throws IllegalArgumentException { + return server.createMultiPageGui(title, size, fillItems); } /** diff --git a/src/main/java/minevalley/core/api/CoreServer.java b/src/main/java/minevalley/core/api/CoreServer.java index 7eace2e5..f0793b4b 100644 --- a/src/main/java/minevalley/core/api/CoreServer.java +++ b/src/main/java/minevalley/core/api/CoreServer.java @@ -9,6 +9,7 @@ import minevalley.core.api.discord.Webhook; import minevalley.core.api.economy.BankAccount; import minevalley.core.api.enums.DebugType; +import minevalley.core.api.gui.FillItem; import minevalley.core.api.gui.InventoryGui; import minevalley.core.api.gui.MultiPageGui; import minevalley.core.api.npc.NPC; @@ -154,7 +155,7 @@ public interface CoreServer { InventoryGui createGUI(@Nonnull Component title, @Nonnegative int size) throws IllegalArgumentException; @Nonnull - MultiPageGui createMultiPageGui(@Nonnegative int size) throws IllegalArgumentException; + MultiPageGui createMultiPageGui(@Nonnull Component title, @Nonnegative int size, @Nonnull List fillItems) throws IllegalArgumentException; @Nonnull World getMainWorld(); diff --git a/src/main/java/minevalley/core/api/gui/FillItem.java b/src/main/java/minevalley/core/api/gui/FillItem.java new file mode 100644 index 00000000..3de7e90c --- /dev/null +++ b/src/main/java/minevalley/core/api/gui/FillItem.java @@ -0,0 +1,29 @@ +package minevalley.core.api.gui; + +import minevalley.core.api.Core; +import minevalley.core.api.users.OnlineUser; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public record FillItem(@Nonnull ItemStack itemStack, + @Nullable Consumer callback, + @Nullable BiConsumer advancedCallback) { + + public FillItem { + if (itemStack == null) throw new IllegalArgumentException("ItemStack cannot be null"); + } + + @SuppressWarnings("unused") + public void accept(final @Nonnull InventoryClickEvent event) { + if (!(event.getWhoClicked() instanceof Player player)) return; + final OnlineUser user = Core.getOnlineUser(player); + if (callback != null) callback.accept(user); + if (advancedCallback != null) advancedCallback.accept(user, event); + } +}