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 the latest Minecraft release.
!!! 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.