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);
+ }
+}