Track lifetime XP and trigger custom rewards! Includes a dynamic BossBar system.
Total XP Rewards
A powerful and lightweight Paper plugin that tracks each player's lifetime XP and executes custom rewards when XP milestones are reached. Fully configurable, translation-ready, and built for modern Paper servers (1.21+).
✨ Features
- Global Total XP Tracking 📈
- Tracks XP from killing mobs, mining, and vanilla commands (
/xp,/experience). - Never resets, even after death.
- Async Caching: High-performance data handling prevents server lag.
- Tracks XP from killing mobs, mining, and vanilla commands (
- BossBar Progress System 📊
- Displays a customizable BossBar showing progress to the next rank.
- Dynamic Mode: Auto-hides the bar when not gaining XP.
- Rich Text support: Supports MiniMessage (Gradients, RGB) AND Legacy Color Codes (
&a) simultaneously!
- Reward System 🎁
- Execute multiple commands when reaching a threshold.
- Send custom broadcast messages.
- Supports Minecraft Target Selectors in commands (e.g.,
@a,@p).
- Full Customization 🛠️
- PlaceholderAPI support.
- Complete language control via
lang.yml(including "Max Rank" text). - SQLite storage with automatic schema migration (external apps can read
current_rank).
📥 Installation
- Download the latest release from the Releases page.
- Drop the
.jarfile into your server'spluginsfolder. - Start the server to generate config files.
- Adjust
config.ymlandlang.ymlto your liking. - Restart or run:
/txp reload
⚙️ Configuration
config.yml (example)
bossbar:
enabled: true
# Hybrid Support: Mix Legacy (&) and MiniMessage (<gradient>)!
title: "&bCurrent Rank: &e%current_rank% &7| <gradient:blue:aqua>Next: %next_rank%</gradient> &7(&a%xp%&7/&c%required_xp%&7)"
color: BLUE
style: SOLID
dynamic-mode: true # Bar appears on XP gain and hides after timeout
timeout: 10
rewards:
"1000":
name: "<gradient:#2486B5:#3A816A>Novice</gradient>"
commands:
- "give %player% diamond 1"
- "eco give %player% 250"
broadcast: "&a%player% reached %threshold% XP (Novice)!"
"50000":
name: "Master"
commands:
- "give %player% netherite_ingot 1"
broadcast: "&6%player% is now a Master!"
🧩 Placeholders
Available for use in Chat, Broadcasts, and BossBar:
| Placeholder | Description |
|---|---|
%player% |
Player's name |
%xp% |
Player's total lifetime XP |
%current_rank% |
Name of the current rank (e.g. "Novice") |
%next_rank% |
Name of the next rank (e.g. "Master") |
%required_xp% |
XP required for the next rank |
%threshold% |
The specific threshold reached (Rewards only) |
🔧 Commands
| Command | Description | Permission |
|---|---|---|
/txp get <player> |
View a player’s total XP | totalxp.view |
/txp show |
Show your BossBar | totalxp.use |
/txp hide |
Hide your BossBar | totalxp.use |
/txp set <player> <amount> |
Set a player’s XP | totalxp.admin |
/txp reset <player> |
Reset player XP & history | totalxp.admin |
/txp reload |
Reload config & language | totalxp.admin |
💾 Storage
XP and reward history are stored via SQLite, located in:
plugins/TotalXPRewards/database.db
External Access:
The database now includes a current_rank and username column, making it easy to integrate with web leaderboards (e.g. Node.js apps).
🧩 Plugin Support
- LuckPerms (for rank rewards)
- Vault (for economy)
- PlaceholderAPI (for extra placeholders)
The plugin does not depend on them but integrates automatically if installed.
🛡️ Disclaimer
This plugin was developed with the assistance of Google DeepMind's AI. All code and design decisions were reviewed and finalized manually.
📄 License
This project is licensed under the MIT License. You are free to use, modify, and contribute.
🤝 Contributing
Pull requests and feature suggestions are welcome! Feel free to open an issue if you encounter bugs or have ideas.
⭐ Support the Project
If you enjoy this plugin, consider leaving a star on GitHub — it helps a lot!