A modular Minecraft plugin framework for Paper 1.21+ that enables creation of custom abilities through Java API, JavaScript scripting, or YAML configuration.
- Multiple Creation Methods: Java API, JavaScript (Phase 2), or YAML configuration
- Modular Architecture: Clean separation between API, core, config, and plugin modules
- Rich Trigger System: Support for clicks, shift+clicks, entity interactions, combat, movement
- Flexible Conditions: Composable conditions (sneaking, health, position, targets)
- Per-Player Cooldowns: Thread-safe cooldown management
- Stateful Sessions: Support for continuous abilities (grappling hooks, channels, auras)
- Multi-Ability Items: Bind multiple abilities to different triggers on a single item
- Built-in Actions: 11+ config-driven actions (projectiles, effects, commands, etc.)
- Event-Based Triggers: Advanced path for custom event listening
abilityengine/
├── ability-engine-api/ # Public API
├── ability-engine-core/ # Core implementation
├── ability-engine-config/ # YAML ability loader
├── ability-engine-plugin/ # Paper plugin entrypoint
└── docs/ # Documentation
├── architecture.md # Architecture overview
└── abilities.md # YAML ability guide
- Java 21+
- Gradle 8.5+
# Clean and build all modules
./gradlew clean build
# Build only
./gradlew build
# Build and skip tests
./gradlew build -x testThe final plugin JAR will be located at:
ability-engine-plugin/build/libs/AbilityEngine-1.0.0-SNAPSHOT.jar
If Gradle is not installed:
Option 1: Using Chocolatey
choco install gradleOption 2: Manual Installation
- Download Gradle 8.5+ from https://gradle.org/releases/
- Extract to a folder (e.g.,
C:\Gradle) - Add
C:\Gradle\binto your PATH environment variable - Verify:
gradle --version
Option 3: Use Gradle Wrapper (Recommended)
Initialize the Gradle wrapper:
gradle wrapper --gradle-version 8.5Then use ./gradlew instead of gradle for all commands.
- Build the plugin (see above)
- Copy
AbilityEngine-1.0.0-SNAPSHOT.jarto your Paper server'splugins/folder - Start or reload your server
- Abilities directory will be created at
plugins/AbilityEngine/abilities/
- Create
plugins/AbilityEngine/abilities/fireball.yml:
abilities:
fireball:
display-name: "&cFireball"
triggers:
- RIGHT_CLICK
cooldown: 3s
actions:
- type: LAUNCH_PROJECTILE
projectile: FIREBALL
speed: 2.0
- type: SEND_MESSAGE
message: "&cFireball launched!"- Reload the plugin:
/ability reload - Give yourself the item:
/ability give <your_name> fireball - Right-click to use!
/ability give <player> <ability>- Give an ability item/ability reload- Reload ability configurations/ability list- List all registered abilities/ability info <ability>- Show ability details
abilityengine.command- Access to all commands (default: op)abilityengine.command.give- Give ability items (default: op)abilityengine.command.reload- Reload abilities (default: op)abilityengine.command.list- List abilities (default: op)abilityengine.command.info- View ability info (default: op)
- Architecture Guide - Technical architecture and design
- Ability YAML Guide - Complete YAML reference with examples
Public API module for external integration. Contains:
- Core interfaces (
Ability,AbilityRegistry,CooldownManager) - Data types (
AbilityContext,TriggerType,Condition) - Service interfaces (
AbilityItemService,AbilitySession)
Internal implementation:
- Registry and cooldown management
- Trigger dispatcher and condition evaluator
- Session manager with tick loop
- PDC-based item service
- Event trigger registry (advanced)
YAML-based ability system:
- Config loader with validation
- 11+ built-in action types
- Duration parsing
- Condition mapping
Paper plugin entrypoint:
- Plugin lifecycle management
- Command handlers
- Component wiring
- O(1) ability lookup via ConcurrentHashMap
- Minimal event overhead - only processes ability items
- Automatic cleanup - expired cooldowns and ended sessions
- Thread-safe - concurrent data structures throughout
- ✅ Core framework
- ✅ YAML configuration
- ✅ Built-in actions
- ✅ Multi-ability items
- ✅ Session system
- ⬜ GraalVM JavaScript scripting
- ⬜ Hot reload for scripts
- ⬜ External JAR module loading
- ⬜ AbilityProvider SPI
- ⬜ Full Bukkit event access for scripts
[Add your license here]
[Add contribution guidelines here]
For issues, questions, or feature requests, please open an issue.