ItemGraph 0.4.0-beta.2 (Fabric 1.21.1)
Curse Maven Snippet
What's new
[0.4.0-beta.2] — 2026-10-10
Second public beta of the ItemGraph 0.4 line. Ships the inspection-mode
consumption and async-query feedback fixes, the Fabric drop settle-position
correction, the promised retirement of the -grieflogger-compatible
artifacts (only the two standard jars are published), and the M11
reader-facing documentation rewrite.
Added
- Entity attacks are consumed in inspection mode (issue #187). While
/ig inspectis active — or inside the five-tick consumed-packet window — entity left-clicks are denied before damage runs, so a predicted hit can no longer damage, knock back, or pop the inspected entity. The denial is audit evidence:ATTACK_ENTITY_DENIEDrecords carry the target UUID, hand, and held-item fingerprint on both loaders. NeoForge cancelsAttackEntityEventatHIGHESTpriority and its LOWEST audit handler attributes the denial toINSPECTION_MODE,INSPECTION_WINDOW, orLOADER_CALLBACK_CANCELED; Fabric returnsFAILfromAttackEntityCallbackatServerPlayer.attackHEAD. Denied attacks resync the held stacks plus the target's pairing state the same way denied interactions do. Accepted non-lethal attacks still record no separate event; that evidence gap is issue #56's lifecycle scope. - Inspection packet coverage (issue #178). A consumed or denied inspection
right-click now consumes its whole packet set: the off-hand
useItemOnand the item-use twin (RightClickItemon NeoForge,UseItemCallbackon Fabric) can no longer place blocks, throw pearls, or use food on the inspected scene — including the revocation-detecting click whose twin arrives after the mode cleared (InspectionService.markInteractionConsumed). - Entity interactions are consumed in inspection mode (issue #185). While
/ig inspectis active, entity right-clicks — armor-stand equipping, shearing, milking, leashing, name tags — are denied and consumed instead of mutating the scene. The denied attempt is still audit evidence:INTERACT_ENTITY_DENIEDrecords carry the target UUID, hand, and held-item fingerprint on both loaders. NeoForge cancelsEntityInteract/EntityInteractSpecificatHIGHESTpriority withInteractionResult.FAIL; Fabric returnsFAILfromUseEntityCallback, which covers bothinteractandinteractAtpackets; the listener-recorded denial suppresses the aggregate callback decorator's duplicate denial row. The same five-tick consumed-interaction marker covers entity packets that arrive just after the mode cleared, and consumed interactions resync the held stacks plus the target's entity data so client-predicted state reverts to server truth. - Copy and affordance polish (UX audit F6+F7+F10).
/ig inspect onnow repeats the disable hint from the toggle path;[Go to ...]links disclose their teleport consequence on hover; result sets past the eight-link cap end with a "…N more locations not shown" line; and an unknown/ig helptopic suggests the closest topic names instead of dumping all 36. - Player-facing async query feedback (UX audit F1+F2+F4).
/igtext queries now acknowledge acceptance in chat; the dispatcher's five-second deadline is reported as a query timeout or a queue wait instead of leaking JDBC cancellation text; and a permission revoked before delivery replaces the result with an explicit notice on every async path. - Documented accepted UX limits (UX audit F8+F9, issue #177).
docs/QUERY_MODEL.mdnow records the one-line-per-row chat-density trade-off (with the designated summary-mode remedy) and that/ig pagerequires a player entity for saved-session continuation — console/RCON sources can still page directly via/ig lookup page.docs/CONFIGURATION.mdrecords the localization scope precisely: 217 catalog keys per locale but only the ninesource.*hover labels are translated — help topic bodies and overview lines ship English undernl_nl/zh_twby design. - Visible flow-browser loading state (UX audit F5). While a page turn or
detail open is in flight, the open flow-browser menu now shows the pending
state: the page label gains the
(loading)suffix and the paging arrows are greyed out, so controls no longer look live while clicks are gated. GUI data queries now share the five-second deadline used by text queries, and a rejected, failed, stale, or timed-out load restores the previous page rather than leaving the menu stuck greyed. Thebrowser.loading_suffixcatalog value now carries its intended leading space via a\escape.
Fixed
- Fabric drops record the entity's rest position, not its spawn position
(issue #166).
finishItemDropCaptureread theItemEntitycoordinates atServerPlayer.dropreturn — eye height plus throw offset — so a dropped- then-recovered stack producedDROP_ITEMandPICKUP_ITEMrows on GROUND nodes one block apart and the correlation bridge's node-equality filter could never pair them. Fabric now queues a bounded pending drop like the NeoForge listener and emits at the settle position (onGround, near-zero delta movement, removal at last known position, or TTL expiry); a pickup that overtakes a still-pending drop emits it at the shared pickup position, and death-drop replays and deferred/giveground outputs settle the same way. Fabric drop/pickup rows now also feedItemEntityTrackerso the entity-UUID continuity match that NeoForge already uses can rank Fabric candidates. Evicted or requeued pending entries stayDROP_UNRESOLVED/DEATH_DROP_UNRESOLVEDto UNKNOWN with the eviction reason — never a fabricated ground transfer. - Inspection-mode denial and revocation handling (
docs/UX_AUDIT.mdfinding F3). On both NeoForge and Fabric, a click that detects a revokeditemgraph.command.inspectgrant now disables inspection, reports "Inspection disabled: the itemgraph.command.inspect permission was revoked.", and is consumed instead of falling through to vanilla — previously that click could break the block being inspected. Requests denied for a missing downstream grant (itemgraph.audit, oritemgraph.guion containers) are now consumed for left-clicks and non-container right-clicks so a denied inspection never mutates the scene; container right-clicks still fall through so vanilla chest access is preserved, and transient rejections (queue full, database unavailable) still preserve ordinary interaction.
Added
- Admin-facing UX audit (
docs/UX_AUDIT.md). Flux-UX review of the/igcommand tree, in-game help, async query feedback, flow browser, in-world inspection, permission denials, paging/location actions, localization, and the operator docs. Records ten findings with implementation evidence — including silent acceptance/timeout/revocation gaps in the async query path and an inspect-mode revocation fall-through — plus a prioritized follow-up backlog. No behavior changes.
Changed
- Reader-facing documentation reorganized around audiences (issues
#191–#195).
docs/WRITING.mdrecords the writing contract: named audiences, define-before-use, validator-pinned literals, and the protected evidence-ledger list. The README and admin quick start now lead with install, capture verification, and incident-to-command routing for first-time admins; the evidence, query, taxonomy, permission, configuration, GriefLogger-migration, and API docs name their audience and front-load reading maps or checklists; the contributor docs gain navigation signposts; and/ig help commandslabels each route with the question it answers (ITEM LOST?,CHEST?,NEARBY?,WHY LINKED?). No command, permission, event, or schema contract changed.
Removed
- GriefLogger-compatible artifact variants retired. ItemGraph replaces
GriefLogger and no longer ships
-grieflogger-compatiblejars or declares the GriefLogger mod a usable companion. Both loaders now declare the GriefLogger mod a hard conflict (NeoForgetype="incompatible", Fabricbreaks), store listings mark the relationincompatible, and releases publish only the two standard jars. Migration path: remove the GriefLogger mod jar, keep itsdatabase.db, and use the unchanged opt-in read-only import (grieflogger_integration_enabled+grieflogger_database_path).
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include