Paradaux

PAR-149

0

Bug: Cannot pay employees from gov account

Pending ReleaserianBusinessBug

Symptom

Can't pay employees .Savannah212467 and .Dps1234_2541 from a government account. The leading dots mark these as Floodgate/Bedrock usernames.

Root cause (grounded hypothesis)

The gov-pay recipient is resolved by the same cache-only Bukkit.getOfflinePlayerIfCached path as PAR-150 (GovCommand / Hibernia OfflinePlayerResolver.java:30). That resolver is intentionally Bedrock-safe (it avoids the Mojang lookup), but it still returns null for any name not in the usercache — so this is most likely the same uncached-name failure as PAR-150, surfacing on Bedrock employees who aren't currently cached. Secondary possibility: the leading . is stripped or rejected somewhere in arg parsing / a VALID_PLAYERNAME-style regex (cf. the Bedrock-hostile defaults flagged in PAR-109).

Investigate / fix

  1. Reproduce: confirm whether .Savannah212467 is in the usercache when the command fails; log the exact arg string reaching getOfflinePlayerIfCached.
  2. If uncached → fixed by the PAR-150 DB-backed resolver (route through firm_players / the PAR-35 economy_players table, which already stores Bedrock names including the dot).
  3. If the dot is stripped/rejected → fix the arg parser / any name-validation regex to preserve a leading . (cf. PAR-109).

Acceptance

  • Paying a Bedrock-named employee from a gov account works whether or not they're currently cached.

Related: PAR-150 (umbrella cache-resolution bug), PAR-109 (Bedrock name handling), PAR-35.

Comments

tesks · Jun 20, 2026, 8:26 PM

Resolved by PAR-150 (commit d37ab36).

"Pay employees from a gov account" is /gov payout <govAccount> <employee> <amount> (GovCommand.doExternalPayout). That path now falls back to the PAR-35 economy_players directory (PlayerDirectoryService.resolveUuidByName) on a usercache miss, and the directory resolves Bedrock/Floodgate names verbatim — the leading . is preserved (covered by PlayerDirectoryServiceIT.resolveByName_resolvesBedrockNameVerbatim). So .Savannah212467 / .Dps1234_2541 resolve whether or not they're currently cached.

Secondary hypothesis from the report (a VALID_PLAYERNAME-style regex stripping/rejecting the leading . inside Hibernia's OfflinePlayerResolver) is not in this repo — it lives in hibernia-framework (a submodule) and is tracked under PAR-109. If a Bedrock name still fails after this ships, it's that framework path, not the gov-pay command.

Activity

  • tesks changed status to Status → Pending Release
  • tesks commented
  • tesks changed status to Status → In Progress
  • tesks description: Description updated
  • paradaux changed status to Status → Planned
  • tesks created the issue