Repository navigation
Releases: neverforward/Insight
Releases · neverforward/Insight
Release list
v0.4.0
Added
- Every part of the panel has a colour of its own. The
colorsgroup has one entry per part -name,
facing,identifier,translationKey,x,y,z,distance,label,valueandhealth-
and each is a vanilla formatting code without the§:"c"means§c, and an empty value
(ornone/off/default) leaves that part in the plain text colour,client.textColor. Both
panels and the extras lines read from the same group - a labelled line such as a chest's
Items 12/27usescolors.labelfor its label andcolors.valuefor its value - so one scheme
covers the whole display. The defaults only spell out the colours the coordinates are usually drawn
in (xred,ygreen,zaqua) plus red hit points; every other part keeps the grey/white the
panel has always used, so a colour scheme stays opt-in. - The accepted codes are the Bedrock set, which is larger than Java's sixteen:
gminecoin gold,
hquartz,iiron,jnetherite,mredstone,ncopper,pgold,qemerald,sdiamond,
tlapis,uamethyst,vresin andwparty blue, next to the sixteen0-9/a-f. The
formatting codes (k,l,o,r) are rejected - one of those on a line would change how the
rest of the panel is drawn. - The configuration screen has a Colours group with one dropdown per part, each option shown as
the colour's name (Red, Dark aqua, Minecoin gold, ...) rather than its code.
/insight set <colors.*> <code>takes the bare code or the§c/&c/#cspellings, and
noneclears the colour again. - The entity panel draws the hit points and the armor row itself, and
entity.healthStylepicks how:
bar,bar+number,hearts,hearts+numberornumber(it covers both rows). The bar is painted
by the game's own UI renderer - a rounded dark track with the fill laid over it - and takes its colour
from the scheme (colors.healthfor the hit points,colors.valuefor the armor). The hearts are the
vanilla sprites (heart_new, falling back toheart), with the background sprite and the half sprite
over it for a half heart, and every row is exactly one line of text tall. A row is drawn for the
subject's whole scale, not for what is left of it, so hearts that have been lost stay visible as their
background sprites. entity.heartsThreshold,entity.heartsPerRow,entity.healthDecimalsandentity.armor: how many
points still fit as icons (a subject whose maximum health is above the threshold keeps the numbers,
so a boss does not turn into a wall of hearts while a player or a zombie does get them), how many
hearts fit on a row before the next one starts above it and overlaps the row below by half a heart
(in the bar styles it is the bar's width instead), whether the hit points carry one decimal, and
whether the armor row appears at all.- On a server install the bar is spelled out in text, because that is all a vanilla channel
carries:█per whole step,▌for half a step and the empty rest as the same█in the muted
label colour - the same fixed-width track the client paints, red for the hit points by default. The
icon rows are deliberately not spelled out there: the font's glyph hearts read badly in a vanilla
channel, so a server shows the numbers for those styles. /insight guiopens a configuration menu on the server as well, since a server has no screen of
its own: it pushes a group picker followed by one form per group to the player who asked. The values
go through the same path as/insight set, so the range checks, the validation and the immediate
save behave exactly like the command - a value that is out of range says why in chat and the menu
reopens. The groups are General (the master switch, distance, interval, the channel, ...),
Block lines, Entity lines, Colours, Extras: every block, Extras: block entities
and Extras: redstone, which covers every option that means something on a server.- The entity panel grew its own group of extra lines,
entityExtras(extras.enabledgates them like
the block ones), each showing what the subject actually has and staying silent otherwise:
the owner of a tamed animal, the active status effects with their remaining time on one line
(effectsLimitcaps how many fit), a breeding timer (the love timer or the cooldown after
breeding), a zombie villager's conversion time, the pet armour in the body slot
(all/damaged/off- the humanoid armour slots were already reported), a mount's coat and
markings, movement speed, jump strength and saddle, an armour stand's pose index, a
villager's profession and trade level, and whether a copper golem is waxed. - A horse's coat and markings are named in the order the game's own horse render controller lists its
textures in (Array.base/Array.markings, indexed byquery.variant/query.mark_variant), so
the same seven colours and five markings the vanilla horse models use; a horse with no markings shows
the coat alone. - Where those values come from: the status effects, breeding and conversion state are the engine's own
components, the timers are ticks; a villager's profession and trade level are synced actor data - the
game's own villager render controller reads the same two values asquery.variantand
query.trade_tier- and the profession names are the game'sentity.villager.*translation keys, so
they follow the player's language. Two of them are server-side state that the game never syncs to a
client: the copper golem's waxed flag (an entity property the game declares as not client-synced) and
a zombie villager's conversion countdown (only the "it is converting" flag is synced), so those lines
appear on a server install and stay empty on a client. - Two of the requested entity adapters are not implemented, because the engine does not expose what
they need: a baby's growth time (its component carries a raw age counter with no total and no
documented unit or sign, and it is not synced) and a villager's profession as a name on the old
villager type (only the V2 villager's variant is the profession; the old one has no such field).
The next entity drop is deliberately left out as well: asking the loot table would consume the
world's random number generator, which is not something a display mod may do.
Changed
- Higher
Configschema version (6) for thecolorsgroup; an existing file is merged
automatically and keeps every value it already has. - Higher
Configschema version (7) as well, for the entity display options above; an existing file
is merged automatically. - Higher
Configschema version (8) for theentityExtrasgroup above; an existing file is merged
automatically. - In the
+numberstyles the client writes the row's own "label number" text behind the sprites,
never the line itself: that line may carry a bar spelled out in block characters for a server
channel, which must not appear next to the sprites. - The
guisubcommand is registered on both sides now (it used to exist on the client only) and is
always opened for the player who asked: the client shows its own screen, the server pushes the menu.
A console origin is told that the command can only be run by a player. The client-only options are
absent from the server's menu -showOverlay, the anchor, the offsets, the font and appearance
settings, the language and the key bindings do nothing there.
Removed
- The
server.channel: "popup"value is gone. A popup sent as a text packet made the client
reject it and drop the connection (the "Block" error on join, "There was an issue with the
Minecraft data being sent or received"), so the channel is removed rather than kept as a trap.
A configuration file that still says"popup"falls back toactionbar, exactly like any
other value the channel list does not know.actionbarandtipremain.
Fixed
- A block container's contents no longer turn into the player's own inventory once its screen
has been opened. The screen's models map holds the player's inventory models next to the block's,
and the player's main inventory has exactly as many slots as a chest (27), so matching by slot
count picked the wrong model - and the snapshot it wrote then kept the panel on it, because a
snapshot is only dropped once it agrees with the world copy again. Models whose category is the
player inventory are never candidates now, and a model that wraps the block's own container (which
is how a brewing stand's three models are found) is preferred outright. - A message-only text packet - what the
tipchannel sends - now carries a fully filled payload:
the localize flag, the filtered message and the sender's xuid and platform id, instead of
nothing but the message body, which the client can reject as a malformed packet. - The two client hotkeys only fire where they belong. They used to act on any key press, so the
key that opens the screen also fired while typing in chat, in an anvil or on a sign, and in the
main menu, where it had no business being. A hotkey now needs the game to be playing - the
screen that owns the input has to be the HUD one, which also covers every other menu, since the
screens behind an open one report no focus - and no text box may be selected for typing, which
the client reports for chat, signs, the anvil and the creative search field alike. While the
configuration screen itself is up its own keys are left alone too: a rebind capture or an edited
text field no longer gets its key eaten by the hotkey. - The status effect line shows every effect again, with the right level. The engine's effect list
carries slots it has no name for, and counting those made the line stop after the first effect and
report the rest as+n; only the en...
v0.3.1
Fixed
- The README says LeviLamina 26.51.* on both sides now, which is what
tooth.jsondeclares and
what the mod is built against; 0.3.0 already required 26.51 intooth.jsonwhile its README still
said 26.40.
v0.3.0
Added
- The panel fades in when the info display appears and out when it disappears; when the crosshair
moves to another block or entity the same panel resizes its box from the size it had. The lines are
swapped at once and nothing is faded while that happens, so changing the subject never flashes.
client.transitionTimesets the duration in seconds (default 0.1);0keeps the previous behaviour
of appearing, resizing and disappearing instantly. Only the display switching and the box resizing
animate. The client overlay is the only side that can animate: a server-side channel hands text to
the vanilla UI. - A configuration file written before the switches existed keeps the panel it had: while upgrading, a
file below schema version 5 has its legacyformat/entityFormattemplates read once - before
the config library merges the new defaults in and rewrites the file - and turned into switches
group by group. The blockformattemplate feeds thedisplay.*switches and the entity
entityFormattemplate theentity.*switches, a placeholder the template used meaning that part
stays visible and a placeholder it never used meaning that switch is off. An old defaultformat
({blockName},{blockType},{x} {y} {z},{extras}) therefore ends up withdisplay.name,
display.identifier,display.positionanddisplay.extrason and the rest of the block group
off, and the entity template's placeholders map ontoentity.*the same way - for example
{entityName}->entity.name,{entityType}->entity.identifier,{x} {y} {z}->
entity.position,{health}/{maxHealth}->entity.health,{extras}->entity.extras. A
template that is not in the file at all leaves its group at the defaults rather than switching
everything off. The migration runs only for a file below version 5 and the result is saved
immediately. The per-block-typeoverrideshave no equivalent and are still dropped, and{dim}
has no switch to feed either. - Blocks and entities have a panel of their own now:
display.*(nine switches) describes a block
andentity.*(eight switches) an entity, andentity.extrasis the entity panel's own switch for
per-entity extra lines, the counterpart ofdisplay.extras. The entity panel reuses the same
extras.*adapters (extras.enabledgates the block and the entity side alike): container
entities such as chest / hopper minecarts and boats with chest come fromextras.chest, paintings
fromextras.paintingand the worn equipment of players, armor stands and armored mobs from
extras.misc, which reports the four armor slots plus the main and off hand.
Changed
- Higher
Configschema version (5) for the separatedisplay/entityswitch groups, the removal
of the templates and the newclient.transitionTimeoption; existing files are merged
automatically, and a file below version 5 has its old templates migrated into switches first. - The panel is assembled by the mod from per-part switches instead of the
format/entityFormat
text templates, and the two targets no longer share one switch set:display.*feeds the block
panel andentity.*the entity panel. Each is laid out in the same five lines: the name with the
facing in muted brackets (Stone§7(north)), the type id with its translation key in brackets
(§7minecraft:stone(tile.stone.stone)), the position with the distance behind it, the labelled
stats (each§7<label> §f<value>and separated by one space) and the extras. The block panel's
stats are the light level and the light the block emits (Light 12 Emission 15). A part the target
does not have (health on an entity type without any, a facing on a block whose
states we do not understand) is skipped and empty lines are dropped, so a malformed layout (a stray
placeholder, a dangling separator, a blank line) is no longer possible. The·that joined every
format part is gone (the only one left is inside a container's extras line, between the slot count
and the total item count) and the dimension is not shown any more. - The entity panel no longer reports a light level or light emission: both were read from the block
under the entity, which describes a world position rather than the entity itself, so
display.light/display.emissionare block-only now and leave an entity panel untouched.
display.healthisentity.healthnow, next to the rest of the entity switches, and there is no
display.dimensionat all./insight setaccepts everydisplay.*andentity.*name. - The client info panel is drawn by the game's own UI renderer now (engine font, engine item renderer
for the subject icon, rounded background, fade and size animation overclient.transitionTime)
instead of the ImGui overlay, so its text and icon match the vanilla UI. - The configuration screen no longer has "Block format" / "Entity format" text boxes. Its left column
is tabbed instead of one long stack of sections, and the tabs follow the two switch groups:
General; Block lines, holding Title line (Name, Facing), Details line (Type id, Translation
key), Position line (Position, Distance), State line (Light, Emission) and Extras (Extras lines ->
display.extras); Entity info, holding Entity info (entityEnabled), Title line (Name,
Facing), Details line (Type id, Translation key), Position line (Position, Distance), State line
(Health) and Extras (Extras lines ->entity.extras); Extras, holding Extras (extras.enabled
only - thedisplay.extrasrow moved into the Block lines tab), Extras: every block, Extras:
containers, Extras: block entities, Extras: redstone and Extras: block states; and Keys.
Preview and Appearance stay in the right column.
Removed
format,entityFormatand the per-block-type formatoverrides
({ "match": ..., "format": ... }), together with their placeholders ({blockName},
{blockType},{blockKey},{x}{y}{z},{dist},{dim},{direction},{light},
{emission},{extras},{entityName},{entityType},{health},{maxHealth}).
/insight setno longer acceptsformat/entityFormatand answersUnknown option: ...for
them.
Fixed
- The subject icon was centred on the whole panel, so a block with many extra lines left it
floating in the middle of the box, away from the name it belongs to. It sits at the top of its
cell now, level with the first text line, and it is one and a half text lines tall (measured from
the same line height the text uses, so it still followsclient.fontSize) instead of the fixed
16 units that made it read as a bullet next to the first line. /insight set <option> <value>rejected every number -/insight set maxDistance 24answered
Syntax error: Unexpected "24"- and anything containing a space: the value was declared as a
std::string, which looks like an identifier to the command parser. It is read as raw text now, so
numbers, colours and free text can be typed the way the README documents them. Values are still
validated (Invalid number value: bogus).
v0.2.0
Added
- Per-block extra info with one switch per adapter (
extras.*), so every line can be silenced on
its own - in the configuration screen or with/insight set extras.<name> true: breaking time,
explosion resistance, container occupancy, chiseled bookshelf, shelf, lectern, decorated pot,
brewing stand, the furnace family, jukebox record, sign text (front and back), banner patterns,
item frame, flower pot, painting, piston, redstone level / repeater / comparator, dispenser,
candle, respawn anchor, and amiscgroup covering doors, trapdoors, fence gates, buttons,
levers, tripwire hooks, observers, sea pickles, cake, composters, beds, enchanting tables, bee
nests, beacons, campfires and the crafter (its two states and its disabled slots). - Cooking timers (furnace / blast furnace / smoker, brewing stand, campfire) keep running while no
container screen is open: the client keeps the last value the engine sent and advances it
locally, moves on to the next item by itself and hides the lines once every item it knew about has
finished. Fuel running out, or a hopper refilling while nobody looks, is the one thing a client
cannot see, so the estimate may drift until the screen is opened again. - The client registers a command of its own,
/cliinsight, withtoggle/on/offnext to
status/reload/set/gui. The switch flipsclient.showOverlaythrough the same path
as the hotkey, so command and key always agree and both persist the change, and the status line
reports the display state. - The command description is localized (
Insight's main command); unlike the messages it is
translated once, when the command is registered.
Changed
- Requires LeviLamina 26.40.* (Bedrock 26.40); the sources no longer compile against 26.20.
- The client command is named
/cliinsightrather than/insight, so a client and a server install
can coexist: joining a world merges the server's command list into the client registry, which
would otherwise make the two clash. - Defaults:
client.anchoristop_center(wasbottom_center) andclient.overlayOnRemoteis
on(wasoff). Defaults only apply to new or incomplete config files. - Higher
Configschema version (3), because every extras adapter became a field of its own;
existing files are merged automatically. - Furnaces report only the item that is in the fire (
Time left Ns,Cook progress N%), and the
percentage uses that machine's own cook time - 200 ticks in a furnace, 100 in a blast furnace or
smoker - instead of assuming a furnace everywhere.
Removed
- The note block pitch/instrument and the ignite chance extras: neither is reachable through the
26.40 API, so their switches were removed together with the code instead of showing guessed
values.
Fixed
/insightwas unknown on a dedicated server even though the mod was enabled: LeviLamina publishes
its command-registration event while the server instance is still being built, but enables mods
later, so the command is now registered directly when the mod is enabled (with a log line to
confirm it).- The crafter showed only one of its two states -
triggeredis the Java spelling while Bedrock
calls ittriggered_bit- and its disabled slots were read from a state that does not exist
(they live in the block entity). - Switching one extras adapter off could take unrelated lines down with it: turning banners off also
silenced the furnace readout, the brewing percentage and the beehive, beacon and campfire lines. /insight guino longer exists on the server, where it could only answer that the screen is
client-side. The subcommand is registered only where there is a screen to open.
v0.1.0
Added
- Client configuration screen (Dear ImGui), opened with
/insight guior a hotkey and modal while it
is open: every option in grouped sections with an inline editor (switch, slider, combo box,
multi-line text, key binding), the appearance settings, a live preview of the panel, a status line
for the last change and immediate saving. - Two configurable hotkeys (open the screen, show/hide the info display), registered with
LeviLamina so the game's own key settings can remap them, and rebindable from the screen itself. - A language row that lists exactly the languages this mod ships (plus
auto); fixed choices such as
the anchor positions are shown as translated labels instead of their raw tokens.
Changed
- The configuration screen takes its input from Dear ImGui's Win32 backend through a window-procedure
hook, so clicking, dragging, scrolling and text editing behave like a normal desktop window. While
it is open the game receives neither mouse nor keyboard messages, and raw mouse input no longer
turns the camera. - Cursor handling on the client was rewritten: the pointer is handed over on the window thread while
the screen is open and given back on close, so it is visible in the screen and hidden again - and
still locked inside the game window - while playing. client.languageis a stored preference rather than something detected at runtime (default
zh_cn);autofollows the client only when it reports a language this mod actually ships, and a
locale code is always resolved to the real message file (zh_CN->zh_cn) before lookup.- Offsets are applied relative to the anchored edge: a positive value pushes the panel towards the
middle of the screen, so the whole0..1range is usable with every anchor. The panel is also
never allowed to grow wider than the display (its text wraps instead), which is what previously
pinned it to the left edge and made the horizontal offset look ineffective. - The info panel is not drawn while the configuration screen is open: the screen shows the preview
instead of a duplicate panel behind it. - Slider rows keep their own value while they are open, so a drag is no longer undone by the value
being re-read from the configuration every frame. - Higher
Configschema version (2) for the two new hotkey options; existing files are merged
automatically.
Removed
- The first, engine-event based input path of the configuration screen (cursor mapping, synthetic
clicks and the software cursor) together with the debug output used while working on it.
Fixed
- Changing one option could make every further change do nothing (the queued edits were applied after
the "mod or overlay switched off" shortcut that editing those very options triggers). - Two edits made between two ticks of the game thread could drop the earlier one; edits are queued
now. - Text options could not be edited a second time because the edit buffer was refilled from the
configuration every frame. - Integer options (for example the sampling interval) rejected the decimal values the sliders send.
- Long values (block and entity formats) spilled over the neighbouring rows and out of the window;
they are folded onto one line and truncated now. - The pointer stayed visible after closing the configuration screen and could leave the game window.
- Enum options showed their raw tokens (
top_left,on) instead of a readable, translated label.
v0.0.3
Fixed
- fix tooth.json
v0.0.2
Fixed
- fix tooth.json
v0.0.1
First release: the mod template has been turned into the actual mod.
Added
- Server build (BDS) that samples every online player's look ray on a fixed cadence and sends the
formatted info to that player only, through a configurable channel
(actionbar/tip/popup/jukebox/system/chat/none). - Client build (GDK / LeviLamina client) that draws the panel locally with Dear ImGui over a DXGI
Present hook, because the vanilla UI text path cannot render CJK block names on this GDK build. - Info content: block name / type / translation key / coordinates / distance / dimension, the
{direction},{light}and{emission}placeholders, and per-block extra lines via{extras}. - Extras adapters: container occupancy (chest, trapped chest, barrel, hopper, dropper, dispenser,
copper chest, shulker box, crafter, chiseled bookshelf, lectern, decorated pot, chest and hopper
minecart, boat with chest), furnace / blast furnace / smoker and brewing stand slots, redstone
signal levels, block states (doors, trapdoors, fence gates, buttons, levers, tripwire hooks,
observers, pistons, crafters, composters, cake, note blocks, sea pickles, enchanting tables) and
block entities (banners, decorated pots, shelves, item frames, lecterns), plus the equipment of
every entity that carries some. - Entity support: an entity is shown when it is closer than the block under the crosshair, with
entityEnabled/entityFormatand{health}/{maxHealth}. - Commands:
/insight toggle | on | off | status | reloadand/insight set <option> <value>with
option-name completion, value validation and localized feedback. - Per-player switches are stored in a key-value database (
data/players/), so they survive server
restarts. - Localization through LeviLamina's i18n (
lang/en.json,lang/zh_cn.json) with a locale fallback
chain; block and item names come from the engine's own localization tables, so resource pack
translations are honoured. - Configuration:
config.jsonwith automatic merging of new options, per-block-typeoverrides,
and client overlay options (anchor, offsets, font size, background, shadow, text colour, max
width, hide in GUI, overlay on remote servers, language). - Project icon (
assets/icon.svg,assets/icon.png) and a user-facing README in English and
Chinese.
Changed
- Detection is data-driven: the engine is asked directly (health attribute,
Block::isContainerBlock(), material liquids, block actor types, block states, dimension name)
instead of the mod keeping lists of block and entity ids. - Documentation is user-facing; implementation notes live in code comments.
Removed
- The mod template leftovers (
src/mod/MyMod.*).