The Module System
XDiscordUltimate is built from 19 independent modules, each living underfeatures.* in plugins/XDiscordUltimate/config.yml. Every module is toggled with enabled: true|false, declares its dependencies, and owns its own config section, Discord slash commands, and lifecycle.
Architecture at a Glance
Module— abstract base class. Each module implementsgetName,getDescription,enable,disable,onDiscordReady,getSlashCommands,handleSlashCommand,handleTextCommand,reload,reloadConfig, andisEnabled.@DependsOn({"module-key"})— declares a module’s dependencies. The manager verifies each dependency is enabled before enabling the module.ModuleManager— registers modules, checks dependencies, enables them, and exposes lookups to the rest of the plugin.
ModuleManager:
| Method | Returns |
|---|---|
getModule(key) | Module by string key |
getModule(Class) | Module by class |
getModules() | All registered modules |
isModuleActive(key) | Whether a module is enabled and loaded |
reloadModules() | Reload module state |
reloadModuleConfigs() | Re-read each module’s features.<key> section |
features.<key> section and may register Discord slash commands and handle text commands.
Module Lifecycle
Dependency check
For each module,
@DependsOn is resolved. If a required module is disabled or missing, this module is skipped.Discord ready
onDiscordReady() fires when JDA connects — modules register slash commands and start Discord-facing work here.All 19 Modules
| Key | What it does |
|---|---|
chat-bridge | Two-way chat between in-game and a Discord channel |
server-logging | Logs server events to Discord |
verification | Links Discord accounts to Minecraft accounts |
server-control | Runs restart/stop/kick/tps/list from Discord |
admin-alerts | DMs/mentions admins on TPS or RAM threshold breaches |
tickets | Support ticket system in Discord |
moderation | Discord-side moderation tooling |
bot-console | Run server commands from Discord |
announcements | In-game titles plus optional Discord messages |
player-stats | Tracks joins, messages, deaths, playtime, first/last seen |
server-status | Reports server status to Discord |
booster-perks | Grants a group + rewards to Discord server boosters |
welcome-dm | DMs new or newly-verified players |
leaderboard | Auto-updating leaderboard embed |
activity-roles | Awards Discord roles by playtime |
voice-channels | Player-count status channel + dynamic voice channels |
economy-bridge | Links Discord to in-game balances via Vault |
server-ip | /ip command posting the server address |
whitelist | Discord-driven whitelist requests and approvals |
Operator Tips
Enable verbose per-module logging with
general.debug: true. This surfaces dependency resolution, enable/disable events, and command registration — invaluable when a module silently fails to load.Disabling a module also disables its dependents. If another module declares
@DependsOn({"verification"}) and you turn verification off, the dependent will not enable. Check /xdiscord modules after toggling to confirm the cascade.Next Steps
Developer Module API
Build your own module on the
Module base class.Configuration
Full reference for every
features.<key> section.
