A Minecraft Fabric mod that connects the game with ATProtocol ⛏️
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs: update README for 4-category consent system

- Add achievements and server-status to sync command list
- Mention config screen as alternative to commands for consent toggles
- Update roadmap checkbox to reflect all 4 consent categories
- Remove completed items from Future Possibilities
- Add PlayerSyncPreferencesStore to project structure
- Update architecture diagram with consent store and new storage
- Add sync-preferences/ to configuration files section
- Remove RateLimiter from architecture (server-side login removed)

+15 -6
+15 -6
README.md
··· 47 47 * **`/atproto sync`** - View your sync consent settings 48 48 * **`/atproto sync stats <on|off>`** - Control whether your stats are synced 49 49 * **`/atproto sync sessions <on|off>`** - Control whether your sessions are synced 50 + * **`/atproto sync achievements <on|off>`** - Control whether your achievements are synced 51 + * **`/atproto sync server-status <on|off>`** - Control whether server status is synced 50 52 51 53 **Example Workflow:** 52 54 ··· 112 114 113 115 All data syncing respects **sync consent** — players control whether their data is written to AT Protocol. Note that AT Protocol data is **always public** by design, so the sync consent controls whether data is written at all, not who can see it. 114 116 115 - Use `/atproto sync` to view and change your sync consent settings. 117 + Use `/atproto sync` to view and change your sync consent settings. Consent can also be toggled from the mod config screen. 116 118 117 119 ### Getting an App Password 118 120 ··· 124 126 125 127 ### Future Possibilities 126 128 127 - * Automatic stat syncing at configurable intervals 128 129 * Achievement announcements via AT Protocol feeds 129 130 * Cross-server player reputation systems 130 - * Privacy controls for what data gets synced 131 131 * In-game social features tied to AT Protocol identities 132 132 133 133 ## Technical Stack ··· 197 197 │ ├── AtProtoSessionManager.kt # Authentication & token management 198 198 │ ├── AtProtoCommands.kt # Command handlers 199 199 │ ├── PlayerIdentityStore.kt # UUID<->DID mapping storage 200 + │ ├── PlayerSyncPreferencesStore.kt # Sync consent (single source of truth) 200 201 │ ├── security/ 201 202 │ │ ├── RateLimiter.kt # Rate limiting for auth attempts 202 203 │ │ ├── SecurityAuditor.kt # Security event logging ··· 232 233 ## Architecture 233 234 234 235 ```plaintext 235 - Player Commands (/atproto login, /atproto link, etc.) 236 + Player Commands (/atproto link, /atproto sync, etc.) 236 237 237 238 AtProtoCommands (Kotlin Coroutines) 238 239 ··· 244 245 └────────────────────────────────────────┘ 245 246 246 247 ┌────────────────────────────────────────┐ 248 + │ PlayerSyncPreferencesStore │ 249 + │ • Sync consent (4 categories) │ 250 + │ • Sync frequency settings │ 251 + │ • Single source of truth │ 252 + └────────────────────────────────────────┘ 253 + 254 + ┌────────────────────────────────────────┐ 247 255 │ AtProtoClient │ 248 256 │ • HTTP + XRPC + Slingshot │ 249 257 │ • Identity Resolution │ ··· 251 259 252 260 ┌────────────────────────────────────────┐ 253 261 │ Security Layer │ 254 - │ • RateLimiter (3/15min) │ 255 262 │ • SecurityAuditor (Event Logging) │ 256 263 │ • SecurityUtils (Crypto & Validation)│ 257 264 └────────────────────────────────────────┘ ··· 268 275 Local Storage 269 276 - player-identities.json (UUID↔DID mappings) 270 277 - player-sessions.json (Encrypted auth tokens) 278 + - sync-preferences/ (Per-player sync consent) 271 279 - .encryption.key (AES-256 key) 272 280 - security-audit.log (Security events) 273 281 ``` ··· 331 339 All configuration files are stored in `config/atproto-connect/`: 332 340 333 341 * **`player-identities.json`** - UUID to DID/handle mappings (plaintext as these are both publicly accessible anyway) 342 + * **`sync-preferences/`** - Per-player sync consent settings (stats, sessions, achievements, server status) 334 343 * **`player-sessions.json`** - Encrypted authentication sessions 335 344 * **`.encryption.key`** - AES-256 encryption key (auto-generated, keep secure!) 336 345 * **`security-audit.log`** - Security event log ··· 349 358 * [x] Build data collection hooks for player statistics 350 359 * [x] Implement authenticated record creation (writing stats) 351 360 * [x] Add automatic stat syncing at configurable intervals 352 - * [x] Add sync consent controls (stats/sessions) 361 + * [x] Add sync consent controls (stats/sessions/achievements/server-status) 353 362 * [x] Implement OAuth browser flow for better UX 354 363 * [x] Add DPoP support 355 364 * [x] Implement achievement syncing