
KrepAPI (Mod)
Fabric client bridge for servers: custom key bindings synced from the host, optional raw-key hooks for addons, and a handshake so Paper/Fabric servers can require this mod. Install only on servers that use KrepAPI. Needs Fabric API.
KrepAPI (Mod) mc26.x-1.3.0
alpha11 апреля 2026 г.Added
Client update checks, download flow, and in-game update UI
UpdateChecker(bothfabric-1-21andfabric-26-1): On client startup, asynchronously fetches.system/mod/versions.jsonfrom GitHub, resolves the latest mod version and the JAR filename for the running Minecraft version, compares semver against the installed mod usingKrepapiBuildVersion(:protocol), and loads every listed version’s changelog markdown from.system/mod/changelog/{version-with-dashes}.mdintoversionList+allChangelogsfor the menu.UpdateDownloader: On explicit user action only, downloads the update JAR over HTTP intomods/KrepAPI-update-{latestVersion}.jarwith a volatile progress field; guards against overlapping downloads; surfaces errors without crashing the client./krepapi menu: Client command to open the update / changelog screen at any time.KrepapiUpdateToast: One-time toast when an update is available; opens the menu (no direct download from the toast).KrepapiUpdateHud: Optional[KrepAPI ↑]indicator when an update is available; click opens the menu (no direct download from the HUD).
Fabric 1.21.x — MoulConfig update menu
- MoulConfig (
modern-1.21.11) is bundled via GradleUp Shadow: dependency is relocated tonet.shik.krepapi.deps.moulconfig,kotlin-stdlibis included for MoulConfig’s Kotlin internals, and a hand-authoredMETA-INF/services/...IMinecraftentry points at the relocated platform class (Shadow does not rewrite service files by default). - Access widener (
krepapi.accesswidener): Merged the subset of MoulConfig widener entries that validate on Minecraft 1.21.11 with official Mojang mappings so the shaded UI can render withoutIllegalAccessError. - Screen:
KrepapiMenuScreenbuilds a MoulConfigGuiComponenttree (outerVANILLApanel, light header strip, full-width rule, twoDARK_RECTcolumns). Left: “Changelogs” header, magenta underline, dashed separator, clickable version rows (cyan + underline when selected). Right: gray subtitle, scaled headline “Changelog entries for v…”, and formatted markdown body (yellow#, magenta##, green###, gray bullets; first top-level bullet after a##section highlighted in white to match the reference layout). - Headline scaling: Dynamic
min(2×, fit-to-width)so long titles are not clipped inside the scroll viewport (fixes truncatedv1.style glitches). - ModMenu:
modImplementationModMenu 17.0.0-beta.2, dedicatedKrepapiModMenuEntry→KrepapiModMenuIntegrationconfig screen factory;fabric.mod.jsonextended withcustom.modmenu(homepage, issues, GitHub link,update_checker). - Helper UI types in
net.shik.krepapi.client.ui.KrepapiMenuComponents:FullWidthRuleComponent,VersionNavRow,ChangelogHeadlineComponent,StatusBadgeComponent.
Fabric 26.1.x — Vanilla update menu
KrepapiMenuScreen26: Same update semantics and markdown presentation using vanillaScreenwidgets (no MoulConfig / Shadow on this loader).
Structured debug logging (optional)
- Paper (
KrepapiPaperPlugin) and Fabric server networking: whendebug-logging/ JVM flag / marker file enables it, append NDJSON-style lines for handshake, disconnects, version kicks, and mouse/key events to a timestamped file under the server’s KrepAPI data folder.
Fixed
- Menu state:
selectedVersionis only reset when missing from the remoteversionList(or initially unset), so reopening the menu keeps the user’s chosen changelog version. - Changelog headline: Avoids fixed 2× scale that exceeded the scroll clip and cut off the version suffix; headline now scales to the available width (up to 2×).
- Layout: Header row width accounts for panel insets so the top bar, rule, and body columns stay aligned at the designed inner width.
Changed
fabric-1-21/build.gradle: GradleUp Shadow plugin,shadowModImpl/shadowImplconfigurations,remapJarinput fromshadowJar; Maven Central for Kotlin; ModMenu and MoulConfig coordinates as used at build time.fabric.mod.json(1.21):contact,custom.modmenu,entrypoints.modmenuviaKrepapiModMenuEntry; mixin / client resource layout adjusted (e.g. consolidatedkrepapi.mixins.json, removed redundant client mixin descriptor where applicable).fabric-26-1: Alignsfabric.mod.json, mixin config, and access widener with the split client/main setup used for the update UI.gradle.properties:mod_versionset to 1.3.0 for this release line.- Paper: Minor
config.yml/KrepapiPaperVersionGate/KrepapiPaperPlugintweaks for default minimum mod build alignment with the published mod. :protocoltests:KrepapiBuildVersionTest,KrepapiVersionPolicyTest,KrepapiVersionRequirementTestupdated for current version policy behavior.- Repository hygiene:
.gitignoreentries for editor-generated*Edit conflict*/*Name clash*duplicate source files.
Documentation
- Remote
versions.jsonand changelog paths remain documented in-repo under.system/mod/for the update checker URLs used by the client.
KrepAPI (Mod) mc1.21-1.3.0
alpha11 апреля 2026 г.Added
Client update checks, download flow, and in-game update UI
UpdateChecker(bothfabric-1-21andfabric-26-1): On client startup, asynchronously fetches.system/mod/versions.jsonfrom GitHub, resolves the latest mod version and the JAR filename for the running Minecraft version, compares semver against the installed mod usingKrepapiBuildVersion(:protocol), and loads every listed version’s changelog markdown from.system/mod/changelog/{version-with-dashes}.mdintoversionList+allChangelogsfor the menu.UpdateDownloader: On explicit user action only, downloads the update JAR over HTTP intomods/KrepAPI-update-{latestVersion}.jarwith a volatile progress field; guards against overlapping downloads; surfaces errors without crashing the client./krepapi menu: Client command to open the update / changelog screen at any time.KrepapiUpdateToast: One-time toast when an update is available; opens the menu (no direct download from the toast).KrepapiUpdateHud: Optional[KrepAPI ↑]indicator when an update is available; click opens the menu (no direct download from the HUD).
Fabric 1.21.x — MoulConfig update menu
- MoulConfig (
modern-1.21.11) is bundled via GradleUp Shadow: dependency is relocated tonet.shik.krepapi.deps.moulconfig,kotlin-stdlibis included for MoulConfig’s Kotlin internals, and a hand-authoredMETA-INF/services/...IMinecraftentry points at the relocated platform class (Shadow does not rewrite service files by default). - Access widener (
krepapi.accesswidener): Merged the subset of MoulConfig widener entries that validate on Minecraft 1.21.11 with official Mojang mappings so the shaded UI can render withoutIllegalAccessError. - Screen:
KrepapiMenuScreenbuilds a MoulConfigGuiComponenttree (outerVANILLApanel, light header strip, full-width rule, twoDARK_RECTcolumns). Left: “Changelogs” header, magenta underline, dashed separator, clickable version rows (cyan + underline when selected). Right: gray subtitle, scaled headline “Changelog entries for v…”, and formatted markdown body (yellow#, magenta##, green###, gray bullets; first top-level bullet after a##section highlighted in white to match the reference layout). - Headline scaling: Dynamic
min(2×, fit-to-width)so long titles are not clipped inside the scroll viewport (fixes truncatedv1.style glitches). - ModMenu:
modImplementationModMenu 17.0.0-beta.2, dedicatedKrepapiModMenuEntry→KrepapiModMenuIntegrationconfig screen factory;fabric.mod.jsonextended withcustom.modmenu(homepage, issues, GitHub link,update_checker). - Helper UI types in
net.shik.krepapi.client.ui.KrepapiMenuComponents:FullWidthRuleComponent,VersionNavRow,ChangelogHeadlineComponent,StatusBadgeComponent.
Fabric 26.1.x — Vanilla update menu
KrepapiMenuScreen26: Same update semantics and markdown presentation using vanillaScreenwidgets (no MoulConfig / Shadow on this loader).
Structured debug logging (optional)
- Paper (
KrepapiPaperPlugin) and Fabric server networking: whendebug-logging/ JVM flag / marker file enables it, append NDJSON-style lines for handshake, disconnects, version kicks, and mouse/key events to a timestamped file under the server’s KrepAPI data folder.
Fixed
- Menu state:
selectedVersionis only reset when missing from the remoteversionList(or initially unset), so reopening the menu keeps the user’s chosen changelog version. - Changelog headline: Avoids fixed 2× scale that exceeded the scroll clip and cut off the version suffix; headline now scales to the available width (up to 2×).
- Layout: Header row width accounts for panel insets so the top bar, rule, and body columns stay aligned at the designed inner width.
Changed
fabric-1-21/build.gradle: GradleUp Shadow plugin,shadowModImpl/shadowImplconfigurations,remapJarinput fromshadowJar; Maven Central for Kotlin; ModMenu and MoulConfig coordinates as used at build time.fabric.mod.json(1.21):contact,custom.modmenu,entrypoints.modmenuviaKrepapiModMenuEntry; mixin / client resource layout adjusted (e.g. consolidatedkrepapi.mixins.json, removed redundant client mixin descriptor where applicable).fabric-26-1: Alignsfabric.mod.json, mixin config, and access widener with the split client/main setup used for the update UI.gradle.properties:mod_versionset to 1.3.0 for this release line.- Paper: Minor
config.yml/KrepapiPaperVersionGate/KrepapiPaperPlugintweaks for default minimum mod build alignment with the published mod. :protocoltests:KrepapiBuildVersionTest,KrepapiVersionPolicyTest,KrepapiVersionRequirementTestupdated for current version policy behavior.- Repository hygiene:
.gitignoreentries for editor-generated*Edit conflict*/*Name clash*duplicate source files.
Documentation
- Remote
versions.jsonand changelog paths remain documented in-repo under.system/mod/for the update checker URLs used by the client.
KrepAPI (Mod) mc26.x-1.2.0
alpha5 апреля 2026 г.Added
Server-driven mouse capture (Fabric client + Fabric/Paper server reference)
- New custom payload / plugin message channels:
krepapi:s2c_mouse_capture— enable or configure capture (enabled,flags,consumeVanilla).krepapi:c2s_mouse_action— client reports button presses/releases, scroll deltas, and optionally normalized cursor position on each forwarded event.
- Flags (combine with bitwise OR): mouse buttons (left/right/middle via GLFW button id), scroll wheel, optional cursor on events (cursor as 0–1 in scaled window coordinates).
- Capability
SERVER_MOUSE_CAPTUREinc2s_client_info. Reference implementations only sends2c_mouse_captureif the client advertised this bit, so older KrepAPI clients without mouse support are not sent an unregistered payload. - Wire format is defined in
ProtocolMessages(same bytes on Fabric custom play payloads and PapersendPluginMessage);c2s_mouse_actionis self-describing so Paper can decode without remembering prior S2C state. - Client:
MouseCaptureState,MouseMixinonMouseHandler(onButtonwithMouseButtonInfo,onScroll), same eligibility gate as raw keyboard capture (in play, network handler present, player or screen open). - Server: Fabric —
KrepapiFabricServerNetworking.registerMouseActionListener,sendMouseCaptureConfig,getClientCapabilities; handshake entry stores the client capability bitmask after a successfulc2s_client_info. Paper — outgoing/incoming channel registration,KrepapiPaperPlugin.sendMouseCaptureConfig,getClientCapabilities, session capability map, debug logging for mouse actions.
Build version requirement expressions (legacy / ranges)
KrepapiVersionRequirementparsesminimum-mod-version/ FabricminimumModVersion/ plugin registrations: bareX.Y.Zremains>=(compatible); alsoX.Y.Z>,=X.Y.Z,<X.Y.Z,X.Y.x/X.Y.*, two-partX.Yfor a minor line; middle wildcards (1.x.2) are rejected.KrepapiVersionPolicyevaluates the intersection of all requirements;KrepapiKickReasons.forVersionCheckFailureformats kicks.s2c_hello.minModVersionis a summary (max floor if all are minima, else joined specs).- Paper: invalid
minimum-mod-versiondisables the plugin on enable; invalid combined requirements kick on join with a misconfiguration message. Fabric: logs invalid default settings at register; per-join validation with the same kick text.
Minecraft 26.1 Fabric build (:fabric-26-1)
- Second Fabric artifact from the same repo:
KrepAPI-mc26.1(mod id stillkrepapi), targeting 26.1–26.1.1, Loader 0.18.6, Fabric API 0.144.3+26.1,net.fabricmc.fabric-loom1.15-SNAPSHOT (unobfuscated game; noremapJar), Java 25 toolchain. - Source tree is a fork of the 1.21 module with 26.1-specific wiring:
PayloadTypeRegistry.clientboundPlay/serverboundPlay,KeyMappingHelper.registerKeyMapping(fabric-key-mapping-api-v1).
Fixed
overrideVanilla server bindings vs. player keybinds
- Vanilla blocking for
overrideVanillapreviously compared each key event only to thedefaultKeyfroms2c_bindings. After rebinding in Minecraft’s controls, the wrong key (or no key) could still be consumed or missed. - The client now keeps a list of
actionIds withoverrideVanillaand, on every key event, resolves the currentKeyMappingand usesKeyMapping.matches(KeyEvent)so suppression follows the live binding (KrepapiKeyPipeline). ServerBindingManager.applyBindingsregisters all serverKeyMappings before applying the override list, so lookups are always valid when the list is installed.
Changed
- Two-part requirement strings: A value with exactly two numeric segments (e.g.
1.2) is now a minor line (1.2.x), not a shorthand for>= 1.2.0. Use1.2.0or1.2.0>for a minimum floor.
Gradle layout
- Fabric mod for 1.21.4–1.21.11 lives in
fabric-1-21→KrepAPI-mc1.21JAR (remapped Loom as before). Root project is an aggregator; rungradlew buildto produce both Fabric JARs plusprotocolandpaper-plugin. - Gradle Wrapper updated to 9.4.0 (recommended for Loom 1.15 / 26.1).
Build targets (this repository)
- Fabric
fabric-1-21(KrepAPI-mc1.21): Minecraft 1.21.11, Fabric Loader 0.18.2, Fabric API 0.139.4+1.21.11,net.fabricmc.fabric-loom-remap1.14-SNAPSHOT, official Mojang mappings (loom.officialMojangMappings()), Java 21.fabric.mod.jsonrange>=1.21.4 <=1.21.11. - Networking (Fabric 1.21): play payloads use
CustomPacketPayload,CustomPacketPayload.Type, andStreamCodeconRegistryFriendlyByteBuf(Mojang names; not YarnCustomPayload/PacketCodec/RegistryByteBuf). - Paper reference plugin:
paper-api1.21.11-R0.1-SNAPSHOT,plugin.ymlapi-version: '1.21.11', default minimum mod build tracks the mod (seegradle.propertiesmod_version). - Server-driven keys on 1.21.x use
KeyBindingHelper.registerKeyBinding(net.fabricmc.fabric.api.client.keybinding.v1).
Documentation
docs/protocol.md— wire format, channels, build requirement expressions, kick reasons,minModVersionsummary semantics.docs/client-api.md— mouse capture, intercept keys, handshake fields, Fabric server settings,fabric.mod.jsondepends, version API examples.docs/paper-plugin.md— config examples,versionGate, capabilities /sendMouseCaptureConfig, Gradle note.
KrepAPI (Mod) mc1.21-1.2.0
alpha5 апреля 2026 г.Added
Server-driven mouse capture (Fabric client + Fabric/Paper server reference)
- New custom payload / plugin message channels:
krepapi:s2c_mouse_capture— enable or configure capture (enabled,flags,consumeVanilla).krepapi:c2s_mouse_action— client reports button presses/releases, scroll deltas, and optionally normalized cursor position on each forwarded event.
- Flags (combine with bitwise OR): mouse buttons (left/right/middle via GLFW button id), scroll wheel, optional cursor on events (cursor as 0–1 in scaled window coordinates).
- Capability
SERVER_MOUSE_CAPTUREinc2s_client_info. Reference implementations only sends2c_mouse_captureif the client advertised this bit, so older KrepAPI clients without mouse support are not sent an unregistered payload. - Wire format is defined in
ProtocolMessages(same bytes on Fabric custom play payloads and PapersendPluginMessage);c2s_mouse_actionis self-describing so Paper can decode without remembering prior S2C state. - Client:
MouseCaptureState,MouseMixinonMouseHandler(onButtonwithMouseButtonInfo,onScroll), same eligibility gate as raw keyboard capture (in play, network handler present, player or screen open). - Server: Fabric —
KrepapiFabricServerNetworking.registerMouseActionListener,sendMouseCaptureConfig,getClientCapabilities; handshake entry stores the client capability bitmask after a successfulc2s_client_info. Paper — outgoing/incoming channel registration,KrepapiPaperPlugin.sendMouseCaptureConfig,getClientCapabilities, session capability map, debug logging for mouse actions.
Build version requirement expressions (legacy / ranges)
KrepapiVersionRequirementparsesminimum-mod-version/ FabricminimumModVersion/ plugin registrations: bareX.Y.Zremains>=(compatible); alsoX.Y.Z>,=X.Y.Z,<X.Y.Z,X.Y.x/X.Y.*, two-partX.Yfor a minor line; middle wildcards (1.x.2) are rejected.KrepapiVersionPolicyevaluates the intersection of all requirements;KrepapiKickReasons.forVersionCheckFailureformats kicks.s2c_hello.minModVersionis a summary (max floor if all are minima, else joined specs).- Paper: invalid
minimum-mod-versiondisables the plugin on enable; invalid combined requirements kick on join with a misconfiguration message. Fabric: logs invalid default settings at register; per-join validation with the same kick text.
Minecraft 26.1 Fabric build (:fabric-26-1)
- Second Fabric artifact from the same repo:
KrepAPI-mc26.1(mod id stillkrepapi), targeting 26.1–26.1.1, Loader 0.18.6, Fabric API 0.144.3+26.1,net.fabricmc.fabric-loom1.15-SNAPSHOT (unobfuscated game; noremapJar), Java 25 toolchain. - Source tree is a fork of the 1.21 module with 26.1-specific wiring:
PayloadTypeRegistry.clientboundPlay/serverboundPlay,KeyMappingHelper.registerKeyMapping(fabric-key-mapping-api-v1).
Fixed
overrideVanilla server bindings vs. player keybinds
- Vanilla blocking for
overrideVanillapreviously compared each key event only to thedefaultKeyfroms2c_bindings. After rebinding in Minecraft’s controls, the wrong key (or no key) could still be consumed or missed. - The client now keeps a list of
actionIds withoverrideVanillaand, on every key event, resolves the currentKeyMappingand usesKeyMapping.matches(KeyEvent)so suppression follows the live binding (KrepapiKeyPipeline). ServerBindingManager.applyBindingsregisters all serverKeyMappings before applying the override list, so lookups are always valid when the list is installed.
Changed
- Two-part requirement strings: A value with exactly two numeric segments (e.g.
1.2) is now a minor line (1.2.x), not a shorthand for>= 1.2.0. Use1.2.0or1.2.0>for a minimum floor.
Gradle layout
- Fabric mod for 1.21.4–1.21.11 lives in
fabric-1-21→KrepAPI-mc1.21JAR (remapped Loom as before). Root project is an aggregator; rungradlew buildto produce both Fabric JARs plusprotocolandpaper-plugin. - Gradle Wrapper updated to 9.4.0 (recommended for Loom 1.15 / 26.1).
Build targets (this repository)
- Fabric
fabric-1-21(KrepAPI-mc1.21): Minecraft 1.21.11, Fabric Loader 0.18.2, Fabric API 0.139.4+1.21.11,net.fabricmc.fabric-loom-remap1.14-SNAPSHOT, official Mojang mappings (loom.officialMojangMappings()), Java 21.fabric.mod.jsonrange>=1.21.4 <=1.21.11. - Networking (Fabric 1.21): play payloads use
CustomPacketPayload,CustomPacketPayload.Type, andStreamCodeconRegistryFriendlyByteBuf(Mojang names; not YarnCustomPayload/PacketCodec/RegistryByteBuf). - Paper reference plugin:
paper-api1.21.11-R0.1-SNAPSHOT,plugin.ymlapi-version: '1.21.11', default minimum mod build tracks the mod (seegradle.propertiesmod_version). - Server-driven keys on 1.21.x use
KeyBindingHelper.registerKeyBinding(net.fabricmc.fabric.api.client.keybinding.v1).
Documentation
docs/protocol.md— wire format, channels, build requirement expressions, kick reasons,minModVersionsummary semantics.docs/client-api.md— mouse capture, intercept keys, handshake fields, Fabric server settings,fabric.mod.jsondepends, version API examples.docs/paper-plugin.md— config examples,versionGate, capabilities /sendMouseCaptureConfig, Gradle note.
KrepAPI 1.1.0
alpha4 апреля 2026 г.What's New
Raw Keyboard Capture (SERVER_RAW_CAPTURE — capability bit 1 << 2)
Servers can now instruct the client to forward raw GLFW keyboard events (key code, scancode, action, modifier mask, monotone sequence number) back to the server via the new c2s_raw_key packet.
The server sends s2c_raw_capture with a RawCaptureConfig that specifies:
- mode —
OFF(0),ALL(1), orWHITELIST(2, only keys in the key list are forwarded) - consumeVanilla — whether the client should suppress Minecraft's own handling of captured keys
- whitelistKeys — list of GLFW key codes (max 256) used when mode is
WHITELIST
New Fabric server-side API in KrepapiFabricServerNetworking:
sendRawCaptureConfig(ServerPlayerEntity, RawCaptureConfig)— push a capture config to a specific playerregisterRawKeyListener(RawKeyListener)/unregisterRawKeyListener(RawKeyListener)— subscribe to incomingc2s_raw_keyevents with per-listener isolation (exceptions are caught and logged per listener)
Client-side state is managed by the new RawCaptureState class. Capture is cleared automatically on disconnect.
Hardcoded-Key Intercept (INTERCEPT_KEYS — capability bit 1 << 3)
Servers can now suppress specific vanilla key behaviors that are not exposed through KeyMapping — keys like Escape, F3, Tab, F1, and F5 that Minecraft handles internally.
The server sends s2c_intercept_keys with a list of InterceptEntry records, each containing a slot ID and a blockVanilla flag:
| Slot constant | Key | Vanilla behaviour blocked |
|---|---|---|
INTERCEPT_SLOT_ESCAPE (0) | Escape | Opens game/pause menu |
INTERCEPT_SLOT_F3 (1) | F3 | Toggles debug HUD |
INTERCEPT_SLOT_TAB (2) | Tab | Shows player list |
INTERCEPT_SLOT_F1 (3) | F1 | Toggles HUD visibility |
INTERCEPT_SLOT_F5 (4) | F5 | Cycles perspective / chunk reload |
An empty entry list clears all intercepts. Maximum 32 entries per sync.
Two new mixins implement the Escape suppression specifically: GameMenuScreenMixin cancels the keyPressed handler in GameMenuScreen, and MinecraftClientMixin cancels openGameMenu — both guard behind InterceptKeyState.blockVanillaForSlot. F3/Tab/F1/F5 are handled inside the existing KeyboardMixin path via InterceptKeyState.shouldConsumeVanillaKey.
Client-side state is managed by the new InterceptKeyState class. Intercepts are cleared automatically on disconnect.
Key Release and Repeat Events for Bound Keys
KrepapiKeyPipeline previously only dispatched events for GLFW_PRESS (action == 1). It now also dispatches for GLFW_REPEAT and GLFW_RELEASE on bound keys.
A new OVERRIDE_HELD_KEYS set tracks which keys are currently held with an active binding so that repeat and release events are only forwarded if the press was already consumed — preventing orphaned release events from leaking through. The held-key set is cleared on disconnect and when server overrides are reset.
This is a wire-transparent change (no new packets), but it is a behaviour change for existing listeners: handlers that only expected press events will now also receive repeat and release.
New Protocol Messages and Packet Types
Three new packet channels are registered in KrepapiNetworking and PayloadTypeRegistry:
| Channel | Direction | Payload class |
|---|---|---|
s2c_raw_capture | S2C | KrepapiRawCaptureS2CPayload |
s2c_intercept_keys | S2C | KrepapiInterceptKeysS2CPayload |
c2s_raw_key | C2S | KrepapiRawKeyC2SPayload |
The :protocol module gains four new record types (RawCaptureConfig, RawKeyEvent, InterceptEntry, InterceptKeysSync) and the corresponding encode* / decode* pairs in ProtocolMessages, with explicit size caps and input validation on decode.
Unit Tests for New Protocol Messages
ProtocolMessagesTest gains four new tests covering the new encode/decode pairs:
rawCaptureConfigRoundTrip— full roundtrip including whitelist keysrawKeyEventRoundTrip— all five fields preservedinterceptKeysSyncRoundTrip— multi-entry list andblockVanillaflagencodeRawCaptureRejectsTooManyKeys— verifies the 256-key hard cap is enforced at encode time
Notes
- KrepAPI is client-side only and compatible with vanilla servers. A 1.0.x client simply won't advertise the new capability bits — the new features are silently skipped, nothing breaks.
- Developers building on KrepAPI: check the client-advertised
protocolVersionin the handshake before sendings2c_raw_captureors2c_intercept_keysto ensure the client supports them. - Install a Fabric API build that matches the Minecraft version.
KrepAPI (for developers)
- Build version (Fabric mod release /
c2s_client_info.modVersion,gradle.properties→mod_version): 1.1.0 - Wire protocol version (
KrepapiProtocolVersion.CURRENT,protocolVersionins2c_hello/c2s_client_info): 2 — bumped because two new S2C packet channels and one new C2S packet channel were added. A 1.0.x client simply won't advertise the new capability bits (SERVER_RAW_CAPTURE,INTERCEPT_KEYS) and will not receive the new packets — nothing breaks. For developers building on top of KrepAPI: check the client-advertisedprotocolVersionbefore sending 1.1.0-only packets.
