
XpBottle
XpBottle [1.16+] – Plugin that allows players to store and transfer XP using secure custom XP bottles, perfect for survival, PvP, RPG, and economy servers
Автор: NoxuWT9602обновлён 18 окт. 2026 г.
ЭкономикаХранениеУтилиты
Описание

✨ Features
- 🧪 XP Bottle Creation — Convert your XP into storable bottles via
/xpbottle <amount> - 🖱️ Easy Redemption — Right-click a bottle to instantly absorb its XP
- ⏳ Cooldown System — Configurable cooldown to prevent spam
- 🔐 Protected Bottles — Bottles are returned to the player on death instead of dropping
- 🎨 Customizable Bottles — Full control over material, name, lore, glow and hex colors
- 🔊 Sound Effects — Configurable sounds on withdraw and redeem
- 🗄️ Database Support — H2 (embedded) or MySQL via HikariCP
- 🔧 ItemsAdder Integration — Optional support for custom items
- 👑 Admin Commands — Give bottles to players and reload config
- 🌍 Configurable Messages — Full lang.yml with hex color & MiniMessage support

📋 Commands
| Command | Description | Permission |
|---|---|---|
/xpbottle <amount> <xpperbottle> | Withdraw XP into a bottle | xpbottle.use |
/xpbottle give <player> <amount> <xpperbottle> | Give XP bottle(s) to a player | xpbottle.give |
/xpbottle reload | Reload the plugin configuration | xpbottle.reload |
/xpbottle help | Display the help message | — |
/xp | View your current level and total XP | xp.view |

🔒 Permissions
| Permission | Description | Default |
|---|---|---|
xpbottle.use | Use /xpbottle to withdraw XP | true |
xpbottle.give | Give bottles to other players | op |
xpbottle.reload | Reload the configuration | op |
xp.view | Use /xp to view level and XP | true |

🔖 Placeholders
| Placeholder | Description |
|---|---|
%exp% | Amount of XP stored in the bottle |
%signer% | Name of the player who created the bottle |
%amount% | Number of bottles |
%time% | Remaining cooldown time in seconds |
%player% | Target player name |
%level% | Player's current level |
%xp% | Player's total XP |

⚙️ Configuration
database:
type: h2 # h2 or mysql
xpbottle:
min-exp: 50
max-exp: 1000000000
conversion-rate: 0.1 # 10% tax on withdrawal
cooldown: 10 # seconds
drop: false # drop bottle on ground instead of inventory
protected-bottles: true
bottle:
use-itemsadder: false
material: EXPERIENCE_BOTTLE
name: "#F2EC27&lʙᴏᴛᴛʟᴇ ᴅ'ᴇxᴘᴇʀɪᴇɴᴄᴇ"
lore:
- ""
- "&7xᴘ : &f%exp%"
- "&7ᴘʀᴏᴘʀɪᴇᴛᴀɪʀᴇ : &f%signer%"
- ""
- "#F2EC27ᴄʟɪᴄᴋ ᴅʀᴏɪᴛ &7| &7utiliser la bouteille"
glow: false
sound:
redeem:
sound: "ENTITY_PLAYER_LEVELUP"
enabled: true
withdraw:
sound: "ENTITY_COW_DEATH"
enabled: false

🔗 Integrations
- ItemsAdder — Enable
use-itemsadder: trueto use a custom item instead of the vanilla bottle - MySQL — Switch
database.typetomysqland fill in your credentials for multi-server setups
Галерея
Последние версии
Все версии →release
XpBottle 1.7.1
1.7.118 окт. 2026 г.80Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur, spigot
Что нового
- Improved compatibility from Minecraft 1.16.5 to 26.3.
- Fixed redemption of custom XP bottles.
- Fixed items being lost when inventories are partially full.
- Includes previous fixes for XP exploits, cooldowns, database saves, and permissions.
release
XpBottle 1.7.0
1.7.014 окт. 2026 г.50Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur, spigot
Что нового
This is a major bugfix release. Updating is strongly recommended as it fixes an XP duplication exploit.
## Bug Fixes
### Critical
- **XP duplication exploit** — Negative amounts were accepted by the withdraw command (for example `/xpbottle -1000 1`), which gave players free XP instead of removing it. All amounts must now be strictly positive.
- **Cooldown never enforced** — The withdraw cooldown was saved but never checked, so it had no effect. It is now applied before every withdrawal, and the waiting message shows the remaining time.
- **MySQL settings ignored** — The plugin read `database.mysql.host`, `database.mysql.port`, etc. while the config file defines `database.host`, `database.port`, `database.name`, `database.user` and `database.password`. MySQL connections therefore always used the default values. The correct config keys are now used.
### Major
- **Silent data loss in SQL databases** — Saving a player ran a plain `UPDATE` that silently failed when the row did not exist yet. Saves now use an upsert (`ON DUPLICATE KEY UPDATE` for MySQL, `ON CONFLICT DO UPDATE` for SQLite), so no player data is lost anymore.
- **Tab completion did not work** — The `TabCompleter` was never registered, so `/xpbottle` had no tab completion. It is now registered (and re-registered on reload) for subcommands, suggested amounts and player names.
- **`min-exp` and `max-exp` were never applied** — These config options existed but were never checked. They are now enforced, with dedicated error messages.
### Minor
- **Integer overflow** — The total cost (`amount x bottles`) is now computed in 64-bit and rejected if it exceeds the `int` range, preventing corrupted bottles. Redeeming a full stack while sneaking is also computed in 64-bit.
- **Invalid sound name** — An invalid sound name in the config no longer causes an error on redeem; the default sound is used as a fallback.
- **ItemsAdder fallback** — If the configured `itemsadder_id` item cannot be found, the plugin now falls back cleanly to a vanilla bottle instead of failing.
- **Update checker** — A local version newer than the published one is no longer reported as "update available".
- **Permissions** — The children of `xpbottle.admin` pointed to non-existent permissions (`xp.admin.*`). They now point to the plugin's real admin permissions (`xpbottle.give`, `xpbottle.take`, `xpbottle.reset`, `xpbottle.reload`).
## Optimizations
- **Bottle generation** — Bottles are now created once and distributed as stacks instead of rebuilding the same item N times. This significantly reduces NBT serialization for large withdrawals.
- **NBT key caching** — The `NamespacedKey` used to identify XP bottles is cached in the listener instead of being recreated on every interaction and craft check.
- **Thread-safe SQL access** — The shared JDBC connection is now protected against simultaneous access from asynchronous tasks, eliminating a corruption risk on SQLite and MySQL.
- **Safer reload** — `/xpbottle reload` no longer clears running cooldowns (they can no longer be bypassed by asking for a reload) and keeps the tab completer registered.
- **Withdraw sound** — The previously unused `sound.withdraw` config option is now played on withdrawal.
release
XpBottle 1.6.2
1.6.227 сент. 2026 г.114Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3folia, paper, purpur, spigot
Что нового
## Corrections and additions
- Completing the `/xpbottle help` with the `take` and `reset` commands.
- Fixed helper syntax for XP withdrawal and `give` command, with XP per bottle and number of bottles parameters.
- Added missing messages to `lang.yml`: player not found, invalid number,
negative levels, player-only command, and XP reset confirmations.
- Replaced hardcoded player messages with keys loaded from `lang.yml`.
- Added a configurable message in `lang.yml` when a translation key is not found.
- Updated the `xpbottle command and permission.
reset` in `plugin.yml`.
- Configurable protection of XP bottles against renaming at the anvil and their use in crafts, while leaving them tradable.
release
XpBottle 1.6.1
1.6.131 мая 2026 г.363Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
Ajout
tooltip_style: "tooltip:tooltip/name" in config.yml
bottle:
tooltip_style: "tooltip:tooltip/common"
....
release
XpBottle 1.6.0
1.6.031 мая 2026 г.19Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
### ✨ v1.6.0
### 🚀 Improvements
- 🎨 Improved color correction system for consistent rendering across all items
- 🌈 Enhanced RGB → in-game color conversion accuracy
- ⚙️ Unified color processing pipeline for stable results
### 🔧 Changes
- 📦 `itemsadder_use` updated:
- ❌ Removed legacy support: `custom-model-data: 0`
- ✅ Added new format: `itemsadder_id: "namespace:name_id"`
### 🛠 Fixes
- 🧩 Fixed inconsistent color rendering on textured items
- 🧼 Resolved color parsing glitches affecting visual output
- 🔒 Improved overall stability of the color processing system
release
XpBottle 1.5.0
1.5.023 мая 2026 г.55Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur, spigot
Что нового
redesign of code and .yml files
config.yml
lang.yml
release
XpBottle 1.2.5
1.2.54 апр. 2026 г.66Minecraft: 1.16.5, 1.17, 1.18, 1.19, 1.20, 1.21, 26.1, 26.1.1paper, purpur, spigot
Что нового
new messages in messages.yml
release
XpBottle 1.2.0
1.2.030 мар. 2026 г.21Minecraft: 1.16.5, 1.17, 1.18, 1.19, 1.20, 1.21, 26.1paper, purpur, spigot
Что нового
# ✨ What's new
💰 Conversion tax (configurable)
Added a cost system when converting XP to bottles
Allows you to define a percentage of XP lost
Example: 5% XP consumed when using /xpbottle
⏳ Cooldown (configurable)
Added a delay between each use of /xpbottle
Helps limit spam and balance gameplay
Fully customizable via config
🔐 Protected bottles
Added an XP bottle protection system:
Protection during drop (anti-theft / security)
Option to prevent bottles from falling to the ground upon death
All options can be activated/deactivated in the configuration
⚙️ Setup
All new features are 100% configurable
Independent activation/deactivation of each system
release
XpBottle 1.1.0
1.1.013 мар. 2026 г.30Minecraft: 1.16.5, 1.17, 1.18, 1.19, 1.20, 1.21, 26.1paper, purpur, spigot
Что нового
redesign of controls and improvement
release
XpBottle 1.0.0
1.0.029 янв. 2026 г.161Minecraft: 1.16.5, 1.17, 1.17.1, 1.18, 1.18.1, 1.18.2, 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1paper, purpur, spigot

