package me.alexmc.blockcosmetics.inventories; import com.google.common.base.Enums; import fr.minuskube.inv.ClickableItem; import fr.minuskube.inv.SmartInventory; import fr.minuskube.inv.content.*; import me.alexmc.blockcosmetics.BlockCosmetics; import me.alexmc.blockcosmetics.enums.ConfigSettings; import me.alexmc.blockcosmetics.objects.CosmeticUser; import me.alexmc.nicecore.objects.PlaceHolder; import me.alexmc.nicecore.objects.builders.ItemBuilder; import me.alexmc.nicecore.utils.ColorUtils; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public class BlocksMenu implements InventoryProvider { private static final BlockCosmetics plugin = BlockCosmetics.getInstance(); private static SmartInventory BLOCKS_MENU = SmartInventory.builder() .provider(new BlocksMenu()) .id("blocks_menu") .title(ConfigSettings.BLOCKS_INVENTORY_TITLE.getFormattedString()) .size(3, 9) .build(); @Override public void init(Player player, InventoryContents contents) { Pagination pagination = contents.pagination(); CosmeticUser user = plugin.getUserHandler().getUser(player.getUniqueId()).get(); Material material = Enums.getIfPresent(Material.class, ConfigSettings.BLOCKS_INVENTORY_FILL.getString()).or(Material.GRAY_STAINED_GLASS_PANE); contents.fill(ClickableItem.empty(new ItemStack(material))); int size = user.getOwnedMaterials().size(); ClickableItem[] clickableItems = new ClickableItem[size]; for (int i = 0; i < size; i++) { clickableItems[i] = ClickableItem.empty(new ItemStack(user.getOwnedMaterials().get(i))); } pagination.setItems(clickableItems); pagination.setItemsPerPage(18); SlotIterator slotIterator = contents.newIterator(SlotIterator.Type.HORIZONTAL, new SlotPos(0, 0)); slotIterator.allowOverride(true); pagination.addToIterator(slotIterator); ItemStack previousPage = new ItemBuilder() .material(Material.ARROW) .displayName(ColorUtils.miniMessage(ConfigSettings.PREVIOUS_PAGE_NAME.getString())) .lore(ConfigSettings.PREVIOUS_PAGE_LORE.getList()) .build(); ItemStack nextPage = new ItemBuilder() .material(Material.ARROW) .displayName(ColorUtils.miniMessage(ConfigSettings.NEXT_PAGE_NAME.getString())) .lore(ConfigSettings.NEXT_PAGE_LORE.getList()) .build(); ItemStack page = new ItemBuilder() .material(Material.PAPER) .displayName(ColorUtils.miniMessage(ConfigSettings.PAGE_NAME.getString(new PlaceHolder("page", "0")))) .lore(ConfigSettings.PAGE_LORE.getList()) .build(); contents.set(2, 3, ClickableItem.of(previousPage, e -> BLOCKS_MENU.open(player, pagination.previous().getPage()))); contents.set(2, 5, ClickableItem.of(nextPage, e -> BLOCKS_MENU.open(player, pagination.next().getPage()))); contents.set(2, 4, ClickableItem.empty(page)); } @Override public void update(Player player, InventoryContents contents) { Pagination pagination = contents.pagination(); int state = contents.property("state", 0); contents.setProperty("state", state + 1); if (state % 5 != 0) { return; } ItemStack page = new ItemBuilder() .material(Material.PAPER) .displayName(ColorUtils.miniMessage(ConfigSettings.PAGE_NAME.getString(new PlaceHolder("page", pagination.getPage() + "")))) .lore(ConfigSettings.PAGE_LORE.getList()) .build(); contents.set(2, 4, ClickableItem.empty(page)); } public static void resetInventory() { BLOCKS_MENU = SmartInventory.builder() .provider(new BlocksMenu()) .id("blocks_menu") .title(ConfigSettings.BLOCKS_INVENTORY_TITLE.getFormattedString()) .size(3, 9) .build(); } public static SmartInventory getBlocksMenu() { return BLOCKS_MENU; } }