NiveriaAPI is a lightweight helper library for Paper plugins that speeds up development with reusable menus, localization, cooldowns, MongoDB persistence, and utilities. Always maintained for 1.21.4-1.21.11 Minecraft releases.
!!! This plugin only supports Paper servers or forks !!!
- Component-based menu system
- Includes built-in components (Grid, Button, Icon, ProgressBar, Toggle, etc.), exhaustive list can be found here
- Easily customizable and extendable with your own components
- Supports pagination and dynamic content loading
- Examples can be found here
- Language system for easy localization
- Supports multiple languages
- Language files are stored in a simple YAML format for easy editing
- Can be based on the player locale or a defined one by you
- Features special tags to easily format messages (prefixes, colors)
- Easily manage cooldowns for players
- Set cooldowns for specific actions or commands
- Check if a player is on cooldown and get remaining time
- Automatically handle cooldown expiration
- Can be persistent across server restarts
- Simple database abstraction layer
- Only supports MongoDB
- Make queries using a simple and intuitive API
- Supports asynchronous operations for better performance
- Various utility classes and methods to simplify common tasks
- ItemBuilder, Pair, Task, NMSUtils, etc.
- All the utilities classes can be found here
- Download the latest release of NiveriaAPI from the releases page.
- Place the downloaded JAR file in your server's
pluginsdirectory. - Restart your server to load the plugin.
Maven
<repository>
<id>jitpack.io</id>
<url>https://www.jitpack.io</url>
</repository>
<dependency>
<groupId>com.github.PuppyTransGirl</groupId>
<artifactId>NiveriaAPI</artifactId>
<version>VERSION</version>
<scope>provided</scope>
</dependency>Gradle
repositories {
maven("https://www.jitpack.io")
}
dependencies {
compileOnly("com.github.PuppyTransGirl:NiveriaAPI:VERSION")
}Replace VERSION with the latest release version.
Bukkit plugin
depend: [NiveriaAPI]Paper plugin
dependencies:
server:
NiveriaAPI:
load: BEFORE
required: trueMinimal snippets to get you started with NiveriaAPI features.
Simple menu with button
public class MenuTest extends Menu {
public MenuTest(@NotNull Player player) {
super(player);
}
@Override
protected @NotNull Component title() {
return Component.text("My menu :3");
}
@Override
protected @NotNull MenuComponent root(@NotNull MenuContext context) {
// Create a button that sends a message when clicked
Button button = Button.create()
.item(ItemBuilder.of(Material.DIAMOND_BLOCK)
.name(Component.text("Click me !", NamedTextColor.AQUA))
.build()
)
.onClick(event -> {
event.player().sendMessage(Component.text("Button clicked !", NamedTextColor.GREEN));
})
.build();
// Create a grid layout and add the button to it
return Grid.create()
.size(9, 3)
.add(13, button)
.build();
}
}Language system example
// Load language files (usually done in your plugin's onEnable method)
Lang.load(yourPluginInstance);
// Get a localized message as a Component or as a String
Component message = Lang.get("welcome_message");
String stringMessage = Lang.getString("welcome_message");
// Send a localized message to a player
Player player = ...; // Get the player instance
Lang.send(player, "welcome_message");Cooldown system example
CooldownManager cooldownManager = NiveriaAPI.instance().cooldownManager();
// Create cooldown keys
Key fireballKey = Key.key("plugin_name", "ability_fireball");
Key teleportKey = Key.key("plugin_name", "ability_teleport");
Key sprintKey = Key.key("plugin_name", "ability_sprint");
// Register a persistent cooldown (default behavior)
cooldownManager.setCooldown(player, fireballKey, Duration.ofSeconds(30));
// Register another persistent cooldown (explicitly persistent)
cooldownManager.setCooldown(player, teleportKey, Duration.ofHours(1), true);
// Register a non-persistent cooldown (in-memory only)
cooldownManager.setCooldown(player, sprintKey, Duration.ofSeconds(5), false);
// Check if player is in cooldown
if(cooldownManager.inCooldown(player, fireballKey)){
long remainingSeconds = cooldownManager.remainingTime(player, fireballKey).getSeconds();
player.sendMessage(Component.text("You must wait " + remainingSeconds + " seconds to use this ability again!", NamedTextColor.RED));
return;
}Contributions are welcome ! Please feel free to submit a pull request or open an issue for any bugs or feature requests :3
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
- Thanks to Nirbose for helping me to make the MockBukkit unit tests work with NiveriaAPI.