Feature Matrix

v1.5.10 1.20.1 / 1.21.1 Forge Fabric

Everything CNPCExtended offers, compared across platforms at a glance.

30+
Total Features
30+
Shared (Both)
0
Platform-Only
2
Platforms
Supported Not yet N/A

Core (Server-Side)

Forge + Fabric
<td class=\"s s-yes\">✔</td><td class=\"s s-yes\">✔</td><td class=\"s s-yes\">✔</td><td class=\"s s-yes\">✔</td>
FeatureForge 1.20.1Fabric 1.21.1
Script Injection (cnpcext global)
Client Bridge API (getClientBridge())
Global Script Preloading
Global NPC Data Preloading
Script Commands (registerCommand())
/cnpcext CLI Commands
ModConfig (common.toml)
ClientConfig (skip menu)
Skip Menu (auto-load world/server)
🌐

HTML GUI (Client)

Forge + Fabric
FeatureForge 1.20.1Fabric 1.21.1Notes
HTML GUI (MCEF Chromium)Full HTML/CSS/JS rendered in-game
Bridge JS (window.cnpc)sendEvent, onEvent, close, initData
MC Item OverlaysReal ItemStack rendering on HTML elements
Entity OverlaysFull entity rendering (NPCs, players) via data-mc-entity
Clip Rects (data-mc-clip)Scissor clipping for scrollable item lists
Client QueriesVideo, keybinds, sound, player state, packs
Client Script EngineJSR-223 JavaScript on client side
Key State Trackingbridge.isKeyHeld(), isInGui(), isTyping()
Client Key EventsclientKeyPressed, clientKeyReleased, clientKeyHeld
📺

HTML Overlays (HUD)

Forge + Fabric

Render HTML on the HUD layer — skill bars, HP bars, quest trackers. Game stays fully playable.

FeatureForge 1.20.1Fabric 1.21.1
openOverlay(name, file, x, y, w, h, data)
updateOverlay(name, data) — auto-dedup
hideOverlay / showOverlay / closeOverlay
Multiple simultaneous overlays (up to 8)
Persistent overlays (survive relog)
Auto-cleanup on disconnect
Item overlays on HUD
Entity overlays on HUD
Fade-in animation
Interactive mode (cursor unlock)
🎨

Vanilla HUD Hiding

Forge + Fabric

Selectively hide vanilla HUD elements. Resets on disconnect.

ElementhideHudElement() NameForge 1.20.1Fabric 1.21.1
Hotbar + item namehotbar
XP bar + level numberexperience
Hearts + food + armor + airhealth
Armor icons onlyarmor
Hunger bar onlyfood
Crosshaircrosshair
Potion effectseffects
Action bar textactionbar
Chat displaychat
Sidebar scoreboardscoreboard
Tab player listtablist
All at onceall
📁

Asset Loading

Forge + Fabric

Load images, CSS, JS, and fonts from the scripts folder via the cnpc:// custom CEF scheme.

FeatureForge 1.20.1Fabric 1.21.1
cnpc:// custom CEF scheme
window.cnpc.assetUrl in bridge JS
Auto-sync scripts path on join
Path traversal protection
Works in HTML GUIs
Works in HTML Overlays
🎬

Cutscene System

Forge + Fabric

Keyframe-based camera cutscenes with visual HTML editor, fade transitions, per-keyframe easing, player protection, and script phase events.

FeatureForge 1.20.1Fabric 1.21.1
startCutscene(player, name, options)
stopCutscene / pauseCutscene / resumeCutscene
isInCutscene(player)
moveCamera(player, json) — ad-hoc keyframes
cutscene(e) phase event handler
Visual editor GUI (HTML)
Per-keyframe easing (11 curves)
Keep position on end
Fade transitions
Cinematic black bars
FOV lock + hand hidden
Mouse look blocked
Player protection (freeze + invulnerable)
Disconnect/reconnect failsafe
Catmull-Rom camera interpolation
Sub-tick camera smoothing (60fps+)
/cnpcext cutscene play <name> <player>
📡

API Method Reference

cnpcext — Server Script Global

MethodForge 1.20.1Fabric 1.21.1
getClientBridge(mcPlayer)
openHtmlGui(e, file, w, h, json)
registerCommand(name, json)
openOverlay(e, name, file, x, y, w, h, json)
updateOverlay(e, name, json)
hideOverlay / showOverlay
closeOverlay / hasOverlay
hideHudElement(e, element)
showHudElement(e, element)
startCutscene(player, name, optionsJson)
stopCutscene(player)
pauseCutscene / resumeCutscene
isInCutscene(player)
moveCamera(player, keyframesJson)
entityId(entity)
entityNbt(entity)

IClientBridge — via getClientBridge()

MethodForge 1.20.1Fabric 1.21.1
openHtmlGui(file, w, h, json)
closeHtmlGui()
sendToBrowser(event, json)
queryVideoSettings(cb)
queryKeybinds(cb)
querySoundSettings(cb)
queryPlayerState(cb)
queryResourcePacks(cb)
openOverlay(name, file, x, y, w, h, json)
updateOverlay(name, json)
hideOverlay / showOverlay / closeOverlay
hasOverlay(name)
hideHudElement(element)
showHudElement(element)
isKeyHeld(keyCode)
getKeyHoldDuration(keyCode)
isInGui()
isTyping()
getOpenScreen()

window.cnpc — Browser-Side JS

Property / MethodHTML GUIHTML Overlay
initData
assetUrl
onEvent(name, cb)
sendEvent(name, data)
close()
setOverlayItems(items)
setClipRect(rect)
📦

Network Packets

ActionTypeForge 1.20.1Fabric 1.21.1
OPEN_HTML_GUI
CLOSE_HTML_GUI
SEND_TO_BROWSER
RUN_CLIENT_SCRIPT
SEND_TO_CLIENT
OPEN_OVERLAY
UPDATE_OVERLAY
CLOSE_OVERLAY
HIDE_OVERLAY
SHOW_OVERLAY
SET_OVERLAY_INTERACTIVE
CLOSE_ALL_OVERLAYS
HIDE_HUD_ELEMENT
SHOW_HUD_ELEMENT
SYNC_SCRIPTS_PATH
PacketCutsceneStart (S→C)
PacketCutsceneStop (S→C)

Known Issues & Fixes

v1.5

Discovered via user testing. Fixed on both platforms.

IssueStatusDetails
Blurry overlay text FIXED Overlay browser was sized at width × guiScale instead of native window pixel ratio. Text rendered at half resolution then stretched.
Black flash on HTML load FIXED CEF needs a few frames to paint after creation. Added fade-in animation (skip 8 frames + fade over 10 frames).
Cursor detaches from game FIXED CEF's default cursorChangeListener calls glfwSetInputMode(GLFW_CURSOR_NORMAL) during HTML load. Fix: no-op cursor listener on overlay browsers.
Overlay breaks on window resize FIXED Item/entity overlay positions misaligned after resizing MC window. Fix: auto-resize browser each frame via checkResize().