Repository navigation
Add a graph view for crafting plans - #233
Open
rubensworks wants to merge 22 commits into
Open
rubensworks wants to merge 22 commits into
rubensworks wants to merge 22 commits into
Conversation
Also extracts the duplicated crafting plan header drawing into a shared helper. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The graph is shown in the crafting plan preview and in the plan of running jobs, next to the existing tree list and compact views, and replaces the tree list as the default tree-based view. It supports zooming around the cursor, fitting the plan to the view, collapsing nodes, and a fullscreen mode, and keeps its state across live updates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The config option now defaults to the graph view. The view a player picks is reused for the next crafting plans they open during the session. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Plans that do not fit in the viewport at a zoom level where quantities are shown initially have their deepest levels collapsed. Live updates keep the exact collapsed state, with new nodes expanded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The toggler only resolves the display mode and window size now. Graph overlay buttons also no longer keep a focus outline after a mouse click. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Nodes are neutral tiles framed in a status color, and only nodes that are actually missing ingredients are highlighted. Ingredients from storage look like inventory slots instead of finished jobs, and the legend groups the waiting states into waiting and blocked. Plan previews open at up to 1.5x and centered, while running jobs keep room to grow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The stub out of a parent and the trunk were shared by all children, so only the last part of an edge into a failed or crafting node was colored. The trunk is now split per child, and each segment takes the most severe color of the nodes it leads to. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Nodes that are being crafted show the same spinner as crafting ingredients in the storage terminal, their frame pulses, and light dashes flow along the edge from them to their parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Comparison only, behind a temporary switch. Not meant to be merged as is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Crafting nodes now only show a light running around their frame, replacing the spinner and the pulsing frame. The dashes flowing along edges skipped the last dash of each edge for some animation phases, leaving a plain blue gap next to the crafting node. Dashes are now computed up to the end of each edge, and drawn after all edge colors so that overlapping edges cannot hide them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Running plans only contain jobs that are still in the network, so completed sub-jobs used to vanish together with their sub-trees, and the result of a finished job was replaced by an empty job message. - Completed sub-jobs stay in place as done nodes, with their own completed sub-jobs folded away, and keep the icon of their last known outputs. - Jobs that crafting interfaces report as finished in between their crafting operations are shown as crafting while they have crafts remaining. - When a job is done, its screen keeps showing the plan as completed, with a completed title and without the cancel button. - The graph can be zoomed with + and -, fitted with F, and panned with the arrow keys. - The selected view button is outlined, and the other ones are faded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Collapsed nodes now look like a stack of one or two tiles, and a short edge leads to a rounded pill with the number of hidden nodes, instead of a dark box attached to the node. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
… jobs The legend was only shown for running jobs on wide windows. It is now always shown, lists what the nodes of each screen can look like, and wraps over multiple rows on narrow windows. The controls hint moves to the bottom right and is only shown when it fits next to the legend. Completed sub-jobs no longer fold away by themselves, so the layout does not change on its own. Instead, done jobs are faded while the rest of the plan is still running, so that the remaining work stands out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
- Move the code shared by the preview and running job screens into ContainerScreenTerminalCraftingPlanBase. - Show the outputs of completed jobs in all views, scaled to the total number of crafts, instead of the empty remaining outputs. - Do not count finished jobs with nothing left to craft as crafting in the compact view. - Continue an ongoing press or drag in the graph when a live plan updates. - Build the plan header in one place, fix the tick cast in the graph, and skip empty output alternatives in tooltips. - Remove the unused graph hit test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
With only a few nodes, it was not clear which node is the goal of the plan. The root is now larger and its ingredient is enlarged with it, while its quantity label keeps the regular size so that it stays crisp. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
…iled Crafting interfaces report that their target did not accept a job's inputs while the target is busy, for example a furnace that is still smelting something else. They insert the inputs again later, so this is not a failure. The graph showed these jobs as failed with a red tile and a "!" marker, the tree list colored them red, and the compact view counted them as missing. They now use the orange blocked color everywhere and are counted as to craft in the compact view. The status is renamed to "Inputs Not Accepted", and its description says that the inputs will be inserted again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The graph is the default crafting plan view, so its button now comes first, followed by the tree list and compact buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
The graph shows everything the tree list shows, so the tree list is now only offered when the new client config option terminalStorageCraftingPlanTreeListEnabled is enabled. A tree list that was picked earlier in the session falls back to the default view while it is disabled. The view buttons are now ordered graph, compact, tree list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
This version stops reporting crafting jobs as having invalid inputs while they only wait for their crafting interface (CyclopsMC/IntegratedCrafting#246). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
Running jobs now show the same progress bar as the crafting jobs overview, with the elapsed time, the completed percentage and the estimated remaining time, in the bottom row of the crafting plan gui. In the graph view, the percentage also counts the jobs that are already done. Jobs in the graph that are partially done also show their own progress along the bottom of their tile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
… jobs The plan header showed the elapsed and the estimated remaining duration of running jobs, which the progress bar now shows as well. The header keeps them for plan previews, which have no progress bar. Hovering an unknown remaining duration in the progress bar explains why it is unknown, as the header did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
…n header The durations that used to be on the top line are now in the progress bar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y
This was referenced Oct 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a pannable, zoomable, left-to-right graph view of the crafting plan tree, inspired by the vanilla advancements screen. It is available in the plan preview (before starting a job) and in the live plan of a running job. The graph is now the default view. The compact view stays. The tree list view is now hidden by default behind a client config option.
What changed
GuiCraftingPlanGraph): root on the left, one column per depth.INVALID_INPUTS, see below).!marker, and the whole path to them is red.done/total, and jobs that are partially done also show a thin progress bar along the bottom of their tile.+/-to zoom (around the cursor for scrolling),Fto fit, click a node to collapse/expand it. Zoom levels 0.5, 0.75, 1, 1.5, 2; counts hidden at 0.5.GuiCraftingPlanProgressBar, which both guis use.INVALID_INPUTSwhen their target refuses a job's inputs, for example a furnace that is still smelting something else, and they insert the inputs again later.!, the tree list coloured it red, and the compact view counted it as missing.1.7.1-765to the dev build1.7.2-840, which includes Stop reporting invalid inputs for jobs that only wait for their interface IntegratedCrafting#246.terminalStorageDefaultToCraftingPlanTreenow defaults totrue, and its comment now says the tree-based view is the graph. Existing config files keep their saved value, so only new installs get the graph by default.terminalStorageCraftingPlanTreeListEnabled(defaultfalse) makes the tree list view available. While it is disabled, a tree list that was picked earlier falls back to the default view.CraftingPlanGraphLayout,CraftingPlanGraphCamera) with no Minecraft imports, so the 26.x upmerge only touches the thin rendering/input layer.ContainerScreenTerminalCraftingPlanBase, which holds the view switching, sizing, background and input routing they used to duplicate.IGuiCraftingPlanViewinterface, with a singleactiveViewper screen, replaces theif (tree) ... else if (flat)chains.GuiCraftingPlanHeader, which also shows the completed title.GuiCraftingPlanButtons;GuiCraftingPlanToggleronly resolves the display mode and window size.ContainerScreenTerminalStorage.renderBgTabinto a staticdrawPanel.TerminalCraftingPlanStatic.asCompletedcreates the completed copy of a plan, optionally with the last known outputs of its jobs.icons.png, new lang keys inen_us.json(unusedview.treekey removed).Deviations from the plan
+Nbadge.Testing
./gradlew build: 69 unit tests pass (43 new: layout, camera, pruning, default view selection including the tree list option, flowing dashes, completed jobs, display status, refused inputs, progress, completed plans)../gradlew runGameTestServer: all 82 game tests pass, also with Integrated Crafting1.7.2-840.1.7.2-840, both iron jobs only reportINVALID_INPUTSwhile the furnace is busy with the gold. Once one of them starts, the other waits as queued instead of stayingINVALID_INPUTSuntil the first job is done.Screenshots
To be added (they could not be uploaded from the agent session).
🤖 Generated with Claude Code
https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y