Sueta

ObliviateInvs — Highly efficient modular GUI library

4.3.1

Highly efficient modular inventory library. Powerful as you need and small as you need.

·Plugin

ObliviateInvs is stable and gets support still. Feel free to contact us about it via GitHub issues.
29 Aug 2026

1000+ downloads per month

IF YOU LIKED THE LIBRARY PLEASE GIVE A STAR TO THE GITHUB REPOSITORY

Introduction

ObliviateInvs offers efficient and fast GUI development. It is tested to handle even the most demanding GUI tasks.

Features

  • Create, listen, and manage GUIs in only one class.
  • Create advanced slots to make completely interactive slots. (see wiki)
  • Add pagination support to your GUIs easily.
  • Create automatic repeat tasks for GUI. The task will be stopped when the GUI is closed.
  • Fully, modular design.
  • Make configurable your GUIs easily.
  • Supports the adventure components.
  • Supports Folia.
  • Automatically caches configuration items. Doesn't deserialize over and over.
  • Don't work hard work smart. These methods will handle your boring works: fillColumn(), fillRow(), fillGui(), sendTitleUpdate(), sendSizeUpdate()
  • Allows players to click their own inventory while they are using a GUI.
  • Feel safe. obliviate-invs tested in live. It is stable. It is getting downloaded thousands of times every month. And It is older than you think.

Modules
Powerful as you need.
Small as you need.

Core
artifact id: configurablegui
The core module. Provides GUI classes.


Pagination
artifact id: pagination

Provides pagination support for GUIs.

ConfigurableGUI
artifact id: configurablegui

Provides Configurable GUI classes to serialize GUIs to human-readable configurations.

AdvancedSlot
artifact id: advancedslot
Provides advanced slots to GUIs. (remember, custom GUIs of anvils, enchantment tables, and brewing stands in Hypixel Skyblock)

Maven & Gradle

Maven

<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>

<dependency>
    <groupId>com.github.hamza-cskn.obliviate-invs</groupId>
    <artifactId>core</artifactId>
    <version>4.3.1</version>
</dependency>

<!-->
<dependency>
    <groupId>com.github.hamza-cskn.obliviate-invs</groupId>
    <artifactId>{MODULE}</artifactId>
    <version>4.3.1</version>
</dependency>
<-->

Gradle

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.hamza-cskn.obliviate-invs:core:4.3.0'
    //implementation 'com.github.hamza-cskn.obliviate-invs:{MODULE}:4.3.0'
}

The example codes below give the main idea. Visit the Wiki page to get actual help.

Core

Core

public class ExampleGui extends Gui {

    public ExampleGui(Player player) {
        super(player, "example-gui", "Title", 6);
    }

    @Override
    public void onOpen(InventoryOpenEvent event) {
        addItem(0, Material.STONE);
     }
}
Configurable GUI

Configurable GUI module

Code

@Override
    public void onOpen(InventoryOpenEvent event) {
                # puts all dysfunctional icons
        putDysfunctionalIcons(); 

                # puts a functional icon which is named "functional-test-icon"
        putIcon("functional-test-icon", e -> {
            player.sendMessage("You clicked");
        });
    }

Config

example-configurable-gui:
  title: 'Custom Title'
  row: 5
  icons:
    filler-item:
      material: BLACK_STAINED_GLASS_PANE
      display-name: '&a'
      slot: 0-8
    functional-test-icon:
      material: DIAMOND_BOOTS
      display-name: '&aGem'
      slot: 4
      enchantments:
        - 'DEPTH_STRIDER:1'
      item-flags:
        #- 'HIDE_ENCHANTS'
        - '*'

Pagination

Pagination module

paginationManager.registerSlotsBetween(10, 15);

for (Material material : Material.values()) {
    paginationManager.addItem(new Icon(material));
}
paginationManager.update();


Advanced Slot

Advanced Slot module

Code
public class TestGUI extends GUI {

    public TestGUI(Player player) {
        super(player, "test-gui", "Test Title", 6);
    }


    @Override
    public void onOpen(InventoryOpenEvent event) {
        fillGui(new ItemStack(Material.BLACK_STAINED_GLASS_PANE));

        // FIRST ADVANCED SLOT

        AdvancedSlot advancedSlot2 = addAdvancedIcon(12, new Icon(Material.BARRIER));

        advancedSlot2.onPut(e -> {
            enchantItem();
        });

        // SECOND ADVANCED SLOT

        AdvancedSlot advancedSlot1 = addAdvancedIcon(14, new Icon(Material.BARRIER));

        advancedSlot1.onPreClick((e, item) -> {
            if (!item.getType().equals(Material.LAPIS_LAZULI)) {
                player.sendMessage("You cannot put items here except lapis lazuli.");
                return true;
            }
            return false;
        }).onPut(e -> {
            enchantItem();
        });


    }

    /**
     * Purpose of this method,
     * remove one lapis from the 2. slot -if exist-
     * enchant item on 1. slot
     */
    private void enchantItem() {
        final Inventory inventory = getInventory();

        //get item on lapis lazuli slot
        ItemStack itemOnSlot14 = inventory.getItem(14);
        if (!itemOnSlot14.getType().equals(Material.LAPIS_LAZULI)) return;

        //remove 1 lapis lazuli
        itemOnSlot14.setAmount(itemOnSlot14.getAmount() - 1);
        getInventory().setItem(14, itemOnSlot14); // Modifies the item with Bukkit's code.

        //enchant item
        ItemStack itemOnSlot12 = inventory.getItem(12);
        itemOnSlot12.addEnchantment(Enchantment.DURABILITY, 3);

        getInventory().setItem(12, itemOnSlot12); // Modifies the item with Bukkit's code.

    }
}

Other useful codes for GUI development

Similar projects

Plugin →