-
Notifications
You must be signed in to change notification settings - Fork 0
Architecture 5.0.0
KOKOTO WebChat 5.0.0 · shared core/Bukkit Java 17 baseline · Fabric/NeoForge exact-target platforms Java 17/21/25 · Forge exact-target platforms Java 17/21/25
5.0.0 is the KOKOTO WebChat multi-platform split. The shared core stays loader-neutral; loader-native lifecycle, permissions, persistence adapters and Minecraft event hooks live in platform modules.
kwc-core/
Platform-neutral models and helpers
ConfigValues / MessageTokenConfig
PlatformAdapter / PlatformPlayer / PlatformGameMessage
LegacyText
SqliteHistoryStore
DirectMessageStore / GroupChatStore
ConversationStoreHost + settings snapshots
ServerRelay + RelayHost / RelaySettings
CoreHttpServer + SseHub / SseConnection
WebChatServer + WebChatHost service contracts
PinnedMessage
WebPushManager + WebPushHost
kwc-standalone-frontend/
Map-independent standalone frontend assets
standalone/chat.js / standalone/chat.css resources
kwc-adapter-bluemap/
BlueMap web addon installation
BlueMap web-root / webapp.conf discovery and patching
BlueMap addon chat.js / chat.css resources
BlueMapAdapter + BlueMapAdapterHost
kwc-adapter-squaremap/
squaremap web-directory discovery
marked index.html injection
squaremap KWC chat.js / chat.css resources
SquaremapAdapter + SquaremapAdapterHost
kwc-adapter-unmined/
uNmINeD static-export discovery
current index.html + legacy unmined.index.html marker-checked injection
uNmINeD KWC chat.js / chat.css resources
UnminedAdapter + UnminedAdapterHost
kwc-adapter-overviewer/
Loader-neutral Minecraft Overviewer static output integration
Positive Overviewer index/asset detection
KWC-owned addon assets + marked index block only
kwc-platform-bukkit/
Bukkit / Spigot / Paper lifecycle
BukkitConfigValuesLoader
Account/session YAML persistence
Commands/listeners and Bukkit resources
DiscordSRV integration
BukkitPlatformAdapter
BukkitConversationStoreHost
BukkitRelayHost
BukkitWebPushHost
BukkitWebChatHost
BukkitBlueMapAdapterHost
BukkitSquaremapAdapterHost
BukkitUnminedAdapterHost
kwc-platform-fabric/
Fabric exact-target lifecycle, compatibility bridge, and command registration
Fabric player/chat/connection event bridge
Fabric permission/platform adapter
Fabric YAML/account/session persistence
Fabric WebChat/relay/WebPush/conversation hosts
FabricSquaremapAdapterHost
FabricUnminedAdapterHost
Reuses shared core/standalone/map-adapter resources
kwc-platform-neoforge/
NeoForge exact-target lifecycle, compatibility bridge, and command registration
NeoForge player/chat/connection event bridge
Native NeoForge kwc.* permission nodes + platform adapter
NeoForge YAML/account/session persistence
NeoForge WebChat/relay/WebPush/conversation hosts
NeoForgeSquaremapAdapterHost
NeoForgeUnminedAdapterHost
Reuses shared core/standalone/map-adapter resources
The Bukkit artifact shades the shared core, standalone frontend, and all loader-neutral web adapters (including kwc-adapter-unmined), so a normal server still installs one file:
kwc-platform-bukkit/target/KOKOTO-WebChat-5.0.0-Bukkit-1.18-26.2.jar
PlatformAdapter now owns the loader-specific Minecraft operations required by shared web/chat code:
- online-player snapshots and UUID lookup
- permission checks
- main-thread detection/dispatch
- console-command execution
- known player-name lookup for guest spoof protection
- plain Minecraft message delivery
- interactive URL/reply hover/click delivery through
PlatformGameMessage - optional ImageEmojis runtime-symbol discovery
BukkitPlatformAdapter converts the loader-neutral interaction description to the existing Bungee chat components. WebChatServer itself is core-owned and imports no Bukkit or Bungee chat APIs.
The complete signed relay engine is loader-neutral. Core owns HTTP transport, HMAC authentication, source routing, public relay, cross-server DM delivery, configurable public-chat multi-hop forwarding, deduplication and remote DM read receipts. RelayHost supplies only platform callbacks for config, logging, persistence checks and final message/update delivery. Relay protocol headers/IDs remain unchanged.
Public-chat SQLite history plus direct-message/group-chat persistence are core-owned. DirectMessageStore and GroupChatStore retain their existing database/JSONL formats and public APIs, but obtain data-directory access, identity and online-state resolution, logging, and immutable settings snapshots through ConversationStoreHost. Account/session YAML persistence remains Bukkit-side for now.
JDK HTTP bind/start/stop, context registration/executor ownership, SSE connection metadata/cleanup, and the complete WebChatServer endpoint semantics/orchestration now live in core. WebChatServer receives loader-neutral services through WebChatHost, with narrower contracts for storage/session access, authentication, language lookup, moderation, Discord forwarding, Web Push, resources, audit and announcements. The public endpoint paths and handlers are unchanged.
kwc-adapter-squaremap is loader-neutral and has no compile-time squaremap dependency. squaremap exposes its generated web UI through settings.web-directory.path; the adapter discovers existing squaremap config/web roots, installs KWC assets under kokoto-web-chat/, and owns only a marked KWC block in squaremap's index.html. This is intentionally different from the BlueMap webapp.conf integration. Because squaremap may refresh the web directory when its auto-update option is enabled, the adapter re-checks the marked block on KWC startup/reload. Bukkit, Fabric, NeoForge, and Forge provide the same small host surface.
kwc-adapter-unmined is loader-neutral and has no compile-time uNmINeD dependency. uNmINeD is an external static map generator, so the adapter never expects a server plugin or runtime API. It patches only a positively identified current index.html or legacy unmined.index.html, writes KWC-owned assets under the configured addon path, and leaves map metadata/tiles/libraries untouched. Because uNmINeD can export to arbitrary locations, automatic discovery is deliberately conservative and adapters.unmined.web-root is the normal choice for custom or externally served document roots. Re-exporting the map may replace KWC files; startup/reload restores them idempotently.
kwc-adapter-overviewer is loader-neutral and has no compile-time Minecraft Overviewer dependency. Overviewer generates a static Leaflet web map under its configured outputdir; the adapter only accepts an existing index.html with Overviewer-specific generator metadata and/or the standard overviewerConfig.js/overviewer.js assets. It owns only a marked KWC block and configured addon directory, rejects unrelated Leaflet sites, and leaves Overviewer tiles/configuration/web libraries untouched. Because rendering or --update-web-assets can regenerate index.html, /kchat reload restores the KWC block idempotently.
The standalone page no longer resolves its JavaScript or stylesheet from kwc-adapter-bluemap. kwc-standalone-frontend owns a dedicated asset bundle under standalone/, while core owns the HTTP routing, runtime bootstrap values, PWA metadata, and API. The primary standalone HTML embeds the standalone bootstrap bundle directly, so reverse proxies that publish only the configured page path do not also need a /chat/* static-resource rule. The optional internal /chat.js and /chat.css diagnostic resources remain available. The BlueMap addon keeps separate resources under kwc-adapter-bluemap. Fabric, NeoForge, and Forge 26.1.2/26.2 bundle the shared BlueMap assets only for optional BlueMapAPI integration; standalone mode remains independent and does not require BlueMap. The default internal standalone route is /; http.public-prefix defines the external reverse-proxy prefix, /chat by default.
BlueMap-specific web integration no longer lives in kwc-platform-bukkit. kwc-adapter-bluemap owns addon target discovery, webapp.conf patching, generated config.js, and the BlueMap wrapper assets. It depends only on kwc-core and receives filesystem/resource/version/log access through BlueMapAdapterHost. Bukkit supplies those callbacks through BukkitBlueMapAdapterHost. Existing adapters.bluemap.* keys, BlueMap paths, generated files, and deployed Bukkit behavior are unchanged.
WebPushManager is now core-owned and uses only JDK APIs plus WebPushHost. VAPID generation/loading, subscription persistence, notification filtering, localization input, encryption, and push delivery no longer depend on Bukkit. BukkitWebPushHost supplies config, storage lookups, language strings, data-directory access, and logging.
Minecraft account-link permission evaluation now goes through PlatformAdapter.hasPermission, using a loader-neutral PlatformPlayer snapshot. Web console commands are scheduled and dispatched through PlatformAdapter instead of direct Bukkit calls.
/kchatplugins/KOKOTO-WebChat/-
kwc.*permissions - relay identifiers/protocol compatibility
- current BlueMap/squaremap/standalone web behavior and API paths
- DM/group/public history formats
The KOKOTO WebChat rename is already active. Legacy BMWC naming is not used for current commands or public paths; Relay Protocol v1 wire headers remain unchanged because they are protocol identifiers rather than UI/command branding.
The 5.0.0 core, Bukkit, standalone frontend, and map-adapter boundaries are established. kwc-platform-fabric and kwc-platform-neoforge both consume the same core/standalone contracts. Loader lifecycle, public game↔web chat, authentication/password, persistence, moderation, standalone hosting, Web Push, signed relay, map adapters, and game-side DM/group/reply/admin command behavior are all wired through the final 5.0.0 platform surfaces. Shared private/admin command behavior lives in GameCommandService; loader-specific reload/status/auth/password registration remains in each platform module. Fabric/NeoForge and Forge 26.1.2/26.2 BlueMap-mod integration uses BlueMapAPI 2.8.0.
kwc-platform-forge adds 16 exact-target Forge projects spanning Minecraft 1.18.2–26.2. Shared KWC HTTP/SSE/storage/auth/relay and loader-neutral map-adapter code is reused; only loader/Minecraft API seams are split across compat118, compatClassic, compatModern, and compat26. This prevents one JAR from claiming binary compatibility across incompatible Forge event and Minecraft profile/permission APIs. BlueMapAPI is hard-linked only on the 26.1.2/26.2 Forge targets; earlier Forge targets keep filesystem/static-map integration.