
12
3
NextLib
NextLib is a modular library for Paper/Spigot plugins that covers basic development tasks: working with configs, GUIs, objects, and databases. All modules are focused on a declarative style and convenient integration into existing projects.
Content
- Features
- Installation
- Quick start
- Main modules
- GUI API and Conditions
- Working with configs
- Roadmap
- License
Features
- Dynamic database — describe entities through regular Java classes and annotations, and the library creates tables itself and provides a convenient Fluent API for CRUD operations.
- Connecting to the database via HikariCP is a ready pool of connections with configurable parameters.
- Flexible GUI — loading menus from YAML, conditions for display and built-in actions (
update,playsound,command,opengui, etc.). - Command API — a tree of commands with auto-completion.
- Item API — concise builders of items with support for PDC, titles, lore and heads.
- Color API — formatting HEX and
&codes without extra code. - Config Manager — declarative loading of YAML configs into Java objects.
Installation
Add the JitPack repository and dependency 1.0.5 to your build script.
Gradle (Kotlin DSL)
repositories {
mavenCentral()
maven("https://jitpack.io")
}
dependencies {
implementation("com.github.chi2l3s:next-lib:1.0.5")
}
Gradle (Groovy DSL)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.chi2l3s:next-lib:1.0.5'
}
Maven
<repositories>
<repository>
<id>jitpack</id>
<url>https://jitpack.io/</url>
</repository>
</repositories>
<dependency>
<groupId>com.github.chi2l3s</groupId>
<artifactId>next-lib</artifactId>
<version>1.0.5</version>
<scope>provided</scope>
</dependency>
Quick start
- Download the library via JitPack and add it as a dependency.
- Create an instance of
GUIManagerand load the menu from themenus/folder. - Describe the database entities with Java classes, annotate the primary key
@PrimaryKeyand register them in `DynamicDatabase'. - Use the provided APIs for commands, items, and configurations — all functionality is available from the namespace `io.github.chi2l3s.nextlib.api'.
public final class NextTrapsPlugin extends JavaPlugin {
private DynamicDatabase database;
private GuiManager guiManager;
@Override
public void onEnable() {
database = DatabaseManager.createDynamicDatabase(this, "jdbc:mysql://localhost:3306/nexttraps", config -> {
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10);
});
database.register(PlayerEntity.class);
guiManager = new GuiManager(this);
guiManager.loadFromFolder(new File(getDataFolder(), "menus"));
}
}
Main modules
Command API
- Structure commands through subcommands and permissions.
- Support for auto-completion and aliases.
- Is connected in one line in `OnEnable()'.
getCommand("nextlib").setExecutor(new RootCommand());
Item API
- Fluent builders for 'ItemStack' with customizing the name, description, flags and `PersistentDataContainer'.
- Support for head owner installation and massive meta changes.
ItemStack reward = new ItemBuilder(Material.DIAMOND)
.setName("&B Reward of the day")
.setLore(List.of("&7 Press to get"))
.addPersistentTag("reward", PersistentDataType.STRING, "daily")
.glow()
.build();
Color API
- A single formatting method that translates
&and HEX (&#RRGGBB) into color messages.
player.SendMessage(color.format("Welcome to ඪdbNextLib"));
Config Manager
- The BaseConfig base class automatically creates and updates YAML files.
- Data is loaded into Java fields or DTOs.
Dynamic database
- Define the entity using a familiar Java class.
- The
@PrimaryKeyannotation marks the primary key field. DynamicTableprovides the methodsfindFirst,findMany',create,updateanddelete'.
@AllArgsConstructor
@Getter
public class PlayerEntity {
@PrimaryKey
private final UUID playerId;
private final String nickname;
private final String trapSkinId;
}
DynamicTable<PlayerEntity> players = database.table(PlayerEntity.class);
String trapSkinId = players.findFirst()
.where("playerId", playerId)
.execute()
.map(PlayerEntity::getTrapSkinId)
.orElse("fallback");
For more information, see the separate manual docs/dynamic—database.md.
GUI API and terms
- The menus are described by YAML files in
plugins/<Your login >/menus. - The
slotfield takes a single value, andslotsis a list of arbitrary slots or ranges `A-B'. - You can register your own conditions (
Conditions#register) and use them to highlight objects or restrict interaction. - Built
in actions:close,command',console',message',opengui,update',playsound'.
id: traps
title: "&8 Trap Selection"
size: 54
items:
back:
material: ARROW
slot: 53
name: "&7node"
onLeftClick:
- "opengui main"
trap:
material: TRIPWIRE_HOOK
slots:
- 0-8
- 18
name: "&b%trap_name%"
lore:
- "&7 Cost: &e%price%"
enchanted_when:
- "selected"
onLeftClick:
- "update"
- "playsound ENTITY_ENDER_DRAGON_AMBIENT 0.7 1.2"
For a detailed guide and examples, see docs/gui—conditions.md.
Working with configs
- Inherit from BaseConfig to get automatic file creation and updating.
- Use 'loadValues()` to read data and associate it with objects in your domain.
public class TrapSkinsConfig extends BaseConfig {
@Override
protected void loadValues() {
ConfigurationSection skins = config.getConfigurationSection("skins");
// Convert YAML to your TrapSkin objects
}
}
Useful links
Roadmap
- Command API
- Item API
- Color API
- Config Manager
- GUI API with conditions and slot ranges
- Dynamic database with HikariCP
- Expandable GUI action registry
- Redis/Message Queue integration
- Utilities for working with events
License
MIT License © 2025 NextGenTech

