Repository navigation
Installation and Setup
- Put ProtocolLib + PlaceholderAPI + this jar in
plugins/. - Start the server once. Files appear under
plugins/UltimateDonutSmp2/. - Stand at spawn and run
/setspawn. Then pick storage (below) if you need MySQL or Redis.
Reload later with /uds reload. config.yml ·
database.yml · network.yml
| Requirement | Supported | Notes |
|---|---|---|
| Minecraft |
26.1.2 – 26.2
|
Checked in onEnable(). Outside this range the plugin disables itself. |
| Java client | 1.21.6 or newer | 1.21.5 and older cannot render Dialog API menus. Block them on the proxy or ViaVersion. See Dialog API & older clients. |
| Server | Paper, Purpur, Pufferfish, Spigot, Folia | Folia uses the plugin's own scheduler abstraction; everything else uses Bukkit's. |
| Java | Java 21+ | The plugin is compiled with --release 21. Use the JDK your Paper or Folia build requires. /ultimatedonutsmp2 setup reports the running Java version. |
| Required plugins | ProtocolLib, PlaceholderAPI | Both are hard dependencies. Missing either one disables UltimateDonutSMP V2. |
| Optional plugins | Vault, LuckPerms, SkinsRestorer, Apollo, Floodgate, Geyser, Simple Voice Chat, WorldEdit or FAWE | See Placeholders & Integrations. |
Install ProtocolLib and PlaceholderAPI in plugins/ before the first boot. The plugin does not
soft-fail and wait for them later.
Menus use Mojang's native Dialog API, added in Java Edition 1.21.6. A player on 1.21.5 or
older (ViaVersion, ViaBackwards, or an old jar) sees broken, unusable screens. /ah, /menu,
/homes, /pay, and similar will not work for that player. This cannot be fixed in the plugin —
the old client has no dialog renderer.
The chest-menu fallback in menus.yml is server-wide: it only runs when this server lacks
Paper's Dialog API. It does not switch per player. Require 1.21.6+ and block older protocol
versions on Velocity, BungeeCord, or ViaVersion. Full detail:
Dialog API & older clients.
Bedrock clients do not implement Java dialogs. Geyser does not change that — dialog-first commands
(/menu, /ah, /pay, and similar) stay Java-only.
If Bedrock players should use Quick Buy pinning, Orders text prompts, or Homes forms,
install Floodgate on the backend and pair it with Geyser. /shop still opens a chest grid
without Floodgate; pinning then uses the chest catalogue instead of Bedrock forms. See
Dialog API & older clients — Bedrock.
- Build the jar, or use a release build:
The shaded artifact is
mvn clean package
target/UltimateDonutSmp2-1.0.jar. - Copy it into the server's
plugins/folder, next to ProtocolLib and PlaceholderAPI. - Start the server. On first boot the plugin writes
plugins/UltimateDonutSmp2/and extracts every bundled YAML file pluslanguages/.
A leftover messages.yml from an older install is read as a last-resort fallback for en_US only.
New installs never create one. Edit languages/<locale>.yml instead — see
Localization & Messages.
Stand where you want the spawn hub and run:
/setspawn
That location is used by /spawn, by portals that target spawn, and — unless
SETTINGS.RESPAWN-ON-BED is true in config.yml — by every death. Until you
set it, deaths fall back to vanilla respawn.
Then:
- Pick a language with
LANGUAGE.ACTIVEin config.yml. - Turn features on or off with
/ultimatedonutsmp2 featuresorFEATURES.<KEY>.ENABLED. - If this server is part of a network, fill in database.yml and network.yml before you open the doors.
/ultimatedonutsmp2 is also /uds and /udsmp.
Coming from UltimateDonutSMP v1, leave plugins/UltimateDonutSmp in place and run
/uds import v1 then /uds import v1 confirm. Details:
Migrating from UltimateDonutSMP (v1).
The keys are DATABASE and REDIS, not a STORAGE root. The shipped file looks like this:
DATABASE:
TYPE: SQLITE # SQLITE, MYSQL or MONGODB
SQLITE:
FILE: data/data.db
MYSQL:
HOST: localhost
PORT: 3306
DATABASE: ultimatedonutsmp2
USERNAME: root
PASSWORD: ''
CREATE-DATABASE: true
PARAMETERS: useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8
MONGODB:
URI: mongodb://localhost:27017
DATABASE: ultimatedonutsmp2
CACHE-FILE: data/mongodb-cache.db
SYNC-ON-AUTOSAVE: trueSQLite is the default. The file lands at plugins/UltimateDonutSmp2/data/data.db, not at the
plugin root. Copy that path — not database.db — if you are moving a server.
MySQL is the right choice when several servers must share balances, homes, punishments,
auctions and orders. CREATE-DATABASE: true issues CREATE DATABASE IF NOT EXISTS on connect.
MongoDB keeps a local cache file so short outages do not take the server down. Set
SYNC-ON-AUTOSAVE if you want the cache flushed on every autosave rather than only on shutdown.
A full key-by-key breakdown is on database.yml.
Redis is configured in database.yml, not in network.yml:
REDIS:
ENABLED: true
HOST: localhost
PORT: 6379
PASSWORD: ''
DATABASE: 0Leave ENABLED false on a single server. Nothing else depends on it.
network.yml then identifies this server and lists its siblings:
NETWORK:
ENABLED: true
LOCAL_SERVER_ID: crystal
LOCAL_DISPLAY_NAME: CrystalLOCAL_SERVER_ID must match the name the proxy uses for this backend. Redis carries staff chat,
helpop, reports, maintenance state, cross-server duels and order sync. Player transfers use
BungeeCord plugin messaging, so the names must also match the proxy configuration.
Folia is supported. All scheduling goes through SpigotScheduler, which routes work to Folia's
global, region, entity or async schedulers when those classes exist, and to Bukkit's scheduler
everywhere else. You do not configure this; it is detected from
io.papermc.paper.threadedregions.RegionizedServer.
Cuboids, portals, spawners, crystal placement and similar region-owned work run on the owning region thread. Database work is already async.
/ultimatedonutsmp2 reload (or /uds reload) re-reads the YAML files and most managers. Missing
keys from a new plugin version are merged into your files and the previous copies land in
config-backups/<timestamp>/.
The one exception is dialog.yml → PAUSE-SCREEN. That datapack is written during onLoad(),
before worlds load, so a change there needs a full server restart.
| Task | Where |
|---|---|
| Toggle features |
/ultimatedonutsmp2 features or FEATURES in config.yml
|
| Set prices | worth.yml |
| Set up crates | Crates & Spawners |
| Set up duels / FFA / ranked arena | Duels & Instanced FFA, Ranked PvP Arena |
| Grant staff tools | Staff & Security, Commands & Permissions |
| Wire placeholders | Placeholders & Integrations |
UltimateDonutSMP V2 1.0 · Paper / Purpur / Pufferfish / Spigot / Folia · Minecraft 26.1.2–26.2 · Java clients 1.21.6+
- Economy & Marketplaces
- Crates & Spawners
- Duels & Instanced FFA
- Ranked PvP Arena
- Cuboids & Portals
- Staff & Security
Core
Menus & display
Economy
Progression
PvP
Staff