SmartInvs
  • Introduction
  • Introduction
    • SmartInvs
  • Guide
    • 1. Getting Started
    • 2. Content Provider
    • 3. Slot Iterators
    • 4. Paginations
    • 5. Inventory Openers
Powered by GitBook
On this page
  • SmartInvs
  • Features
  • Usage
  • Preview
  • Useful links

Was this helpful?

Introduction

NextSmartInvs

Last updated 5 years ago

Was this helpful?

SmartInvs

SmartInvs is a modern API for easily using inventories with Bukkit to make awesome GUIs. This book contains a guide on how to use this API to create your own amazing GUIs!

This API requires Java 8 to work.

Features

  • Inventories of any type (workbench, chest, furnace, ...)

  • Customizable size when possible (chest, ...)

  • Custom titles

  • Allows to prevent the player from closing its inventory

  • Custom listeners for the event related to the inventory

  • Iterator for inventory slots

  • Page system

  • Util methods to fill an inventory's row/column/borders/...

  • Actions when player clicks on an item

  • Update methods to edit the content of the inventory every tick

Usage

To use the SmartInvs API, either:

  • Put it in the plugins folder of your server, add it to your dependencies in your plugin.yml (e.g. depend: [SmartInvs]) and add it to the dependencies in your IDE.

  • Put it inside your plugin jar, initialize an InventoryManager in your plugin (don't forget to call the init() method), and add a .manager(invManager) to your SmartInventory Builders.

You can also use a build system:

Gradle

repositories {
    mavenCentral()
}

dependencies {
    compile 'fr.minuskube.inv:smart-invs:1.2.7'
}

Maven

<dependency>
  <groupId>fr.minuskube.inv</groupId>
  <artifactId>smart-invs</artifactId>
  <version>1.2.7</version>
</dependency>

Preview

Here is a simple preview of an inventory.

public class SimpleInventory implements InventoryProvider {

    public static final SmartInventory INVENTORY = SmartInventory.builder()
            .id("myInventory")
            .provider(new SimpleInventory())
            .size(3, 9)
            .title(ChatColor.BLUE + "My Awesome Inventory!")
            .build();

    private final Random random = new Random();

    @Override
    public void init(Player player, InventoryContents contents) {
        contents.fillBorders(ClickableItem.empty(new ItemStack(Material.STAINED_GLASS_PANE)));

        contents.set(1, 1, ClickableItem.of(new ItemStack(Material.CARROT_ITEM),
                e -> player.sendMessage(ChatColor.GOLD + "You clicked on a potato.")));

        contents.set(1, 7, ClickableItem.of(new ItemStack(Material.BARRIER),
                e -> player.closeInventory()));
    }

    @Override
    public void update(Player player, InventoryContents contents) {
        int state = contents.property("state", 0);
        contents.setProperty("state", state + 1);

        if(state % 5 != 0)
            return;

        short durability = (short) random.nextInt(15);

        ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE, 1, durability);
        contents.fillBorders(ClickableItem.empty(glass));
    }

}

And there is the result:

If we click on the carrot, we receive the message You clicked on a potato, and if we click on the barrier, the inventory is closed.

Useful links

You can download the latest version on the on Github.

The source code is available on ! If you have some issues with the API, please on Github.

Releases page
Github
open an issue