ModsJava
UltimateDonutSMP-V2
Java mod listed for Minecraft 26.x. Download on the author's site.
⬇ Download on Hangar
Free Paper, Purpur, Pufferfish, Spigot, and Folia plugin for DonutSMP-style Minecraft servers. Economy, PvP, marketplace, staff tools, menus, and network utilities in one production-focused plugin.
[](https://discord.gg/WDn9QvQVEa) [](https://paypal.me/suryapratamaa) [](https://ko-fi.com/beestooxd) [](https://github.com/BeestoXd/UltimateDonutSMP-V2)
▶️ Click the image above to watch the UltimateDonutSMP V2 showcase video
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Feature panels and in-game menus:
| | | |
| :---: | :---: | :---: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Gameplay clips:
| | |
| :---: | :---: |
|
|
|
|
|
|
|
|
|
## Requirements
| Requirement | Notes |
| --- | --- |
| Plugin version | `1.0` |
| Java | Bytecode targets Java 21. The supported Minecraft versions (26.1.2 and newer) require a Java 25 server runtime. |
| Paper / Purpur / Pufferfish / Spigot | Minecraft `26.1.2` through `26.2` |
| Folia | Minecraft `26.1.2` through `26.2` |
| Hard dependencies | PlaceholderAPI and ProtocolLib (declared under `depend` in `plugin.yml`; the plugin will not load without them) |
| Default storage | SQLite, bundled through the shaded JDBC driver |
| Alternative storage | MySQL or MongoDB |
| Optional network layer | Redis for cross-server staff chat, alerts, maintenance, reports, helpop, and server status |
| Build environment | Maven available as `mvn`, internet access, and a JDK 21 or newer toolchain (CI builds on JDK 25) |
Required plugins (the server will not enable UltimateDonutSmp V2 without them):
- PlaceholderAPI
- ProtocolLib
Optional integrations:
- LuckPerms
- Vault
- Apollo
- SkinsRestorer
- Multiverse-Core
- floodgate
- Simple Voice Chat (`voicechat`)
The plugin starts without the optional integrations. Their related permission, economy, client, skin, world, voice chat, and Bedrock features activate only when the corresponding plugin is installed.
## Installation
1. Stop the Minecraft server.
2. Place the plugin jar into the server `plugins/` directory.
3. Start the server once so the default configuration files are generated.
4. Configure storage in `database.yml`.
5. Review the core gameplay files such as `config.yml`, `menus.yml`, `shop.yml`, `worth.yml`, `rtp.yml`, and `languages/.yml`.
6. Restart the server after first setup.
For production networks, MySQL plus Redis is recommended. For a single-server setup, SQLite is usually enough.
> [!WARNING]
> Do not share private customer files, database credentials, Discord tokens, Redis passwords, or other sensitive server data.
## Configuration
| File | Purpose |
| --- | --- |
| `config.yml` | Language selection, feature toggles, locations, portals, chat, AFK, cuboid binds, combat, crystals, shards, tablist, optimization, and general gameplay |
| `languages/*.yml` | Player-facing command, gameplay, moderation, economy, teleport, menu, and system text |
| `death-messages.yml` | Death-message rules and message templates |
| `menus.yml` | Shared GUI layouts for teams, homes, profiles, settings, leaderboards, shops, staff tools, rules, servers, and other menus |
| `dialog.yml` | 1.21.6+ dialog screens: the main menu grid, settings categories, pay, stats, leaderboards, homes, friends, teleport, the RTP queue prompt, and the generated ESC-screen datapack |
| `scoreboard.yml` | Modern and legacy sidebar layouts, title, lines, refresh behavior, and display rules |
| `shop.yml` | Money and shard shop categories, items, prices, permissions, currencies, and command rewards |
| `sounds.yml` | Sound effects for menus, commands, teleportation, shops, shards, boosters, and custom systems |
| `pvp.yml` | Ranked PvP arena, Elo rating, kits, boundary, broadcasts, and schematic reset |
| `rtp.yml` | Random teleport worlds, radius, cooldowns, safety checks, denied worlds, messages, and GUI |
| `worth.yml` | Sell values, worth display, container handling, browser categories, and blocked items |
| `amethyst-tools.yml` | Amethyst tool types, durations, permissions, effects, items, actions, and messages |
| `ender-chest.yml` | Custom Ender Chest size, behavior, ecsee access, layout, and messages |
| `invsee.yml` | Inventory inspection behavior, layout, permissions, and messages |
| `freeze.yml` | Freeze behavior, permissions, alerts, inventory handling, and messages |
| `auction-house.yml` | Listing limits, pricing, claims, restrictions, sorting, categories, and Auction House GUI |
| `orders.yml` | Order limits, pricing, delivery, matching, filters, sorting, Bedrock input, network behavior, and GUI |
| `enchantments.yml` | Enchantment GUI and item-specific enchantment options |
| `filter.yml` | Item category filters used by marketplace and inventory workflows |
| `duels.yml` | Duel maps, world borders, queues, countdowns, cross-server options, arena settings, rules, and GUI |
| `ffa.yml` | FFA queue, arena rules, rollback, player-state handling, and arena definitions |
| `crates.yml` | Crate definitions, keys, rewards, animations, holograms, particles, and settings |
| `spawners.yml` | Donut-style spawner types, drops, storage, and GUI |
| `spawn-stash.yml` | Temporary bait-stash types, detection rules, alerts, cleanup, and messages |
| `network.yml` | Redis network identity, staff chat, reports, helpop, server status, and maintenance routing |
| `staff-mode.yml` | Staff-mode permissions, hotbar items, vanish, better view, staff list, fake players, and menus |
| `hide.yml` | Identity scrambling, aliases, disguises, skins, cooldowns, bypass rules, GUI, and messages |
| `database.yml` | SQLite, MySQL, MongoDB, and Redis connection settings |
| `server-wipe.yml` | Guarded wipe targets, protected worlds, confirmation token lifetime, backups, and messages |
| `discord.yml` | Discord webhook endpoints and event-specific webhook controls |
| `anvil-moderation.yml` | Banned anvil words, punishments, and per-player moderation data |
| `offenses.yml` | Preset offense rules, punishment types, and durations used by `/offend` |
Language files are stored under `languages/`:
- `en_US.yml`
- `es_ES.yml`
- `id_ID.yml`
- `pt_BR.yml`
- `de_DE.yml`
- `fr_FR.yml`
- `ru_RU.yml`
- `zh_CN.yml`
On startup and reload, missing bundled configuration paths are merged into existing files. Existing files are backed up under `config-backups/` before an automatic update. Live crate definitions, duel/FFA arenas, and deployment-specific network server entries are treated as user-managed data and are not restored after removal.
## Commands
Commands can be disabled through their related feature toggle. Arguments in `` are required; arguments in `[square brackets]` are optional. Every command has a dedicated permission node registered in `plugin.yml`. Most follow the `ultimatedonutsmp2.command.` pattern; a few staff commands use a `ultimatedonutsmp2.staff.*` node instead, as listed below.
| Command | Aliases | Usage | Permission Node |
| --- | --- | --- | --- |
| `/addmoney` | - | `/addmoney ` | `ultimatedonutsmp2.command.addmoney` |
| `/addshards` | - | `/addshards ` | `ultimatedonutsmp2.command.addshards` |
| `/afk` | - | `/afk` | `ultimatedonutsmp2.command.afk` |
| `/alts` | - | `/alts ` | `ultimatedonutsmp2.command.alts` |
| `/amethysttool` | - | `/amethysttool give [duration]` or `/amethysttool reload` | `ultimatedonutsmp2.command.amethysttool` |
| `/amod` | - | `/amod ` | `ultimatedonutsmp2.command.amod` |
| `/arena` | `/duelarena` | `/arena ` | `ultimatedonutsmp2.command.arena` |
| `/auctionhouse` | `/ah` | `/auctionhouse [sell\|my\|claims\|cancel\|limit\|fastbuy\|fastsell\|reload]` | `ultimatedonutsmp2.command.auctionhouse` |
| `/balance` | `/bal`, `/money` | `/balance [player]` | `ultimatedonutsmp2.command.balance` |
| `/ban` | - | `/ban [reason]` | `ultimatedonutsmp2.command.ban` |
| `/billford` | - | `/billford` | `ultimatedonutsmp2.command.billford` (no Java handler; inactive) |
| `/blacklist` | - | `/blacklist [reason]` | `ultimatedonutsmp2.command.blacklist` |
| `/bounty` | - | `/bounty [player] [amount]` | `ultimatedonutsmp2.command.bounty` |
| `/chat` | - | `/chat ` | `ultimatedonutsmp2.command.chat` |
| `/chatlog` | - | `/chatlog [player]` | `ultimatedonutsmp2.command.chatlog` |
| `/clearlag` | - | `/clearlag` | `ultimatedonutsmp2.command.clearlag` |
| `/crate` | - | `/crate ` | `ultimatedonutsmp2.command.crate` |
| `/crates` | - | `/crates` | `ultimatedonutsmp2.command.crates` |
| `/create` | - | `/create [map]` | `ultimatedonutsmp2.command.create` |
| `/cuboid` | - | `/cuboid \|reload>` | `ultimatedonutsmp2.command.cuboid` |
| `/delhome` | - | `/delhome ` | `ultimatedonutsmp2.command.delhome` |
| `/delwarp` | - | `/delwarp ` | `ultimatedonutsmp2.command.delwarp` |
| `/discord` | - | `/discord` | `ultimatedonutsmp2.command.discord` |
| `/disguise` | - | `/disguise [player-name\|url]` or `/disguise ` | `ultimatedonutsmp2.command.disguise` |
| `/draw` | - | `/draw` | `ultimatedonutsmp2.command.draw` |
| `/duel` | - | `/duel [player\|accept\|deny\|claims\|reload]` | `ultimatedonutsmp2.command.duel` |
| `/ecsee` | - | `/ecsee ` | `ultimatedonutsmp2.command.ecsee` |
| `/enderchest` | `/ec` | `/enderchest [reload]` | `ultimatedonutsmp2.command.enderchest` |
| `/fakeplayer` | `/fplayer` | `/fakeplayer` | `ultimatedonutsmp2.command.fakeplayer` |
| `/feed` | - | `/feed [player]` | `ultimatedonutsmp2.command.feed` |
| `/ffa` | - | `/ffa [join\|reload\|arena ...]` | `ultimatedonutsmp2.command.ffa` |
| `/ffaarena` | - | `/ffaarena ` | `ultimatedonutsmp2.command.ffaarena` |
| `/ffastats` | - | `/ffastats [player]` | `ultimatedonutsmp2.command.ffastats` |
| `/findplayer` | `/fp` | `/findplayer ` | `ultimatedonutsmp2.command.findplayer` |
| `/fly` | - | `/fly [player]` | `ultimatedonutsmp2.command.fly` |
| `/flyspeed` | `/fs` | `/flyspeed <1-10> [player]` | `ultimatedonutsmp2.command.flyspeed` |
| `/freeze` | - | `/freeze ` or `/freeze reload` | `ultimatedonutsmp2.command.freeze` |
| `/friend` | - | `/friend` | `ultimatedonutsmp2.command.friend` |
| `/friends` | - | `/friends [list\|follow\|remove\|search\|following\|followers\|friends]` | `ultimatedonutsmp2.command.friends` |
| `/gamemode` | `/gm`, `/gmc`, `/gms`, `/gma`, `/gmsp` | `/gamemode [player]` | `ultimatedonutsmp2.command.gamemode` |
| `/god` | `/godmode` | `/god [player]` | `ultimatedonutsmp2.staff.god` |
| `/heal` | - | `/heal [player]` | `ultimatedonutsmp2.command.heal` |
| `/help` | - | `/help` | `ultimatedonutsmp2.command.help` |
| `/helpop` | - | `/helpop ` | `ultimatedonutsmp2.command.helpop` |
| `/hide` | - | `/hide [status\|scramble\|remove\|check \|list]` | `ultimatedonutsmp2.command.hide` |
| `/home` | - | `/home [name]` | `ultimatedonutsmp2.command.home` |
| `/homes` | - | `/homes` | `ultimatedonutsmp2.command.homes` |
| `/ignore` | - | `/ignore ` | `ultimatedonutsmp2.command.ignore` |
| `/invsee` | `/inventorysee` | `/invsee ` or `/invsee reload` | `ultimatedonutsmp2.command.invsee` |
| `/keys` | - | `/keys` | `ultimatedonutsmp2.command.keys` |
| `/kick` | - | `/kick [reason]` | `ultimatedonutsmp2.command.kick` |
| `/kill` | - | `/kill` | `ultimatedonutsmp2.command.kill` |
| `/leaderboard` | `/lb`, `/top`, `/leaderboards`, `/baltop` | `/leaderboard [type]` | `ultimatedonutsmp2.command.leaderboard` |
| `/leave` | - | `/leave` | `ultimatedonutsmp2.command.leave` |
| `/logs` | - | `/logs` | `ultimatedonutsmp2.command.logs` |
| `/maintenance` | - | `/maintenance ` | `ultimatedonutsmp2.command.maintenance` |
| `/menu` | `/donut`, `/dialog` | `/menu` | `ultimatedonutsmp2.command.menu` |
| `/meta` | `/farmingmeta` | `/meta` | `ultimatedonutsmp2.command.meta` |
| `/msg` | `/message`, `/tell`, `/whisper`, `/w` | `/msg ` | `ultimatedonutsmp2.command.msg` |
| `/mute` | - | `/mute [reason]` | `ultimatedonutsmp2.command.mute` |
| `/nightvision` | `/nv` | `/nightvision` | `ultimatedonutsmp2.command.nightvision` |
| `/offend` | - | `/offend [time]` | `ultimatedonutsmp2.staff.punishments.offend` |
| `/orders` | - | `/orders [my\|collect\|reload\|search query]` | `ultimatedonutsmp2.command.orders` |
| `/pay` | - | `/pay ` | `ultimatedonutsmp2.command.pay` |
| `/phantom` | - | `/phantom` | `ultimatedonutsmp2.command.phantom` |
| `/ping` | - | `/ping [player]` | `ultimatedonutsmp2.command.ping` |
| `/playerunwipe` | `/punwipe`, `/unwipe` | `/playerunwipe [confirm]` | `ultimatedonutsmp2.command.playerunwipe` |
| `/playerwipe` | `/pwipe`, `/wipe` | `/playerwipe [confirm]` | `ultimatedonutsmp2.command.playerwipe` |
| `/playtime` | `/pt` | `/playtime [player]` | `ultimatedonutsmp2.command.playtime` |
| `/pm` | `/togglepm`, `/privatemessages` | `/pm` | `ultimatedonutsmp2.command.pm` |
| `/portalmanager` | - | `/portalmanager ` | `ultimatedonutsmp2.command.portalmanager` |
| `/profileviewer` | `/pv` | `/profileviewer ` | `ultimatedonutsmp2.command.profileviewer` |
| `/punishments` | `/phistory` | `/punishments ` | `ultimatedonutsmp2.command.punishments` |
| `/pvp` | - | `/pvp [join\|leave\|kit\|stats\|top\|queue\|leaderboard\|history\|assign\|wand\|create\|setspawn\|setspawn2\|setlobby\|setboundary\|schematic\|reset\|reload]` | `ultimatedonutsmp2.command.pvp` |
| `/queue` | - | `/queue [join\|leave] [map]` | `ultimatedonutsmp2.command.queue` |
| `/randomteleport` | `/randomtp` | `/randomteleport` | `ultimatedonutsmp2.command.randomteleport` |
| `/ranks` | `/rank` | `/ranks` | `ultimatedonutsmp2.command.ranks` |
| `/removemoney` | - | `/removemoney ` | `ultimatedonutsmp2.command.removemoney` |
| `/removeshards` | - | `/removeshards ` | `ultimatedonutsmp2.command.removeshards` |
| `/rename` | - | `/rename ` | `ultimatedonutsmp2.command.rename` |
| `/renamehome` | - | `/renamehome ` | `ultimatedonutsmp2.command.renamehome` |
| `/reply` | `/r` | `/reply ` | `ultimatedonutsmp2.command.reply` |
| `/report` | - | `/report ` | `ultimatedonutsmp2.command.report` |
| `/rtp` | - | `/rtp [world]` | `ultimatedonutsmp2.command.rtp` |
| `/rtpq` | `/rtpqueue` | `/rtpq [join\|leave]` | `ultimatedonutsmp2.command.rtpq` |
| `/rules` | - | `/rules` | `ultimatedonutsmp2.command.rules` |
| `/safety` | - | `/safety [reload\|add [player]]` | `ultimatedonutsmp2.command.safety` |
| `/seehomes` | `/homesee` | `/seehomes ` | `ultimatedonutsmp2.command.seehomes` |
| `/sell` | - | `/sell` | `ultimatedonutsmp2.command.sell` |
| `/sellall` | - | `/sellall` | `ultimatedonutsmp2.command.sellall` |
| `/sellhand` | - | `/sellhand [amount]` | `ultimatedonutsmp2.command.sellhand` |
| `/sellhistory` | - | `/sellhistory` | `ultimatedonutsmp2.command.sellhistory` |
| `/sellmulti` | - | `/sellmulti [category]` | `ultimatedonutsmp2.command.sellmulti` |
| `/sellmultiplier` | - | `/sellmultiplier [category]` | `ultimatedonutsmp2.command.sellmulti` |
| `/sellprogress` | - | `/sellprogress [category]` | `ultimatedonutsmp2.command.sellprogress` |
| `/servers` | - | `/servers` | `ultimatedonutsmp2.command.servers` |
| `/serverwipe` | - | `/serverwipe ` | `ultimatedonutsmp2.command.serverwipe` |
| `/setafk` | - | `/setafk` | `ultimatedonutsmp2.command.setafk` |
| `/sethome` | - | `/sethome [name]` | `ultimatedonutsmp2.command.sethome` |
| `/setmoney` | - | `/setmoney ` | `ultimatedonutsmp2.command.setmoney` |
| `/setshards` | - | `/setshards ` | `ultimatedonutsmp2.command.setshards` |
| `/setspawn` | - | `/setspawn` | `ultimatedonutsmp2.command.setspawn` |
| `/settings` | - | `/settings` | `ultimatedonutsmp2.command.settings` |
| `/setwarp` | - | `/setwarp ` | `ultimatedonutsmp2.command.setwarp` |
| `/shardpay` | - | `/shardpay ` | `ultimatedonutsmp2.command.shardpay` |
| `/shards` | - | `/shards [player]` or `/shards everywhere [player]` | `ultimatedonutsmp2.command.shards` |
| `/shardshop` | - | `/shardshop` | `ultimatedonutsmp2.command.shardshop` |
| `/shop` | - | `/shop [reload]` | `ultimatedonutsmp2.command.shop` |
| `/social` | `/media` | `/social` | `ultimatedonutsmp2.command.social` |
| `/spawn` | - | `/spawn` | `ultimatedonutsmp2.command.spawn` |
| `/spawner` | `/spawners` | `/spawner [give\|info\|panel\|reload\|remove\|split]` | `ultimatedonutsmp2.command.spawner` |
| `/spawnstash` | `/stash` | `/spawnstash [type\|spawn\|list\|remove\|reload]` | `ultimatedonutsmp2.command.spawnstash` |
| `/staffchat` | `/sc` | `/staffchat ` | `ultimatedonutsmp2.command.staffchat` |
| `/stafflist` | - | `/stafflist` | `ultimatedonutsmp2.command.stafflist` |
| `/staffmode` | `/staff` | `/staffmode [player\|reload]` | `ultimatedonutsmp2.command.staffmode` |
| `/stats` | - | `/stats [player]` | `ultimatedonutsmp2.command.stats` |
| `/store` | - | `/store` | `ultimatedonutsmp2.command.store` |
| `/team` | - | `/team ` | `ultimatedonutsmp2.command.team` |
| `/teleport` | `/tp`, `/tphere`, `/tpall` | `/teleport \|all\|top\|x y z [world]>` | `ultimatedonutsmp2.command.teleport` |
| `/tempban` | - | `/tempban [reason]` | `ultimatedonutsmp2.command.tempban` |
| `/tempmute` | - | `/tempmute [reason]` | `ultimatedonutsmp2.command.tempmute` |
| `/topsell` | `/sellstats` | `/topsell [gui\|items\|volume\|sellers\|export]` | `ultimatedonutsmp2.command.topsell` |
| `/tpa` | - | `/tpa ` | `ultimatedonutsmp2.command.tpa` |
| `/tpacancel` | - | `/tpacancel` | `ultimatedonutsmp2.command.tpacancel` |
| `/tpaccept` | - | `/tpaccept [player]` | `ultimatedonutsmp2.command.tpaccept` |
| `/tpadeny` | - | `/tpadeny [player]` | `ultimatedonutsmp2.command.tpadeny` |
| `/tpahere` | - | `/tpahere ` | `ultimatedonutsmp2.command.tpahere` |
| `/tpahereauto` | - | `/tpahereauto` | `ultimatedonutsmp2.command.tpahereauto` |
| `/tpauto` | - | `/tpauto` | `ultimatedonutsmp2.command.tpauto` |
| `/twitter` | - | `/twitter` | `ultimatedonutsmp2.command.twitter` |
| `/ultimatedonutsmp2` | `/uds`, `/udsmp` | `/ultimatedonutsmp2 ` | `ultimatedonutsmp2.command.ultimatedonutsmp2` |
| `/unban` | `/pardon` | `/unban [reason]` | `ultimatedonutsmp2.command.unban` |
| `/unblacklist` | - | `/unblacklist [reason]` | `ultimatedonutsmp2.command.unblacklist` |
| `/unignore` | - | `/unignore ` | `ultimatedonutsmp2.command.unignore` |
| `/unmute` | - | `/unmute [reason]` | `ultimatedonutsmp2.command.unmute` |
| `/vanish` | - | `/vanish` | `ultimatedonutsmp2.command.vanish` |
| `/vcmute` | - | `/vcmute [reason]` | `ultimatedonutsmp2.staff.vcmute` |
| `/vcunmute` | - | `/vcunmute [reason]` | `ultimatedonutsmp2.staff.vcunmute` |
| `/voicechatconsent` | `/vcconsent`, `/voiceconsent` | `/voicechatconsent [revoke]` | `ultimatedonutsmp2.command.voicechatconsent` |
| `/warn` | - | `/warn [reason]` | `ultimatedonutsmp2.command.warn` |
| `/warp` | - | `/warp [name]` | `ultimatedonutsmp2.command.warp` |
| `/warpmanager` | - | `/warpmanager [name]` | `ultimatedonutsmp2.command.warpmanager` |
| `/worth` | `/prices` | `/worth [hand\|reload]` | `ultimatedonutsmp2.command.worth` |
Temporary punishment durations accept combined values such as `30s`, `15m`, `2h`, `5d`, or `5d 15m 30s`.
Running `/baltop` with no arguments opens the money leaderboard directly instead of the leaderboard type menu.
## Permissions
`true` means the permission is granted by default to all players, `op` means it defaults to server operators, and `false` means it must be granted explicitly. `ultimatedonutsmp2.admin` is the main admin parent node, and `ultimatedonutsmp2.command.*` grants access to all plugin commands.
### Main Parent Nodes
| Permission Node | Default | Description |
| --- | --- | --- |
| `ultimatedonutsmp2.admin` | `op` | Main admin parent node giving access to administrative commands, reload, wipe, and management systems |
| `ultimatedonutsmp2.command.*` | `op` | Grants access to execute all UltimateDonutSmp V2 commands |
| `ultimatedonutsmp2.staff.mode` | `op` | Staff moderation mode parent node (vanish, betterview, randomtp, staff list, tools) |
| `ultimatedonutsmp2.staff.alerts.receive` | `op` | Parent node for receiving staff alerts (`helpop` and `report`) |
| `ultimatedonutsmp2.staff.punishments.create` | `op` | Parent node for issuing punishments (`warn`, `kick`, `ban`, `mute`, `blacklist`) |
| `ultimatedonutsmp2.staff.punishments.remove` | `op` | Parent node for removing active punishments (`unban`, `unmute`, `unblacklist`) |
### System & Staff Permissions
| Permission | Default | Description |
| --- | --- | --- |
| `anvilmod.admin` | `op` | Admin access for anvil word moderation |
| `safety.add` | `op` | Add players to safety check bypass list |
| `safety.reload` | `op` | Reload safety configuration |
| `safety.use` | `true` | Standard safety system permission |
| `ultimatedonutsmp2.admin.addmoney` | `op` | Add money to player balances |
| `ultimatedonutsmp2.admin.amethysttool` | `op` | Give and reload amethyst tools |
| `ultimatedonutsmp2.admin.auctionhouse` | `op` | Reload and manage Auction House settings |
| `ultimatedonutsmp2.admin.chatlog` | `op` | Browse logged public chat messages |
| `ultimatedonutsmp2.admin.clearlag` | `op` | Trigger lag clear manually |
| `ultimatedonutsmp2.admin.crate` | `op` | Manage crate balances, chest bindings, and settings |
| `ultimatedonutsmp2.admin.crate.keyall` | `op` | Trigger key-all rewards manually |
| `ultimatedonutsmp2.admin.crate.reload` | `op` | Reload crate configuration |
| `ultimatedonutsmp2.admin.cuboid` | `op` | Create, bind, and manage cuboid regions |
| `ultimatedonutsmp2.admin.delwarp` | `op` | Delete public warp points |
| `ultimatedonutsmp2.admin.duels` | `op` | Manage duel settings and arenas |
| `ultimatedonutsmp2.admin.ecsee` | `op` | View other players' Ender Chest contents |
| `ultimatedonutsmp2.admin.enderchest` | `op` | Reload Ender Chest settings |
| `ultimatedonutsmp2.admin.features` | `op` | Access and toggle runtime feature switches |
| `ultimatedonutsmp2.admin.ffa` | `op` | Manage FFA arenas and settings |
| `ultimatedonutsmp2.admin.freeze` | `op` | Reload freeze settings |
| `ultimatedonutsmp2.admin.invsee` | `op` | Reload Invsee settings |
| `ultimatedonutsmp2.admin.logs` | `op` | View command log history |
| `ultimatedonutsmp2.admin.maintenance` | `op` | Manage maintenance mode |
| `ultimatedonutsmp2.admin.maintenance.bypass` | `op` | Join server while maintenance mode is enabled |
| `ultimatedonutsmp2.admin.optimize` | `op` | Access runtime optimization controls |
| `ultimatedonutsmp2.admin.orders` | `op` | Manage and reload Orders board settings |
| `ultimatedonutsmp2.admin.playerunwipe` | `op` | Preview and restore a wiped player's stored data |
| `ultimatedonutsmp2.admin.playerwipe` | `op` | Preview and wipe a single player's stored data |
| `ultimatedonutsmp2.admin.portalmanager` | `op` | Create, display, and manage RTP portals |
| `ultimatedonutsmp2.admin.punishments.exempt` | `op` | Cannot be punished by staff who lack the exempt bypass |
| `ultimatedonutsmp2.admin.punishments.exempt.bypass` | `op` | Punish players who are exempt from being punished |
| `ultimatedonutsmp2.admin.pvp` | `op` | Manage the ranked PvP arena and its kits |
| `ultimatedonutsmp2.admin.reload` | `op` | Reload all UltimateDonutSmp V2 configurations |
| `ultimatedonutsmp2.admin.removemoney` | `op` | Remove money from player balances |
| `ultimatedonutsmp2.admin.sellstats` | `op` | View top sell statistics and economy metrics |
| `ultimatedonutsmp2.admin.serverwipe` | `op` | Execute guarded server wipe operations |
| `ultimatedonutsmp2.admin.setmoney` | `op` | Set player money balances |
| `ultimatedonutsmp2.admin.setup` | `op` | Use interactive setup status and tools |
| `ultimatedonutsmp2.admin.setwarp` | `op` | Set public warp points |
| `ultimatedonutsmp2.admin.shards` | `op` | Inspect Shards Everywhere status |
| `ultimatedonutsmp2.admin.shop` | `op` | Reload shop settings |
| `ultimatedonutsmp2.admin.spawner` | `op` | Give and manage Donut-style spawners |
| `ultimatedonutsmp2.admin.spawnstash` | `op` | Manage bait spawn stashes |
| `ultimatedonutsmp2.admin.staffmode` | `op` | Reload Staff Mode settings |
| `ultimatedonutsmp2.admin.statswipe` | `op` | Execute player stats wipe |
| `ultimatedonutsmp2.admin.teleportareas.delete` | `op` | Delete configured teleport areas |
| `ultimatedonutsmp2.admin.warpmanager` | `op` | Manage public warps |
| `ultimatedonutsmp2.admin.worth` | `op` | Reload sell/worth settings |
| `ultimatedonutsmp2.command.flyspeed` | `op` | Use `/flyspeed` |
| `ultimatedonutsmp2.command.offend` | `op` | Use `/offend` (parent of `ultimatedonutsmp2.staff.punishments.offend`) |
### Staff Moderation & Alert Permissions
| Permission | Default | Description |
| --- | --- | --- |
| `ultimatedonutsmp2.staff.alerts.bypass-cooldown` | `op` | Bypass report and helpop cooldowns |
| `ultimatedonutsmp2.staff.alerts.receive` | `op` | Receive helpop and report staff alerts |
| `ultimatedonutsmp2.staff.alts` | `op` | Check IP history and alt accounts |
| `ultimatedonutsmp2.staff.chat.bypass.delay` | `op` | Bypass global chat delay |
| `ultimatedonutsmp2.staff.chat.bypass.filter` | `op` | Bypass global chat filter |
| `ultimatedonutsmp2.staff.chat.bypass.mute` | `op` | Bypass global chat mute |
| `ultimatedonutsmp2.staff.chat.clear` | `op` | Clear chat screen visually |
| `ultimatedonutsmp2.staff.chat.delay` | `op` | Set global chat delay |
| `ultimatedonutsmp2.staff.chat.mute` | `op` | Mute global chat |
| `ultimatedonutsmp2.staff.chat.unmute` | `op` | Unmute global chat |
| `ultimatedonutsmp2.staff.chat.use` | `op` | Send and receive staff chat |
| `ultimatedonutsmp2.staff.fakeplayer` | `op` | Spawn fake player bait entities |
| `ultimatedonutsmp2.staff.fakeplayer.alert` | `op` | Receive fake player bait attack alerts |
| `ultimatedonutsmp2.staff.fakeplayer.bypass` | `op` | Bypass fake player bait triggers |
| `ultimatedonutsmp2.staff.feed` | `op` | Feed players |
| `ultimatedonutsmp2.staff.fly` | `op` | Toggle flight mode |
| `ultimatedonutsmp2.staff.flyspeed` | `op` | Adjust flying speed for yourself or another player |
| `ultimatedonutsmp2.staff.freeze` | `op` | Freeze/unfreeze players for inspection |
| `ultimatedonutsmp2.staff.freeze.alert` | `op` | Receive player freeze alerts |
| `ultimatedonutsmp2.staff.freeze.exempt` | `op` | Exempt from being frozen by staff |
| `ultimatedonutsmp2.staff.gamemode` | `op` | Change own gamemode |
| `ultimatedonutsmp2.staff.gamemode.others` | `op` | Change other players' gamemodes |
| `ultimatedonutsmp2.staff.god` | `op` | Toggle god mode |
| `ultimatedonutsmp2.staff.heal` | `op` | Heal players |
| `ultimatedonutsmp2.staff.helpop.receive` | `op` | Receive helpop request alerts |
| `ultimatedonutsmp2.staff.invsee` | `op` | Inspect player inventories |
| `ultimatedonutsmp2.staff.invsee.modify` | `op` | Modify player inventories in invsee |
| `ultimatedonutsmp2.staff.mode.betterview` | `op` | Toggle better view in staff mode |
| `ultimatedonutsmp2.staff.mode.others` | `op` | Toggle staff mode for other players |
| `ultimatedonutsmp2.staff.mode.randomtp` | `op` | Random teleport in staff mode |
| `ultimatedonutsmp2.staff.mode.seevanished` | `op` | See vanished staff members |
| `ultimatedonutsmp2.staff.mode.stafflist` | `op` | Open online staff list |
| `ultimatedonutsmp2.staff.mode.vanish` | `op` | Toggle vanish in staff mode |
| `ultimatedonutsmp2.staff.profileviewer` | `op` | View player profiles and homes |
| `ultimatedonutsmp2.staff.seehomes` | `op` | Browse any player's homes and teleport to them |
| `ultimatedonutsmp2.staff.punishments.ban` | `false` | Apply ban and tempban punishments |
| `ultimatedonutsmp2.staff.punishments.blacklist` | `false` | Apply blacklist punishments |
| `ultimatedonutsmp2.staff.punishments.delete` | `op` | Delete punishment logs from GUI |
| `ultimatedonutsmp2.staff.punishments.mute` | `false` | Apply mute and tempmute punishments |
| `ultimatedonutsmp2.staff.punishments.offend` | `op` | Apply preset offense punishments from `offenses.yml` |
| `ultimatedonutsmp2.staff.punishments.unban` | `false` | Remove active bans |
| `ultimatedonutsmp2.staff.punishments.unblacklist` | `false` | Remove active blacklists |
| `ultimatedonutsmp2.staff.punishments.unmute` | `false` | Remove active mutes |
| `ultimatedonutsmp2.staff.punishments.view` | `op` | View punishment history |
| `ultimatedonutsmp2.staff.rename` | `op` | Rename items |
| `ultimatedonutsmp2.staff.report.receive` | `op` | Receive player report alerts |
| `ultimatedonutsmp2.staff.spawnstash` | `op` | Place and inspect spawn stash bait |
| `ultimatedonutsmp2.staff.spawnstash.alert` | `op` | Receive spawn stash trigger alerts |
| `ultimatedonutsmp2.staff.spawnstash.bypass` | `op` | Bypass spawn stash detection |
| `ultimatedonutsmp2.staff.teleport` | `op` | Access staff teleport tools |
| `ultimatedonutsmp2.staff.vcmute` | `false` | Apply voice chat mute punishments |
| `ultimatedonutsmp2.staff.vcunmute` | `false` | Remove voice chat mute punishments |
### Player & Feature Permissions
| Permission | Default | Description |
| --- | --- | --- |
| `donutauction.use` / `ultimatedonutsmp2.auctionhouse.use` | `true` / `false` | Open Auction House GUI |
| `donutauction.buy` / `ultimatedonutsmp2.auctionhouse.buy` | `true` / `false` | Buy items on Auction House |
| `donutauction.sell` / `ultimatedonutsmp2.auctionhouse.sell` | `true` / `false` | Sell items on Auction House |
| `donutauction.my` / `ultimatedonutsmp2.auctionhouse.my` | `true` / `false` | View own listings on Auction House |
| `donutauction.claims` / `ultimatedonutsmp2.auctionhouse.claims` | `true` / `false` | Collect claims from Auction House |
| `donutauction.cancel` / `ultimatedonutsmp2.auctionhouse.cancel` | `true` / `false` | Cancel own listings on Auction House |
| `donutauction.limit` / `ultimatedonutsmp2.auctionhouse.limit` | `true` / `false` | Check listing limits on Auction House |
| `donutauction.fastbuy` / `ultimatedonutsmp2.auctionhouse.fastbuy` | `false` / `op` | Fast buy command access |
| `donutauction.fastsell` / `ultimatedonutsmp2.auctionhouse.fastsell` | `false` / `op` | Fast sell command access |
| `ultimatedonutsmp2.command.friend` | `true` | Use `/friend` |
| `ultimatedonutsmp2.command.sellmulti` | `true` | Open the sell multiplier menu (`/sellmulti`, `/sellmultiplier`) |
| `ultimatedonutsmp2.command.sellprogress` | `true` | Open the sell multiplier progress menu (`/sellprogress`) |
| `ultimatedonutsmp2.enderchest` | `true` | Open custom Ender Chest |
| `ultimatedonutsmp2.friends` | `true` | Friends and follow system |
| `ultimatedonutsmp2.helpop` | `true` | Use `/helpop` to request staff help |
| `ultimatedonutsmp2.hide.admin` | `op` | Manage and inspect player disguises |
| `ultimatedonutsmp2.hide.bypass` | `op` | Bypass disguise restrictions |
| `ultimatedonutsmp2.hide.disguise` | `op` | Change skin and disguise alias |
| `ultimatedonutsmp2.hide.scramble` | `op` | Scramble public username |
| `ultimatedonutsmp2.ignore` | `true` | Ignore and unignore players |
| `ultimatedonutsmp2.ignore.bypass` | `op` | Bypass private message ignore filter |
| `ultimatedonutsmp2.message` | `true` | Send and reply to private messages |
| `ultimatedonutsmp2.message.bypass-disabled` | `op` | Bypass recipient disabled PMs |
| `ultimatedonutsmp2.message.toggle` | `true` | Toggle private messages on/off |
| `ultimatedonutsmp2.report` | `true` | Report players to online staff |
| `ultimatedonutsmp2.servers` | `false` | View network server status GUI |
| `ultimatedonutsmp2.shards.everywhere` | `false` | Receive passive Shards Everywhere rewards |
| `ultimatedonutsmp2.shardshop` | `true` | Open Shard Shop GUI |
| `ultimatedonutsmp2.spawner.bypass` | `false` | Break spawners without a Silk Touch pickaxe while `REQUIRE_SILK_TOUCH` is enabled |
| `media` | `false` | Display configurable Media tablist badge (requires explicit LuckPerms assignment, not auto-granted to OP) |
| `rank.media` | `false` | Display configurable Media tablist badge legacy alias |
| `rank.media.plus` | `false` | Display configurable Media+ tablist badge (requires explicit LuckPerms assignment, not auto-granted to OP) |
| `rank.media.include` | `false` | Include player in media badge handling (requires explicit LuckPerms assignment, not auto-granted to OP) |
## Placeholders
UltimateDonutSmp V2 includes built-in [PlaceholderAPI](https://placeholderapi.com/) expansion modules for player economy, statistics, locations, countdowns, leaderboards, player ranks, and disguise states.
Placeholder expansion identifiers supported: `%economy_*%`, `%uds_*%`, `%ultimatedonutsmp2_*%`, `%economylb_*%`, `%economyrank_*%`, and `%hide_*%`.
### Economy & Player Placeholders (`%economy_*%` / `%uds_*%` / `%ultimatedonutsmp2_*%`)
| Placeholder | Description | Example Output |
| --- | --- | --- |
| `%economy_money%` | Raw money balance | `12500.50` |
| `%economy_money_formatted%` | Formatted money with currency symbol | `$12,500.50` |
| `%economy_money_short%` / `%economy_nicestMoney%` | Compact formatted money amount | `12.5k` |
| `%economy_money_short_formatted%` | Formatted compact money with symbol | `$12.5k` |
| `%economy_shards%` | Raw shards balance | `500` |
| `%economy_shards_formatted%` | Formatted shards balance | `500 Shards` |
| `%economy_shards_short%` / `%economy_nicestShards%` | Compact formatted shards amount | `1.2k` |
| `%economy_shards_short_formatted%` | Formatted compact shards with symbol | `1.2k Shards` |
| `%economy_kills%` | Total player kill count | `42` |
| `%economy_deaths%` | Total player death count | `10` |
| `%economy_killstreak%` | Current active killstreak | `5` |
| `%economy_highestkillstreak%` | Highest recorded killstreak | `12` |
| `%economy_playtime%` | Total formatted playtime duration | `3d 14h 22m` |
| `%economy_blocksplaced%` | Total blocks placed count | `15400` |
| `%economy_blocksbroken%` | Total blocks broken count | `48200` |
| `%economy_mobskilled%` | Total mob kills count | `1280` |
| `%economy_moneyspent%` | Total money spent in shop/marketplaces | `50000.00` |
| `%economy_moneymade%` | Total money earned from selling/markets | `120000.00` |
| `%economy_team%` | Player's team name | `TITANS` or `none` |
| `%economy_username%` | Public display username (respects `/hide` disguise) | `Steve` |
| `%economy_ping%` | Player ping latency in ms | `24` |
| `%economy_x%` / `%economy_coord_x%` | Player X coordinate (respects coordinate obfuscation) | `120` |
| `%economy_y%` / `%economy_coord_y%` | Player Y coordinate (respects coordinate obfuscation) | `64` |
| `%economy_z%` / `%economy_coord_z%` | Player Z coordinate (respects coordinate obfuscation) | `-350` |
| `%economy_coords%` / `%economy_location%` | Formatted X, Y, Z coordinates string | `120, 64, -350` |
| `%economy_randomized_coords%` | Returns `true`/`false` if coordinate obfuscation is active | `false` |
| `%economy_donutplus%` | Displays Donut+ badge if player has permission | `&d&lDonut+ &r` |
| `%economy_keyall_countdown%` | Formatted countdown until automatic key-all reward | `05:32` |
| `%economy_booster_countdown%` | Formatted countdown for active shard booster | `14:20` or `inactive` |
| `%economy_rtp_countdown%` | Formatted countdown for RTP zone cooldown | `00:45` or `disabled` |
| `%economy_billford_countdown%` | Formatted countdown for Billford rotation | `02:15:00` or `disabled` |
| `%economy_shard_cuboid_display%` | Shard cuboid display status indicator | `[Inside Zone]` |
| `%economy_shard_cuboid_status%` | Shard cuboid status | `inside` or `outside` |
| `%economy_shard_cuboid_name%` | Name of active shard cuboid region | `MainShardArea` or `none` |
| `%economy_money_symbol%` | Currency symbol for money | `$` |
| `%economy_money_symbol_colored%` | Colored currency symbol for money | `&$` |
| `%economy_shards_symbol%` | Currency symbol for shards | `⬟` |
| `%economy_shards_symbol_colored%` | Colored currency symbol for shards | `&d⬟` |
### Leaderboard Placeholders (`%economylb_*%` / `%economy_top_*%`)
Syntax: `%economylb___%` or `%economy_top___%`
- **Leaderboard Types (``)**: `money`, `shards`, `kills`, `deaths`, `killstreak`, `highestkillstreak`, `playtime`, `blocksplaced`, `blocksbroken`, `mobskilled`, `moneyspent`, `moneymade`
- **Positions (``)**: Rank index starting from `1` (e.g. `1`, `2`, `3`, `10`)
- **Properties (``)**:
- `name`: Username of the player at position
- `value`: Full un-truncated value of the player at position
- `value_short` / `short`: Compact formatted value (e.g. `15.4M`)
- `rank`: Rank number index
- `display`: Pre-formatted entry line e.g. `#1 Notch: $15.4M`
Examples:
```
%economylb_money_1_name% -> Notch
%economylb_money_1_value% -> $15,400,000.00
%economylb_money_1_value_short% -> 15.4M
%economylb_kills_3_display% -> #3 Alex: 450
%economy_top_shards_1_name% -> EnderKing
```
### Rank Leaderboard Placeholders (`%economyrank_*%`)
Syntax: `%economyrank_%`
Returns the player's personal rank position number on the specified leaderboard type (e.g. `1`, `15`, or `0` if unranked).
Examples:
- `%economyrank_money%` -> `5`
- `%economyrank_kills%` -> `1`
### Hide & Disguise Placeholders (`%hide_*%`)
Syntax: `%hide_%`
| Placeholder | Description | Example Output |
| --- | --- | --- |
| `%hide_active%` | Returns `true` or `false` if player has an active disguise or alias | `true` |
| `%hide_name%` / `%hide_public_name%` | Player's formatted public display name | `ShadowNinja` |
| `%hide_plain_name%` | Player's plain unformatted public display name | `ShadowNinja` |
| `%hide_mode%` | Active disguise mode (`NONE`, `SCRAMBLE`, `ALIAS`, `DISGUISE`) | `ALIAS` |
| `%hide_alias%` | Active custom alias string | `ShadowNinja` |
| `%hide_skin%` | Active custom skin username | `CustomSkin123` |
## Support
| Channel | Use it for |
| --- | --- |
| [GitHub Issues](https://github.com/BeestoXd/UltimateDonutSMP-V2/issues) | Bug reports, feature requests, and documentation problems |
| [Discord](https://dsc.gg/hellstarr) | Setup help, configuration questions, and general discussion |
| [Wiki](https://github.com/BeestoXd/UltimateDonutSMP-V2/wiki) | Guides, configuration reference, and the FAQ |
When reporting an issue, include:
- Plugin version and jar file name
- Server software and version (Paper, Purpur, Pufferfish, Spigot, or Folia)
- Java version
- Relevant configuration snippets with secrets removed
- Console errors or stack traces
- Steps to reproduce the issue
Do not share database credentials, Redis passwords, Discord webhook URLs, or other sensitive server data in public channels.Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 26.1, 26.1.1, 26.1.2
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Hangar — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
UltimateDonutSMP-V2 is a free Minecraft Java mod. Compatible with Minecraft 26.1, 26.1.1, 26.1.2, 26.2. Downloaded 280 times (via Hangar). Download it and open it directly in the game.