
ThrowableFireballsPlus
Add configurable, throwable fireballs to your Paper server. With per-player block damage control, PvP-friendly explosions, and full protection support.
- Загрузки
- 79
- Подписчики
- 0
- Обновлён
- 10 февраля 2026 г.
- Лицензия
- MIT
Опубликован 9 февраля 2026 г.
ThrowableFireballs
A highly configurable Minecraft Paper plugin that allows players to throw fireballs as projectiles. Built with multi-version support (1.16.5 through latest Paper) and clean architecture to avoid NMS dependencies.
Features
✨ Throwable Fireballs - Right-click with a fire charge (or custom item) to launch a fireball projectile
🎯 Configurable Damage - Separate control for block damage and entity damage
🛡️ Protection Integration - WorldGuard soft dependency with fallback protection
⏱️ Anti-Spam Cooldowns - Per-player cooldowns with action bar messages
🎨 Fully Customizable - Everything from item type to explosion power is configurable
👤 Per-Player Settings - Players can toggle block damage for their own fireballs
🔧 Multi-Version Support - Works on Paper 1.16.5+ without NMS
📦 Easy to Use - Simple commands and intuitive permissions system
Key Feature: Block Damage vs Entity Damage
IMPORTANT: This plugin allows you to disable block damage while keeping entity/player damage enabled. This means:
- ✅ Fireballs can damage players and mobs
- ❌ Fireballs won't break blocks or terrain
- ✅ Explosion effects, knockback, and fire still work
- 🎯 Perfect for PvP servers that want to protect builds
Configure this in config.yml:
explosion:
block-damage: false # Blocks are safe
entity-damage: true # Players still take damage
Players can also toggle block damage for their own fireballs:
/tfireballs blockdamage <on|off>
Installation
- Download the latest release JAR from the releases page
- Place the JAR file in your server's
plugins/folder - Restart your server (or use a plugin manager)
- Configure the plugin in
plugins/ThrowableFireballs/config.yml - (Optional) Install WorldGuard for advanced region protection
Requirements
- Minecraft Server: Paper 1.21.x (also compatible with 1.16.5 - 1.21.x)
- Java: 21 or newer (Java 17 minimum)
- Optional: WorldGuard 7.0+ for region protection
Commands
| Command | Description | Permission |
|---|---|---|
/tfireballs reload |
Reload configuration | throwablefireballs.admin |
/tfireballs give <player> [amount] |
Give fireball items | throwablefireballs.admin |
/tfireballs blockdamage <on|off> |
Toggle block damage for your fireballs | throwablefireballs.blockdamage.toggle |
Aliases: /tfb, /throwablefireball
Permissions
Main Permissions
| Permission | Description | Default |
|---|---|---|
throwablefireballs.* |
Grant all permissions | op |
throwablefireballs.use |
Throw fireballs | true (everyone) |
throwablefireballs.admin |
Access admin commands | op |
Advanced Permissions
| Permission | Description | Default |
|---|---|---|
throwablefireballs.bypasscooldown |
Bypass throw cooldown | op |
throwablefireballs.bypassprotection |
Bypass region protection | op |
throwablefireballs.blockdamage.toggle |
Toggle personal block damage | true |
Configuration
The config.yml file is extensively documented. Here are the key sections:
Item Settings
item:
material: FIRE_CHARGE # Item to throw
consume-on-throw: true # Consume item?
consume-in-creative: false # Consume in creative?
custom-model-data: # For resource packs
enabled: false
value: 0
Projectile Settings
projectile:
type: SMALL # SMALL or LARGE
speed: 1.5 # Velocity multiplier
Explosion Settings
explosion:
block-damage: false # Break blocks?
entity-damage: true # Damage players/mobs?
power: 1.0 # Explosion radius
create-fire: true # Create fire?
fire-ticks: 100 # Fire duration
Cooldown Settings
cooldown:
time-millis: 1000 # 1 second cooldown
show-actionbar: true # Show message?
Protection Settings
protection:
respect-worldguard: true # Use WorldGuard?
check-build-permission: true # Basic protection
Per-Player Settings
per-player-settings:
allow-block-damage-toggle: true # Players can toggle?
All messages are customizable with color code support (& codes).
Multi-Version Support
This plugin is designed to work across multiple Paper versions (1.16.5+) without using NMS (Net Minecraft Server) code.
How It Works
The plugin uses a Version Adapter pattern:
- VersionAdapter Interface - Defines version-specific operations (e.g., action bar messages)
- ModernVersionAdapter - Uses Paper's Adventure API (1.16.5+)
- LegacyVersionAdapter - Reflection-based fallback for older versions
The plugin automatically detects your server version and uses the appropriate adapter.
API Version
In plugin.yml, we set api-version: 1.21 because:
- Version 1.1.0 targets Minecraft 1.21.x
- Maintains backward compatibility with 1.16.5+ due to no NMS usage
- Paper's API is stable across versions
- Modern features and optimizations available in 1.21
Supported Versions
| Version | Status | Notes |
|---|---|---|
| 1.16.5 | ✅ Compatible | Minimum supported |
| 1.17.x | ✅ Compatible | Uses modern adapter |
| 1.18.x | ✅ Compatible | Uses modern adapter |
| 1.19.x | ✅ Compatible | Uses modern adapter |
| 1.20.x | ✅ Compatible | Uses modern adapter |
| 1.21.x | ✅ Tested | Primary target |
| Future | ✅ Should work | No NMS dependencies |
Building from Source
Prerequisites
- Java 17 JDK or newer
- Git
Build Steps
# Clone the repository
git clone https://github.com/nando123412/ThrowableFireballs.git
cd ThrowableFireballs
# Build with Gradle
./gradlew build
# The JAR will be in build/libs/ThrowableFireballs-1.1.0.jar
Gradle Tasks
./gradlew clean # Clean build directory
./gradlew build # Build JAR (includes shadowJar)
./gradlew shadowJar # Build shaded JAR with dependencies
How It Works
Throwing Fireballs
- Player right-clicks with a fire charge (or configured item)
- Plugin checks:
- Permission (
throwablefireballs.use) - Cooldown (unless bypassed)
- Item validity (material, custom model data, display name)
- Region protection (WorldGuard or basic checks)
- Permission (
- Fireball is spawned with:
- Player's eye direction
- Configured velocity
- Tagged with
PersistentDataContainer(player UUID stored)
- Item is consumed (if configured)
- Cooldown is applied
Explosion Control
When a fireball explodes:
- Plugin checks if it's tagged as "ours" (via
PersistentDataContainer) - If not tagged, explosion proceeds normally (vanilla behavior)
- If tagged:
- Gets the player UUID from the tag
- Checks per-player settings (if enabled)
- Falls back to global config
- Block Damage: If disabled, clears block list and sets yield to 0
- Entity Damage: If disabled, cancels damage events
- Fire: Applies fire ticks if configured
Critical Detail: Even when block-damage: false, the explosion event is NOT cancelled, so entity damage still occurs naturally through Bukkit's damage system.
Damage Handling
The plugin handles damage in two ways:
Direct Hit -
EntityDamageByEntityEventwithPROJECTILEcause- Applies custom damage if configured
- Can be disabled with
entity-damage: false
Explosion Damage - Handled by Minecraft's explosion system
- Works automatically when explosion is not cancelled
- Controlled by
entity-damageconfig option
Troubleshooting
Fireballs Don't Break Blocks
Solution: This is intentional if explosion.block-damage: false in config. Players still take damage.
Action Bar Messages Don't Show
Solution: The plugin uses Adventure API (Paper 1.16.5+). If using older Spigot, messages fall back to chat.
WorldGuard Integration Not Working
Solution: Ensure WorldGuard 7.0+ is installed and protection.respect-worldguard: true in config.
Players Can Spam Fireballs
Solution: Reduce cooldown.time-millis or ensure players don't have throwablefireballs.bypasscooldown permission.
Explosions Are Too Weak/Strong
Solution: Adjust explosion.power in config. Vanilla TNT is 4.0, Creeper is 3.0.
Performance
The plugin is designed to be lightweight and performant:
- ✅ No tick loops - Event-driven architecture
- ✅ Minimal reflection - Only for action bars on legacy versions
- ✅ Efficient cooldowns - HashMap-based with cleanup
- ✅ No database - All data in memory
- ✅ PersistentDataContainer - Uses Bukkit's built-in tagging system
WorldGuard Integration
If WorldGuard is installed:
- Plugin detects WorldGuard on startup
- Basic region checks are performed
- Note: Full WorldGuard integration requires additional API usage
- Server admins can use WorldGuard flags to control fireball behavior:
creeper-explosionflagghast-fireballflag- Custom flags (requires WorldGuard configuration)
For now, the plugin respects basic WorldGuard presence and can be extended with full API integration.
Development
Project Structure
src/main/java/com/nandoothjuuh/throwablefireballs/
├── ThrowableFireballsPlugin.java # Main plugin class
├── commands/
│ ├── TFireballsCommand.java # Command executor
│ └── TFireballsTabCompleter.java # Tab completion
├── compat/
│ ├── VersionAdapter.java # Version adapter interface
│ ├── ModernVersionAdapter.java # Adventure API (1.16.5+)
│ └── LegacyVersionAdapter.java # Reflection fallback
├── config/
│ ├── ConfigManager.java # Config wrapper
│ └── MessageManager.java # Message handler
├── cooldown/
│ └── CooldownManager.java # Cooldown tracking
├── items/
│ └── FireballItemFactory.java # Item creation
├── listeners/
│ ├── ThrowListener.java # Throw event handler
│ └── ExplosionControlListener.java # Explosion control
└── util/
└── TextUtil.java # Text utilities
Adding Features
To add new features:
- Add config options to
config.ymlandConfigManager.java - Add messages to
config.ymlandMessageManager.java - Create new listeners or modify existing ones
- Register listeners in
ThrowableFireballsPlugin.java - Add permissions to
plugin.yml - Update README.md
License
This project is provided as-is for educational and server use. Feel free to modify and use it on your server.
Credits
- Author: nandoothjuuh
- Plugin API: Paper/Spigot/Bukkit
- Built with: Java 17, Gradle
Support
For issues, questions, or suggestions:
- Open an issue on GitHub
- Check the wiki for detailed guides
- Join the community Discord (if available)
Note: This plugin is designed for Paper servers. While it may work on Spigot, Paper is highly recommended for best performance and compatibility.
Ченджлог
1.1.2Релиз1.21.9, 1.21.10, 1.21.11 · 10 февраля 2026 г.
[1.1.2] - 2026-02-10
Added
- Knockback Configuration - New
damage.knockbacksection in config.ymlenabled- Toggle knockback on/offstrength- Adjustable knockback power (multiplier)vertical- Control vertical vs horizontal-only knockback
- Fine-grained control over entity knockback when hit by fireballs
- Update Checker - Automatic update checking using Modrinth API
- Checks for new versions on server startup
- Notifies console with download link
- Optional operator notification when they join
- Configurable enable/disable in config.yml
- Uses official Modrinth API: https://modrinth.com/plugin/throwablefireballsplus
Fixed
- Explosion Visual Bug - Explosions now properly display when block damage is disabled
- Removed
setYield(0f)call that was preventing explosion visual effects - Block damage can be disabled while still showing explosion particles/effects
- Knockback and entity damage work correctly even with block damage off
- Removed
- Knockback System Completely Rewritten - All knockback config options now work properly
- CRITICAL FIX: Knockback now actually triggers! Was completely non-functional due to entity detection issue
- Moved knockback application to EntityExplodeEvent where fireballs are reliably detected
- enabled: false now actually disables knockback (restores pre-explosion velocity)
- enabled: true applies custom knockback that overrides vanilla behavior
- strength setting now properly controls knockback power (0.5 = weak, 2.0 = strong)
- vertical: false now correctly applies horizontal-only knockback
- vertical: true adds upward component for dramatic effect
- radius properly limits knockback range with distance falloff
- Fixed issue where config changes had no visible effect
- Fixed excessive knockback when player is moving
- Knockback now consistent regardless of player momentum or movement
- Improved debug logging shows all calculations (distance, falloff, vectors)
- Debug messages now appear in console showing knockback is being applied
Changed
- Reorganized config structure: knockback settings now nested under
damage:section - Knockback radius option added - Configure how far from explosion entities are affected (default: 5.0 blocks)
1.1.0Бета1.21.9, 1.21.10, 1.21.11 · 9 февраля 2026 г.
[1.1.0] - 2026-02-09
Changed
- Target Version: Now targets Minecraft 1.21.x (Paper 1.21.4)
- Java Requirement: Upgraded to Java 21 (minimum: Java 21)
- API Version: Updated from 1.16 to 1.21 in plugin.yml
- Backward Compatibility: Still compatible with 1.16.5+ servers
Technical Details
- Updated Paper API dependency from 1.20.4 to 1.21.4-SNAPSHOT
- Changed Java source/target compatibility from 17 to 21
- All features remain the same - no breaking changes to configuration or commands
- No code changes required due to version-agnostic design (no NMS)
Notes
- If running on older Minecraft versions (1.16.5-1.20.x), use version 1.0.0
- If running on Minecraft 1.21+, use version 1.1.0 for optimal compatibility
1.0.0Бета1.16.3, 1.16.4, 1.16.5 · 9 февраля 2026 г.
Added
- Initial release
- Throwable fireballs with right-click interaction
- Block damage vs entity damage control - Protect terrain while allowing PvP damage
- Per-player block damage toggle (
/tfireballs blockdamage) - Comprehensive configuration system (item, projectile, explosion, cooldown settings)
- Multi-version support (Paper 1.16.5 - 1.20.x)
- Version adapter pattern for cross-version compatibility
- WorldGuard soft dependency for region protection
- Commands:
/tfireballs reload,/tfireballs give,/tfireballs blockdamage - Permission system with granular control
- Cooldown system with action bar messages
- Fully customizable messages with color code support
- PersistentDataContainer projectile tagging
- Custom item support (material, model data, display name)
- Fire and explosion effects configuration
- Direct hit damage configuration
- Tab completion for all commands
Technical Features
- No NMS dependencies - pure Bukkit/Paper API
- Event-driven architecture for performance
- Adventure API integration for modern Paper servers
- Reflection-based fallback for legacy versions
- Java 17+ requirement
- Gradle build system
- Comprehensive documentation (README, QUICKSTART, config comments)
Комментарии
Загружаем…