Skip to content

DaisyVotes — Migrating & Upgrading

Read this before you drop in a new JAR. Upgrades are listed newest first; if you are coming from 2.0.x, read the 2.5.0 section — it resets vote statistics.

Nothing resets or migrates. Replace the JAR and restart — no config change is required.

If you run more than one server, or use MySQL

Section titled “If you run more than one server, or use MySQL”

Two faults in earlier builds were silent — nothing errored, the only symptom was numbers that didn’t add up:

A vote on one server and a shop purchase on another, close together, could overwrite one another. Each server locked a player’s row only within its own JVM, which does nothing against a second server writing the same row at the same time. Player-record updates are now locked across the whole network when Redis is enabled. Single-server setups were never affected. See Locking a player’s record across servers.

&c, &l, §a, and both hex spellings (&#FFC8DD and &x&F&F&C&8&D&D) now work everywhere MiniMessage does — messages, menu titles, item names, lore, action bars, boss bars — mixed freely with MiniMessage tags in the same line. A colour code inside a value (a player’s name) still renders as literal text, which is deliberate. See Legacy colour codes.

New in 2.6.2

Anywhere a material goes — menus.yml, rewards.yml, shop.yml — you can now write nexo:ruby_sword, oraxen:ruby_sword, or itemsadder:mypack:ruby instead of a vanilla id: site candles, shop icons, wheel prizes and previews, and reward icons all resolve it. No plugin dependency is added; DaisyVotes reaches whichever of the three is installed by reflection, and reports a missing plugin or unknown id through /daisyvotes doctor instead of failing quietly. See Custom items.

backend: postgres in storage.yml now actually works — the JDBC driver was never bundled before, so it could only fail at startup. Remember to set remote.port: 5432; the shipped default is MySQL’s 3306. SQLite and MySQL/MariaDB remain the well-travelled paths; Postgres is the newest of the three. See Storage & Data.

Configs are organised differently, and comments stop piling up

Section titled “Configs are organised differently, and comments stop piling up”

A freshly generated config.yml now runs in roughly the order you’d work through it — license first, then how voting behaves, then the features you switch on, then presentation, ending with the long messages block. Your existing files are not touched by this: upgrades only ever append settings that are missing, exactly as before, and never reorder or rewrite a file you’ve already edited.

Separately, a real bug in the merge that adds those new settings is fixed: it used to leave a duplicate of some comment blocks behind on certain upgrades, so a config that had been through several releases could carry the same paragraph two or three times over. That no longer happens going forward; the extra copies already in your file from before are cosmetic and safe to delete by hand.

storage.yml also now documents mariadb as a valid backend value alongside mysql — it always worked, it just wasn’t written down.

Nothing in 2.6.0 resets or migrates data. Your configs, database, receiver keys and v2 tokens are all untouched, and new config keys are appended to your existing files with their comments — nothing you wrote is removed or reordered.

Four separate defects could make a player’s recorded votes disagree with the votes they cast. All four are fixed, but votes already recorded wrongly are not repaired automatically:

  • A player could be split into two records. Most voting sites do not send a Minecraft UUID, so when a vote arrived while the player was offline, DaisyVotes invented one from their name. Votes cast while online and while offline landed under two different identities, and every total split between them. If your leaderboard has a player who looks like they lost votes, this is why.
  • Simultaneous votes could be counted once. Two votes for the same player arriving together were both credited to the same starting total.
  • On a multi-server setup sharing one MySQL database, one server could overwrite counts another had just saved.
  • Daily, weekly and monthly counters were stale. They were only reset when that player next voted, so a player who last voted on Tuesday still showed Tuesday’s daily count on Friday — in-game, in PlaceholderAPI, and on any website reading the database.
  • Every vote-menu button is configurable — slot, material, name, lore, and enabled: false to remove one. See Vote sites & menu.
  • Per-site vote cooldowns, either a rolling window (every: "8h") or a fixed daily reset in the site’s own timezone.
  • World restrictions for servers with per-world inventories. See Configuration.
  1. Stop the server.
  2. Replace the JAR. No backup is required for 2.6.0 itself — but if you are coming from 2.0.x, back up first and read the 2.5.0 section below.
  3. Start the server and run /daisyvotes doctor.

Your configuration is not affected. Every config file is read as-is and keeps your values and your comments. Your receiver’s RSA key and v2 tokens are unchanged, so you do not need to re-register anything with your voting sites.

Other things that changed in 2.5.0:

  • Vote-party progress moved from a chat broadcast to a boss bar that appears on a vote and fades. vote-party.broadcast-progress-every now defaults to 0 on fresh installs; if you already set it, your value is kept.
  • visuals.banner-style no longer does anything. The key is kept so existing configs still parse.
  • Top-voter awards now run at 00:05 in wheel.reset-zone instead of on an interval sweep.
  • Config files are watched again, so editing one on disk applies without /daisyvotes reload.

The big one: DaisyVotes now has its own built-in vote receiverNuVotifier is no longer required. It also adds an optional Redis cross-server mode.

On first start, DaisyVotes automatically imports your plugins/Votifier/config.yml — port, tokens, and RSA keys — into receiver.yml. Your vote sites keep working unchanged.

  1. Update the JAR and start the server. Check /daisyvotes receiver status (should be listening); /daisyvotes doctor confirms the import.
  2. Once votes arrive, you can remove NuVotifier. Prefer to keep it? Set mode: NuVotifierBridge in receiver.yml.
  3. Re-run an import any time with /daisyvotes receiver import.

New config files: receiver.yml (the receiver) and network.yml (cross-server). For a network, also switch storage.yml to a shared MySQL/MariaDB database.

Also new: cumulative rewards (every Nth vote), a /daisyvotes doctor setup diagnostic, stronger anti-fraud (strict mode + duplicate detection), a developer API (TopVoterAwardEvent), and a redesigned pastel GUI suite.

  • Config keys are now kebab-case. requiredVotesrequired-votes, voteMenuvote-menu, displayNamedisplay-name, and so on.
  • Five config files instead of the old set: config.yml, menus.yml, rewards.yml, shop.yml (new), and storage.yml.
  • Data is SQLite via Sculk Data, with a fuller set of tables (points, wheel, shop, top-voter, and vote-event history). See Storage & Data.
  • New reward categories: wheel-rewards, cumulative-rewards, plus per-period Top Voter rank rewards in config.yml.

DaisyVotes upgrades your files on startup so you don’t have to hand-edit them:

  • menus.yml keys are converted from camelCase to kebab-case automatically (voteMenuvote-menu, displayNamedisplay-name, …). Your values and comments are preserved, and a backup is written to menus.yml.backup-before-kebab-keys.
  • Legacy menu layouts (older multi-row formats) are upgraded to the current candle layout.
  • The database schema is migrated forward; existing vote counts are kept.
  1. Back up first. Stop the server and copy your plugins/DaisyVotes/ folder (configs and the database file). See Storage & Data.

  2. Swap the JAR. Replace the old DaisyVotes JAR in plugins/ with the new build.

  3. Start the server. DaisyVotes generates shop.yml, migrates menus.yml keys (with a backup), and upgrades the database.

  4. Review the new options. Skim config.yml for the new sections — points, wheel, discord, top-voters — and enable what you want.

  5. Verify. Run /daisyvotes doctor, then /daisyvotes testvote <player> to confirm rewards still land.

  • NuVotifier is no longer a dependency. DaisyVotes receives votes itself and imports your old config automatically; keep NuVotifier only if you set mode: NuVotifierBridge in receiver.yml.
  • Any tooling or docs that referenced camelCase config keys must use kebab-case now.
  • If you previously hand-edited menus.yml, confirm your customizations survived the conversion (the backup is right next to it).
  • Reward command lines are unchanged in format, but double-check they still match your other plugins after the upgrade.