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 Overlays✔✔Real ItemStack rendering on HTML elements
Entity Overlays✔✔Full entity rendering (NPCs, players) via data-mc-entity
Clip Rects (data-mc-clip)✔✔Scissor clipping for scrollable item lists
Client Queries✔✔Video, keybinds, sound, player state, packs
Client Script Engine✔✔JSR-223 JavaScript on client side
Key State Tracking✔✔bridge.isKeyHeld(), isInGui(), isTyping()
Client Key Events✔✔clientKeyPressed, 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✔✔
Web font MIME types (woff/woff2/ttf/otf/eot)✔✔
Cache-busted URLs (?v=, #hash)✔✔
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().