Follow-ups after the layer reorg (PAR-304):
- Model names describe what they are — drop fluff suffixes: PlayerDTO and the *Context carriers (PreTransactionContext, TransactionContext, PreShopCreationContext, ShopCreatedContext, ShopDestroyedContext, BuildPermissionContext, ProtectionCheckContext) get names for what they model.
- Collapse the EconomyProvider abstraction — it's an abstract class whose only method (getProviderInfo) fed bStats, which was removed (PAR-303); with a single implementation it's dead weight. Remove EconomyProvider + ProviderInfo; TreasuryEconomyProvider stands alone.
- AdminBypass → @Singleton service — it holds per-player opt-out state (a Set), so it's a service, not a static util. Requires making the bypass-aware permission check (currently static Permissions.has) injectable.