4. Inventário Simples - henrysaantos/inventory-api GitHub Wiki

public final class TestSimpleInventory extends SimpleInventory {

    public TestSimpleInventory() {
        super(
                "test.inventory.simple", // Identificador do inventário (deve ser único)
                "&8SimpleInventory", // Título padrão do inventário
                9 * 3 // Tamanho do inventário
        );

        // Método para configurar características do inventário (não é obrigatória a configuração)
        configuration(configuration -> {
            configuration.secondUpdate(1); // Definir o tempo de atualização do inventário (não configure isso caso não queira que ele atualize automaticamente)
        });
    }

    /**
     * Método utilizado para configurar o visualizador, podendo definir
     * unicamente o título do inventário e tamanho.
     * <p>
     * Não é obrigatória a implementação desde método, apenas caso queira uma configuração
     * exclusiva para cada visualizador.
     *
     * @param viewer visualizador do inventário
     */
    @Override
    protected void configureViewer(SimpleViewer viewer) {
        ViewerConfiguration configuration = viewer.getConfiguration();
        configuration.titleInventory("&8Seu nome: " + viewer.getName());
    }

    /**
     * Método utilizado para configurar os itens do inventário.
     *
     * @param viewer visualizador do inventário
     * @param editor editor do inventário
     */
    @Override
    protected void configureInventory(Viewer viewer, InventoryEditor editor) {
        Player viewerPlayer = viewer.getPlayer();

        // Item utilizado para conseguir definir callbacks para o item
        InventoryItem inventoryItem = InventoryItem.of(
                new ItemStack(viewerPlayer.isOp() ? Material.DIAMOND_BLOCK : Material.DIAMOND)
        ).callback(ClickType.RIGHT, event -> { // Callback chamado quando o jogador clicar com o botão direito no item
            Player player = event.getPlayer();
            player.sendMessage("§eVocê clicou com o botão direito!");
        }).defaultCallback(event -> { // Callback chamado quando o jogador interagir com qualquer botão com esse item
            Player player = event.getPlayer();
            player.sendMessage("§eVocê interagiu com o inventário!");
        }).updateCallback(itemStack -> { // Callback chamado quando o inventário é atualizado, tanto manualemente quanto automaticamente
            Random random = new Random();
            ItemMeta itemMeta = itemStack.getItemMeta();
            itemMeta.setDisplayName("§e" + random.nextInt(1000));
            itemStack.setItemMeta(itemMeta);
        });

        editor.setItem(13, inventoryItem);
    }

    /**
     * Método utilizado para definir ou atualizar itens durante a atualização do inventário.
     * Esse método é chamado automaticamente se o valor InventoryConfiguration#secondUpdate() for diferente de 0.
     *
     * @param viewer visualizador do inventário
     * @param editor editor do inventário
     */
    @Override
    protected void update(Viewer viewer, InventoryEditor editor) {
        Random random = new Random();
        editor.setItem(random.nextInt(9), InventoryItem.of(new ItemStack(Material.EMERALD_BLOCK)));
    }

}