Aurora Commands v2.0.0
Enterprise Command Framework for Spigot/Bukkit
Java 8+ • Minecraft 1.8-1.21.1 • 18 Advanced Features
🎯 What is Aurora Commands?
The most advanced command API for Minecraft Spigot/Paper servers, featuring async execution, advanced validation, auto-generated help, NLP support, transaction rollbacks, and comprehensive permission controls. Built for enterprise-scale servers with 18 cutting-edge features.
Why Choose Aurora Commands?
Fluent Builder API
Intuitive, chainable command construction that feels natural
22+ Argument Types
String, Player, Location, World, Time, Color, and more
Async Execution
Thread-safe async command execution with callbacks
Advanced Permissions
ANY/ALL groups, dynamic lambda checks
Transaction System
Auto-rollback on errors with ACID-like guarantees
Natural Language
Use conversational language in chat
Quick Start
Get up and running in minutes with Aurora Commands.
Step 1: Initialize CommandManager
public class MyPlugin extends JavaPlugin {
private CommandManager commandManager;
@Override
public void onEnable() {
commandManager = new CommandManager(this);
registerCommands();
}
@Override
public void onDisable() {
commandManager.shutdown();
}
}
Step 2: Create Your First Command
private void registerCommands() {
new AuroraCommand("heal", commandManager)
.addPermission("myplugin.heal")
.requirePlayer()
.addArgument("target", new OnlinePlayerArgumentType())
.addExecution(Player.class, (sender, ctx) -> {
Player target = ctx.getArgument("target");
target.setHealth(20.0);
sender.sendMessage("§aHealed " + target.getName());
})
.register();
}
Installation
Maven
<dependency>
<groupId>dev.aurora</groupId>
<artifactId>aurora-commands</artifactId>
<version>2.0.0</version>
</dependency>
Gradle
dependencies {
implementation 'dev.aurora:aurora-commands:2.0.0'
}
Requirements
- Java: 8 or higher
- Minecraft: Spigot/Paper 1.8.8 - 1.21.1
- Dependencies: None (standalone)
Features Overview
Aurora Commands includes 18 enterprise-grade features (90% complete, 18/20 features implemented).
Phase 1: Foundation Features (5/5) ✅
Command Flags & Options
Parse command-line flags: -s, --silent, --amount=64
Usage: /give Player123 DIAMOND --amount 64 --silent
Confirmation System
Require confirmation for destructive operations with customizable timeout
/deleteworld → Shows warning → /deleteworld confirm
Smart Tab Completion
Fuzzy matching with Levenshtein distance algorithm for intelligent suggestions
Command Middleware
Hook into execution with before/after/error handlers. Priority-based chains.
Smart Suggestions
"Did you mean?" for typos using Levenshtein algorithm
/teeport → "Did you mean: /teleport?"
Phase 2: Competitive Edge (4/4) 🔶
Rate Limiting
Per-player, per-IP, and global limits with sliding window algorithm
Smart Pagination
Clickable JSON navigation for long output lists
Command Templates
Reusable configurations: "admin", "player", "dangerous"
History & Undo
Track last 50 commands per player. /undo to revert changes
Phase 3: Advanced Features (5/5) ✅
Metrics & Analytics
Track executions, success rates, avg/min/max time. Built-in /commandstats
YAML Command Definitions
Load commands from config files with 8 action types
Auto-Generated GUIs
Convert any command to inventory menu: /command gui
Command Pipelines
Chain commands with | operator for sequential execution
/listin world | healall
Conditional Execution
Time-based, world-based, weather-based conditions with fluent builder
Phase 4: Innovative Features (4/4) ✅
Natural Language Processing
Use conversational language in chat with 60+ synonyms
Chat: "aurora give me 64 diamonds" → Executes /give
Scripting Integration
Execute JavaScript in commands with Nashorn/GraalVM support
A/B Testing Framework
Test command variants with weighted assignment and metrics tracking
Transaction System
ACID-like transactions with auto-rollback on errors
Argument Types
Aurora Commands provides 22+ built-in argument types for type-safe command parsing.
Players
| Type | Description | Example |
|---|---|---|
OnlinePlayerArgumentType |
Online players only | "Notch" |
OfflinePlayerArgumentType |
Any player (online or offline) | "Notch" |
AdminPlayerArgumentType |
Online players excluding sender | "Player123" |
Strings
| Type | Description | Example |
|---|---|---|
StringArgumentType |
Single word | "hello" |
GreedyStringArgumentType |
Rest of input (all remaining words) | "hello world" |
Numbers
| Type | Description | Example |
|---|---|---|
IntegerArgumentType |
Whole number | 42 |
FloatArgumentType |
Floating point number | 3.14 |
DoubleArgumentType |
Double precision number | 3.14159 |
BooleanArgumentType |
True or false value | true, false |
RangedIntegerArgumentType |
Integer with min/max bounds | 1-64 |
RangedDoubleArgumentType |
Double with min/max bounds | 0.0-1.0 |
Game Objects
| Type | Description | Example |
|---|---|---|
LocationArgumentType |
X Y Z coordinates | "100,64,200" |
WorldArgumentType |
Bukkit world name | "world_nether" |
EntityArgumentType |
Entity type | "ZOMBIE" |
Items
| Type | Description | Example |
|---|---|---|
ItemStackArgumentType |
Material/item type | "DIAMOND_SWORD" |
ItemDataArgumentType |
Item with data value | "WOOL:14" |
Effects
| Type | Description | Example |
|---|---|---|
EnchantmentArgumentType |
Enchantment type | "SHARPNESS" |
PotionEffectTypeArgumentType |
Potion effect | "SPEED" |
SoundArgumentType |
Sound effect (1.9+) | "ENTITY_ENDERMAN_TELEPORT" |
Utility
| Type | Description | Example |
|---|---|---|
ColorArgumentType |
Hex or RGB color value | "#FF5733" |
TimeArgumentType |
Duration parser | "5m", "2h30m", "7d" |
EnumArgumentType<T> |
Any Java enum | GameMode.CREATIVE |
MultiValueArgumentType<T> |
Comma-separated list | "player1,player2,player3" |
📚 Total: 22 Argument Types
All argument types include automatic tab completion, validation, and error messages. Create custom types by implementing the ArgumentType<T> interface!
Permissions
Advanced permission system with multiple strategies.
Single Permission
.addPermission("myplugin.admin")
ANY Permission (OR Logic)
User needs at least one of these permissions:
.requiresAnyPermission("staff.moderator", "staff.admin", "staff.owner")
ALL Permissions (AND Logic)
User needs every permission:
.requiresAllPermissions("admin.commands", "admin.override", "admin.confirm")
Dynamic Permission (Lambda)
Custom permission logic:
.addDynamicPermission(sender -> {
return sender.getName().equals("ServerOwner") || sender.isOp();
})
Cooldowns
Built-in cooldown system with automatic cleanup and memory leak prevention.
new AuroraCommand("daily", commandManager)
.addCooldown(86400) // 24 hours in seconds
.withErrorMessage("cooldown", "§eWait {seconds} seconds!")
.addExecution((sender, ctx) -> {
// Give daily reward
})
.register();
🛡️ Memory Safe
CooldownManager automatically cleans up expired cooldowns. Thread-safe with ConcurrentHashMap.
Middleware & Interceptors
Middleware allows you to intercept and modify command execution at different stages. Think of it as a "wrapper" around your commands that can run code before, after, or when errors occur.
🔧 What is Middleware?
Middleware functions like a filter or interceptor that wraps around command execution. You can use it to:
- Log commands - Track who runs what and when
- Validate permissions - Add custom security checks
- Measure performance - Track execution time and metrics
- Handle errors - Gracefully catch and respond to failures
- Modify context - Add or transform data before execution
Creating Custom Middleware
.addMiddleware(new CommandMiddleware() {
public boolean before(CommandSender s, CommandContext ctx) {
log("Command starting: " + ctx.getCommand());
return true; // Continue execution
}
public void after(CommandSender s, CommandContext ctx, boolean success) {
log("Command " + (success ? "succeeded" : "failed"));
}
public void onError(CommandSender s, CommandContext ctx, Exception e) {
s.sendMessage("§cCommand failed: " + e.getMessage());
}
})
Built-in Middleware
- LoggingMiddleware - Automatic command logging
- ValidationMiddleware - Argument validation
- MetricsMiddleware - Performance tracking
Command Pipelines
Chain commands together with the | operator.
new AuroraCommand("listin", commandManager)
.addArgument("world", new WorldArgumentType())
.enablePipeline(ctx -> {
World world = ctx.getArgument("world");
return new ArrayList<>(world.getPlayers());
})
.register();
new AuroraCommand("healall", commandManager)
.addExecution((sender, ctx) -> {
List<Player> players = ctx.getPipelineData();
for (Player p : players) {
p.setHealth(20.0);
}
})
.register();
Usage: /listin world | healall
Lists all players in the world, then passes them to healall command.
Natural Language Processing
Let players use conversational language instead of commands.
new AuroraCommand("give", commandManager)
.addNLPPattern("give me {amount} {item}")
.addNLPPattern("i want {amount} {item}")
.addArgument("amount", new IntegerArgumentType())
.addArgument("item", new ItemStackArgumentType())
.addExecution((sender, ctx) -> {
// Give items
})
.register();
Usage: Player types in chat: aurora give me 64 diamonds
Features 60+ item synonyms: "diamonds" → DIAMOND, "wood" → OAK_LOG, etc.
Transaction System
ACID-like transactions with automatic rollback on errors.
new AuroraCommand("transfer", commandManager)
.withTransaction()
.addArgument("from", new OnlinePlayerArgumentType())
.addArgument("to", new OnlinePlayerArgumentType())
.addArgument("amount", new DoubleArgumentType())
.addExecution((sender, ctx) -> {
Player from = ctx.getArgument("from");
Player to = ctx.getArgument("to");
double amount = ctx.getArgument("amount");
// Record reversible actions
transactionManager.recordAction(new SimpleReversible(
() -> withdraw(from, amount),
() -> deposit(from, amount)
));
transactionManager.recordAction(new SimpleReversible(
() -> deposit(to, amount),
() -> withdraw(to, amount)
));
// If any error occurs, all actions are automatically rolled back
})
.register();
If any exception occurs during execution, all recorded actions are reversed in LIFO order.
Basic Examples
Simple Command
new AuroraCommand("heal", commandManager)
.requirePlayer()
.addExecution(Player.class, (sender, ctx) -> {
sender.setHealth(20.0);
sender.sendMessage("§aYou have been healed!");
})
.register();
Command with Arguments
new AuroraCommand("teleport", commandManager)
.requirePlayer()
.addPermission("server.tp")
.addArgument("target", new OnlinePlayerArgumentType())
.addExecution(Player.class, (sender, ctx) -> {
Player target = ctx.getArgument("target");
sender.teleport(target);
sender.sendMessage("§aTeleported to " + target.getName());
})
.register();
Command with Subcommands
AuroraCommand adminCmd = new AuroraCommand("admin", commandManager)
.addPermission("admin.base");
adminCmd.addSubCommand(
new AuroraCommand("reload", commandManager)
.addExecution((sender, ctx) -> {
// Reload logic
sender.sendMessage("§aReloaded!");
})
);
adminCmd.addSubCommand(
new AuroraCommand("info", commandManager)
.addExecution((sender, ctx) -> {
// Info logic
})
);
adminCmd.register();
Advanced Examples
Optional Arguments with Defaults
new AuroraCommand("give", commandManager)
.addArgument("player", new OnlinePlayerArgumentType())
.addArgument("item", new ItemStackArgumentType())
.addArgument(ArgumentBuilder.create("amount", new IntegerArgumentType())
.withDefault(1)
.withValidator(v -> v > 0 && v <= 64, "Amount must be 1-64")
.build())
.addExecution((sender, ctx) -> {
Player player = ctx.getArgument("player");
ItemStack item = ctx.getArgument("item");
int amount = ctx.getArgument("amount");
item.setAmount(amount);
player.getInventory().addItem(item);
})
.register();
Async Execution
new AuroraCommand("stats", commandManager)
.requirePlayer()
.addArgument("player", new OfflinePlayerArgumentType())
.executeAsync(true)
.addExecution((sender, ctx) -> {
OfflinePlayer target = ctx.getArgument("player");
// Database query runs async
PlayerStats stats = database.getPlayerStats(target.getUniqueId());
// Display on main thread
Bukkit.getScheduler().runTask(plugin, () -> {
sender.sendMessage("§6Stats for " + target.getName());
sender.sendMessage("§eKills: §f" + stats.getKills());
});
})
.register();
Confirmation + Cooldown
new AuroraCommand("deleteworld", commandManager)
.requireOp()
.setCooldown(300000) // 5 minutes
.requireConfirmation(60, "§c⚠ WARNING: This will DELETE the world!")
.addArgument("world", new WorldArgumentType())
.addExecution((sender, ctx) -> {
World world = ctx.getArgument("world");
// Delete world logic...
})
.register();
API Reference
Quick reference for the most commonly used APIs.
AuroraCommand Methods
| Method | Description |
|---|---|
.setDescription(String) |
Set command description |
.addAlias(String) |
Add command alias |
.addPermission(String) |
Add required permission |
.requirePlayer() |
Require player sender |
.requireOp() |
Require OP permission |
.addArgument(String, ArgumentType) |
Add command argument |
.addExecution(BiConsumer) |
Set execution handler |
.addSubCommand(AuroraCommand) |
Add subcommand |
.setCooldown(long) |
Set cooldown in milliseconds |
.register() |
Register the command |
Built-in Commands
/commandstats [command]- View execution statistics (Permission: aurora.commandstats)/undo [index]- Undo recent commands (Permission: aurora.undo)/history- View command history (Permission: aurora.history)
Migration Guide
Migrating from other command frameworks is easy!
From Bukkit CommandExecutor
Before (Bukkit)
public class TpCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender,
Command cmd, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Players only!");
return true;
}
if (!sender.hasPermission("server.tp")) {
sender.sendMessage("No permission!");
return true;
}
if (args.length < 1) {
return false;
}
Player player = (Player) sender;
Player target = Bukkit.getPlayer(args[0]);
if (target == null) {
sender.sendMessage("Player not found!");
return true;
}
player.teleport(target);
return true;
}
}
After (Aurora) - 70% Less Code!
new AuroraCommand("tp", manager)
.setPermission("server.tp")
.requirePlayer()
.addArgument("target", new OnlinePlayerArgumentType())
.addExecution((sender, ctx) -> {
Player player = (Player) sender;
Player target = ctx.getArgument("target");
player.teleport(target);
})
.register();
✅ Migration Benefits
- 70% less code
- Automatic permission checking
- Type-safe arguments (no manual parsing)
- Automatic error messages
- Tab completion included
- 100% backward compatible
Migration Timeframes
| Plugin Size | Estimated Time |
|---|---|
| Small (1-5 commands) | 30 minutes - 1 hour |
| Medium (5-20 commands) | 2-4 hours |
| Large (20-50 commands) | 4-8 hours |
| Enterprise (50+ commands) | 1-2 days |
Support & Resources
💬 Community
Get help from the community
- GitHub Discussions
- Discord Server
- Spigot Forums
🐛 Bug Reports
Found a bug? Let us know!
- GitHub Issues
- Include version info
- Provide error logs
⭐ Contribute
Help improve Aurora Commands
- Submit Pull Requests
- Report Issues
- Improve Documentation
🎯 Perfect For
- ✅ Admin plugins (powerful permissions, confirmations)
- ✅ Economy plugins (transactions, rate limiting)
- ✅ Minigame plugins (conditions, A/B testing)
- ✅ Utility plugins (NLP, GUIs, pipelines)
- ✅ RPG plugins (scripting, complex arguments)
- ✅ Large servers (metrics, performance, scalability)
Performance & Security
🔒 Security Features
- Rate Limiting - Prevent command spam
- Permission Groups - ANY/ALL/Dynamic
- Confirmation System - For destructive operations
- Validation Framework - ArgumentBuilder validators
- Transaction Rollback - Auto-rollback on errors
- Sandboxed Scripting - Limited script access