An Inventory GUI library for Minecraft Paper servers.
Highlighted features:
- Supports most inventory types: Chest, Anvil, Brewer, Cartography, Crafter, Crafting, Furnace, Grindstone, Merchant, Smithing, Stonecutter
- Different Gui types: Normal, Paged, Tab, Scroll
- Gui-embeddable inventories with a powerful event system (e.g. only allow input for certain item types, customize maximum stack size per slot, etc.)
- First-class MiniMessage support
- Easy localization of UI items using the built-in ItemBuilder
Check out the InvUI Documentation to learn more.
If you have any questions, feel free to join the Discord or ask them in GitHub Discussions.
This fork of InvUI replaces the upstream's NMS-based menu implementation with PacketEvents so a single jar runs across supported Minecraft versions without per-version compilation.
Runtime requirements
- Paper 1.21.0+
- PacketEvents 2.12.0+
Upstream compatibility baseline
| Minecraft version | InvUI version |
|---|---|
26.2 |
2.2.x |
26.1.2 |
2.0.0 - 2.1.x |
1.14.0 - 1.21.11 |
1.49 |
This fork is published to GitHub Packages.
GitHub Packages requires authentication even for downloads, so consumers must
supply a personal access token with the read:packages scope.
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/AhmadNasser04/InvUI-PacketEvents</url>
</repository>Add matching credentials to your ~/.m2/settings.xml:
<servers>
<server>
<id>github</id>
<username>YOUR_GITHUB_USERNAME</username>
<password>YOUR_GITHUB_TOKEN</password>
</server>
</servers><dependency>
<groupId>xyz.xenondevs.invui</groupId>
<artifactId>invui</artifactId>
<version>VERSION</version>
</dependency>For Gradle (Kotlin DSL):
repositories {
maven("https://maven.pkg.github.com/AhmadNasser04/InvUI-PacketEvents") {
credentials {
username = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR")
password = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN")
}
}
}
dependencies {
implementation("xyz.xenondevs.invui:invui:VERSION")
}Check out the InvUI documentation for more information.
These examples are taken from the documentation linked above. To keep the code examples there short, button names are often omitted.











