Skip to content

✨ feat(api): introduce new chat signature and message handling features - #420

Closed
TheBjoRedCraft wants to merge 3 commits into
version/26.2from
fix/remove-lobby-api
Closed

TheBjoRedCraft wants to merge 3 commits into
version/26.2from
fix/remove-lobby-api

Conversation

@TheBjoRedCraft

Copy link
Copy Markdown
Contributor
  • 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
Copilot AI lite review requested due to automatic review settings September 4, 2026 13:49
…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
@TheBjoRedCraft TheBjoRedCraft self-assigned this Sep 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Comment thread surf-api-minestom/build.gradle.kts
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

⚠️ API/ABI changes detected!

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 push

After updating, the CI will pass. Make sure the changes are backward compatible.

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

⚠️ API/ABI changes detected!

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 push

After updating, the CI will pass. Make sure the changes are backward compatible.

@TheBjoRedCraft
TheBjoRedCraft marked this pull request as draft September 8, 2026 16:01
@twisti-dev

Copy link
Copy Markdown
Contributor

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

@twisti-dev twisti-dev closed this Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants