Skip to main content

DadaProgressions beta-26.4

Beta 26.4 is the main reliability hardening release preceding beta 26.5. It focuses on safer reward delivery, more accurate event progress, stricter configuration validation, bounded caches, and reproducible builds.

Crash-safe reward claims

Reward claims now create a durable PENDING reservation before external reward commands are executed.

This protects against automatic duplicate rewards if the server stops after a reward command is dispatched but before the final claimed state reaches disk.

Administrators can resolve a pending claim with:

/dp admin resolveclaim <goalId> <player> <tierPercent> <markclaimed|retry>

Use markclaimed when the reward was already delivered. Use retry only after confirming that the reward was not delivered.

Corrected event accounting

  • Cancelled damage events no longer grant progress.
  • Zero final damage no longer grants progress.
  • Projectile damage can be attributed to the player shooter.
  • Crafting progress accounts for recipe result amount and shift-click multi-crafting.
  • Playtime uses actual elapsed online time instead of a global repeating minute tick.

API hardening

Public progress API calls made from asynchronous plugin tasks are marshalled to the Bukkit primary thread before mutating plugin state.

Progress methods now return booleans based on whether progress was actually applied, rather than merely whether the call was accepted.

Strict startup validation

Invalid goal registries no longer silently become partially active configurations.

Validation now covers areas including:

  • malformed or duplicate goal definitions;
  • invalid reset timezones;
  • invalid cooldown durations;
  • duration overflow cases;
  • incompatible configuration values.

With strict startup enabled, an invalid registry prevents the plugin from enabling instead of leaving the server in a partially configured state.

Storage and leaderboard improvements

  • Player YAML caching is bounded instead of retaining every historical player indefinitely.
  • Player and community leaderboard ordering is cached in memory.
  • Leaderboard caches are invalidated only when relevant progress changes.
  • Community contribution counters use saturating arithmetic.
  • Atomic YAML saves reduce unnecessary file-copy work while preserving backup recovery behavior.

Build and distribution

The Maven build no longer depends on developer-specific PowerShell steps or local F: drive paths.

DadaGUI and DadaPlatform dependencies are pinned to immutable commits, Linux CI verifies the full Maven reactor, and the final shaded distribution is checked for Java 8 bytecode compatibility.

Updating

A full server stop is recommended. Back up plugins/DadaProgressions/, replace the shaded plugin jar, start the server, run /dp admin validate, and test at least one progress and reward-claim flow before reopening the server.