Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for cavarest

The elemental dragon grants you magical powers...

Report ElementalDragon?

โšก Elemental Dragon Plugin

Dragon Egg Lightning Banner Java Version Build

Transform your server with elemental powers from ancient dragon fragments!

Download Latest Release GitHub Stars GitHub Forks

๐ŸŒŸ Quick Start (5 Minutes)

Step 1: Install Plugin

# Download the latest JAR from releases
# Place in your Paper server's plugins directory
cp ElementalDragon-1.1.0.jar /path/to/your/paper-server/plugins/

# Restart your Paper 1.21.8+ server
java -Xms2G -Xmx2G -jar paper-1.21.8-latest.jar nogui

Step 2: Use Lightning Ability

# Give yourself a Dragon Egg
/give @p minecraft:dragon_egg

# Move to offhand (press F key)

# Strike with lightning!
/lightning 1

# Watch the magic happen! โšก

Step 3: Get Your First Fragment

# Operators can give ingredients to players to craft fragments
/ed give <player> ingredients fire

# Operators can give fragments to players
/ed give <player> equipment fire

# Or show the recipe to craft them (requires Heavy Core)
/craft heavy_core
/craft fire

Step 4: Use Fragment Abilities

# Once you have a fragment, you can equip it by:
# a) hold on main hand and "right-click" to equip
# b) or use command:
/fire equip

# Use abilities
/fire 1    # Dragon's Wrath (fireball attack)
/fire 2    # Infernal Dominion (fire ring)

# Check status
/fire status

# Get help
/fire help

๐Ÿ“– Command Reference

๐ŸŽฎ Player Commands

Players can use these commands to manage and activate their fragments.

Fragment Commands
# Burning Fragment (Fire Element)
/fire equip         # Equip Burning Fragment
/fire 1            # Dragon's Wrath (fireball attack, 40s cooldown)
/fire 2            # Infernal Dominion (area fire, 60s cooldown)
/fire status       # Show fragment status and cooldowns
/fire help         # Show available commands

# Agility Fragment (Wind Element)
/agile equip       # Equip Agility Fragment
/agile 1           # Draconic Surge (speed boost, 30s cooldown)
/agile 2           # Wing Burst (levitation jump, 45s cooldown)
/agile status      # Show fragment status and cooldowns
/agile help        # Show available commands

# Immortal Fragment (Earth Element)
/immortal equip    # Equip Immortal Fragment
/immortal 1        # Draconic Reflex (damage reduction, 90s cooldown)
/immortal 2        # Essence Rebirth (death protection, 5min cooldown)
/immortal status   # Show fragment status and cooldowns
/immortal help     # Show available commands

# Corrupted Core (Void Element)
/corrupt equip     # Equip Corrupted Core
/corrupt 1         # Dread Gaze (blindness & slow, 60s cooldown)
/corrupt 2         # Life Devourer (health steal, 90s cooldown)
/corrupt status    # Show fragment status and cooldowns
/corrupt help      # Show available commands
Lightning Command (Legacy)
/lightning 1       # Core lightning ability (60s cooldown)
Utility Commands
/craft <recipe>    # View crafting recipes
/chronicle <cmd>   # Access lore and achievements
/withdrawability   # Withdraw equipped fragment abilities

Fragment Ability Management:

The /withdrawability command removes your fragment's abilities while keeping the fragment item:

  • Deactivates all passive bonuses (Fire Resistance, Speed, etc.)
  • Cancels active abilities (Life Devourer, Draconic Reflex, etc.)
  • Clears active states (including READY TO STRIKE for Dread Gaze)
  • Fragment remains in your inventory for quick re-equip

Using /clear (Vanilla Minecraft Command):

When you use the vanilla /clear command to remove all inventory items:

  • All fragment abilities are unequipped
  • All passive bonuses are removed
  • All active abilities are canceled
  • Cooldowns are preserved (spam prevention - see below)

Enhanced /craft Command Features:

The /craft command dynamically generates recipe displays from the actual crafting system (single source of truth):

# View all available recipes
/craft heavy_core          # Show Heavy Core crafting recipe
/craft fire                # Show Burning Fragment recipe
/craft agile               # Show Agility Fragment recipe
/craft immortal            # Show Immortal Fragment recipe
/craft corrupt             # Show Corrupted Core recipe

Architecture Benefits:

  • โœ… Auto-generated displays: Recipe text generated from actual CraftingManager recipes
  • โœ… Always accurate: Single source ensures displays match reality
  • โœ… DRY principle: Zero duplicate recipe definitions
  • โœ… Easy maintenance: Recipe changes only need one update location

๐Ÿ‘‘ Operator Commands

Operators have access to administrative functions for managing fragments, cooldowns, and player abilities.

Give Items
# Give crafting ingredients
/ed give <player> ingredients <element>
/ed give @p ingredients fire      # Give materials to craft Burning Fragment
/ed give @p ingredients agile     # Give materials to craft Agility Fragment

# Give crafted equipment
/ed give <player> equipment <element>
/ed give @p equipment fire        # Give Burning Fragment directly
/ed give @a equipment immortal    # Give Immortal Fragment to all players

Supported Elements: fire, agile, immortal, corrupt

Player Information
# View individual player info
/ed info player <player>
/ed info player @p              # Current player
/ed info player Steve           # Specific player

# List all players
/ed info list                   # Shows all online players with fragment status
Cooldown Management
# Set individual player cooldown
/ed setcooldown <player> <element> <ability> <seconds>
/ed setcooldown @p fire 1 5               # Fire ability 1: 5s cooldown
/ed setcooldown Steve agile 2 30          # Steve's agile ability 2: 30s

# Clear player cooldowns
/ed clearcooldown <player> [element]
/ed clearcooldown @p                      # Clear all cooldowns
/ed clearcooldown @p fire                 # Clear fire cooldowns only

# Get player cooldowns
/ed getcooldown <player>
/ed getcooldown @p                        # View current player's cooldowns
/ed getcooldown Steve                     # View Steve's cooldowns

Elements: lightning, fire, agile, immortal, corrupt Abilities: 1 or 2 (each element has 2 abilities)

Global Cooldown Configuration
# Set default cooldown for an ability (affects all players)
/ed setglobalcooldown <element> <ability> <seconds>
/ed setglobalcooldown fire 1 10           # Fire ability 1: 10s default
/ed setglobalcooldown agile 2 60          # Agile ability 2: 60s default

# Disable cooldowns (clears all active cooldowns)
/ed setglobalcooldown fire 1 0            # Disables fire ability 1 cooldown
/ed setglobalcooldown lightning 1 0       # Disables lightning cooldown

# View all global cooldown settings
/ed getglobalcooldown

How Global Cooldowns Work:

  1. Each ability has a default cooldown (e.g., Fire ability 1 = 40s)
  2. Operators can override defaults with /ed setglobalcooldown
  3. When players use abilities, the global cooldown is applied
  4. Individual player cooldowns can be managed with /ed setcooldown

Cooldown Adjustment Mechanics:

When you change a global cooldown, the system intelligently adjusts active player cooldowns using the MIN formula: min(current_remaining, new_max)

  • Increasing cooldown: Players with time remaining get capped at new maximum (fair to all)

    • Example: Player has 30s left, you set 20s โ†’ Player gets 20s (capped fairly)
    • Example: Player has 10s left, you set 20s โ†’ Player keeps 10s (no penalty)
  • Decreasing cooldown: Uses same MIN formula for consistency

    • Example: Player has 60s left, you set 30s โ†’ Player gets 30s (capped)
    • Example: Player has 20s left, you set 30s โ†’ Player keeps 20s
  • Disabling cooldown (0 seconds): Clears ALL active cooldowns for that ability

    • Example: /ed setglobalcooldown fire 1 0 โ†’ All players can use fire ability 1 immediately
    • Useful for: Events, testing, emergency cooldown resets

Real-World Examples:

# Speed up cooldowns during server event
/ed setglobalcooldown fire 1 10          # Faster fire attacks for everyone

# Restore normal cooldowns after event (players capped fairly)
/ed setglobalcooldown fire 1 40          # Players with < 40s keep their time

# Emergency cooldown clear for server issues
/ed setglobalcooldown lightning 1 0      # Instant clear for all players
/ed setglobalcooldown lightning 1 60     # Re-enable with normal cooldown
Player References

All commands support these player selectors:

  • @p - Nearest player (usually yourself)
  • @s - Command sender (yourself)
  • @a - All online players
  • PlayerName - Specific player by username

๐Ÿ’Ž Elemental Fragments System

The Elemental Dragon plugin features 4 complete elemental fragments, each with unique abilities, passive bonuses, and visual themes.

๐Ÿ”ฅ Burning Fragment (Fire Element)

Material: Blaze Powder (red/orange visual) Theme Color: Red Permission: elementaldragon.fragment.burning

Abilities:

  • Dragon's Wrath (/fire 1): Launch explosive fireball (40s cooldown)

    • Damage: 4 hearts on impact
    • Explosion power: 2.0 blocks radius
    • Fire spread: Ignites targets
    • Aliases: wrath, dragons-wrath
  • Infernal Dominion (/fire 2): Create fire ring around player (60s cooldown)

    • Radius: 8 blocks
    • Duration: 5 seconds
    • Damage: 1 heart per tick to enemies in range
    • Aliases: dominion, infernal-dominion

Passive Bonus: Fire Resistance when equipped

๐Ÿ’จ Agility Fragment (Wind Element)

Material: Feather (light/swift visual) Theme Color: Aqua Permission: elementaldragon.fragment.agility

Abilities:

  • Draconic Surge (/agile 1): Speed II + Jump II boost (30s cooldown)

    • Speed: Level II for 10 seconds
    • Jump Boost: Level II for 10 seconds
    • Aliases: surge, draconic-surge
  • Wing Burst (/agile 2): Vertical launch with fall protection (45s cooldown)

    • Vertical force: 1.5 blocks/tick
    • Levitation: 2 seconds
    • Slow Falling: 3 seconds (prevents fall damage)
    • Aliases: burst, wing-burst

Passive Bonus: Permanent Speed I when equipped

๐Ÿ›ก๏ธ Immortal Fragment (Earth Element)

Material: Totem of Undying (golden/life visual) Theme Color: Green Permission: elementaldragon.fragment.immortal

Abilities:

  • Draconic Reflex (/immortal 1): 75% damage reduction + reflection (90s cooldown)

    • Damage reduction: 75% for 5 seconds
    • Reflection: 25% melee damage reflected
    • Aliases: reflex, draconic-reflex
  • Essence Rebirth (/immortal 2): Enhanced respawn benefits (5min cooldown)

    • Diamond armor piece: Random piece on respawn
    • Full hunger: 20 food level
    • Arrows: 32 arrows if bow in inventory
    • Aliases: rebirth, essence-rebirth

Passive Bonus: 25% knockback reduction + 2 hearts when equipped

๐Ÿ’€ Corrupted Core (Void Element)

Material: Nether Star (dark/powerful visual) Theme Color: Dark Purple Permission: elementaldragon.fragment.corrupted

Abilities:

  • Dread Gaze (/corrupt 1): Blind nearby enemies (60s cooldown)

    • Radius: 10 blocks
    • Effect: Blindness II for 5 seconds
    • Targets: All hostile mobs in range
    • Aliases: gaze, dread-gaze
  • Life Devourer (/corrupt 2): Drain health from enemies (90s cooldown)

    • Range: 8 blocks
    • Duration: 8 seconds
    • Health steal: 50% of damage dealt
    • Drain rate: 0.5 hearts per tick
    • Aliases: devourer, life-devourer

Passive Bonus: Night Vision + invisible to creepers


โš™๏ธ Cooldown System

How It Works

The Elemental Dragon plugin features a sophisticated global cooldown system that balances powerful abilities with fair gameplay.

Default Cooldowns

Each fragment ability has a carefully balanced default cooldown:

Element Ability 1 Ability 2
Lightning 60s -
Fire 40s 60s
Wind (Agility) 30s 45s
Earth (Immortal) 90s 300s (5min)
Void (Corrupted) 60s 90s
Cooldown Persistence
  • โœ… Survives logout/login: Prevents bypassing cooldowns
  • โœ… Survives server restart: Cooldowns persist across restarts
  • โœ… Survives fragment unequip/equip: Spam prevention - cannot reset cooldowns by dropping and re-equipping
  • โœ… Survives /clear command: Clearing inventory doesn't reset cooldowns
  • โœ… Cleared on death: Fair respawn mechanics
  • โœ… Independent of items: Dropping fragment doesn't reset cooldown
  • โœ… Global configuration: Operators can override defaults

โš ๏ธ Spam Prevention: Cooldowns intentionally persist when you unequip/equip fragments. This prevents players from bypassing cooldowns by quickly dropping and re-equipping fragments. You must wait for the full cooldown duration even if you re-equip the fragment.

Cooldown Adjustment Behavior

When operators modify global cooldowns, the plugin intelligently manages active player cooldowns to ensure fairness:

The MIN Formula: min(current_remaining, new_max)

This ensures fair cooldown management:

  • Shorter new cooldown: Players are capped at the new maximum (prevents unfair advantage)
  • Longer new cooldown: Players keep their current cooldown (no retroactive penalty)
  • Disabled (0 seconds): All active cooldowns for that ability are immediately cleared

Example Scenarios:

Scenario Player's Current New Global Result Reason
Speed up cooldowns 60s remaining 30s 30s Capped to new max (fair)
Slow down cooldowns 20s remaining 60s 20s Keep current (no penalty)
Disable cooldowns 45s remaining 0s 0s Cleared immediately
Re-enable after disable 0s (cleared) 60s 0s Can use immediately

This design prevents abuse while maintaining fairness for players already on cooldown.

Operator Cooldown Control

Operators can customize cooldowns server-wide or per-player:

# Change default cooldown for everyone
/ed setglobalcooldown fire 1 10          # Fire ability 1 now 10s for all

# Override specific player's cooldown
/ed setcooldown Steve fire 1 120         # Steve's fire ability 1: 120s

# View all global settings
/ed getglobalcooldown

# Clear a player's cooldowns
/ed clearcooldown Steve                  # Clear all Steve's cooldowns
/ed clearcooldown Steve fire             # Clear only Steve's fire cooldowns

๐ŸŽฏ Perfect For These Server Types

๐ŸŽฎ PvP Servers

  • Balanced combat with cooldown-based abilities
  • Strategic fragment selection and timing
  • Fair gameplay without spam potential

๐Ÿฐ RPG Servers

  • Elemental magic system with 4 distinct classes
  • Quest rewards involving fragment collection
  • Lore system for immersive storytelling

๐Ÿ๏ธ Survival Servers

  • Unique abilities enhance PvE gameplay
  • Fragment crafting adds progression goals
  • Strategic choices in fragment selection

๐ŸŽ‰ Mini-Game Servers

  • Fragment-based game modes
  • Competitive ability-focused events
  • Custom challenges with unique mechanics

๐Ÿ› ๏ธ Development & Installation

System Requirements

  • Minecraft: Java Edition 1.21.8+
  • Server Software: Paper 1.21.8-R0.1+
  • Java: Version 21 or higher
  • Memory: Minimum 2GB RAM recommended

Developer Setup

Required Software:

  • Docker Desktop - Download
  • Java 21+ - OpenJDK or Oracle JDK
  • Gradle - Gradle (or use included gradlew wrapper)
  • Git - Git

Quick Start for Developers:

# 1. Clone repository
git clone https://github.com/cavarest/elemental-dragon.git
cd elemental-dragon

# 2. Build plugin JAR
./build.sh

# 3. Start server with plugin
./start-server.sh --rebuild

# 4. Connect and test
# Server: localhost:25565
# Username: posiflow (automatically configured as operator)
# RCON: localhost:25575 (password: dragon123)

# 5. Stop server
./stop-server.sh

Running Tests

The project includes comprehensive unit tests to ensure code quality and reliability.

# Run all tests
./gradlew test

# Run tests with coverage report
./gradlew test jacocoTestReport

# Run specific test class
./gradlew test --tests "*AchievementTest*"

# Run tests for a package
./gradlew test --tests "org.cavarest.elementaldragon.unit.fragment.*"

# Clean and run tests (force re-run)
./gradlew clean test

# Run tests in continuous mode (watches for changes)
./gradlew test --continuous

View Test Results:

  • HTML Test Report: build/reports/tests/test/index.html
  • Coverage Report: build/reports/jacoco/test/html/index.html

Open in browser:

open build/reports/tests/test/index.html
open build/reports/jacoco/test/html/index.html

Current Test Coverage:

  • Total Tests: 741 (all passing โœ…)
  • Overall Coverage: 29%
  • High Coverage Areas: command.util (100%), command.base (100%), Achievement (91%)

Docker Development Setup

This project uses Docker for development and testing. The setup includes:

Base Image: itzg/minecraft-server:java21 - Official PaperMC server with Java 21

Key Docker Features:

  • Offline-mode operator setup: Automatic UUID generation for offline players
  • Plugin hot-reloading: JAR copied to /image/plugins/ for easy updates
  • Persisted server data: server-data/ volume for world and config files
  • RCON access: Enabled on port 25575 for remote administration

Offline-Mode Operator Configuration:

The server runs in offline mode (ONLINE_MODE=false) for development. In offline mode, Minecraft clients generate UUIDs differently than online mode:

  • Online mode: UUIDs fetched from Mojang's authentication servers
  • Offline mode: UUIDs generated from MD5 hash of "OfflinePlayer:username"

How OPS Setup Works:

  1. Environment Variable (OFFLINE_OPS): Comma-separated list of usernames who should be operators

    # In .env file or docker-compose.yml
    OFFLINE_OPS=posiflow,player2,admin3
    
  2. Entrypoint Script (entrypoint.sh): Runs BEFORE the main /start script

    • Reads OFFLINE_OPS environment variable
    • Generates correct offline-mode UUIDs for each username
    • Creates /data/ops.json with proper format
  3. UUID Generation Algorithm:

    # Matches Minecraft's offline-mode UUID (version 3)
    hash = MD5("OfflinePlayer:username")
    UUID = version3_format(hash)  # xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx
    
  4. Skip mc-image-helper: Setting EXISTING_OPS_FILE=SKIP prevents the base image from overwriting ops.json

Example for "posiflow":

# Generated UUID: 763be461-6d24-3e4b-9e74-6ead0315f2bf
# Format: 763be461-6d24-3e4b-9e74-6ead0315f2bf
#              ^^^^^^^^ ^^^^ ^    ^^^^ ^^^^^^^^^^^^
#              part1    part2 part3 part4 part5
#                            โ†‘
#                            "3" = version 3 UUID (replaces first char)

Docker Configuration Files:

  • Dockerfile: Builds image with plugin JAR and entrypoint script
  • docker-compose.yml: Configures environment variables and volumes
  • entrypoint.sh: Generates offline-mode UUIDs and creates ops.json
  • .env: Local development configuration (OFFLINE_OPS, memory, etc.)

Adding More Operators:

# Option 1: Edit .env file
OFFLINE_OPS=posiflow,player2,admin3

# Option 2: Set in docker-compose.yml
environment:
  - OFFLINE_OPS=${OFFLINE_OPS:-posiflow,player2,admin3}

# Option 3: Pass via command line
OFFLINE_OPS="newplayer" docker-compose up

Common Docker Commands:

# Start server (rebuild image)
./start-server.sh --rebuild

# Start server (use cached image - faster)
./start-server.sh

# View server logs
docker logs -f papermc-elementaldragon

# Stop server
./stop-server.sh

# Access server console (interactive)
docker attach papermc-elementaldragon
# Press Ctrl+P, Ctrl+Q to detach without stopping

# Execute commands inside container
docker exec -it papermc-elementaldragon rcon-cli
> op list
> list

Server Management Options

The start-server.sh script supports several options for different development workflows:

Option Description
-r, --rebuild Rebuild Docker image and restart server (preserves server data)
-c, --clean Clean build (Gradle clean + fresh Docker image + delete all data)
-w, --wipe-world Clear world data only (preserves configs, plugins, player data)
-b, --blocking Start in blocking mode (logs shown directly, Ctrl+C to stop)
-h, --help Show help message with all options

Common Use Cases:

# Normal development start (fastest - uses cached Docker layers)
./start-server.sh

# Quick restart with rebuilt image (preserves world and configs)
./start-server.sh -r

# Fresh world for testing (preserves server configuration)
./start-server.sh -w

# Complete reset (new world, new configs, rebuild everything)
./start-server.sh -c

# Testing with visible logs
./start-server.sh -w -b

# Full reset with visible logs
./start-server.sh -c -b

# Fresh world with rebuild, logs shown
./start-server.sh -r -w -b

Option Details:

-r, --rebuild (Rebuild Mode)

  • Rebuilds Docker image with latest plugin JAR
  • Deletes all Docker volumes and server data
  • Forces fresh container startup
  • Use after code changes to ensure latest plugin is loaded

-c, --clean (Clean Mode)

  • Runs Gradle clean build
  • Deletes all Docker volumes and server data
  • Forces complete Docker image rebuild
  • Use when Docker cache might be stale or corrupted

-w, --wipe-world (World Wipe Mode)

  • Removes only world directories: world/, world_nether/, world_the_end/
  • Removes session.lock file
  • Preserves: Server configs, plugins, player data, OP settings
  • Use for quick world reset during testing without full reconfiguration

-b, --blocking (Blocking Mode)

  • Starts server in foreground with logs visible
  • Shows server output directly in terminal
  • Press Ctrl+C to stop server
  • Use for debugging or monitoring server startup

Combining Options:

Options can be combined for different scenarios:

  • -c -w: Full reset (world already cleared by -c, skip redundant wipe)
  • -r -w: Rebuild image + fresh world
  • -w -b: Fresh world + visible logs
  • -c -b: Full reset + visible logs

Port Conflict Detection:

The script automatically detects and stops containers using ports 25565/25575. The detection checks actual port bindings, not container names, so it won't incorrectly stop containers with similar names that use different ports.

If you have other PaperMC servers running on different ports (e.g., ports 35115/35125), they will not be affected.

Troubleshooting OPS Issues:

If you cannot login as operator:

  1. Check entrypoint logs:

    docker logs papermc-elementaldragon | grep "Elemental Dragon Offline Ops"
    
  2. Verify ops.json was created:

    docker exec papermc-elementaldragon cat /data/ops.json
    
  3. Check your username matches OFFLINE_OPS exactly:

    # Case-sensitive! "Posiflow" != "posiflow"
    
  4. Verify offline-mode UUID generation:

    # Test UUID generation locally
    echo -n "OfflinePlayer:posiflow" | md5sum
    # Should match: 763be461-6d24-3e4b-9e74-6ead0315f2bf
    

Why This Approach?

  • โœ… Reproducible: Same UUID every time for the same username
  • โœ… Offline-friendly: No internet connection required
  • โœ… Development-ready: Works with any username without Mojang API
  • โœ… Container-native: All setup done in entrypoint, no manual steps

๐Ÿ—๏ธ Architecture Highlights

Phase 6: True Object-Oriented Design + Post-Completion Fixes

The Elemental Dragon plugin demonstrates professional software architecture with continuous improvements:

Single Source of Truth Pattern
  • โœ… Fragment classes own ALL their metadata
  • โœ… Commands query Fragment dynamically (zero duplication)
  • โœ… Items query Fragment for visual properties
  • โœ… Auto-generated help, tab completion, status displays
  • โœ… NEW: Crafting recipes auto-generate displays (DRY /craft command)
Code Quality Metrics
  • 62% code reduction through architectural improvements (673 lines eliminated)
  • Zero duplication across commands, items, and recipes
  • Compiler-enforced completeness via interfaces
  • 206 tests passing with comprehensive coverage
  • Intelligent cooldown management with MIN formula and clear-on-disable
Design Patterns Applied
  1. Single Source of Truth: Fragments own their data, CraftingManager owns recipes
  2. Template Method: AbstractFragment provides structure
  3. Dependency Injection: Commands inject Fragment instances
  4. Strategy Pattern: Interchangeable Fragment implementations
  5. Command Pattern: Subcommand registry for admin functions
  6. Introspection Pattern: Runtime recipe querying for /craft command
Recent Improvements (Phase 6 Post-Completion)

DRY /craft Command:

  • Before: Recipes hardcoded in 2 places (CraftingManager + CraftCommand)
  • After: Single source of truth with runtime introspection via RecipeData class
  • Impact: Recipe changes now require updating only 1 location

Intelligent Cooldown Adjustment:

  • Formula: min(current_remaining, new_max) ensures fairness
  • Prevents unfair advantages when cooldowns decrease
  • No retroactive penalties when cooldowns increase
  • Clear-on-disable: Setting cooldown to 0 clears all active player cooldowns

Lightning Global Cooldown Support:

  • Lightning ability now respects global cooldown settings
  • /ed setglobalcooldown lightning 1 <seconds> works correctly
  • Integration with AbilityManager for unified cooldown system
  • Consistent behavior across all element types

๐Ÿ“š Complete Documentation

๐ŸŽฎ User Documentation

๐Ÿ”ง Administrator Documentation

๐Ÿ’ป Developer Documentation


๐ŸŽฏ Why This Plugin Will Transform Your Server

๐ŸŽฏ Player Engagement

  • 4 Unique Elements: Fire, Wind, Earth, Void with distinct abilities
  • Skill-Based: Requires timing, positioning, and strategy
  • Visual Spectacle: Unique particles and effects for each element
  • Strategic Depth: Fragment selection and cooldown management

๐Ÿ“Š Server Benefits

  • Balanced Gameplay: Carefully tuned cooldowns prevent spam
  • Performance: Optimized for Paper 1.21.8+ with minimal impact
  • Stability: 197 passing tests ensure reliability
  • Extensibility: Clean architecture makes customization easy

๐ŸŒŸ Competitive Advantage

  • Unique System: Elemental fragments set your server apart
  • Player Retention: 8+ unique abilities keep gameplay fresh
  • Fair Balance: Global cooldown system prevents abuse
  • Content Rich: Lore, achievements, and progression systems

๐Ÿ› Troubleshooting

Common Issues & Solutions

Plugin Not Loading
# Check Java version (must be 21+)
java -version

# Verify JAR location
ls plugins/ElementalDragon*.jar

# Check server logs
tail -f logs/latest.log | grep -i elementaldragon
Command Not Working
# Check permissions
/lp user <player> permission check elementaldragon.fragment.burning

# Verify fragment equipped
/fire status

# Check command registration
/help fire
Cooldown Issues
# View player cooldowns
/ed getcooldown <player>

# View global settings
/ed getglobalcooldown

# Clear stuck cooldown
/ed clearcooldown <player>

๐Ÿ“ˆ Architecture & Testing

Testing Framework

  • ๐Ÿงช 749 Unit Tests: Complete coverage with JUnit and Mockito
  • ๐Ÿ”ง Integration Tests: End-to-end YAML-driven scenarios
  • ๐Ÿณ Docker Support: Containerized development environment
  • โœ… CI/CD: Automated testing on every commit
  • ๐Ÿ“Š 29% Coverage: Focus on testable business logic (Bukkit API limits integration testing)

Code Quality

  • SOLID Principles: Applied throughout codebase
  • Design Patterns: Professional architecture patterns
  • Zero Duplication: DRY principle strictly enforced
  • Type Safety: Compile-time validation

๐Ÿ“ž Support & Community

Getting Help

  • GitHub Issues: Report bugs or request features
  • Documentation: Comprehensive guides in /docs directory
  • Community: Connect with other server administrators

Contributing

  • Bug Reports: Help us improve by reporting issues
  • Feature Requests: Suggest new abilities or improvements
  • Code Contributions: Submit pull requests

๐Ÿ“„ License & Credits

License: MIT License - Free for personal and commercial use

Author: The Cavarest project Version: 1.1.0 Minecraft Version: 1.21.8+ Paper API: 1.21.8-R0.1-SNAPSHOT


โญ Star this project if you love Elemental Dragon! โญ

GitHub Stars GitHub Forks

Transform your server today with Elemental Dragon! โšก

Download Latest Release | User Guide | Support

Information

CategoryGameplay
Published onDecember 28, 2025
LicenseMIT
Downloads6
Stars1
Watchers1

Pinned Versions

Members