ObliviateInvs — Highly efficient modular GUI library
4.3.1Highly efficient modular inventory library. Powerful as you need and small as you need.
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
- Snake slot iteration algorithm for GUIs: Click to go gist
- Gradient and TextAnimation algorithms for GUIs: Click to go gist
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta