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