Skip to content

Commit 3d7ad09

Browse files
committed
docs: update changelog for v3.3.2
1 parent c624383 commit 3d7ad09

2 files changed

Lines changed: 68 additions & 16 deletions

File tree

CHANGELOG.md

Lines changed: 67 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,73 @@
1-
this update is mostly about migration tooling, better player resolution, and support/debug quality of life.
2-
also had some internal cleanup and an important fix for velocity running in client mode.
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.
33

44
so whats new:
55

6-
- added `/cb dump` for support snapshots (sanitized upload + local file export)
7-
- added `/cb migrate` to migrate script files to the current schema
8-
- migration is script-only now. there was a short config migration path but that got reverted again
9-
- added `player-arg` per command for `target-required` and `schedule-online`
10-
- added remote uuid resolving between connected proxies (`RESOLVE_UUID`) + local `UserCache` + Mojang fallback
11-
- added `OFFLINE_PLAYER` argument type with suggestions support
12-
- reworked schedule-online / player tracking flow to be more reliable and added clearer warning logs when player resolution fails
13-
- fixed double command descriptions in command registration output
14-
- fixed velocity client mode startup crash (`ClassNotFoundException: org.bukkit.command.CommandSender`)
6+
**developer API**
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
14+
- 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
16+
- 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 usage examples, `@param`, `@return`, `@throws`, and cross-references
18+
- maven central publishing configuration
19+
20+
**security**
21+
22+
- hardened auth flow with constant-time HMAC comparison to prevent timing attacks
23+
- fixed `AUTH_OK` race condition where the server could send messages before the client processed auth success
24+
- added reconnect on failed server proof verification
25+
- removed wildcard permission grant in operator execution, only grants explicit permissions now
26+
- fixed concurrency issues in `CommandBridgeProvider`, `RateLimiter`, `InNode`, and `OutNode`
27+
28+
**fixes**
29+
30+
- fixed thread-safe script reload and session replacement notifications
31+
- fixed player join events firing for already-tracked players
32+
- fixed `WsEndpoint` send completion callback not propagating properly
33+
- fixed `ResponseAwaiter` to use UUID directly instead of string conversion
34+
- fixed cooldown being applied before dispatch instead of after
35+
- fixed MiniMessage tags in error messages not being escaped
36+
- fixed `PlaceholderStage` being recreated on every dispatch instead of reused
37+
- fixed polling not being reset on shutdown
38+
- fixed `serverId` overwrite guard missing in registration handler
39+
- fixed auth check missing on reload
40+
- fixed `Log` varargs handling for single-argument messages
41+
- fixed `UserCache` creating its own `ObjectMapper` instead of using `Envelope.MAPPER`
42+
- fixed `FoliaExecutor` duplicating logic from `PlatformExecutor`
43+
- fixed `RunAs.OPERATOR` resolution inconsistency across platform executors
44+
- fixed null guards missing in merge processor, command dispatcher, registration request, and player tracker
45+
- fixed config name not being passed to `ConfigManager` in the velocity backend adapter
46+
- left-aligned all Minecraft chat UI output and removed pixel-width centering
47+
48+
**refactoring**
49+
50+
- modernized entire codebase to java 21 idioms: records, sealed interfaces, pattern matching, switch expressions, `var`, `List.of()`, `Map.of()`
51+
- improved type safety across `OutNode`, `InNode`, and handler registration
52+
- redesigned public API from wrapper types to target builder pattern on `MessageChannel`
53+
- removed internal `RunAs` and `ConnectionState` duplicates in favor of the API types
54+
- deduplicated `FoliaExecutor` to inherit from `PlatformExecutor`
55+
- renamed `VelocityExecutor` to `LocalDispatcher` for clarity
56+
- extracted `ScheduleHandle` abstraction for platform adapters
57+
- added debug observability improvements throughout dispatch pipeline
58+
59+
**testing**
60+
61+
- deleted all existing AI-generated test files (22 files, ~233 methods)
62+
- rebuilt test suite from scratch with 136 tests across core (84), velocity (40), and backends (12)
63+
- added shared test fixtures: `TestEndpoint` and `ScriptFixtures`
64+
- covers: `AuthService`, `RateLimiter`, `CooldownManager`, `PlayerTracker`, `SessionHub`, `ConfigManager`, `SecretLoader`, `ResponseAwaiter`, `ProblemSink`, `PlaceholderExtractor`, `EnumAdapter`, `DurationAdapter`, validation processors, pipeline stages, command dispatcher, platform detection, and more
65+
- added `test.yml` CI workflow
66+
- added `TESTING.md` documentation
1567

1668
breaking changes:
17-
- scripts now require `version: 4`
18-
- older scripts must be migrated first
19-
- internal runtime files moved into the `data/` subdirectory
69+
- the public API module is new and the channel/event interfaces may still evolve
70+
- internal `RunAs` and `ConnectionState` enums were removed, use the API types instead
71+
- `VelocityExecutor` was renamed to `LocalDispatcher`
2072

21-
latest commit: e951a9e
73+
latest commit: c624383

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
org.gradle.configuration-cache=false
2-
pluginVersion=3.3.1
2+
pluginVersion=3.3.2
33
releaseChannel=release
44

0 commit comments

Comments
 (0)