diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 8ff4fff..0248414 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -4,7 +4,7 @@
com.muhammaddaffa
MDLib
MDLib
- 2.0.0-beta7
+ 2.0.1
A library for plugin that was created for helping spigot plugin development
https://muhammaddaffa.com
@@ -128,7 +128,7 @@
org.spigotmc
spigot-api
- 1.21-R0.1-SNAPSHOT
+ 1.21.3-R0.1-SNAPSHOT
provided
diff --git a/pom.xml b/pom.xml
index e58e4c6..4ddbba7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.muhammaddaffa
MDLib
- 2.0.1
+ 2.0.2
MDLib
diff --git a/src/main/java/com/muhammaddaffa/mdlib/gui/pagination/Pagination.java b/src/main/java/com/muhammaddaffa/mdlib/gui/pagination/Pagination.java
new file mode 100644
index 0000000..d17e690
--- /dev/null
+++ b/src/main/java/com/muhammaddaffa/mdlib/gui/pagination/Pagination.java
@@ -0,0 +1,49 @@
+package com.muhammaddaffa.mdlib.gui.pagination;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Pagination {
+
+ private final Map> pageItems = new HashMap<>();
+
+ public int totalPage = 1;
+ public int currentPage = 1;
+
+ public Pagination(List> items, int maxItemsPerPage) {
+ if (items == null || maxItemsPerPage <= 0) {
+ throw new IllegalArgumentException("Invalid input list or maxItemsPerPage");
+ }
+
+ // If the items is empty
+ if (items.isEmpty()) {
+ pageItems.put(1, new ArrayList<>());
+ return;
+ }
+
+ int totalItems = items.size();
+ totalPage = (int) Math.ceil((double) totalItems / maxItemsPerPage);
+
+ for (int i = 0; i < totalPage; i++) {
+ int start = i * maxItemsPerPage;
+ int end = Math.min(start + maxItemsPerPage, totalItems);
+ List> pageContent = items.subList(start, end);
+ pageItems.put(i + 1, new ArrayList<>(pageContent));
+ }
+ }
+
+ public boolean nextPage() {
+ return this.pageItems.get(this.currentPage + 1) != null;
+ }
+
+ public boolean previousPage() {
+ return this.pageItems.get(this.currentPage - 1) != null;
+ }
+
+ public List> getItems() {
+ return this.pageItems.get(this.currentPage);
+ }
+
+}
diff --git a/src/main/java/com/muhammaddaffa/mdlib/utils/Common.java b/src/main/java/com/muhammaddaffa/mdlib/utils/Common.java
index 06c6985..e158599 100644
--- a/src/main/java/com/muhammaddaffa/mdlib/utils/Common.java
+++ b/src/main/java/com/muhammaddaffa/mdlib/utils/Common.java
@@ -5,6 +5,7 @@
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
+import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@@ -12,7 +13,9 @@
import org.jetbrains.annotations.Nullable;
import java.text.DecimalFormat;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -150,16 +153,33 @@ public static boolean isInt(String s) {
}
public static void addInventoryItem(Player player, ItemStack stack) {
- player.getInventory().addItem(stack).forEach((integer, item) -> {
- player.getWorld().dropItemNaturally(player.getLocation(), stack);
+ int amount = stack.getAmount();
+ Material material = stack.getType();
+ int maxStackSize = material.getMaxStackSize();
+
+ Map leftovers = new HashMap<>();
+
+ while (amount > 0) {
+ int stackAmount = Math.min(amount, maxStackSize);
+ ItemStack stackToAdd = new ItemStack(material, stackAmount);
+
+ Map left = player.getInventory().addItem(stackToAdd);
+ if (!left.isEmpty()) {
+ leftovers.putAll(left);
+ }
+
+ amount -= stackAmount;
+ }
+
+ // Drop any leftovers
+ leftovers.values().forEach(item -> {
+ player.getWorld().dropItemNaturally(player.getLocation(), item);
});
}
public static void addInventoryItem(Player player, List items) {
for (ItemStack stack : items) {
- player.getInventory().addItem(stack).forEach((integer, item) -> {
- player.getWorld().dropItemNaturally(player.getLocation(), stack);
- });
+ addInventoryItem(player, stack);
}
}