OC2R v0.1.1-beta.3 for Minecraft 1.21.1 (NeoForge)
Curse Maven Snippet
What's new
Added
- Terminal: non-destructive column change — DECSCPP (
CSI Pn $ |) selects 80 or 132 columns via a newresizeWidthprimitive that copies existing contents into the surviving columns instead of clearing: screen content, scroll margins, cursor position and tab stops are preserved (new columns are default-initialized, matching xterm's resize). Private-marker forms (?/>prefix) are ignored, as xterm does. DECCOLM (mode 3) remains the destructive reset (#38) - Terminal: per-instance color palette — OSC 4 (query/set an indexed color) and OSC 104 (reset one or all indexed colors to default) are implemented; "computed dim" derives SGR 2 (dim) from the palette instead of a fixed table (#31)
- Terminal: CSI cursor-positioning coverage completed — CBT/CHT (backward/forward tabulation), CNL/CPL (cursor down/up + CR), VPR/HPA/HPR (vertical/horizontal position, absolute/relative), RCP and CSI ?u (XTRESTORE, save/restore private mode state), REP (repeat preceding char) (#24)
- Terminal:
XT_RAW_PASSTHROUGHmode (CSI ?7777h/l) — an in-band byte-capture debugger that renders every received byte as a visible glyph without interpreting it, for diagnosing what a guest program actually sends - Terminal: DECSTR (
CSI ! p, soft terminal reset) — resets mode tables, rendition, parser state, charsets, scroll margins and the saved cursor to power-on defaults without RIS's destructive geometry reset (no screen clear, no width change, no palette reset) (#35) - CI:
lintRatchettask (count-based ratchet for Checkstyle/PMD, baseline 0) and SpotBugs baseline file, so lint regressions fail the build going forward - CI: GameTest scaffolding (
gameTestGradle task, smoke tests for registration/recipes/device-bus, JUnit report publishing) so in-game integration behavior gets covered going forward (#41)
Changed
- Terminal: OSC/DCS/APC string-sequence termination (ST, BEL, CAN/SUB abort,
ESCfollowed by a non-\) is now handled uniformly by a singleTerminalOutput.handleStringBytestate machine instead of divergent per-manager logic, mirroring xterm's dispatch and closing a stuck-DCS/APC griefer vector - Terminal: cursor save/restore (DECSC/DECRC, SCOSC/SCORC,
SAVE_CURSOR/SAVE_CLEAR_AND_SWITCH) unified into a singleSavedCursorhelper — SCORC and DECRC can no longer silently diverge, and the pending-autowrap flag is now correctly saved and restored - Terminal:
Terminal.SCROLL_BACK_COUNTisstatic finalinstead of a mutable public field, removing a source of buffer/index mismatches - Dead code removed and visibility tightened across the terminal module (unused
SessionOperator/ColorUtils/RunnableUtils, unusedTerminalIO.putOutput(byte),TerminalBuffer.shiftUp/shiftDown(int),Utf8Decoder.hasActiveSequence(), unusedGlyphmetrics fields; several render/mode methods made private) - Video encoding moved off the server thread onto an async last-frame-wins encoder; internet tick, frame buffers and the VXLAN send path optimized (idle-skip, pooling, caching, report-once warnings)
- Block entity sync consolidated onto a single channel, dropping duplicate payload messages
- Linting is stricter by default: Checkstyle/PMD/SpotBugs now fail the build instead of only reporting, and Error Prone runs on by default with a curated set of checks promoted to errors
- Sedna updated to 4.0.1 (from 3.1.0):
GlobalMemoryRangeAllocatormigrated to the newDeviceBusAPI (Board.addDevice/removeDevicemoved offBoardin this release); Ceres bumped to 0.0.7 (deserialization sanity-checks array sizes >64 MB)
Fixed
- Terminal: xterm-256 color cube used
0xdfinstead of0xd7for the 4th cube level — a typo that shifted several palette colors (#30) - Terminal:
DSR(CSI n) with no parameter now replies with a status report (\033[0n) instead of hanging — ECMA-48 treats the omitted default asPs=5 - Terminal: CSI cursor-move argument saturation (
Integer.MAX_VALUE) could overflow when added to the current position; counts are now clamped before the add (#27) - Terminal:
REP(repeat preceding character) with a huge count could freeze the VM worker under the IO lock; clamped to one screen's worth of repeats - Terminal:
HPAmoved the cursor under DECOM origin mode instead of keeping the row fixed - Terminal:
DECRCrestored a saved cursor column beyond the current width after aDECCOLMshrink, causing a false line wrap on the next character; restore now clamps like every other cursor-move path - Terminal:
ESC )(designate G1 charset) was writing into G0 instead of G1, making the G1 slot unreachable — both designators now route to their own charset field - Terminal: a truncated true-color/256-color SGR sequence (e.g.
38;2;1, missing RGB components) leaked its leftover byte into being applied as an unrelated style attribute (e.g. bold); the whole incomplete color spec is now discarded instead - Terminal: the per-row dirty bitmask could silently wrap (
1 << dirtyLineon a 32-bit int) when writing far back into scrollback, flipping an unrelated bit instead of the row that changed; out-of-range rows now force a full redraw instead - Terminal:
FontHandling/UnicodeFontRendererare now annotated@OnlyIn(CLIENT), so an accidental import from common code fails fast at class-load instead of risking a dedicated-server crash insideMinecraft.getInstance() - Terminal:
resizeWidthmarked every renderer dirty twice (once directly, once viamarkAllDirty()); the redundant pass is removed - Terminal: CSI intermediates
$and*are mutually exclusive per xterm; a malformed combination (e.g.CSI *$|) is now ignored instead of misapplied - Redstone Interface:
getRedstoneOutput/setRedstoneOutputused the raw block-space side instead of rotating it through the block'sFACING, so outputs didn't turn with the block; now uses the sameHorizontalBlockUtils.toGlobal()rotation already applied to inputs (upstream issue #164) - Network Connector: could not be attached to a fence post —
canSurvivenow also acceptsBlockTags.FENCESon the attached side, in addition to the existing solid-face check (upstream issue #225) - Internet card MAC address is now derived from a stable per-card UUID instead of being read from NBT (also closes a spoofing/collision risk)
- Rate limits added for PCM/keyboard/framebuffer network messages; ICMP echo handling made non-blocking
- VXLAN manager could throw after shutdown in some races; default host settings sanitized
- OnyxOS: bundled kernel/rootfs image updated (S-mode boot path from OpenSBI confirmed working; kernel now boots to a framebuffer console via the FDT
simple-framebufferpath)
This mod has no additional files

