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
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
Powerful as you need.
Small as you need.
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
Code (XML):
<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>
<-->
<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>
<-->
Code (Groovy):
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'
}
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'
}
Spoiler: Core
Core
Code (Java):
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 ) ;
}
}
public ExampleGui (Player player ) {
super (player, "example-gui", "Title", 6 ) ;
}
@Override
public void onOpen (InventoryOpenEvent event ) {
addItem ( 0, Material. STONE ) ;
}
}
Spoiler: Configurable GUI
Configurable GUI module
Code
Config
Code (Java):
@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" ) ;
} ) ;
}
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" ) ;
} ) ;
}
Code (YAML):
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'
- '*'
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'
- '*'
Spoiler: Pagination
Pagination module
Code (Java):
paginationManager.
registerSlotsBetween
(
10,
15
)
;
for (Material material : Material. values ( ) ) {
paginationManager. addItem ( new Icon (material ) ) ;
}
paginationManager. update ( ) ;
for (Material material : Material. values ( ) ) {
paginationManager. addItem ( new Icon (material ) ) ;
}
paginationManager. update ( ) ;
Spoiler: Advanced Slot
Advanced Slot module
Spoiler: Code
Code (Java):
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.
}
}
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
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.8, 1.16, 1.19
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
ObliviateInvs — Highly efficient modular GUI library is a free Minecraft Java mod. Compatible with Minecraft 1.8, 1.16, 1.19, 1.20 and newer. Downloaded 1,449 times (via Spigot). Download it and open it directly in the game.