Skip to content

DerGamer009/CalyxServerSystem

Repository files navigation

CalyxAPI

Comprehensive Paper 1.21+ plugin for CalyxMC — server administration, player features, and mini-games in one modular system.

Gradle project folder is still CalyxServerSystem; the plugin on the server is CalyxAPI (CalyxAPI-1.0.0.jar).

Requirements

  • Server: Paper 1.21.4+ (or compatible fork)
  • Java: 21 (required for Paper 1.21)
  • Optional: Vault, PlaceholderAPI, LuckPerms

Installation

  1. Build the plugin: ./gradlew build
  2. Copy build/libs/CalyxAPI-1.0.0.jar to your server's plugins/ folder (Paper plugin name: CalyxAPI)
  3. Start the server once to generate config.yml and message files
  4. Edit configuration and restart or run /calyx reload

Configuration

File Purpose
config.yml Main settings, module toggles, database
messages_de.yml German MiniMessage strings
messages_en.yml English MiniMessage strings

Set default-language in config.yml to de or en.

Database

  • SQLite (default): file path under database.sqlite.file
  • MySQL/MariaDB: set database.type to mysql and configure database.mysql.*

Commands

Command Description Permission
/calyx Admin help calyx.admin
/calyx reload Reload config, DB pool, modules calyx.admin.reload
/calyx version Show plugin version calyx.admin

Alias: /cx

Permissions

Permission Description
calyx.admin Base admin command access
calyx.admin.reload Reload command

Additional granular permissions will be added per module.

Modules (PlaceholderAPI-style)

Modules work like PlaceholderAPI expansions: register at runtime, unique id, enable/disable lifecycle.

Type How it loads
Built-in config.ymlmodules: admin: true (only ids with a Java class in CalyxServerSystem)
External addon Your plugin calls new MyModule(this).register() in onEnable()
Built-in id Package Commands (skeleton)
admin modules.admin /calyx admin, /ban, /kick
economy modules.economy /calyx economy, /balance, /pay, /baltop
chat modules.chat /calyx chat, /msg, /r
homes modules.homes /calyx homes, /home, /sethome, /warp, /tpa
games modules.games /calyx games, /game, /leave
cosmetics modules.cosmetics /calyx cosmetics, /cosmetics

All six are included in the JAR under de.calyx.serversystem.modules.*. Toggle each in config.yml; per-module settings in plugins/CalyxAPI/modules/<id>.yml.

External addon plugin

1. Depend on CalyxAPI (paper-plugin.yml):

dependencies:
  server:
    CalyxAPI:
      load: AFTER
      required: true
      join-classpath: true

2. Gradle: compileOnly("de.calyx:CalyxServerSystem:1.0.0") or copy API interfaces into your project.

3. Module class:

public final class ShopModule extends AbstractCalyxModule {
    public ShopModule(JavaPlugin owner) { super(owner); }

    @Override public String getId() { return "shop"; }

    @Override public void enable() {
        // listeners, commands, ...
        markEnabled();
    }

    @Override public void disable() { markDisabled(); }

    @Override public void reload() { }
}

4. Register in onEnable():

if (getServer().getPluginManager().getPlugin("CalyxAPI") != null) {
    new ShopModule(this).register();
}

Or: CalyxAPI.registerModule(new ShopModule(this));

5. Unregister in onDisable(): new ShopModule(this).unregister(); (same id)

API

CalyxAPI.registerModule(module);
CalyxAPI.unregisterModule("shop");
CalyxAPI.getModule("admin");
CalyxAPI.getModules();

Events: CalyxModuleRegisterEvent, CalyxModuleUnregisterEvent

Override persist()true on external modules to keep them registered across /calyx reload (built-ins always follow config.yml).

Commands (Brigadier)

Each module implements registerCommands(ModuleCommandRegistrar):

Method Result
registrar.register(node, "help") Root command, e.g. /pay, /home
registrar.registerCalyxBranch(node) Under /calyx, e.g. /calyx admin

Built-in example: AdminModule adds /calyx admin.

@Override
public void registerCommands(ModuleCommandRegistrar registrar) {
    registrar.register(
            Commands.literal("pay").executes(ctx -> { ... }).build(),
            "Pay another player",
            List.of()
    );
    registrar.registerCalyxBranch(
            Commands.literal("shop").executes(ctx -> { ... }).build()
    );
}

Commands are registered via Paper LifecycleEvents.COMMANDS. Built-in modules load before that pass; external modules get an extra lifecycle registration when register() succeeds.

Development

./gradlew build      # Output: build/libs/CalyxAPI-1.0.0.jar (server plugin)

./gradlew publish    # Maven: de.calyx:CalyxAPI (API only, for addon compileOnly)

HikariCP and SQLite JDBC are loaded at runtime via CalyxPluginLoader (see paper-plugin.yml).

Publish to Reposilite

Maven repository: repo.dergamer09.at

  1. Copy gradle.properties.example or set in gradle.properties / ~/.gradle/gradle.properties:
    • reposlite.username
    • reposlite.passwort
  2. Adjust reposilite.url if your repository path differs (default: https://repo.dergamer09.at/releases)
  3. Publish:
./gradlew publish

Coordinates (API only): de.calyx:CalyxAPI:1.0.0 (jar + sources)

The full plugin JAR is not published — build it locally with ./gradlew jar.

Use in another plugin (Gradle)

repositories {
    maven {
        url = uri("https://repo.dergamer09.at/releases")
        credentials {
            username = findProperty("reposlite.username") as String? ?: ""
            password = findProperty("reposlite.passwort") as String? ?: ""
        }
    }
}

dependencies {
    compileOnly("de.calyx:CalyxAPI:1.0.0")
}

Do not commit real credentials; prefer ~/.gradle/gradle.properties for secrets.

Project layout

api/src/main/java/          # Published API (Reposilite)
de/calyx/serversystem/api/

src/main/java/de/calyx/serversystem/
├── CalyxAPI.java          # Main plugin class (JavaPlugin)
├── bootstrap/
├── core/
├── commands/
└── modules/            # Built-in standard modules (in plugin JAR)
    ├── AbstractBuiltinModule.java
    ├── BuiltinModules.java
    ├── admin/
    ├── economy/
    ├── chat/
    ├── homes/
    ├── games/
    └── cosmetics/

src/main/resources/modules/   # Default configs copied on first run

API for other plugins

CalyxAPI.registerModule(new MyModule(this));
CalyxAPI.getModule("shop");

Published artifact: de.calyx:CalyxAPI (api/ subproject, package de.calyx.serversystem.api.*).

License

Proprietary — CalyxMC. All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages