untitled paste

unlisted ⁨1⁩ ⁨file⁩ 2022-03-17 22:09:05 UTC

pastefile1

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