✨ feat(api): introduce new chat signature and message handling features - #420
TheBjoRedCraft wants to merge 3 commits into
Conversation
TheBjoRedCraft
commented
Sep 4, 2026
- add SignatureUpdater interface for updating signatures
- implement LastSeenTrackedEntry for tracking message signatures
- create RemoteChatSession for managing chat sessions with public keys
- add MessageSignatureCache for efficient signature management
- introduce SignedMessageLink for linking signed messages
- enhance RemoteSignedMessage to support signed message verification
- add SignatureUpdater interface for updating signatures - implement LastSeenTrackedEntry for tracking message signatures - create RemoteChatSession for managing chat sessions with public keys - add MessageSignatureCache for efficient signature management - introduce SignedMessageLink for linking signed messages - enhance RemoteSignedMessage to support signed message verification
…ferences - rename SurfPlayer class to SurfMinestomPlayer for clarity - update all references to SurfPlayer in AsyncChatEvent, ConnectionManager, and player extensions - ensure compatibility with existing functionality while improving code readability
There was a problem hiding this comment.
🟡 Changes recommended
There are correctness/security issues in the new code paths (notably a nullable hashCode() NPE and non-deterministic signature bytes) that should be fixed before merge.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR extends the surf-api-minestom module with a chat-signing/signature verification pipeline (signed message bodies, signature chains, “last seen” tracking, remote-session support, and signature caching) and also introduces a sizeable Minestom command API + plugin framework surface that impacts dependencies and public API.
Changes:
- Add chat signature primitives (signature updater/validator/signer, signed message body/link/chain, last-seen tracking, and a signature cache + tests).
- Add infrastructure/utilities around Minestom (plugin abstractions, coroutine dispatchers/scopes, event helpers, player helpers, server extension accessors).
- Add a port/translation of CommandAPI-style command building, parsing, and suggestion plumbing for Minestom.
File summaries
| File | Description |
|---|---|
| surf-api-minestom/src/test/kotlin/dev/slne/surf/api/minestom/chat/signature/MessageSignatureCacheTest.kt | Adds tests for signature cache packing/unpacking/push behavior. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/util/uuid-ext.kt | Adds UUID helpers used by signature code. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/SurfApiMinestomPlugin.kt | Updates plugin meta imports to new in-repo plugin API. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/SurfApiMinestomEntrypoint.kt | Updates entrypoint import to new in-repo plugin API. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/plugin/MinestomPluginEntrypoint.kt | Introduces suspendable plugin lifecycle entrypoint interface. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/plugin/MinestomPlugin.kt | Introduces Guice-based plugin module abstraction + registrar binding. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/plugin/annotation/MinestomPluginMeta.kt | Adds plugin metadata annotation + validation rules. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/plugin/annotation/DataDirectory.kt | Adds Guice binding annotation for per-plugin data directories. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/player/SurfPlayer.kt | Adds SurfPlayer abstraction with signed/remote chat APIs. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/player/player-ext.kt | Adds requireSurfPlayer() and PlayerEvent surfPlayer accessor. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/player/connection-manager-ext.kt | Adds ConnectionManager helpers for SurfPlayer collections/lookups. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/impl/inventory/framework/MinestomInventoryLoader.kt | Updates imports to new in-repo event/extension helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/extension/server.kt | Adds global accessors for server registries/managers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/extension/events.kt | Adds EventNode addListener extension. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/event/SuspendingEventNode.kt | Adds suspendable event node with priority ordering + error isolation. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/event/EventRegistrar.kt | Adds EventRegistrar interface for modular event wiring. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/dialog/callback/DialogCallbackListener.kt | Updates imports to new in-repo event/extension helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/coroutine/MinestomScopeProvider.kt | Adds Minestom coroutine scopes (main/async/blocking). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/coroutine/MinestomDispatchers.kt | Adds Minestom coroutine dispatchers (tick-thread + blocking). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/CommandRegistrar.kt | Adds CommandRegistrar interface. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/suggestion/Tooltip.kt | Adds tooltip and suggestion info models. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/suggestion/SuggestionsBranch.kt | Adds branching suggestion traversal/enforcement logic. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/suggestion/SafeSuggestions.kt | Adds typed “safe suggestions” provider helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/suggestion/ArgumentSuggestions.kt | Adds string suggestion providers + merge/branch helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/RegisteredCommand.kt | Adds RegisteredCommand model for registered command identity. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/internal/CommandAPIPlatform.kt | Adds internal platform interface for registration/exec. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/executor/SuspendExecutors.kt | Adds suspending executor launcher + unified failure handling. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/executor/Executors.kt | Adds executor definition types + DSL-ish helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/executor/CommandArguments.kt | Adds typed argument access and raw argument extraction. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/exception/ComponentMessage.kt | Adds Brigadier Message wrapper preserving Components. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/exception/CommandValidationException.kt | Adds validation exception type. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/exception/CommandSyntaxException.kt | Adds project-level syntax exceptions + wrapper. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/dsl/SuggestionDsl.kt | Adds suggestion DSL extension functions for arguments. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/dsl/ExecutorDsl.kt | Adds executor DSL helpers (sync + suspend). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/dsl/CommandDsl.kt | Adds small command construction helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/CommandTree.kt | Adds tree-style command builder to definitions/paths. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/CommandMetadata.kt | Adds internal command metadata snapshot model. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/CommandAPICommand.kt | Adds command builder + flattening to paths (CommandAPI port). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/CommandAPI.kt | Adds installable command platform facade + execution helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/StringArguments.kt | Adds word/text/greedy/literal style argument types. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/SignedMessageArgument.kt | Adds signed-message argument placeholder type. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/RegistryArguments.kt | Adds registry-backed argument types (sound/biome/etc). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/PrimitiveArguments.kt | Adds primitive + range + enum + UUID argument types. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/PositionArguments.kt | Adds position/rotation/axis arguments. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/Suggesting.kt | Adds suggestion builder helper. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/ScalarParsers.kt | Adds UUID/angle/time/range parsers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/ResourceLocationParser.kt | Adds namespaced key parser. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/RegistryParser.kt | Adds registry key resolver parser. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/ParticleParser.kt | Adds particle key parser with option-free restriction. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/InstanceParser.kt | Adds instance resolver (UUID/dimension name) parser. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/FixedSetParser.kt | Adds fixed-set parser with case-insensitive suggestions. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/EntitySelectorParser.kt | Adds vanilla-style entity selector parsing. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/EntitySelector.kt | Adds resolved selector execution against server entities/players. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/parser/CoordinateParsers.kt | Adds coordinate/position/rotation parsing + resolution logic. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/MinecraftArguments.kt | Adds Key/time/team color/particle/game mode arguments. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/EntityArguments.kt | Adds player/entity selector arguments (single/multi target). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/CompositeArguments.kt | Adds custom + list arguments and mapping/filtering helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/commandapi/argument/Argument.kt | Adds core argument model/definition/tree + suggestion modes. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/command/args/MiniMessageArgument.kt | Updates imports to new in-repo CommandAPI types. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/ViewerUnawareChatRenderer.kt | Adds adapter renderer that attempts to memoize per-view rendering. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/Signer.kt | Adds signing abstraction built on JCA Signature. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/SignedMessageLink.kt | Adds signed-message chain link model + signature update. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/SignedMessageChain.kt | Adds signature chain encoder/decoder + validation failures. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/SignedMessageBody.kt | Adds signed body model + signature update + network packing. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/SignatureValidator.kt | Adds signature validation abstraction. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/SignatureUpdater.kt | Adds payload update abstraction for signature computation. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/RemoteChatSession.kt | Adds remote chat session wrapper/validator around public keys. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/ProfilePublicKey.kt | Adds public key validation + expiry + payload signing helpers. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/PlayerChatMessage.kt | Adds signed chat message model + verification/adventure view. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/MessageSignatureCache.kt | Adds signature cache for packing/unpacking signatures by id. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/message-signature-ext.kt | Adds MessageSignature helpers (pack/verify/adventure/describe). |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/LastSeenTrackedEntry.kt | Adds tracked entry model for last-seen message tracking. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/LastSeenMessagesValidator.kt | Adds validator to reconcile client last-seen acknowledgements. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/LastSeenMessages.kt | Adds last-seen messages model + checksum + network update parsing. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/signature/filter-mask-ext.kt | Adds FilterMask helpers/constants. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/RemoteSignedMessage.kt | Adds remote-transportable signed message DTO. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/RemoteChatSender.kt | Adds remote sender DTO including optional chat session. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/ChatRenderer.kt | Adds renderer interfaces + default/viewer-unaware adapters. |
| surf-api-minestom/src/main/kotlin/dev/slne/surf/api/minestom/chat/AsyncChatEvent.kt | Adds async chat event with suspending listeners. |
| surf-api-minestom/build.gradle.kts | Updates Minestom module deps (Minestom + Brigadier + Guice). |
| gradle/libs.versions.toml | Adds Minestom/Brigadier/Guice version-catalog entries. |
Review details
- Files reviewed: 82/83 changed files
- Comments generated: 7
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
This PR contains changes that modified the public API. To update the reference ABI dumps: ./gradlew updateKotlinAbi
git add **/api/**
git commit -m "Update ABI reference"
git pushAfter updating, the CI will pass. Make sure the changes are backward compatible. |
|
This PR contains changes that modified the public API. To update the reference ABI dumps: ./gradlew updateKotlinAbi
git add **/api/**
git commit -m "Update ABI reference"
git pushAfter updating, the CI will pass. Make sure the changes are backward compatible. |
|
Das wird nicht gemerged sondern wird richtig in einem neuen Projekt gemacht. Ich schließe die pr mal damit sie nicht ausversehen von jemand anderen einfach gemerged wird |