|
1 | | -this update is the big architecture and API release. the entire codebase was modernized to java 21, |
2 | | -a public developer API module was added, security was hardened, and the test suite was rebuilt from scratch. |
| 1 | +this update adds a public developer API for third-party plugins, hardens auth security, |
| 2 | +and fixes a bunch of stability issues across the board. |
3 | 3 |
|
4 | 4 | so whats new: |
5 | 5 |
|
6 | 6 | **developer API** |
7 | 7 |
|
8 | | -- added `api` module with a full public developer API for third-party plugins |
9 | | -- typed message channels with target builder pattern, send, request, broadcast, and listen |
10 | | -- delivery conditions on senders: `requirePlayer(UUID)` and `whenOnline(UUID)` for conditional and queued delivery |
11 | | -- `whenOnline` queue with player join and disconnect lifecycle wiring on the proxy |
12 | | -- server connect/disconnect event subscriptions via `onServerConnected` and `onServerDisconnected` |
13 | | -- connection state tracking via `onConnectionStateChanged`, available on all platforms |
| 8 | +- new `api` module for third-party plugin integration, available on maven central |
| 9 | +- typed message channels via `CommandBridgeAPI.channel(Class)` with send, request, broadcast, and listen |
| 10 | +- delivery conditions on senders: `requirePlayer(UUID)` to gate on player presence, `whenOnline(UUID)` to queue until the player connects |
| 11 | +- server lifecycle events via `onServerConnected` and `onServerDisconnected` (proxy only) |
| 12 | +- connection state tracking via `onConnectionStateChanged` (all platforms) |
14 | 13 | - player locator service for resolving which server a player is on (proxy only) |
15 | | -- `CommandBridgeProvider.get()` and `CommandBridgeProvider.get(Class)` for obtaining the API instance |
| 14 | +- `CommandBridgeProvider.get()` and `CommandBridgeProvider.get(Class)` to obtain the API instance |
16 | 15 | - proxy-only methods return `Optional<Subscription>` instead of raw `Subscription`, returning `Optional.empty()` on backends |
17 | | -- comprehensive JDK-style JavaDocs across all 13 API source files with `@param`, `@return`, `@throws`, and cross-references |
18 | | -- each type's JavaDoc examples are scoped to its own responsibility, no tutorial-style chains leaking into other types |
19 | | -- maven central publishing configuration |
| 16 | +- full JDK-style JavaDocs across all API types |
20 | 17 |
|
21 | 18 | **security** |
22 | 19 |
|
23 | 20 | - hardened auth flow with constant-time HMAC comparison to prevent timing attacks |
24 | | -- fixed `AUTH_OK` race condition where the server could send messages before the client processed auth success |
| 21 | +- fixed `AUTH_OK` race condition where messages could be sent before the client processed auth success |
25 | 22 | - added reconnect on failed server proof verification |
26 | | -- removed wildcard permission grant in operator execution, only grants explicit permissions now |
27 | | -- fixed concurrency issues in `CommandBridgeProvider`, `RateLimiter`, `InNode`, and `OutNode` |
| 23 | +- operator execution no longer grants wildcard permissions, only explicit ones |
28 | 24 |
|
29 | 25 | **fixes** |
30 | 26 |
|
31 | | -- fixed thread-safe script reload and session replacement notifications |
32 | | -- fixed player join events firing for already-tracked players |
33 | | -- fixed `WsEndpoint` send completion callback not propagating properly |
34 | | -- fixed `ResponseAwaiter` to use UUID directly instead of string conversion |
35 | 27 | - fixed cooldown being applied before dispatch instead of after |
36 | 28 | - fixed MiniMessage tags in error messages not being escaped |
37 | | -- fixed `PlaceholderStage` being recreated on every dispatch instead of reused |
| 29 | +- fixed script reload not being thread-safe |
| 30 | +- fixed player join events firing for already-tracked players |
38 | 31 | - fixed polling not being reset on shutdown |
39 | | -- fixed `serverId` overwrite guard missing in registration handler |
40 | | -- fixed auth check missing on reload |
| 32 | +- fixed auth check missing on config reload |
41 | 33 | - fixed `Log` varargs handling for single-argument messages |
42 | | -- fixed `UserCache` creating its own `ObjectMapper` instead of using `Envelope.MAPPER` |
43 | | -- fixed `FoliaExecutor` duplicating logic from `PlatformExecutor` |
44 | | -- fixed `RunAs.OPERATOR` resolution inconsistency across platform executors |
45 | | -- fixed null guards missing in merge processor, command dispatcher, registration request, and player tracker |
46 | 34 | - fixed config name not being passed to `ConfigManager` in the velocity backend adapter |
47 | | -- left-aligned all Minecraft chat UI output and removed pixel-width centering |
48 | | - |
49 | | -**refactoring** |
50 | | - |
51 | | -- modernized entire codebase to java 21 idioms: records, sealed interfaces, pattern matching, switch expressions, `var`, `List.of()`, `Map.of()` |
52 | | -- improved type safety across `OutNode`, `InNode`, and handler registration |
53 | | -- redesigned public API from wrapper types to target builder pattern on `MessageChannel` |
54 | | -- removed internal `RunAs` and `ConnectionState` duplicates in favor of the API types |
55 | | -- deduplicated `FoliaExecutor` to inherit from `PlatformExecutor` |
56 | | -- renamed `VelocityExecutor` to `LocalDispatcher` for clarity |
57 | | -- extracted `ScheduleHandle` abstraction for platform adapters |
58 | | -- added debug observability improvements throughout dispatch pipeline |
| 35 | +- fixed operator permission resolution being inconsistent across platform executors |
| 36 | +- left-aligned all chat UI output and removed pixel-width centering |
| 37 | +- various null guard and stability improvements across dispatch, registration, and player tracking |
59 | 38 |
|
60 | | -**testing** |
| 39 | +**internals** |
61 | 40 |
|
62 | | -- deleted all existing AI-generated test files (22 files, ~233 methods) |
63 | | -- rebuilt test suite from scratch with 136 tests across core (84), velocity (40), and backends (12) |
64 | | -- added shared test fixtures: `TestEndpoint` and `ScriptFixtures` |
65 | | -- covers: `AuthService`, `RateLimiter`, `CooldownManager`, `PlayerTracker`, `SessionHub`, `ConfigManager`, `SecretLoader`, `ResponseAwaiter`, `ProblemSink`, `PlaceholderExtractor`, `EnumAdapter`, `DurationAdapter`, validation processors, pipeline stages, command dispatcher, platform detection, and more |
66 | | -- added `test.yml` CI workflow |
67 | | -- added `TESTING.md` documentation |
| 41 | +- modernized codebase to java 21 idioms |
| 42 | +- rebuilt test suite from scratch with 136 tests across core, velocity, and backends |
| 43 | +- added CI test workflow and testing documentation |
68 | 44 |
|
69 | 45 | breaking changes: |
70 | | -- the public API module is new and the channel/event interfaces may still evolve |
71 | | -- internal `RunAs` and `ConnectionState` enums were removed, use the API types instead |
72 | | -- `VelocityExecutor` was renamed to `LocalDispatcher` |
| 46 | +- `RunAs` and `ConnectionState` moved to the `api` package, internal duplicates removed |
73 | 47 |
|
74 | | -latest commit: ad03680 |
| 48 | +latest commit: d7f43a1 |
0 commit comments