An open API service indexing awesome lists of open source software.

https://github.com/cavarest/papermc-plugin-dragon-egg


https://github.com/cavarest/papermc-plugin-dragon-egg

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# โšก Elemental Dragon Plugin

![Dragon Egg Lightning Banner](https://img.shields.io/badge/Minecraft-Paper%201.21.8-blue?logo=minecraft&style=for-the-badge)
![Java](https://img.shields.io/badge/Java-21+-ED8B00?logo=openjdk&logoColor=white&style=for-the-badge)
![Version](https://img.shields.io/badge/Version-1.1.0-green?style=for-the-badge)
![Build](https://img.shields.io/badge/Build-Passing-brightgreen?style=for-the-badge)

**Transform your server with elemental powers from ancient dragon fragments!**

[![Download Latest Release](https://img.shields.io/badge/Download-Latest%20Release-ff6b6b?style=for-the-badge&logo=github)](https://github.com/cavarest/papermc-plugin-dragon-egg/releases/latest)
[![GitHub Stars](https://img.shields.io/github/stars/cavarest/papermc-plugin-dragon-egg?style=social)](https://github.com/cavarest/papermc-plugin-dragon-egg)
[![GitHub Forks](https://img.shields.io/github/forks/cavarest/papermc-plugin-dragon-egg/fork?style=social)](https://github.com/cavarest/papermc-plugin-dragon-egg/fork)

## ๐ŸŒŸ Quick Start (5 Minutes)

### **Step 1: Install Plugin**
```bash
# 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**

```bash
# 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**
```bash
# Operators can give ingredients to players to craft fragments
/ed give ingredients fire

# Operators can give fragments to players
/ed give equipment fire

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

### **Step 4: Use Fragment Abilities**
```bash
# 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**
```bash
# 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)**
```bash
/lightning 1 # Core lightning ability (60s cooldown)
```

#### **Utility Commands**
```bash
/craft # View crafting recipes
/chronicle # Access lore and achievements
```

**Enhanced `/craft` Command Features**:

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

```bash
# 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**
```bash
# Give crafting ingredients
/ed give ingredients
/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 equipment
/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**
```bash
# View individual player info
/ed info 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**
```bash
# Set individual player cooldown
/ed setcooldown
/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 [element]
/ed clearcooldown @p # Clear all cooldowns
/ed clearcooldown @p fire # Clear fire cooldowns only

# Get player cooldowns
/ed getcooldown
/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**
```bash
# Set default cooldown for an ability (affects all players)
/ed setglobalcooldown
/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**:
```bash
# 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
- โœ… **Cleared on death**: Fair respawn mechanics
- โœ… **Independent of items**: Dropping fragment doesn't reset cooldown
- โœ… **Global configuration**: Operators can override defaults

#### **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:

```bash
# 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](https://www.docker.com/products/docker-desktop/)
- **Java 21+** - [OpenJDK](https://adoptium.net/) or Oracle JDK
- **Gradle** - [Gradle](https://gradle.org/install/) (or use included gradlew wrapper)
- **Git** - [Git](https://git-scm.com/downloads)

**Quick Start for Developers:**

```bash
# 1. Clone repository
git clone https://github.com/cavarest/papermc-plugin-dragon-egg.git
cd papermc-plugin-dragon-egg

# 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
```

### **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
```bash
# 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**:
```bash
# 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"**:
```bash
# 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**:

```bash
# 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**:

```bash
# 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
```

**Troubleshooting OPS Issues**:

If you cannot login as operator:

1. **Check entrypoint logs**:
```bash
docker logs papermc-elementaldragon | grep "Elemental Dragon Offline Ops"
```

2. **Verify ops.json was created**:
```bash
docker exec papermc-elementaldragon cat /data/ops.json
```

3. **Check your username matches OFFLINE_OPS exactly**:
```bash
# Case-sensitive! "Posiflow" != "posiflow"
```

4. **Verify offline-mode UUID generation**:
```bash
# 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 ` works correctly
- Integration with `AbilityManager` for unified cooldown system
- Consistent behavior across all element types

---

## ๐Ÿ“š Complete Documentation

### ๐ŸŽฎ [User Documentation](docs/user/)
- [Complete User Guide](docs/user/README.md) - Features and usage
- [Installation Guide](docs/user/installation.md) - Setup instructions

### ๐Ÿ”ง [Administrator Documentation](docs/admin/)
- [Commands Reference](docs/admin/commands.md) - All admin commands
- [Testing Guide](docs/admin/testing.md) - Testing procedures
- [Docker Guide](docs/admin/docker.md) - Container deployment

### ๐Ÿ’ป [Developer Documentation](docs/dev/)
- [Architecture](docs/dev/frameworks.md) - System design
- [Testing](docs/dev/testing.md) - Test framework

---

## ๐ŸŽฏ 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**
```bash
# 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**
```bash
# Check permissions
/lp user permission check elementaldragon.fragment.burning

# Verify fragment equipped
/fire status

# Check command registration
/help fire
```

#### **Cooldown Issues**
```bash
# View player cooldowns
/ed getcooldown

# View global settings
/ed getglobalcooldown

# Clear stuck cooldown
/ed clearcooldown
```

---

## ๐Ÿ“ˆ Architecture & Testing

### **Testing Framework**
- **๐Ÿงช 206 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

### **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](https://github.com/cavarest/papermc-plugin-dragon-egg/issues)
- **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](https://img.shields.io/github/stars/cavarest/papermc-plugin-dragon-egg?style=social)](https://github.com/cavarest/papermc-plugin-dragon-egg)
[![GitHub Forks](https://img.shields.io/github/forks/cavarest/papermc-plugin-dragon-egg/fork?style=social)](https://github.com/cavarest/papermc-plugin-dragon-egg/fork)

**Transform your server today with Elemental Dragon!** โšก

[Download Latest Release](https://github.com/cavarest/papermc-plugin-dragon-egg/releases/latest) | [User Guide](docs/user/README.md) | [Support](https://github.com/cavarest/papermc-plugin-dragon-egg/issues)