Mods / Improved Handbook Recipe Helper

Tags:
Utility QoL Addon
Author:
Bannta
Side:
Both
Created:
Apr 23rd at 2:33 AM
Last modified:
5 days ago
Downloads:
5755
Recommended download (for Vintage Story 1.22.0 - 1.22.7):
improvedhandbookrecipesfork-1227.0.5.zip  1-click install

This mod streamlines the handbook by allowing you to scroll freely through recipe variants using the mouse wheel. It adds convenient auto-fill buttons and a recipe conflict selector, designed to work across multiple recipe group grids. Additionally, it highlights any missing items when a specific recipe button is selected.

 

Compatibility:

 

Buttons added:

= Fill best match

* Max add

+ Add one more

NEXT to cycle between conflicting recipes. T

 

!IMPORTANT!

Version 1227.0.1 requires both client and server updates. It lets you cycle through conflicting recipes by syncing with the server. If you have no conflicts, stay on version 1222.0.2(Client only). Vintage Story normally breaks or picks the first conflicting recipe it finds.
 
Update Requirements
    • Version 1227.0.1 Installs on both client and server to enable recipe cycling.
    • Version 1222.0.2: Stays in use if your mod list has no recipe conflicts.
      • If you have mod conflicts and need to stay client-side only, then approach the two mod owner and see if they can alter their recipe pattern a little bit in the next release.
 
Why This Update is Needed
    • Recipe Conflicts: Vintage Story picks the first recipe it loads when mods conflict with vanilla items.
    • Error Prevention: Duplicate recipes cause game errors or craft the wrong item.
    • Fixing the Issue: The new version lets you cycle choices, or you can ask the mod creator to change the recipe.

 

Note: The NEXT Button should only become usable when there is a conflict is detected and works in Version 1227.0.1 and above (requires the server to be loaded as well)

 

The Code is originally forked from the original mods from Kathanon 1.20(https://mods.vintagestory.at/improvedhandbookrecipes) and DArkHekRoMaNT 1.20(https://mods.vintagestory.at/recipeselector

Also, with inspiration from Gabone 1.21(https://mods.vintagestory.at/improvedhandbookrecipescontinued), adding a neat feature of showing missing ingredients. This was a huge rewrite, as a lot of the code was obsolete for net 10 and 1.22. 

 

Let me know if this breaks anything by wrapping the crash log in a spoiler.  

 

Mods the Complement: The Handbook I enjoy using:

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
1227.0.5 improvedhandbookrecipesfork
1.22.0 - 1.22.7
584 5 days ago improvedhandbookrecipesfork-1227.0.5.zip 1-click install

improvedhandbookrecipesfork-1227.0.5

  • Adds compatibility for Overhaul lib legacy and  HoRPerformanceOptimizer 
    • Forces the handbook on a conflicted recipe to inject the recipe you want into the Grid. No need to cycle it when going from the handbook to the grid. Next button allows cycling when the handbook is closed. It will lock onto the item if injected(=,+,+) into the grid. 
    • Remove crashes from drag-and-drop grid placing. 
      • This was because I needed to use the grid coding to validate the receipt so duplication would not occur(yeah, we don't talk about 1227.0.4). This added validation a slight delay to the drag-and-drop inherently, which prevents flooding the vanilla code and HoR harmony passes from causing a miss or collision, thus crashing the game.
  • Added a proper dispose system to make sure no stale processes are carried over in a new session if the game was not fully exited.
1227.0.3 improvedhandbookrecipesfork
1.22.0 - 1.22.7
439 Aug 27th at 3:37 AM improvedhandbookrecipesfork-1227.0.3.zip 1-click install
  • Adds HoRPerformanceOptimizer - allows "NEXT" Button to function and cycle through recipe conflicts
1227.0.2 improvedhandbookrecipesfork
1.22.0 - 1.22.7
471 Aug 22nd at 6:05 PM improvedhandbookrecipesfork-1227.0.2.zip 1-click install

improvedhandbookrecipesfork-1227.0.2

1227.0.1 improvedhandbookrecipesfork
1.22.0 - 1.22.7
390 Aug 18th at 3:49 PM improvedhandbookrecipesfork-1227.0.1.zip 1-click install
  • Fixes "Next" button conflict recipe cycle
    • The fix forces the mod to be on both sides (Client and Server)
      • The server side is only used to authorize the other recipe slection, with out it, the cycle is stuck on first-come, first-served. 
        • If you need it to be on the client only, next do upgrade; just note the NEXT button will not work
        • modinfo.json updated to "side": "Universal",
    • Add highlighting to the letters of the NEXT button to indicate a Conflict 
1222.0.2 improvedhandbookrecipesfork
1.22.0 - 1.22.2
2786 May 22nd at 11:45 PM improvedhandbookrecipesfork-1222.0.2.zip 1-click install

1222.0.2 

  • hot fixes - This is a recipe matching conflict. The metal plaque recipe is likely also a 2×2 or shapeless involving iron plates and nails, so when you try to fill the trapdoor recipe, CanMake or Matches finds the plaque recipe first and fills that instead.
1222.0.1 improvedhandbookrecipesfork
1.22.0 - 1.22.2
145 May 21st at 11:16 PM improvedhandbookrecipesfork1222.0.1.zip 1-click install
  • Issue: It appears that the open chest inventory was not being included in the validation of items on hand to construct a given item
    • Added open chest inventory for validation overlay(red)
    • Added tool if in the crafting grid overlay(red)
  • hardening the tooptip class - Removed SlideshowStack_Transpiler entirely — the SlideshowItemstackTextComponent patch was injecting an UpdateIndex call with a possibly wrong field reference, causing out-of-bounds array access during render. Scroll cycling on ingredient display stacks is removed. 
  • Cleanup in the tooptip class: Slideshow_Transpiler simplified and all isGrid branching removed since it's grid-only now. UpdateIndex simplified, removed the SlideshowItemstackTextComponent branch.
  • moving to my revision numbering system <compliled agaisn't game version no periods  1222>.<rc branch  0>.<mod release iteration 1> 1222.0.1
1.0.0 improvedhandbookrecipesfork 940 Apr 23rd at 2:45 AM Empty improvedhandbookrecipesfork-1.22.01.zip 1-click install

145 Comments (oldest first | newest first) (threaded | flat)

Bannta , 5 days ago

improvedhandbookrecipesfork-1227.0.5

  • Adds compatibility for Overhaul lib legacy and  HoRPerformanceOptimizer 
    • Forces the handbook on a conflicted recipe to inject the recipe you want into the Grid. No need to cycle it when going from the handbook to the grid. Next button allows cycling when the handbook is closed. It will lock onto the item if injected(=,+,+) into the grid. 
    • Remove crashes from drag-and-drop grid placing. 
      • This was because I needed to use the grid coding to validate the receipt so duplication would not occur(yeah, we don't talk about 1227.0.4). This added validation a slight delay to the drag-and-drop inherently, which prevents flooding the vanilla code and HoR harmony passes from causing a miss or collision, thus crashing the game.
  • Added a proper dispose system to make sure no stale processes are carried over in a new session if the game was not fully exited.

     

 

Thanks, everyone, for providing the information needed to really dig into the various problems

Bannta , Aug 28th at 8:39 PM

Update: HoR Performance Optimizer requires a different way to resolve conflicts 

Conflicts in general will be resolved directly from the handbook recipe page. What you want to build will be your output in the crafting grid. The Next button will allow you to cycle to the next conflict, only on non-HoR game plays. HoR is too aggressive with its harmony usage, so I can't overlap it without a possible crash (which can happen if a lot of material is being dragged directly on the crafting grid. So, on a HoR system, I'm working on reusing the Next" button to notify of a conflict, and if you click will open up your handbook so if the output is not what you want(because of a conflict), you can be directed to the handbook GUI to find the specific item you really want to build. 

-✅Handbook specifying conflicts is working 

  • Working on conflict Next Button swap for HoR when a conflict is detected. So you will see "Conflict" in yellow font light up. That will let you know that there is a multi-recipe for the material combination.
    • Click the new "Conflict" Button will open the handbook. Home Page
      • If I can pull the other output of the conflict item, I need to see about dropping you in the page(assume there is only one conflict)
Vinni_Pukh, Aug 27th at 2:32 PM

Thank you so much for the hor compat!! 

ItzZackyBoi, Aug 27th at 6:23 AM

Just got to playing with it again

It happened again- but it's probably just the other mod's fault-

Crash Report

Running on 64 bit Windows 10.0.22631.0 with 32125 MB RAM
Game Version: v1.22.6 (Stable)
8/27/2026 2:21:02 PM: Critical error occurred in the following mod: horperfopt@1.0.5
Loaded Mods: walkingstick@3.0.10, bearbones@1.0.0, biggerpockets@1.0.6, birdseye@0.1.4, bulkknap@1.1.0, catchledge@0.7.1, clearview@0.1.1, blocklayeroverhaul@1.0.2, deciduoustrees@1.8.2, dodgemaster@1.2.4, dryablegroundstorage@1.0.1, elderscrollscalendar@1.0.0, fastpackeddirtpaths@1.22.3, foodcrate@2.2.1, fragilecharcoal@0.0.1, freelook@1.0.5, fbr@1.0.0, horperfopt@1.0.5, immersivefoliage@0.1.1, JacksFirewood@1.1.0, jsonpatcheslib@1.5.9, millwright@1.3.4, molds@0.3.6, overhaulliblegacycompat@1.2.9, overhaullib@2.0.10, propersticks@0.2.0, prospecttogether@2.2.1, sourceify@1.2.5, stonequarryrepckfipil@3.6.3, temporalwarden@0.1.1, temporalsymphony@2.3.2, temporal_gears_stack@1.0.0, vaultandroll@0.1.2, game@1.22.6, vsimgui@1.2.7, zoombuttonreborn@2.0.4, aculinaryartillery@2.0.0-dev.22, animalcages@5.0.1, animationslib@0.0.2, attributerenderinglibrary@3.2.0, egocaribautomapmarkers@5.0.3, bedspawnv2@1.7.1, bettererprospecting@3.4.5, betterruins@0.6.3, blocksoverlay@4.11.6, bloodtrail@1.2.5, bulkquicklime@1.0.0, butchering@1.14.3, buzzwords@1.8.2, calendarhandbook@1.1.0, carryonlib@1.0.0-pre.8, climbmountain@0.2.4, configlib@1.12.0, containerlessliquidcrafting@1.2.0, customlatitude@1.1.1, danatweaks@4.1.0, desirepaths@0.5.1, enhancedlightningvisuals@0.1.0, extrainfo@2.2.1, farmlanddropswithnutrients@1.2.2, fastmap@122.5.1, fillmybloomery@1.0.3, firearmsfork@1.10.2, fixperishrate@1.0.1, foodshelves@3.0.5, footprints@1.2.5, helvehammerextcontinued@1.9.1, hitfork@2.4.5, hudclockpatch@4.4.1, immersivetpscamera@1.0.8, immersivewoodworking@1.2.0, improvedhandbookrecipesfork@1227.0.3, infinitumcore@1.0.0, jaunt@3.1.0, juicyores@1.0.2, knapster@4.0.0, millwrightvawtaddon@1.0.3, mobsradar@3.0.0, bitzartnickelback@1.2.0, orekiwoofsbeehives@2.0.0, pemmican@0.4.0, placeonslabs@1.2.0, playermodellib@1.23.8, purposefulstorage@2.1.1, ramascurerncy@1.0.0, recyclesails@1.0.0, rivers@5.0.3, roamingbees@2.0.0, ropeandspear@1.1.7, smithingplus@1.9.0-rc.1, statushudcont@4.4.0, tpnetpatched@1.15.1, thirdperson_crosshair@1.0.0, toolsmith@1.2.19, creative@1.22.6, vsecomachina@0.6.1, vsroofing@1.7.2, survival@1.22.6, wallkickswillwork@1.1.0, watersheds@7.0.4, xlibfork@1.0.36, zinkmodautoclayupdate@1.0.4, bloomeryquicklime@1.1.0, butcheringtooldurability@1.0.0, carryon@2.0.0-pre.8, castaway@1.0.6, clicktoggle@1.1.3, combatoverhaulfork@0.18.7, draconis@1.5.0, expandedfoods@2.0.0-dev.14, expieplayermodel@1.2.0, mannyextrafirearms@1.1.3, customplayermodelsaw@0.0.5, infinitumpickuphud@1.3.0, lesslifelessstoraged@0.0.2, purposefulstoragebits@1.0.0, safehouse@1.0.1, smithingplusbugfix@2.0.1, storagetweaks@1.4.1-rc.3, terrainslabs@1.0.17, xinvtweaksfork@1.9.1, xskillsfork@1.0.95, zombpspatch@2.5.1, armoryfork@1.11.1, efmealsmodule@1.0.0-dev.6, mannyhallrifle@1.0.1, mannyjezail@1.0.1, mannyrevolvermusket@1.0.1, xskillsgilded@1.3.50, exoskeletonsfork@0.4.6
Involved Harmony IDs: hor.performanceoptimizer, OverhaulLib:Transpilers, improvedhandbookrecipes, com.freelook.mod
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.HashSet`1.AddIfNotPresent(T value, Int32& location)
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch3(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.Common.InventoryCraftingGrid.OnItemSlotModified(ItemSlot slot) in VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 142
   at Vintagestory.API.Common.InventoryBase.DidModifyItemSlot_Patch1(InventoryBase this, ItemSlot slot, ItemStack extractedStack)
   at Vintagestory.API.Common.ItemSlot.OnItemSlotModified(ItemStack sinkStack) in VintagestoryApi\Common\Inventory\ItemSlot.cs:line 459
   at Vintagestory.API.Common.ItemSlot.TryPutInto(ItemSlot sinkSlot, ItemStackMoveOperation& op) in VintagestoryApi\Common\Inventory\ItemSlot.cs:line 222
   at Vintagestory.Common.PlayerInventoryManager.TryTransferTo(ItemSlot sourceSlot, ItemSlot targetSlot, ItemStackMoveOperation& op) in VintagestoryLib\Common\GameContent\Inventory\PlayerInventoryManager.cs:line 446
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.RedistributeStacks(Int32 intoSlotId) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 957
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.OnMouseMove(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 895
   at Vintagestory.API.Client.GuiComposer.OnMouseMove(MouseEvent mouse) in VintagestoryApi\Client\UI\GuiComposer.cs:line 505
   at Vintagestory.API.Client.GuiDialog.OnMouseMove_Patch1(GuiDialog this, MouseEvent args)
   at Vintagestory.Client.NoObf.GuiManager.OnMouseMove(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 447
   at Vintagestory.Client.NoObf.ClientMain.OnMouseMove_Patch1(ClientMain this, MouseEvent args)
   at Vintagestory.Client.NoObf.ClientPlatformWindows.UpdateMousePosition() in VintagestoryLib\Client\ClientPlatform\Input.cs:line 115
   at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 102
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

Event Log entries for Vintagestory.exe, the latest 1
==================================
{ TimeGenerated = 8/6/2026 5:40:40 PM, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.22.6.0, time stamp: 0x691d0000
Faulting module name: openal32.dll, version: 1.23.0.0, time stamp: 0x63dd31ad
Exception code: 0x40000015
Fault offset: 0x00000000000df046
Faulting process id: 0x0x4140
Faulting application start time: 0x0x1dd258469edb659
Faulting application path: D:\The Pubs\Vintagestory\Vintagestory.exe
Faulting module path: D:\The Pubs\Vintagestory\Lib\openal32.dll
Report Id: ba4d8a32-5d73-42a1-b15b-1a5790a503e1
Faulting package full name: 
Faulting package-relative application ID:  }

Bannta , Aug 27th at 1:23 PM (modified Aug 27th at 1:25 PM)
@ItzZackyBoi: Just got to playing with it againIt happened again- but it's probably just the other mod's fault- Crash Report Running on 64 bit Windows 10.0.22631.0 with 32125 MB RAMGame Version: v1.22.6 (Stable)8/27/2026 2:21:02 PM: Critical error occurred in the follo

"The crash is caused by the mod HoR Performance Optimizer failing to handle rapid crafting grid updates safely. When you moved your mouse across the inventory, it triggered a multithreaded conflict in a shared collection while checking recipes."

 

Because it's not directly pointing at me(to make it easy on me), I need to isolate exactly which recipes(and mods) were being looked at, what gui was your mouse on when the crash happens on, as many details as you can supply

ItzZackyBoi, Aug 27th at 1:52 PM
@ItzZackyBoi: Draging it like this:

Like an L shape

Bannta , Aug 27th at 11:21 PM
@ItzZackyBoi: Like an L shape

Hmmm, it is my code that is throwing it. I have a version that will turn off the "NEXT" Button if it detects HoR... but that still doesn't resolve conflicts.... So, based on the handbook, what we are you selecting to build,  is a known/want, so forcing the conflicting recipe to be what we are looking at might be a better approach and bring this back to a client-only mod. 

 

Current mitigation until I can get this to work...make slower Ls ....lol.  

Bannta , Aug 27th at 7:22 PM (modified Aug 27th at 10:51 PM)
@ItzZackyBoi: Just got to playing with it againIt happened again- but it's probably just the other mod's fault- Crash Report Running on 64 bit Windows 10.0.22631.0 with 32125 MB RAMGame Version: v1.22.6 (Stable)8/27/2026 2:21:02 PM: Critical error occurred in the follo
The HoR Performance Optimizer tries to speed up how Vintage Story processes crafting recipes. However, its code is not thread-safe. When you move items quickly in your crafting grid, multiple inventory processes try to update the exact same data collection at the same millisecond. This causes a terminal data corruption error (InvalidOperationException) and drops you to the desktop. Explains the L shape drag and drop
 
I like to throw the crash log at the AI,  chatgpt to see what else it will say about the same log. After all, it might give you another perspective because it is insane.
 
  • While you were moving items in your inventory/crafting grid (RedistributeStacks), the mod tried to read or modify a list of recipes (HashSet.AddIfNotPresent) across multiple threads simultaneously. Because the mod's code isn't perfectly thread-safe for this specific action, the collection corrupted itself and crashed your game.
  • Involved Harmony Patches: hor.performanceoptimizer, OverhaulLib:Transpilers, improvedhandbookrecipe, and com.freelook.mod are all hooking into this same crafting code, which likely aggregated the conflict.

 

Odd, why is free com.freelook.mod running in a paused menu? , Had the same issue with AutoWalkExtended, running a loop in a technically paused screen, which means the mod is sloppy(granted, if your on a server, you will continue to walk while in your crafting menu) .. however, it would crash while moving inside the handbook. So we have  a loop in freelook looking for the hook all the time. improvedhandbookrecipes fire a peek to see if the "NEXT" Button generated, to overcome OverhaulLib is to fire it again to run after. With HoR  it is brute force because it is aggressive and is actively trying to replace its list with the vanilla list, which is still present... so to me it's doing extra work, just not on the GPU

---> Try removing this com.freelook.mod  mod and repeat the "L" crash.  not Freelook - can reproduce without it installed

 
 

Why HoR?

Vanilla behavior is a linear scan: call GridRecipe.Matches() against every single registered grid recipe until one hits, and per their own log, that's 65,561 recipes on a heavily modded server. Doing that dozens of times a second while dragging an item is exactly the kind of per-frame CPU spike that shows up as stutter. HoR method should be in the game. SharedRecipeIndex builds a reverse index once at startup: for every ingredient item ID, which recipes actually use it. So instead of testing all 65,561 recipes against "knife + firewood," GetCraftingCandidates looks up "recipes that mention knife" intersection "recipes that mention firewood" (plus a small wildcard/generic fallback list); their own log showed this cutting it to 10–50 checks for a typical grid. That's roughly a 1000x reduction in.Matches() calls per drag event. So the overall goal is to make sure it (improvedhandbookrecipes) works with HoR, because HoR is definitely an improvement and should be how Vintage Story does the crafting system. 

 

I'll take a look at it as soon as I get this hotfix for another mod completed

Solidude, Aug 29th at 7:42 AM
@Bannta: The HoR Performance Optimizer tries to speed up how Vintage Story processes crafting recipes. However, its code is not thread-safe. When you move items quickly in your crafting grid, multiple inventory processes try to update the exact same data collectio

Yeah I'll revert to the pre HoR version, which is totally fine, mod is incredible even without that.

Been experiencing crashes in the following scenario's, none of which happened before HoR.

I have a 200+ modlist so not cloggin the message up with that, but I've experienced maybe 1 crash in 250 hours of playtime before this update.

Still, nothing but <3 for this mod

Attempting to fill the item grid through the handbook recipe's "=" button, iirc only happened with modded recipes
1
Involved Harmony IDs: hor.performanceoptimizer, improvedhandbookrecipes
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch2(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.Common.InventoryCraftingGrid.OnItemSlotModified(ItemSlot slot) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 142
   at Vintagestory.Common.InventoryCraftingGrid.DidModifyItemSlot(ItemSlot slot, ItemStack extractedStack) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 147
   at Vintagestory.API.Common.ItemSlot.OnItemSlotModified(ItemStack sinkStack) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 459
   at Vintagestory.API.Common.ItemSlot.TryPutInto(ItemSlot sinkSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 222
   at Vintagestory.Common.PlayerInventoryManager.TryTransferTo(ItemSlot sourceSlot, ItemSlot targetSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\PlayerInventoryManager.cs:line 446
   at ImprovedHandbookRecipes.FillGridButton.AddIngredients(ItemSlot[] input, GridRecipe recipe, List`1 available, Boolean max)
   at ImprovedHandbookRecipes.FillGridButton.TryFillGrid()
   at ImprovedHandbookRecipes.MatchVariantButton.OnClick()
   at ImprovedHandbookRecipes.ButtonRTC.Click()
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUpOnElement(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 320
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUp(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 310
   at ImprovedHandbookRecipes.ButtonRTC.OnMouseUp(MouseEvent args)
   at Vintagestory.API.Client.GuiElementRichtext.OnMouseUp(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\GuiElementRichtext.cs:line 532
   at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
   at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args)
   at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientMain.cs:line 2031
   at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
   at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
   at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs)
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

 

2
Involved Harmony IDs: hor.performanceoptimizer, improvedhandbookrecipes
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.HashSet`1.FindItemIndex(T item)
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch2(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.Common.InventoryCraftingGrid.DidModifyItemSlot(ItemSlot slot, ItemStack extractedStack) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 147
   at Vintagestory.API.Common.ItemSlot.OnItemSlotModified(ItemStack sinkStack) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 459
   at Vintagestory.API.Common.ItemSlot.TryPutInto(ItemSlot sinkSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 243
   at Vintagestory.Common.PlayerInventoryManager.TryTransferTo(ItemSlot sourceSlot, ItemSlot targetSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\PlayerInventoryManager.cs:line 446
   at ImprovedHandbookRecipes.FillGridButton.AddIngredients(ItemSlot[] input, GridRecipe recipe, List`1 available, Boolean max)
   at ImprovedHandbookRecipes.FillGridButton.TryFillGrid()
   at ImprovedHandbookRecipes.MatchVariantButton.OnClick()
   at ImprovedHandbookRecipes.ButtonRTC.Click()
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUpOnElement(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 320
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUp(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 310
   at ImprovedHandbookRecipes.ButtonRTC.OnMouseUp(MouseEvent args)
   at Vintagestory.API.Client.GuiElementRichtext.OnMouseUp(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\GuiElementRichtext.cs:line 532
   at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
   at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args)
   at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientMain.cs:line 2031
   at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
   at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
   at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs)
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

 

Trying to create X (wooden planks or something) by dragging a stack of Y (boards) in the crafting grid
1
Involved Harmony IDs: hor.performanceoptimizer, improvedhandbookrecipes
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.HashSet`1.AddIfNotPresent(T value, Int32& location)
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch2(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.API.Common.ItemSlot.OnItemSlotModified(ItemStack sinkStack) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 459
   at Vintagestory.API.Common.ItemSlot.TryPutInto(ItemSlot sinkSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Common\Inventory\ItemSlot.cs:line 260
   at Vintagestory.Common.PlayerInventoryManager.TryTransferTo(ItemSlot sourceSlot, ItemSlot targetSlot, ItemStackMoveOperation& op) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\PlayerInventoryManager.cs:line 446
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.RedistributeStacks(Int32 intoSlotId) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 957
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.OnMouseMove(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 895
   at Vintagestory.API.Client.GuiComposer.OnMouseMove(MouseEvent mouse) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\GuiComposer.cs:line 505
   at Vintagestory.API.Client.GuiDialog.OnMouseMove_Patch1(GuiDialog this, MouseEvent args)
   at Vintagestory.Client.NoObf.GuiManager.OnMouseMove(MouseEvent args)
   at Vintagestory.Client.NoObf.ClientMain.OnMouseMove(MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientMain.cs:line 2118
   at Vintagestory.Client.NoObf.ClientPlatformWindows.UpdateMousePosition() in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\Input.cs:line 115
   at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e)
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs)
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
2
Involved Harmony IDs: hor.performanceoptimizer, improvedhandbookrecipes
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.HashSet`1.AddIfNotPresent(T value, Int32& location)
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch2(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.Common.InventoryNetworkUtil.UpdateFromPacket(IWorldAccessor resolver, Packet_InventoryUpdate packet) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\InventoryNetworkUtil.cs:line 544
   at Vintagestory.Common.InventoryNetworkUtil.set_PauseInventoryUpdates(Boolean value) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Common\GameContent\Inventory\InventoryNetworkUtil.cs:line 60
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.OnMouseUp(ICoreClientAPI api, MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 824
   at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
   at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args)
   at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientMain.cs:line 2031
   at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
   at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
   at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs)
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in C:\Users\Tyron\Documents\vintagestory\game\VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Bannta , 6 days ago
@Solidude: Yeah I'll revert to the pre HoR version, which is totally fine, mod is incredible even without that.Been experiencing crashes in the following scenario's, none of which happened before HoR.I have a 200+ modlist so not cloggin the message up with that, but

Thanks, 

Yeah, I've been working on this for a few days HoR is a pain in the butt because of the aggressive memory patching...it provides no wiggle room. So I'm trying to make the Next in the HoR as a indicate and handbook launching button for the conflicted recipe. I did make it auto-fill correctly from the handbook to the grid what you want to make if the item is a conflicting recipe. Hopefully I will have something soon to upload  

Solidude, Aug 27th at 4:43 AM

Massive update, incredible mod.
Much <3

Bannta , Aug 27th at 5:35 AM
@Solidude: Massive update, incredible mod.Much <3

Thanks... I brought it back to life out of necessity; it makes testing a ton of recipes in my other mods so much easier. 

Bannta , Aug 27th at 3:39 AM (modified Aug 27th at 5:28 AM)

improvedhandbookrecipesfork-1227.0.3 - Feature requested by ItzZackyBoi,

  • Adds compatibility with HoRPerformanceOptimizer- allows "NEXT" Button to function and cycle through recipe conflicts
    • Forces the NEXT Button to populate after the mod applies its harmony postfixes; this mod is a little more aggressive in its harmony postfixes... like trying to knock the soda can out of my hands, aggressive
ItzZackyBoi, Aug 26th at 4:32 AM (modified Aug 26th at 4:34 AM)

it crashes when I drag items in the grid, can it be am using the wrong version? I lost a chunk of my resources cause of this Unexpected crash 
Singleplayer world

Edit: My apologize, It's a conflict with the other mod named 

HoR Performance Optimizer


I guess ill just have to wait for a compatibility for this 2 mods

Logs:

Crash Report

Running on 64 bit Windows 10.0.22631.0 with 32125 MB RAM
Game Version: v1.22.6 (Stable)
8/26/2026 12:29:09 PM: Critical error occurred in the following mods: horperfopt@1.0.5, improvedhandbookrecipesfork@1227.0.2
Loaded Mods: walkingstick@3.0.10, bearbones@1.0.0, biggerpockets@1.0.6, birdseye@0.1.4, bulkknap@1.1.0, catchledge@0.7.1, clearview@0.1.1, blocklayeroverhaul@1.0.2, deciduoustrees@1.8.2, dodgemaster@1.2.4, dryablegroundstorage@1.0.1, elderscrollscalendar@1.0.0, fastpackeddirtpaths@1.22.3, foodcrate@2.2.1, fragilecharcoal@0.0.1, freelook@1.0.5, fbr@1.0.0, horperfopt@1.0.5, immersivefoliage@0.1.1, JacksFirewood@1.1.0, jsonpatcheslib@1.5.9, millwright@1.3.4, molds@0.3.6, overhaulliblegacycompat@1.2.9, overhaullib@2.0.10, propersticks@0.2.0, prospecttogether@2.2.1, sourceify@1.2.5, stonequarryrepckfipil@3.6.3, temporalwarden@0.1.1, temporalsymphony@2.3.2, temporal_gears_stack@1.0.0, vaultandroll@0.1.2, game@1.22.6, vsimgui@1.2.7, zoombuttonreborn@2.0.4, aculinaryartillery@2.0.0-dev.22, animalcages@5.0.1, animationslib@0.0.2, attributerenderinglibrary@3.2.0, egocaribautomapmarkers@5.0.3, bedspawnv2@1.7.1, bettererprospecting@3.4.5, betterruins@0.6.3, blocksoverlay@4.11.6, bloodtrail@1.2.5, bulkquicklime@1.0.0, butchering@1.14.3, buzzwords@1.8.2, calendarhandbook@1.1.0, carryonlib@1.0.0-pre.8, climbmountain@0.2.4, configlib@1.12.0, containerlessliquidcrafting@1.2.0, customlatitude@1.1.1, danatweaks@4.1.0, desirepaths@0.5.1, enhancedlightningvisuals@0.1.0, extrainfo@2.2.1, farmlanddropswithnutrients@1.2.2, fastmap@122.5.1, fillmybloomery@1.0.3, firearmsfork@1.10.2, fixperishrate@1.0.1, foodshelves@3.0.5, footprints@1.2.5, helvehammerextcontinued@1.9.1, hitfork@2.4.5, hudclockpatch@4.4.1, immersivetpscamera@1.0.8, immersivewoodworking@1.2.0, improvedhandbookrecipesfork@1227.0.2, infinitumcore@1.0.0, jaunt@3.1.0, juicyores@1.0.2, knapster@4.0.0, millwrightvawtaddon@1.0.3, mobsradar@3.0.0, bitzartnickelback@1.2.0, orekiwoofsbeehives@2.0.0, pemmican@0.4.0, placeonslabs@1.2.0, playermodellib@1.23.8, purposefulstorage@2.1.1, ramascurerncy@1.0.0, recyclesails@1.0.0, rivers@5.0.3, roamingbees@2.0.0, ropeandspear@1.1.7, smithingplus@1.9.0-rc.1, statushudcont@4.4.0, tpnetpatched@1.15.1, thirdperson_crosshair@1.0.0, toolsmith@1.2.19, creative@1.22.6, vsecomachina@0.6.1, vsroofing@1.7.2, survival@1.22.6, wallkickswillwork@1.1.0, watersheds@7.0.4, xlibfork@1.0.36, zinkmodautoclayupdate@1.0.4, bloomeryquicklime@1.1.0, butcheringtooldurability@1.0.0, carryon@2.0.0-pre.8, castaway@1.0.6, clicktoggle@1.1.3, combatoverhaulfork@0.18.7, draconis@1.5.0, expandedfoods@2.0.0-dev.14, expieplayermodel@1.2.0, mannyextrafirearms@1.1.3, customplayermodelsaw@0.0.5, infinitumpickuphud@1.3.0, lesslifelessstoraged@0.0.2, purposefulstoragebits@1.0.0, safehouse@1.0.1, smithingplusbugfix@2.0.1, storagetweaks@1.4.1-rc.3, terrainslabs@1.0.17, xinvtweaksfork@1.9.1, xskillsfork@1.0.95, zombpspatch@2.5.1, armoryfork@1.11.1, efmealsmodule@1.0.0-dev.6, mannyhallrifle@1.0.1, mannyjezail@1.0.1, mannyrevolvermusket@1.0.1, xskillsgilded@1.3.50, exoskeletonsfork@0.4.6
Involved Harmony IDs: hor.performanceoptimizer, OverhaulLib:Transpilers, improvedhandbookrecipes, com.freelook.mod
System.InvalidOperationException: Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.HashSet`1.Contains(T item)
   at HoRPerformanceOptimizer.CraftingGridPatch.Prefix(GridRecipe __instance, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth, Boolean& __result)
   at Vintagestory.API.Common.GridRecipe.Matches_Patch3(GridRecipe this, IPlayer forPlayer, IWorldAccessor world, ItemSlot[] ingredients, Int32 gridWidth)
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.<>c__DisplayClass11_0.<HasMultipleMatchingRecipes>b__0(GridRecipe r)
   at System.Linq.Enumerable.ListWhereIterator`1.ToList()
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.HasMultipleMatchingRecipes(IInventory craftingInv, IPlayer player)
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.UpdateButtonVisibility(GuiComposer composer, IInventory inv)
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.RefreshButtonFor(IInventory inv)
   at ImprovedHandbookRecipes.Patch_InventoryCraftingGrid_FindMatchingRecipe.RefreshNextButtonPostfix(InventoryCraftingGrid __instance)
   at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch3(InventoryCraftingGrid this)
   at Vintagestory.Common.InventoryCraftingGrid.OnItemSlotModified(ItemSlot slot) in VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 142
   at Vintagestory.API.Common.InventoryBase.DidModifyItemSlot_Patch1(InventoryBase this, ItemSlot slot, ItemStack extractedStack)
   at Vintagestory.Common.InventoryCraftingGrid.DidModifyItemSlot(ItemSlot slot, ItemStack extractedStack) in VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 147
   at Vintagestory.API.Common.ItemSlot.OnItemSlotModified(ItemStack sinkStack) in VintagestoryApi\Common\Inventory\ItemSlot.cs:line 459
   at Vintagestory.API.Common.ItemSlot.TryPutInto(ItemSlot sinkSlot, ItemStackMoveOperation& op) in VintagestoryApi\Common\Inventory\ItemSlot.cs:line 260
   at Vintagestory.Common.PlayerInventoryManager.TryTransferTo(ItemSlot sourceSlot, ItemSlot targetSlot, ItemStackMoveOperation& op) in VintagestoryLib\Common\GameContent\Inventory\PlayerInventoryManager.cs:line 446
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.RedistributeStacks(Int32 intoSlotId) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 957
   at Vintagestory.API.Client.GuiElementItemSlotGridBase.OnMouseMove(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 895
   at Vintagestory.API.Client.GuiComposer.OnMouseMove(MouseEvent mouse) in VintagestoryApi\Client\UI\GuiComposer.cs:line 505
   at Vintagestory.API.Client.GuiDialog.OnMouseMove_Patch1(GuiDialog this, MouseEvent args)
   at Vintagestory.Client.NoObf.GuiManager.OnMouseMove(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 447
   at Vintagestory.Client.NoObf.ClientMain.OnMouseMove_Patch1(ClientMain this, MouseEvent args)
   at Vintagestory.Client.GuiScreenRunningGame.OnMouseMove(MouseEvent args) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 354
   at Vintagestory.Client.NoObf.ClientPlatformWindows.UpdateMousePosition() in VintagestoryLib\Client\ClientPlatform\Input.cs:line 115
   at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 102
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

Event Log entries for Vintagestory.exe, the latest 1
==================================
{ TimeGenerated = 8/6/2026 5:40:40 PM, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.22.6.0, time stamp: 0x691d0000
Faulting module name: openal32.dll, version: 1.23.0.0, time stamp: 0x63dd31ad
Exception code: 0x40000015
Fault offset: 0x00000000000df046
Faulting process id: 0x0x4140
Faulting application start time: 0x0x1dd258469edb659
Faulting application path: D:\The Pubs\Vintagestory\Vintagestory.exe
Faulting module path: D:\The Pubs\Vintagestory\Lib\openal32.dll
Report Id: ba4d8a32-5d73-42a1-b15b-1a5790a503e1
Faulting package full name: 
Faulting package-relative application ID:  }

Timbrage, Aug 26th at 2:57 PM (modified Aug 26th at 2:58 PM)
@ItzZackyBoi: it crashes when I drag items in the grid, can it be am using the wrong version? I lost a chunk of my resources cause of this Unexpected crash Singleplayer worldEdit: My apologize, It's a conflict with the other mod named HoR Performance Optimizer I guess

Same, been having crashes left and right on the two 1227 versions.

1222.0.2 works fine with HoR (but the Fill best match feature sometimes doesn't work in this version)

Rythillian, Aug 25th at 5:28 PM

can't seem to get this working on my server

Bannta , Aug 26th at 12:04 AM (modified Aug 26th at 12:05 AM)
@Rythillian: can't seem to get this working on my server

Provide your mod list, you can find a quick list in your server-mainlog, might help me find where it is broken or conflicting at

Example, my current mod list
25.8.2026 19:58:49 [Notification] Mods, sorted by dependency: aeautosmithing, allcavesareconnected, bowtornbalance121, bushmeatrecipe, capreolinae, catchlivestock, chiseltools, clickuptorches, craftabletoolbelts, deciduoustrees, delsbrighterberries, ggbcsrepair, hydrateordiedrate, nailsmold, offlinefoodnospoil, oillampignites, oresdroprocks, overhaulliblegacycompat, primitivesurvival, propersticks, silentpause, stickisolation, sticksfromfirewoodmallow, traderssellcrowbars, translocatorengineeringredux, vanillapluspatch, visibleoresandminerals, game, vsimgui, zoombuttonreborn, amuletbedspawn, apelanterns, attributerenderinglibrary, autowalkextended, barkcanoe, betterhopper, betterjungles, betterruins, bettertraders, biodiversity, boattags, bowtornbyproducts, carryonlib, censership, claywheel, configlib, creativecrafting, damagenumbers, deathcorpses, egocaribautomapmarkers, emotemenupatched2, extrainfo, feverstonewilds, firepitsshowfuel, firewoodtosticks, forgivingquench, fromgoldencombs, genelib, handbookbookmarkbutton, hazmatsuit, hudclockpatch, improvedhandbookrecipesfork, jaunt, knapster, madcrowglider, mapteleporter, musicboxmod, offhandnohunger, petai, physicslib, placeonslabs, portcullis, progressionframework, purposefulstorage, reachablecreativetabs, realisticwater, realsmoke, realtimefirepit, respawnblackscreenfix, rivers, sheydermod, shipwright, spyglass, statushudcont, tabfix, thegrandrift, ttsvintagestory, vsassetinspector, creative, vsecomachina, vsroofing, vsrpgrarity, survival, warpmodfork, wateringcanfill, watersheds, xlibfork, bdcrop, bdorchard, bdtree, carryon, equusferus, heraldry, hoardersforge, realsmokeqppatch, seafarer, simplehandbooktabs, storagetweaks, terrainslabs, ttsvintagestoryaudioen, underwaterhorrors, xskillsfork, zrustdrops, bdcroppatch, bdorchardpatch, heraldrybanners, xskillsgilded
Rythillian, Aug 26th at 2:32 PM
@Bannta: Provide your mod list, you can find a quick list in your server-mainlog, might help me find where it is broken or conflicting at Example, my current mod list 25.8.2026 19:58:49 [Notification] Mods, sorted by dependency: aeautosmithing, allcavesareconnecte

We have a huge modlist sadly. I can send it but I doubt it would help as it would take you awhile, I'll try and go throught myself and save you the time though! Once/if I find the conflict I'll message here again.

BUT it should be noted it works fine in singleplayer when I'm using the exact same mods.

Rythillian, 6 days ago
@Bannta: Multiplayer server or multiplayer from LAN? Do you have HoR running? I'm working on that currently

It started working and then stopped working.. I have no idea why.

Bannta , 6 days ago
@Rythillian: It started working and then stopped working.. I have no idea why.

I think I know what might be happening; is that the static state is not resetting between world sessions within the same game process. I noticed that if the game is not shut down(all the way to the desktop), starting/relaunching the game back up from the main menu made it seem like the mod was not there (no buttons). Which is a classic stale symptom. I will check that in a few hours...I need some sleep. 

 

But good news: I did solve the crashing problem that HoR was manifesting and resolved conflicts more intuitively. I will release after I double-check the dispose calls, hoplefully the next release will resolve your problem

MineAnPlay, Aug 22nd at 1:32 PM

Can you please add compatability with Overhaul lib legacy compatibility ? It uses its own GUI which overwrites the Vanilla GUI overwriting your NEXT button.

Bannta , Aug 22nd at 3:13 PM
@MineAnPlay: Can you please add compatability with Overhaul lib legacy compatibility ? It uses its own GUI which overwrites the Vanilla GUI overwriting your NEXT button.

GuiDialogPatches.Patch installs a Harmony Prefix on GuiDialogInventory.ComposeSurvivalInvDialog  - Thus, strip it.

investigating how I can truncate and "win" the Harmony Prefix battle and inject my NEXT into the GUI

Bannta , Aug 22nd at 6:06 PM (modified Aug 27th at 5:36 AM)
@MineAnPlay: Can you please add compatability with Overhaul lib legacy compatibility ? It uses its own GUI which overwrites the Vanilla GUI overwriting your NEXT button.

Improvedhandbookrecipesfork-1227.0.0

LivCi, Aug 21st at 11:04 AM

The buttons sometimes appear, sometimes don't. I have to restart the game for them to reappear

Bannta , Aug 21st at 2:09 PM
@LivCi: The buttons sometimes appear, sometimes don't. I have to restart the game for them to reappear

For that, I will need your mod list. When it goes missing, look in your client-main. Logs, pull out the mod list, and look for any errors that deal with the handbook

Sonnenbear, Aug 20th at 9:21 PM

doesnt work for me in Coop

Bannta , Aug 21st at 2:51 AM
@Sonnenbear: doesnt work for me in Coop

Co-op mode will require the person sharing the world (the server host/ or multiplayer LAN) to have mod version 1227.0.1. However, if you don't have any conflicting recipes and you never use the NEXT button, then downgrade to 1222.0.2

howardxu23, Aug 20th at 5:52 PM

Bug report: it has now stopped working on severs, the buttons are now gone and I cannot auto click the recipes

Bannta , Aug 20th at 7:02 PM (modified Aug 20th at 7:06 PM)
@howardxu23: Bug report: it has now stopped working on severs, the buttons are now gone and I cannot auto click the recipes

It needs to be loaded on the server now as well. Did you do that yet? I forgot to update the it is now a client and server mod. It's the only way to allow the "NEXT" button to function properly. If you want Client only functionality then you need to roll back; however, the recipe conflict will not be resolved if you do,

Bannta , Aug 20th at 7:28 PM (modified Aug 20th at 7:29 PM)
@Bannta: It needs to be loaded on the server now as well. Did you do that yet? I forgot to update the it is now a client and server mod. It's the only way to allow the "NEXT" button to function properly. If you want Client only functionality then you need to roll

I added this to the description page

 

!IMPORTANT!

Version 1227.0.1 requires both client and server updates. It lets you cycle through conflicting recipes by syncing with the server. If you have no conflicts, stay on version 1222.0.2(Client only). Vintage Story normally breaks or picks the first conflicting recipe it finds.
 
 
Update Requirements
    • Version 1227.0.1 Installs on both client and server to enable recipe cycling.
    • Version 1222.0.2: Stays in use if your mod list has no recipe conflicts.
      • If you have mod conflicts and need to stay client-side only, then approach the two mod owner and see if they can alter their recipe pattern a little bit in the next release.
 
Why This Update is Needed
    • Recipe Conflicts Vintage Story picks the first recipe it loads when mods conflict with vanilla items.
    • Error Prevention: Duplicate recipes cause game errors or craft the wrong item.
    • Fixing the Issue: The new version lets you cycle choices, or you can ask the mod creator to change the recipe.

 

Note: The NEXT Button should only become usable when there is a conflict is detected and works in Version 1227.0.1 and above (requires the server to be loaded as well)

Bannta , Aug 18th at 8:30 PM

Bannta , Aug 18th at 3:58 PM

For VS Game versions 1.22.x, compiled under 1.22,7, release 1227.01

  • Fixes "Next" button conflict in recipe cycle
    • The fix forces the mod to be on both sides (Client and Server)
      • The server side is only used to authorize the other recipe selection; without it, the cycle is stuck on first-come, first-served. 
        • If you need it to be on the client only, next do upgrade; just note the NEXT button will not work
        • modinfo.json updated to "side": "Universal",
    • Add highlighting to the letters of the NEXT button to indicate a Conflict 

 

https://github.com/Bannta/VintageStory-ImprovedHandbookRecipes

Bannta , Aug 17th at 4:30 AM (modified Aug 17th at 5:17 PM)

So i found the limitation of the "Next" Button: in order to make it work correctly, the mod must become "side": "Universal"... meaning it can not be just client-side. It's currently the only way to enforce correct conflict cycling. There must be a pass on the server side(peek), if not, the cycling will just populate the first choice over and over again.  Granted to pro is that this will resolve conflicting recipes globally 

 

Basically, accept the server-side requirement for the live-grid cycling feature only (keep the handbook browsing/fill-grid stuff client-only-safe, which it already effectively is), and let it gracefully no-op on servers without the mod

 

Added a highlight to indicate a conflict so it's noticeable when it happens.

 

--------------

Example Conflict: "The recipes in conflict are the Crude Tool Handle recipe from Toolsmith, and the knife variant of the Firewood into Sticks recipe from Sticks from Firewood.
Both are simply a knife above firewood in the crafting grid."

I'll let this linger for a day or two before releasing the update. 

Jerno, Aug 12th at 2:04 PM
Crash Report
Running on 64 bit Windows 10.0.19045.0 with 48346 MB RAM
Game Version: v1.22.6 (Stable)
8/12/2026 9:00:47 AM: Critical error occurred in the following mod: improvedhandbookrecipesfork@1222.0.2
Loaded Mods: amphorae@1.0.2, arcticsurvival@2.0.0, caveartpigments@0.1.0, ceramicbucketbarrel@1.0.1, coppercoldforging2@1.2.0, curefirewood@1.0.1, driedpeat@1.1.2, flintsaw@1.0.1, floralzonescaperegion@1.0.33, floralzonescaribbeanregion@1.0.25, floralzonescentralaustralianregion@1.0.23, floralzoneseastasiaticregion@1.0.20, floralzonesneozeylandicregion@1.0.20, bovinae@0.3.5, caninae@1.1.8, capreolinae@2.0.16, casuariidae@1.1.11, cervinae@0.1.13, chelonioidea@1.0.7, dinornithidae@1.0.22, elephantidae@1.0.17, felinae@0.2.13, iniidae@0.1.6, machairodontinae@1.1.11, meiolaniidae@0.1.10, pantherinae@1.2.17, rhinocerotidae@1.0.23, sirenia@1.0.30, spheniscidae@1.0.16, thylacinidae@0.1.6, viverridae@1.0.8, vombatidae@0.4.5, fowlmod@1.0.1, geoaddons@1.4.8, hydrateordiedrate@2.5.4, interestingoregen@2.3.8, jsonpatcheslib@1.5.6, lichen@1.6.4, millwright@1.3.4, molds@0.3.6, mycodiversity@1.0.8, overhaullib@2.0.10, pinelogsfortannin@1.0.0, primitivesurvival@5.1.0, propersticks@0.2.0, sticksarefirewood@1.0.0, game@1.22.6, vsimgui@1.2.7, weaponpackalphareb@1.9.2, advancedgeology@0.9.9, ancientlib@1.0.0, ancienttoolsresinharvest@1.0.0, beararmorrepair@1.0.3, bedspawnv2@1.7.1, bloodtrail@1.2.5, carryon@1.14.3, cartwrightscaravan@1.9.1, commonlibforked@2.8.1, configlib@1.12.0, dressedtokillredux@1.0.1, farseer@1.4.0, firepitsshowfuel@2.0.0-dev.1, footprints@1.2.5, genelib@3.2.0, immersiverope122@1.1.5, improvedhandbookrecipesfork@1222.0.2, insanitylib@2.0.3, jaunt@3.1.0, meteoricexpansionfork@1.3.3, moreanimals@1.7.0, nomadtents@1.1.4, palantir@2.1.1, playermodellib@1.23.8, portcullis@1225.0.1, realsmoke@1.3.1, ropeandspear@1.1.7, ropetiable121@1.4.1, seamlessrapids@1.0.1, shipwright@1.4.1, cookie12000stickbeam@1.2.2, tentbagreworked@3.2.4, creative@1.22.6, vsinstrumentsredux@1.4.3, survival@1.22.6, zippysskysteel@1.3.0, ancienttoolsmortar@1.0.0, equusferus@1.0.4, extremefirestartersreforged@1.1.3, hacore@2.1.3, humans@0.5.1, meteoricironisbeautiful@1.3.0, obsidiancraft@2.0.0, playercorpseforked@1.14.1, terrafirmastory@0.8.3, thehunter@0.2.48, wwaymarkers@1.0.4, hawarlordsandwarchiefs@1.2.4
System.Exception: Attempting to send data to a not connected channel. For optionally dependent network channels test if your channel is Connected before sending data.
   at Vintagestory.Client.NoObf.NetworkChannel.SendPacket[T](T message) in VintagestoryLib\Client\API\NetworkChannel.cs:line 85
   at ImprovedHandbookRecipes.RecipeSelector.OnNextClicked(IClientPlayer player)
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.<>c__DisplayClass2_0.<Inject>g__OnClick|0()
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUpOnElement(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 320
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUp(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 310
   at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
   at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 423
   at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in VintagestoryLib\Client\ClientMain.cs:line 2031
   at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
   at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
   at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Crash Report
Running on 64 bit Windows 10.0.19045.0 with 48346 MB RAM
Game Version: v1.22.6 (Stable)
8/12/2026 9:00:47 AM: Critical error occurred in the following mod: improvedhandbookrecipesfork@1222.0.2
Loaded Mods: amphorae@1.0.2, arcticsurvival@2.0.0, caveartpigments@0.1.0, ceramicbucketbarrel@1.0.1, coppercoldforging2@1.2.0, curefirewood@1.0.1, driedpeat@1.1.2, flintsaw@1.0.1, floralzonescaperegion@1.0.33, floralzonescaribbeanregion@1.0.25, floralzonescentralaustralianregion@1.0.23, floralzoneseastasiaticregion@1.0.20, floralzonesneozeylandicregion@1.0.20, bovinae@0.3.5, caninae@1.1.8, capreolinae@2.0.16, casuariidae@1.1.11, cervinae@0.1.13, chelonioidea@1.0.7, dinornithidae@1.0.22, elephantidae@1.0.17, felinae@0.2.13, iniidae@0.1.6, machairodontinae@1.1.11, meiolaniidae@0.1.10, pantherinae@1.2.17, rhinocerotidae@1.0.23, sirenia@1.0.30, spheniscidae@1.0.16, thylacinidae@0.1.6, viverridae@1.0.8, vombatidae@0.4.5, fowlmod@1.0.1, geoaddons@1.4.8, hydrateordiedrate@2.5.4, interestingoregen@2.3.8, jsonpatcheslib@1.5.6, lichen@1.6.4, millwright@1.3.4, molds@0.3.6, mycodiversity@1.0.8, overhaullib@2.0.10, pinelogsfortannin@1.0.0, primitivesurvival@5.1.0, propersticks@0.2.0, sticksarefirewood@1.0.0, game@1.22.6, vsimgui@1.2.7, weaponpackalphareb@1.9.2, advancedgeology@0.9.9, ancientlib@1.0.0, ancienttoolsresinharvest@1.0.0, beararmorrepair@1.0.3, bedspawnv2@1.7.1, bloodtrail@1.2.5, carryon@1.14.3, cartwrightscaravan@1.9.1, commonlibforked@2.8.1, configlib@1.12.0, dressedtokillredux@1.0.1, farseer@1.4.0, firepitsshowfuel@2.0.0-dev.1, footprints@1.2.5, genelib@3.2.0, immersiverope122@1.1.5, improvedhandbookrecipesfork@1222.0.2, insanitylib@2.0.3, jaunt@3.1.0, meteoricexpansionfork@1.3.3, moreanimals@1.7.0, nomadtents@1.1.4, palantir@2.1.1, playermodellib@1.23.8, portcullis@1225.0.1, realsmoke@1.3.1, ropeandspear@1.1.7, ropetiable121@1.4.1, seamlessrapids@1.0.1, shipwright@1.4.1, cookie12000stickbeam@1.2.2, tentbagreworked@3.2.4, creative@1.22.6, vsinstrumentsredux@1.4.3, survival@1.22.6, zippysskysteel@1.3.0, ancienttoolsmortar@1.0.0, equusferus@1.0.4, extremefirestartersreforged@1.1.3, hacore@2.1.3, humans@0.5.1, meteoricironisbeautiful@1.3.0, obsidiancraft@2.0.0, playercorpseforked@1.14.1, terrafirmastory@0.8.3, thehunter@0.2.48, wwaymarkers@1.0.4, hawarlordsandwarchiefs@1.2.4
System.Exception: Attempting to send data to a not connected channel. For optionally dependent network channels test if your channel is Connected before sending data.
   at Vintagestory.Client.NoObf.NetworkChannel.SendPacket[T](T message) in VintagestoryLib\Client\API\NetworkChannel.cs:line 85
   at ImprovedHandbookRecipes.RecipeSelector.OnNextClicked(IClientPlayer player)
   at ImprovedHandbookRecipes.Patch_GuiDialogInventory_ComposeSurvivalInvDialog.<>c__DisplayClass2_0.<Inject>g__OnClick|0()
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUpOnElement(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 320
   at Vintagestory.API.Client.GuiElementTextButton.OnMouseUp(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 310
   at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
   at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 423
   at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in VintagestoryLib\Client\ClientMain.cs:line 2031
   at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
   at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
   at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
   at OpenTK.Windowing.Desktop.GameWindow.Run()
   at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
   at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
   at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Bannta , Aug 12th at 11:23 PM (modified Aug 17th at 4:31 AM)
@Jerno: Crash Report Running on 64 bit Windows 10.0.19045.0 with 48346 MB RAMGame Version: v1.22.6 (Stable)8/12/2026 9:00:47 AM: Critical error occurred in the following mod: improvedhandbookrecipesfork@1222.0.2Loaded Mods: amphorae@1.0.2, arcticsurvival@2.0.0, c

The crash is explicitly triggered when clicking a button inside your inventory interface (OnNextClicked).

somewhere here. 

OnNextClicked
public void OnNextClicked(IClientPlayer player)
        {
            _nextPressedPlayers.Add(player.PlayerUID);
            _clientChannel?.SendPacket(new NextRecipePacket());
        }

 

So what i need now is what I need now is what item the "Next" Button became active on that cause the fault. I've been trying to find a good items that wakes up the button, but it hard because vintage story usually demands unquie ricepes. I found one once, but there was something shiny on my desk....so i forgot what it was. 

 

Can you provide exactly what item you were trying to craft (modname)? 

 

Thanks!

Bannta , Aug 17th at 4:14 AM (modified Aug 17th at 4:15 AM)
@Jerno: I was trying to craft the reed skirt from dressed to kill redux

ok, this should prevent any crashing - this will be part of the next release. 

Spoiler!

public void OnNextClicked(IClientPlayer player)
{
    if (_clientChannel == null || !_clientChannel.Connected)
    {
        // Channel handshake not finished yet (example. clicked just after joining/loading).
        // Bail out quietly instead of crashing, the player can just click Next again.
        return;
    }

    _nextPressedPlayers.Add(player.PlayerUID);
    _clientChannel.SendPacket(new NextRecipePacket());
}

Endrid, Jul 28th at 3:51 PM (modified Jul 28th at 3:52 PM)

The next button does even exist in my HUD for some reason. Or does it only appear when there is conflict?
Also, I can't scollwheel to look through variants at all either.

Jarl_Skoll, Jul 22nd at 7:45 PM (modified Jul 22nd at 7:47 PM)

I've got two mods with conflicting recipes, yet the "next" button is greyed out, like there is no such conflict.
Does it only recognize base game recipes?

How can I get it to recognise the conflict?

Bannta , Jul 23rd at 10:42 PM
@Jarl_Skoll: I've got two mods with conflicting recipes, yet the "next" button is greyed out, like there is no such conflict.Does it only recognize base game recipes?How can I get it to recognise the conflict?

I need to know exactly which two items and mods they belong to. One of the features of 1.22 is unique recipes, so the conflicting mechanics are rarely ever used or tested. I believe I saw it once but forgot what made it activate, so this would be a good exercise to see if it is still working.  

Jarl_Skoll, Aug 14th at 1:40 AM
@Bannta: I need to know exactly which two items and mods they belong to. One of the features of 1.22 is unique recipes, so the conflicting mechanics are rarely ever used or tested. I believe I saw it once but forgot what made it activate, so this would be a good e

Sorry for being so late:
The recipes in conflict are the Crude Tool Handle recipe from Toolsmith, and the knife variant of the Firewood into Sticks recipe from Sticks from Firewood.
Both are simply a knife above firewood in the crafting grid.

Bannta , Aug 17th at 4:22 AM
@Jarl_Skoll: Sorry for being so late:The recipes in conflict are the Crude Tool Handle recipe from Toolsmith, and the knife variant of the Firewood into Sticks recipe from Sticks from Firewood.Both are simply a knife above firewood in the crafting grid.

ok, good news: I fixed it thanks to your input. Perfect example of conflict. Bad news: the mod must become "side": "Universal"... meaning it can not be just client-side. 

 

Basically, accept the server-side requirement for the live-grid cycling feature only (keep the handbook browsing/fill-grid stuff client-only-safe, which it already effectively is), and let it gracefully no-op on servers without the mod

Elgusa64, Jul 22nd at 2:20 AM

Hi, I'm having a problem when I play my game. When I create objects using the guide buttons (=,*;+), the created objects disappear and then only the materials used appear, as if they are disassembled. After that, it no longer lets me create anything manually in the crafting grid and I have to restart the world.

HalfThere, Jul 3rd at 2:58 PM

This mod conflicts with Optitime's "Recipe Lookup" feature, which is a shame because that's a very good fix for games running a lot of mods.

Bannta , Jul 3rd at 4:51 PM
@HalfThere: This mod conflicts with Optitime's "Recipe Lookup" feature, which is a shame because that's a very good fix for games running a lot of mods.

Optitime's BetterHandbook, right? 

if so i can dig into the conflicts issue and see if it is something I can fix

HalfThere, Jul 4th at 11:51 AM (modified Jul 4th at 11:58 AM)
@Bannta: Optitime's BetterHandbook, right? if so i can dig into the conflicts issue and see if it is something I can fix

While that may also possibly be a conflict, I'm specifically referring to the Recipe Lookup
"Recipe Lookup - Safer crafting-grid lookup with previous-match reuse, positive-result revalidation, and candidate narrowing (default on, opt-out)"

I'm running an extremely heavy pack (250+ mods) and removing your mod allowed me to enable Recipe Lookup which has vastly improved the crafting speed and general handbook use. I haven't enabled Optitime's BetterHandbook, and cannot because it conflicts with A Culinary Artillery. It's a shame, because your mod is really nice (especially scrolling variants. I find the auto-fill too temperamental to work a lot of the time, it'll complain that I lack boards when I very clearly have boards).

Bannta , Jul 4th at 3:51 PM
@HalfThere: While that may also possibly be a conflict, I'm specifically referring to the Recipe Lookup"Recipe Lookup - Safer crafting-grid lookup with previous-match reuse, positive-result revalidation, and candidate narrowing (default on, opt-out)" I'm running an e

There is no "recipe lookup" mod I can find that has that name(a link, please); however, I saw a reference to Optitime . I added to my game, and I'm not seeing a conflict. Does it kill the buttons on my mod? Does it mess up his? a gif pic or throw errors? 

HalfThere, Jul 5th at 12:23 PM
@Bannta: There is no "recipe lookup" mod I can find that has that name(a link, please); however, I saw a reference to Optitime . I added to my game, and I'm not seeing a conflict. Does it kill the buttons on my mod? Does it mess up his? a gif pic or throw errors?

One of Optitime's features is the Recipe Lookup which is viewable with the ".optitime recipe" command. This is not an independent mod, but is part of Optitime's package.

When your mod is added, Optitime detects a conflict with your mod and disables Recipe Lookup to prevent issues. This means that your mod runs as expected, but Optitime's Recipe Lookup is disabled.

To see this in action, launch with both your mod and Optitime and run ".optitime recipe on" which will fail. When your mod is removed, it succeeds.

Optitime is an optimization mod, and Recipe Lookup is a good optimization that cannot run along with your mod.

Bannta , Jul 5th at 8:15 PM (modified Jul 5th at 8:17 PM)
@HalfThere: One of Optitime's features is the Recipe Lookup which is viewable with the ".optitime recipe" command. This is not an independent mod, but is part of Optitime's package. When your mod is added, Optitime detects a conflict with your mod and disables Recipe

Thanks, that explains it... I keep forgetting that reading is fundamental. I need to review the basic syntax to determine if we can add compatibility to his code.

Bannta , Aug 9th at 9:56 PM
@Finna: Would you be opposed to open-sourcing your mod for potential outside help for this?

yes, as it was open source to me, it is the right thing to do

Bannta , Aug 9th at 10:22 PM (modified Aug 9th at 10:22 PM)
@Finna: Would you be opposed to open-sourcing your mod for potential outside help for this?

https://github.com/Bannta/VintageStory-ImprovedHandbookRecipes as listed above now. That is the most up-to-date source of magic  

"Many Bothans died to bring us this information." ~ Star Wars: Episode VI – Return of the Jedi

Bannta , Jun 30th at 11:06 PM

Mods the Compilment The Handbook I enjoy using:

Bannta , Jun 28th at 4:54 PM

working on adding "durability used" to the hoverable tool tip. It was there at one point because I see it in the language file; it must have been broken or overlooked. 

Bannta , Jun 30th at 6:31 PM
@Bannta: working on adding "durability used" to the hoverable tool tip. It was there at one point because I see it in the language file; it must have been broken or overlooked.

Durability cost text intentionally omitted. Here is the problem: ToolDurabilityCost value from recipe JSON (e.g. durability used 13 in my portcullis door 1.5 for the hammer and chisel) does not survive client-side ingredient resolution in 1.22, it always reads back as the default (1), making the displayed number misleading. I can add back the wrench icon in OnHandbookRecipeRender, which still indicates "this ingredient is a tool and will be used/consumed". Unfortunately, that is the best I can do for now

 

stargazer_andi

Kenneth1109, Jun 14th at 8:26 PM

Does this have any impact on the crafting lag that seems to plague vintage story?

Bannta , Jun 15th at 3:18 AM
@Kenneth1109: Does this have any impact on the crafting lag that seems to plague vintage story?

The heavier side of the script is the validation, where we pick the best possible build as a secondary. I started a new run, so I'm still looking for food more than building anything yet. However, I've used this to verify all my mods for crafting.

Meatpie, Jun 10th at 4:28 AM

So on my heavily modded main file, item group scrolling is broken (same as https://mods.vintagestory.at/show/mod/47215#cmt-174028) and the button to cycle through conflicting recipes doesn't show up.
Does anyone else have this issue to compare mod lists with me to try to work out where the incompatability is?

Vynk, Jun 2nd at 3:17 PM

strange issue, sometimes i'm unable to craft an item after putting everything in the crafting table, and going into the handbook.
(the item will flash, then disappear making it impossible to craft anything. (seems to happen randomly, or atleast i've not been able to pin down what's causing it exactly; once i'm sure the method to reproduce it, i'll let you know))
the effect persists for any craftable item, the only fix is to exit the world and re-enter it. haven't checked my logs but i don't think anything will be in there.

Bannta , Jun 2nd at 4:04 PM
@Vynk: strange issue, sometimes i'm unable to craft an item after putting everything in the crafting table, and going into the handbook.(the item will flash, then disappear making it impossible to craft anything. (seems to happen randomly, or atleast i've not be

Just for understanding -The order is;

  1. You start placing items in the crafting grid.
  2. You open the handbook
  3. The crafting grid becomes unworkable 
    1. Items disappear randomly 
      • Can you still repopulate the grid if it does disappear? 
      • The approximate rate of occurrence: does this happen...like once every 5 openings of the handbook?
      • Is there an item or group of items that could be narrowed down to a given mod? Say items for Vintage Engineering Mod(example)

 

I'll try to take a look today to see if I can reproduce. Any clarification, error logs, and mod list may help narrow in on this issue. And of course anyone else that can second this issue would be helpful

Vynk, Jun 2nd at 6:45 PM
@Bannta: Just for understanding -The order is; You start placing items in the crafting grid. You open the handbook The crafting grid becomes unworkable Items disappear randomly Can you still repopulate the grid if it does disappear? The approximate rate of occurre

the issue has happened with flint knives, baskets, rope crafting (specifically from vines)
the items in the crafting grid are there, but they do not appear to be there; if the item is crafted, it is removed from the player's inventory, and the original components given back instead.
i'll try to cause the issue in a bit and see what i can figure out.

Vynk, Jun 2nd at 7:57 PM (modified Jun 2nd at 10:47 PM)
@Vynk: the issue has happened with flint knives, baskets, rope crafting (specifically from vines)the items in the crafting grid are there, but they do not appear to be there; if the item is crafted, it is removed from the player's inventory, and the original com

i can't seem to make it happen again, it was likely a conflict with

better handbook

https://mods.vintagestory.at/show/mod/50652
or
https://mods.vintagestory.at/show/mod/31745

enhanced handbook

(i was using all 3 together, and its really not needed to..)

 

after more testing, i don't think its from this mod at all...
unless its a conflict, but i doubt it. ( definitely occured with this mod and enhanced handbook working both enabled)

Meatpie, Jun 8th at 4:51 PM
@Bannta: Cool, which one of these two did you settle on?

Same mystery here, could be a conflict with another one of my hundreds of mods, but I don't use the enhanced handbook mod so whatever it is isn't that.

Meatpie, Jun 9th at 7:01 AM
@Meatpie: Same mystery here, could be a conflict with another one of my hundreds of mods, but I don't use the enhanced handbook mod so whatever it is isn't that.

Some further information

It works fine on a less modded multiplayer server, so it's either a compatibility issue, or its just getting overwhelmed by the sheer amount of extra blocks and recipes added by my modlist.

Also, the button to cycle through conflicting recipes is gone. Didn't notice until I saw it present when in the server it works in. Might be connected to that function?

Vynk, Jun 9th at 7:34 AM
@Aimli_: I have the exact same issue.

it's not from this mod, it seems to be a vanilla issue.
more mods can make it more common, from my testing, but some seem to make it very likely.

GingerAiyle, May 27th at 10:16 PM

Heya, do you know if this mod is incompatible with BetterHandbook (https://mods.vintagestory.at/show/mod/50652)? I see it does do some of the same things, but the feature from your mod that I'm mostly interested in is the conflicting recipe cycling. If so, would you maybe consider making a separate mod that adds only the recipe cycling that would be compatible with other handbook mods? Appreciate your effort xx

Aimli_, May 26th at 1:55 AM
Crash Report
Running on 64 bit Windows 10.0.22631.0 with 16241 MB RAM
Game Version: v1.22.2 (Stable)
2026/5/26 9:54:17: Critical error occurred
Loaded Mods: game@1.22.2, simplewallpaper@0.1.0, vsimgui@1.2.5, storagecontroller@1.2.2, commonlibforked@2.8.1, creative@1.22.2, survival@1.22.2, harvestcorpsesquickly@1.0.0, xlibfork@1.0.8, tpnetpatched@1.15.1, animalcages@5.0.0, fontsettings@1.2.1, glowingprojectiles@1.1.3, pinyinsearch@1.0.0, carryon@1.14.2, improvedhandbookrecipesfork@1222.0.2, betterentityinteraction@1.0.5, nolowhealthshaking@1.0.1, immersivecorpsedrop@1.0.4, electricalprogressivecore@3.1.0, hudclockpatch@4.3.1, autopanning@2.0.0, configlib@1.12.0, extrainfo@2.2.1, fendragonbcs@0.2.3, xskillsfork@1.0.41, electricalprogressivebasics@3.1.2, stonequarryforked@3.5.3, xskillsgilded@1.3.27, electricalprogressiveindustry@0.7.0, electricalprogressiveqol@3.1.3, electricalprogressivetransport@1.0.0, electricalprogressiveequipment@3.1.0
Involved Harmony IDs: improvedhandbookrecipes
System.Exception: Error while rendering item in slot Vintagestory.API.Common.DummySlot (1x Block Id 3343, Code game:lantern-small-up)
---> System.NullReferenceException: Object reference not set to an instance of an object.
at Vintagestory.Client.NoObf.TextureSource..ctor(ClientMain game, Size2i atlasSize, Block block, Boolean forInventory) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 1139
at Vintagestory.Client.NoObf.TextureSource..ctor(ClientMain game, Size2i atlasSize, Block block, Int32 altTextureNumber) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 1202
at Vintagestory.Client.NoObf.ShapeTesselator.GetTextureSource(Block block, Int32 altTextureNumber, Boolean returnNullWhenMissing) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 826
at Vintagestory.GameContent.BlockLantern.GenMesh(ICoreClientAPI capi, String material, String lining, String glassMaterial, Shape shape, ITesselatorAPI tesselator) in VSSurvivalMod\Block\BlockLantern.cs:line 217
at Vintagestory.GameContent.BlockLantern.OnBeforeRender(ICoreClientAPI capi, ItemStack itemstack, EnumItemRenderTarget target, ItemRenderInfo& renderinfo) in VSSurvivalMod\Block\BlockLantern.cs:line 169
at Vintagestory.Client.NoObf.InventoryItemRenderer.GetItemStackRenderInfo(ClientMain game, ItemSlot inSlot, EnumItemRenderTarget target, Single dt) in VintagestoryLib\Client\Render\InventoryItemRenderer.cs:line 496
at Vintagestory.Client.NoObf.InventoryItemRenderer.RenderItemstackToGui(ItemSlot inSlot, Double posX, Double posY, Double posZ, Single size, Int32 color, Single dt, Boolean shading, Boolean origRotate, Boolean showStackSize) in VintagestoryLib\Client\Render\InventoryItemRenderer.cs:line 286
--- End of inner exception stack trace ---
at Vintagestory.Client.NoObf.InventoryItemRenderer.RenderItemstackToGui(ItemSlot inSlot, Double posX, Double posY, Double posZ, Single size, Int32 color, Single dt, Boolean shading, Boolean origRotate, Boolean showStackSize) in VintagestoryLib\Client\Render\InventoryItemRenderer.cs:line 410
at Vintagestory.Client.NoObf.RenderAPIGame.RenderItemstackToGui(ItemSlot inSlot, Double posX, Double posY, Double posZ, Single size, Int32 color, Boolean shading, Boolean rotate, Boolean showStacksize) in VintagestoryLib\Client\API\RenderAPIGame.cs:line 282
at Vintagestory.API.Common.CollectibleObject.OnHandbookRecipeRender_Patch1(CollectibleObject this, ICoreClientAPI capi, IRecipeBase recipe, ItemSlot slot, Double x, Double y, Double z, Double size)
at Vintagestory.API.Client.SlideshowGridRecipeTextComponent.RenderInteractiveElements_Patch1(SlideshowGridRecipeTextComponent this, Single deltaTime, Double renderX, Double renderY, Double renderZ)
at Vintagestory.API.Client.GuiElementRichtext.RenderInteractiveElements(Single deltaTime) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\GuiElementRichtext.cs:line 490
at Vintagestory.API.Client.GuiComposer.Render(Single deltaTime) in VintagestoryApi\Client\UI\GuiComposer.cs:line 737
at Vintagestory.API.Client.GuiDialog.OnRenderGUI(Single deltaTime) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 396
at Vintagestory.GameContent.GuiDialogHandbook.OnRenderGUI_Patch1(GuiDialogHandbook this, Single deltaTime)
at Vintagestory.Client.NoObf.GuiManager.OnRenderFrameGUI(Single deltaTime) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 309
at Vintagestory.Client.NoObf.ClientEventManager.TriggerRenderStage(EnumRenderStage stage, Single dt) in VintagestoryLib\Client\Util\ClientEventManager.cs:line 249
at Vintagestory.Client.NoObf.ClientMain.TriggerRenderStage(EnumRenderStage stage, Single dt) in VintagestoryLib\Client\ClientMain.cs:line 858
at Vintagestory.Client.NoObf.ClientMain.RenderToDefaultFramebuffer(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 1048
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 783
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 686
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
System.NullReferenceException: Object reference not set to an instance of an object.
at Vintagestory.Client.NoObf.TextureSource..ctor(ClientMain game, Size2i atlasSize, Block block, Boolean forInventory) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 1139
at Vintagestory.Client.NoObf.TextureSource..ctor(ClientMain game, Size2i atlasSize, Block block, Int32 altTextureNumber) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 1202
at Vintagestory.Client.NoObf.ShapeTesselator.GetTextureSource(Block block, Int32 altTextureNumber, Boolean returnNullWhenMissing) in VintagestoryLib\Client\Render\Tesselation\ShapeTesselator.cs:line 826
at Vintagestory.GameContent.BlockLantern.GenMesh(ICoreClientAPI capi, String material, String lining, String glassMaterial, Shape shape, ITesselatorAPI tesselator) in VSSurvivalMod\Block\BlockLantern.cs:line 217
at Vintagestory.GameContent.BlockLantern.OnBeforeRender(ICoreClientAPI capi, ItemStack itemstack, EnumItemRenderTarget target, ItemRenderInfo& renderinfo) in VSSurvivalMod\Block\BlockLantern.cs:line 169
at Vintagestory.Client.NoObf.InventoryItemRenderer.GetItemStackRenderInfo(ClientMain game, ItemSlot inSlot, EnumItemRenderTarget target, Single dt) in VintagestoryLib\Client\Render\InventoryItemRenderer.cs:line 496
at Vintagestory.Client.NoObf.InventoryItemRenderer.RenderItemstackToGui(ItemSlot inSlot, Double posX, Double posY, Double posZ, Single size, Int32 color, Single dt, Boolean shading, Boolean origRotate, Boolean showStackSize) in VintagestoryLib\Client\Render\InventoryItemRenderer.cs:line 286
Bannta , May 26th at 5:13 AM
@Aimli_: Crash Report Running on 64 bit Windows 10.0.22631.0 with 16241 MB RAMGame Version: v1.22.2 (Stable)2026/5/26 9:54:17: Critical error occurredLoaded Mods: game@1.22.2, simplewallpaper@0.1.0, vsimgui@1.2.5, storagecontroller@1.2.2, commonlibforked@2.8.1, cr

A vanilla small lantern does not crash the vanilla handbook on its own. This error occurs because another mod in your list modified or removed the textures/variants of the small lantern. It asked the game to render a small lantern inside the handbook, and the vanilla engine choked on the lantern's texture. The improvedhandbookrecipesfork has button and other item to valid at the same time as the the small lantern texture or variants is found to be null, causing the crash.

There is a possible chance that simple wallpaper, by use obsolete exclude false, however I have loaded this and can not reproduce. The patches are not applying tso it is not working. Suggest removing the 1.20-rc.6, mod: simple wallpaper.
26.5.2026 00:26:52 [Error] Patch 0 (target: game:blocktypes/cloth/wallpaper.json) in game:patches/wallpaper.json failed because supplied path /attributes/handbook/exclude is invalid: The json path /attributes/handbook/exclude was not found. Could traverse until /attributes, but then 'handbook' does not exist. Full json at this path: {
"ignoreSounds": true
}

The other issue could be these mod, however I have loaded these and can not reproduce.
electricalprogressivecore / electricalprogressivebasics / electricalprogressiveqol: These mods heavily overhaul game mechanics and items. If they try to alter lanterns or add electrical variants, they may have broken the base texture mapping

 

  1. removing the 1.20-rc.6, mod: simple wallpaper.- it's no longer patching to the vintage story game 
  2. Is it always crashing at that point on any small lantern or a specific lantern?
  3. Is it a random crash?
  4. Can you supply your client-main and server-main? You can send me an error for any with "lantern, improved, or errors in general." 
Aimli_, May 30th at 11:06 AM
@Bannta: A vanilla small lantern does not crash the vanilla handbook on its own. This error occurs because another mod in your list modified or removed the textures/variants of the small lantern. It asked the game to render a small lantern inside the handbook, and

Actually, I'm using a lantern as a crafting ingredient. If I don't include the parameters, the lantern displayed as a material will have the wrong texture.

Bannta , May 31st at 5:19 PM
@Aimli_: Actually, I'm using a lantern as a crafting ingredient. If I don't include the parameters, the lantern displayed as a material will have the wrong texture.

Which mod is doing " lantern as a crafting ingredient"? I'll load it up and check out what's happening

KOPI_PING, May 25th at 8:25 AM

Upon loading up any saves/create a new world with this mod installed on VS 1.22.2, the game immediately crash without giving out the usual crash log pop up screen. i'll send you the client crash log from the VS file directory since it seems like it's the most important, I can also send you all the client and server logs as well if it helps you troubleshoot the problem :)

Spoiler!
client-crash.log
Game Version: v1.22.0-rc.8 (Unstable)
13/4/2026 10:17:06 PM: Critical error occurred in the following mod: knapster@3.1.0
Loaded Mods: game@1.22.0-rc.8, attributerenderinglibrary@3.0.0-pre.11, egocaribautomapmarkers@5.0.1, jaunt@3.0.0-rc.3, knapster@3.1.0, creative@1.22.0-rc.8, survival@1.22.0-rc.8, draconis@1.4.0-pre.2
Involved Harmony IDs: knapster
System.TypeLoadException: Could not load type 'Vintagestory.API.Common.LayeredVoxelRecipe`1' from assembly 'VintagestoryAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
at MonoMod.Core.Interop.CoreCLR.V60.InvokeCompileMethod(IntPtr functionPtr, IntPtr thisPtr, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at MonoMod.Core.Platforms.Runtimes.Core60Runtime.JitHookDelegateHolder.CompileMethodHook(IntPtr jit, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at Knapster.Features.EasyKnapping.Patches.EasyKnappingClientPatches.ClientPatch_BlockEntityKnappingSurface_OnUseOver_Prefix(BlockEntityKnappingSurface __instance, IPlayer byPlayer, BlockFacing facing, Boolean mouseMode)
at Knapster.Features.EasyKnapping.Patches.EasyKnappingClientPatches.ClientPatch_BlockEntityKnappingSurface_OnUseOver_Prefix(BlockEntityKnappingSurface __instance, IPlayer byPlayer, BlockFacing facing, Boolean mouseMode)
at Vintagestory.GameContent.BlockEntityKnappingSurface.OnUseOver_Patch1(BlockEntityKnappingSurface this, IPlayer byPlayer, Int32 selectionBoxIndex, BlockFacing facing, Boolean mouseMode)
at Vintagestory.GameContent.ItemFlint.OnHeldAttackStop(Single secondsPassed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel) in VSSurvivalMod\Item\ItemFlint.cs:line 146
at Vintagestory.API.Common.CollectibleObject.OnHeldUseStop(Single secondsPassed, ItemSlot slot, EntityAgent byEntity, BlockSelection blockSel, EntitySelection entitySel, EnumHandInteract useType) in VintagestoryApi\Common\Collectible\Collectible.cs:line 1496
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.HandleHandInteraction(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 317
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.OnGameTick(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 164
at Vintagestory.Common.GameTickListener.OnTriggered(Int64 ellapsedMilliseconds) in VintagestoryLib\Common\Model\GameTickListener.cs:line 36
at Vintagestory.Common.EventManager.TriggerGameTick(Int64 ellapsedMilliseconds, IWorldAccessor world) in VintagestoryLib\Common\EventManager.cs:line 134
at Vintagestory.Client.NoObf.ClientMain.MainRenderLoop(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 865
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 173
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 741
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 685
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Game Version: v1.22.2 (Stable)
4/5/2026 11:28:29 AM: Critical error occurred in the following mod: recipeselectorfork@2.0.0
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, plainsandvalleys@1.0.13, propersticks@0.2.0, game@1.22.2, zoombuttonreborn@2.0.2, animalcages@5.0.0, attributerenderinglibrary@3.0.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, electricalprogressivecore@3.0.0, jaunt@3.0.0-rc.3, juicyores@1.0.2, knapster@4.0.0, petai@5.0.0, projectiletracker@1.0.7, recipeselectorfork@2.0.0, statushudcont@4.3.1, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, draconis@1.4.0-pre.2, electricalprogressivebasics@3.0.0, wolftaming@5.0.0, zrustdrops@2.1.0, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.0
Involved Harmony IDs: RecipeSelector.VanillaPatches, RecipeSelector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
System.MissingFieldException: Field not found: 'Vintagestory.API.Common.GridRecipe.Output'.
at MonoMod.Core.Interop.CoreCLR.V60.InvokeCompileMethod(IntPtr functionPtr, IntPtr thisPtr, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at MonoMod.Core.Platforms.Runtimes.Core60Runtime.JitHookDelegateHolder.CompileMethodHook(IntPtr jit, IntPtr corJitInfo, CORINFO_METHOD_INFO* methodInfo, UInt32 flags, Byte** nativeEntry, UInt32* nativeSizeOfCode)
at RecipeSelector.Patch_InventoryCraftingGrid_FindMatchingRecipe.<>c__DisplayClass2_1.<Inject>b__1(GridRecipe x) in /home/irish/Github Projects/Recipe-Selector/src/RecipeSelector.decompiled.cs:line 157
at RecipeSelector.Patch_InventoryCraftingGrid_FindMatchingRecipe.<>c__DisplayClass2_1.<Inject>b__1(GridRecipe x) in /home/irish/Github Projects/Recipe-Selector/src/RecipeSelector.decompiled.cs:line 157
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
at RecipeSelector.Patch_InventoryCraftingGrid_FindMatchingRecipe.<>c__DisplayClass2_0.<Inject>g__HasRecipe|0(GridRecipe recipe) in /home/irish/Github Projects/Recipe-Selector/src/RecipeSelector.decompiled.cs:line 157
at RecipeSelector.Patch_InventoryCraftingGrid_FindMatchingRecipe.Inject(GridRecipe currentMatchingRecipe, List`1 recipes, ICoreAPI api, IPlayer player) in /home/irish/Github Projects/Recipe-Selector/src/RecipeSelector.decompiled.cs:line 150
at Vintagestory.Common.InventoryCraftingGrid.FindMatchingRecipe_Patch1(InventoryCraftingGrid this)
at Vintagestory.Common.InventoryCraftingGrid.OnItemSlotModified(ItemSlot slot) in VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 142
at Vintagestory.API.Common.InventoryBase.DidModifyItemSlot(ItemSlot slot, ItemStack extractedStack) in VintagestoryApi\Common\Inventory\InventoryBase.cs:line 492
at Vintagestory.Common.InventoryCraftingGrid.DidModifyItemSlot(ItemSlot slot, ItemStack extractedStack) in VintagestoryLib\Common\GameContent\Inventory\InventoryCraftingGrid.cs:line 147
at Vintagestory.Common.InventoryNetworkUtil.UpdateFromPacket(IWorldAccessor resolver, Packet_InventoryUpdate packet) in VintagestoryLib\Common\GameContent\Inventory\InventoryNetworkUtil.cs:line 496
at Vintagestory.Common.InventoryNetworkUtil.set_PauseInventoryUpdates(Boolean value) in VintagestoryLib\Common\GameContent\Inventory\InventoryNetworkUtil.cs:line 58
at Vintagestory.API.Client.GuiElementItemSlotGridBase.OnMouseUp(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Inventory\GuiElementItemSlotGridBase.cs:line 824
at Vintagestory.API.Client.GuiComposer.OnMouseUp(MouseEvent mouse) in VintagestoryApi\Client\UI\GuiComposer.cs:line 448
at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 423
at Vintagestory.Client.NoObf.ClientMain.UpdateMouseButtonState(EnumMouseButton button, Boolean down) in VintagestoryLib\Client\ClientMain.cs:line 2031
at Vintagestory.Client.SystemHotkeys.OnPrimaryMouseButton(KeyCombination mb) in VintagestoryLib\Client\Systems\Player\Hotkeys.cs:line 52
at Vintagestory.Client.HotkeyManager.TriggerHotKey(KeyEvent keyEventargs, IWorldAccessor world, IPlayer player, Boolean allowCharacterControls, Boolean isGlobal, Boolean fallBack, Boolean keyup) in VintagestoryLib\Client\HotkeyManager.cs:line 424
at Vintagestory.Client.HotkeyManager.TriggerHotKey(KeyEvent keyEventargs, IWorldAccessor world, IPlayer player, Boolean allowCharacterControls, Boolean keyUp) in VintagestoryLib\Client\HotkeyManager.cs:line 394
at Vintagestory.Client.HotkeyManager.OnMouseButton(ClientMain game, EnumMouseButton button, Int32 modifiers, Boolean buttonDown) in VintagestoryLib\Client\HotkeyManager.cs:line 574
at Vintagestory.Client.NoObf.ClientMain.OnMouseUpRaw(MouseEvent args) in VintagestoryLib\Client\ClientMain.cs:line 2061
at Vintagestory.Client.GuiScreenRunningGame.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 365
at Vintagestory.Client.ScreenManager.OnMouseUp(MouseEvent e) in VintagestoryLib\Client\ScreenManager.cs:line 944
at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in VintagestoryLib\Client\ClientPlatform\Input.cs:line 217
at OpenTK.Windowing.Desktop.NativeWindow.OnMouseUp(MouseButtonEventArgs e)
at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Game Version: v1.22.2 (Stable)
5/5/2026 9:48:01 PM: Critical error occurred in the following mod: vsroofing@1.5.1
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, plainsandvalleys@1.0.13, propersticks@0.2.0, game@1.22.2, zoombuttonreborn@2.0.2, animalcages@5.0.0, attributerenderinglibrary@3.0.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, electricalprogressivecore@3.0.0, jaunt@3.0.0-rc.3, juicyores@1.0.2, knapster@4.0.0, petai@5.0.0, projectiletracker@1.0.7, statushudcont@4.3.1, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, draconis@1.4.0-pre.2, electricalprogressivebasics@3.0.0, wolftaming@5.0.0, zrustdrops@2.1.0, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.0
System.NullReferenceException: Object reference not set to an instance of an object.
at VSRoofing.RoofBlock.RoofVariant(List`1 materials) in /home/danielt/Documents/vsroofing/vsroofing/src/blocks/RoofBlock.cs:line 1200
at VSRoofing.AutoRoofEntity.GenerateBlockTextureSource() in /home/danielt/Documents/vsroofing/vsroofing/src/blockentities/autoroof.cs:line 5027
at VSRoofing.RoofBlock.GetRandomColor(ICoreClientAPI capi, BlockPos pos, BlockFacing facing, Int32 rndIndex) in /home/danielt/Documents/vsroofing/vsroofing/src/blocks/RoofBlock.cs:line 1092
at Vintagestory.GameContent.ChunkMapLayer.GenerateChunkImage(FastVec2i chunkPos, IMapChunk mc, Boolean colorAccurate) in VSEssentials\Systems\WorldMap\ChunkLayer\ChunkMapLayer.cs:line 515
at Vintagestory.GameContent.ChunkMapLayer.OnOffThreadTick(Single dt) in VSEssentials\Systems\WorldMap\ChunkLayer\ChunkMapLayer.cs:line 335
at Vintagestory.GameContent.WorldMapManager.<OnLvlFinalize>b__22_0() in VSEssentials\Systems\WorldMap\WorldMapManager.cs:line 214
at System.Threading.Thread.StartHelper.Callback(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
Game Version: v1.22.2 (Stable)
7/5/2026 3:19:19 PM: Critical error occurred in the following mod: smithingplus@1.9.0-rc.1
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, jsonpatcheslib@1.5.2, overhaullib@2.0.8, plainsandvalleys@1.0.13, propersticks@0.2.0, swifttime@1.1.3, game@1.22.2, waysearchpoint@1.0.5, zoombuttonreborn@2.0.2, animalcages@5.0.0, apewindows@1.5.0, attributerenderinglibrary@3.1.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, critcherscalculator@1.1.0, electricalprogressivecore@3.0.1, fillmybloomery@1.0.3, jaunt@3.0.0-rc.3, juicyores@1.0.2, knapster@4.0.0, panningmachine@1.0.9, petai@5.0.0, placeonslabs@1.0.5, playermodellib@1.18.2, projectiletracker@1.0.7, smithingplus@1.9.0-rc.1, statushudcont@4.3.1, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, draconis@1.4.0-pre.2, electricalprogressivebasics@3.0.2, kcsdragons@0.9.9, wolftaming@5.0.0, zrustdrops@2.1.0, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.1
System.NullReferenceException: Object reference not set to an instance of an object.
at SmithingPlus.ToolRecovery.CollectibleBehaviorRepairableTool.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in /_/SmithingPlus/ToolRecovery/CollectibleBehaviorRepairableTool.cs:line 33
at Vintagestory.API.Common.CollectibleObject.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Collectible.cs:line 2131
at Vintagestory.API.Common.Block.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 2401
at Vintagestory.API.Common.ItemStack.GetDescription(IWorldAccessor world, ItemSlot inSlot, Boolean debug) in VintagestoryApi\Common\Collectible\ItemStack.cs:line 402
at Vintagestory.GameContent.GuiHandbookItemStackPage..ctor(ICoreClientAPI capi, ItemStack stack) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 42
at Vintagestory.GameContent.ModSystemSurvivalHandbook.onCreatePagesAsync() in VSSurvivalMod\Systems\Handbook\SurvivalHandbook.cs:line 122
at Vintagestory.GameContent.GuiDialogHandbook.LoadPages_Async() in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 434
at Vintagestory.API.Common.TyronThreadPool.<>c__DisplayClass11_0.<QueueTask>b__0(Object _) in VintagestoryApi\Common\TyronThreadPool.cs:line 119
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
at System.Threading.Thread.StartCallback()
Game Version: v1.22.2 (Stable)
7/5/2026 3:22:19 PM: Critical error occurred in the following mod: smithingplus@1.9.0-rc.1
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, jsonpatcheslib@1.5.2, overhaullib@2.0.8, plainsandvalleys@1.0.13, propersticks@0.2.0, swifttime@1.1.3, game@1.22.2, waysearchpoint@1.0.5, zoombuttonreborn@2.0.2, animalcages@5.0.0, apewindows@1.5.0, attributerenderinglibrary@3.1.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, critcherscalculator@1.1.0, electricalprogressivecore@3.0.1, fillmybloomery@1.0.3, jaunt@3.0.0-rc.3, juicyores@1.0.2, knapster@4.0.0, panningmachine@1.0.9, petai@5.0.0, placeonslabs@1.0.5, playermodellib@1.18.2, projectiletracker@1.0.7, smithingplus@1.9.0-rc.1, statushudcont@4.3.1, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, electricalprogressivebasics@3.0.2, kcsdragons@0.9.9, wolftaming@5.0.0, zrustdrops@2.1.0, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.1
System.NullReferenceException: Object reference not set to an instance of an object.
at SmithingPlus.ToolRecovery.CollectibleBehaviorRepairableTool.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in /_/SmithingPlus/ToolRecovery/CollectibleBehaviorRepairableTool.cs:line 33
at Vintagestory.API.Common.CollectibleObject.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Collectible.cs:line 2131
at Vintagestory.API.Common.Block.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 2401
at Vintagestory.GameContent.BlockFigurehead.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VSSurvivalMod\Block\BlockFigurehead.cs:line 40
at Vintagestory.API.Common.ItemStack.GetDescription(IWorldAccessor world, ItemSlot inSlot, Boolean debug) in VintagestoryApi\Common\Collectible\ItemStack.cs:line 402
at Vintagestory.Common.CreativeTab.CreateSearchCache(IWorldAccessor world) in VintagestoryLib\Common\GameContent\Inventory\CreativeTab.cs:line 30
at Vintagestory.Common.CreativeTabs.CreateSearchCache(IWorldAccessor world) in VintagestoryLib\Common\GameContent\Inventory\CreativeTabs.cs:line 50
at Vintagestory.Client.NoObf.GuiDialogInventory.<OnOwnPlayerDataReceived>b__6_0() in VintagestoryLib\Client\Systems\Gui\Dialogs\GuiDialogInventory.cs:line 60
at Vintagestory.API.Common.TyronThreadPool.<>c__DisplayClass11_0.<QueueTask>b__0(Object _) in VintagestoryApi\Common\TyronThreadPool.cs:line 119
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
at System.Threading.Thread.StartCallback()
Game Version: v1.22.2 (Stable)
9/5/2026 2:22:43 PM: Critical error occurred in the following mod: smithingplus@1.9.0-rc.1
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, jsonpatcheslib@1.5.2, overhaullib@2.0.8, plainsandvalleys@1.0.13, propersticks@0.2.0, swifttime@1.1.3, translocatorengineeringredux@1.6.6, vmetp@1.22.2, game@1.22.2, waysearchpoint@1.0.5, zoombuttonreborn@2.0.2, animalcages@5.0.0, apewindows@1.5.0, attributerenderinglibrary@3.1.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, critcherscalculator@1.1.1, electricalprogressivecore@3.0.1, fillmybloomery@1.0.3, jaunt@3.0.0-rc.3, juicyores@1.0.2, knapster@4.0.0, panningmachine@1.0.9, petai@5.0.0, placeonslabs@1.0.5, playermodellib@1.18.2, projectiletracker@1.0.7, smithingplus@1.9.0-rc.1, statushudcont@4.3.1, stepupadvanced@1.3.0, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, draconis@1.4.1, electricalprogressivebasics@3.0.2, kcsdragons@0.9.9, wolftaming@5.0.0, zrustdrops@2.1.0, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.1
System.NullReferenceException: Object reference not set to an instance of an object.
at SmithingPlus.ToolRecovery.CollectibleBehaviorRepairableTool.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in /_/SmithingPlus/ToolRecovery/CollectibleBehaviorRepairableTool.cs:line 33
at Vintagestory.API.Common.CollectibleObject.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Collectible.cs:line 2131
at Vintagestory.API.Common.Block.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 2401
at Vintagestory.GameContent.BlockFigurehead.GetHeldItemInfo(ItemSlot inSlot, StringBuilder dsc, IWorldAccessor world, Boolean withDebugInfo) in VSSurvivalMod\Block\BlockFigurehead.cs:line 40
at Vintagestory.GameContent.GuiHandbookItemStackPage..ctor(ICoreClientAPI capi, ItemStack stack) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 35
at Vintagestory.GameContent.ModSystemSurvivalHandbook.onCreatePagesAsync() in VSSurvivalMod\Systems\Handbook\SurvivalHandbook.cs:line 122
at Vintagestory.GameContent.GuiDialogHandbook.LoadPages_Async() in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 434
at Vintagestory.API.Common.TyronThreadPool.<>c__DisplayClass11_0.<QueueTask>b__0(Object _) in VintagestoryApi\Common\TyronThreadPool.cs:line 119
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
at System.Threading.Thread.StartCallback()
Game Version: v1.22.2 (Stable)
25/5/2026 8:48:28 AM: Critical error occurred
Loaded Mods: woodlogstack64@1.2.1, chiseltools@1.17.1, claycasting@1.3.8, coltnavy@0.1.723, jsonpatcheslib@1.5.2, lemurfaceautowalk@1.1.0, nekporifle@0.1.223, overhaulliblegacycompat@1.0.69, overhaullib@2.0.8, plainsandvalleys@1.0.13, propersticks@0.2.0, swifttime@1.1.3, translocatorengineeringredux@1.6.6, vhfp@1.22.2, vmetp@1.22.2, game@1.22.2, vsimgui@1.2.0, waysearchpoint@1.0.5, zoombuttonreborn@2.0.2, animalcages@5.0.0, apewindows@1.5.0, attributerenderinglibrary@3.1.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, configlib@1.12.0, critcherscalculator@1.1.1, electricalprogressivecore@3.0.1, fillmybloomery@1.0.3, firearmsfork@1.9.11, jaunt@3.0.0-rc.3, jonastools@1.3.0, juicyores@1.0.2, knapster@4.0.0, panningmachine@1.0.9, petai@5.1.1, placeonslabs@1.0.5, playermodellib@1.18.2, projectiletracker@1.0.7, recipeselectorfork@2.0.0, smithingplus@1.9.0-rc.1, statushudcont@4.3.1, stepupadvanced@1.3.0, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, centuryarms@0.0.7, draconis@1.4.1, electricalprogressivebasics@3.0.2, kcsdragons@0.9.9, wolftaming@5.0.1, zrustdrops@2.1.0, draconisrhinocroma@1.0.0-rc.3, electricalprogressiveqol@3.0.0, electricalprogressiveequipment@3.0.1
System.ArgumentException: Given pos contained NaN: XYZ: 511991.4551904037/3/512011.48625094444, YPR 0.77581745/3.1800053/0, Dim 0 for entity game:player
at Vintagestory.GameContent.EntityBehaviorControlledPhysics.ApplyTests(EntityPos pos, EntityControls controls, Single dt, Boolean remote) in VSEssentials\Entity\Behavior\BehaviorControlledPhysics.cs:line 325
at Vintagestory.GameContent.EntityBehaviorPlayerPhysics.OnRenderFrame(Single dt, EnumRenderStage stage) in VSEssentials\Entity\Behavior\BehaviorPlayerPhysics.cs:line 389
at Vintagestory.Client.NoObf.ClientMain.MainRenderLoop(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 910
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 173
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 742
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 686
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Game Version: v1.22.2 (Stable)
25/5/2026 1:46:20 PM: Critical error occurred in the following mod: configlib@1.12.0
Loaded Mods: woodlogstack64@1.2.1, caramellabell@1.0.1, chiseltools@1.17.1, claycasting@1.3.8, jsonpatcheslib@1.5.2, lemurfaceautowalk@1.1.0, overhaulliblegacycompat@1.0.69, overhaullib@2.0.8, plainsandvalleys@1.0.13, propersticks@0.2.0, swifttime@1.1.3, temporalsymphony@2.3.1, translocatorengineeringredux@1.6.6, vhfp@1.22.2, vmetp@1.22.2, game@1.22.2, waysearchpoint@1.0.5, zoombuttonreborn@2.0.2, aculinaryartillery@2.0.0-dev.16, adastra@0.2.1, animalcages@5.0.0, animationslib@0.0.2, apewindows@1.5.0, arrowglow@1.0.0, attributerenderinglibrary@3.1.1, egocaribautomapmarkers@5.0.1, bettererprospecting@3.2.2, bloodtrail@1.2.2, carryon@1.14.2, configlib@1.12.0, critcherscalculator@1.1.1, fillmybloomery@1.0.3, firearmsfork@1.9.11, jaunt@3.0.0-rc.3, jonastools@1.3.0, juicyores@1.0.2, knapster@4.0.0, metalpots@1.7.6, panningmachine@1.0.9, petai@5.1.1, placeonslabs@1.0.5, projectiletracker@1.0.7, recipeselectorfork@2.0.0, smithingplus@1.9.0-rc.1, statushudcont@4.3.1, stepupadvanced@1.3.0, stonebakeoven@1.3.2, storagetweaks@1.1.9, creative@1.22.2, vsroofing@1.5.1, survival@1.22.2, cats@5.0.0, centuryarms@0.0.7, combatoverhaulfork@0.17.41, draconis@1.4.1, moredragons@1.0.63, expandedfoods@2.0.0-dev.8, mannyextrafirearms@1.1.0, featherborn@0.10.0-pre.1, kcsdragons@0.9.9, wolftaming@5.0.1, zrustdrops@2.1.0, armoryfork@1.10.30, draconisrhinocroma@1.0.0-rc.3
System.NullReferenceException: Object reference not set to an instance of an object.
at Vintagestory.API.Client.GuiDialog.TryOpen(Boolean withFocus) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 287
at VSImGui.ImGuiModSystem.Show() in D:\Projects\VintageStory\vsimgui\VSImGui\source\ImGuiModSystem.cs:line 42
at ConfigLib.GuiManager.OpenConfigWindow() in D:\Projects\VintageStory\configlib\configlib\source\GUI\GuiManager.cs:line 68
at ConfigLib.GuiManager.ToggleConfigWindow() in D:\Projects\VintageStory\configlib\configlib\source\GUI\GuiManager.cs:line 47
at ConfigLib.GuiManager.ShowConfigWindowStatic() in D:\Projects\VintageStory\configlib\configlib\source\GUI\GuiManager.cs:line 59
at Vintagestory.API.Client.GuiElementTextButton.OnMouseUpOnElement(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 320
at Vintagestory.API.Client.GuiElementTextButton.OnMouseUp(ICoreClientAPI api, MouseEvent args) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Controls\GuiElementTextButton.cs:line 310
at Vintagestory.API.Client.GuiDialog.OnMouseUp(MouseEvent args) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 593
at Vintagestory.Client.NoObf.GuiDialogEscapeMenu.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\Dialogs\GuiDialogEscapeMenu.cs:line 432
at Vintagestory.Client.NoObf.GuiManager.OnMouseUp(MouseEvent args) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 423
at Vintagestory.Client.NoObf.ClientPlatformWindows.Mouse_ButtonUp(MouseButtonEventArgs e) in VintagestoryLib\Client\ClientPlatform\Input.cs:line 214
at OpenTK.Windowing.Desktop.NativeWindow.MouseButtonCallback(Window* window, MouseButton button, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Bannta , May 25th at 6:39 PM (modified May 25th at 6:41 PM)
@KOPI_PING: Upon loading up any saves/create a new world with this mod installed on VS 1.22.2, the game immediately crash without giving out the usual crash log pop up screen. i'll send you the client crash log from the VS file directory since it seems like it's the

FYI - I do use AI to translate crash reports; it's quicker than my eyes, and I always miss something. Plus it's already got all the syntax for debugging, as everything changes 3-6 months every now.

 

There is a bunch of stumbbling happening in the logs. 

 

Crash 1 knapster@3.1.0: LayeredVoxelRecipe type not found =Knapster using an API type removed in 1.22. Knapster's bug. -> Update to 4.0.0 Knapster,. 3.1. is for 1.21... which is for 1.22 (it why i created the AutoSmith as knapper wasn't updated yet)

So update this first(crash 1) and re-run the game and see if it crashes again.


Crash 2 recipeselectorfork@2.0.0: GridRecipe.Output field not found  =this IS relevant. 

 

Also check the rest for updates

Crash 3 vsroofing@1.5.1: NullRef in RoofBlock.RoofVariant during map rendering. VSRoofing's bug.
Crashes 4, 5, 6  smithingplus@1.9.0-rc.1: NullRef in CollectibleBehaviorRepairableTool.GetHeldItemInfo. SmithingPlus's bug.
Crash 7 NaN position: Physics/movement issue, no mod culprit listed. Likely a teleport/translocator interaction.
Crash 8 configlib@1.12.0: NullRef in VSImGui. ConfigLib/VSImGui bug.


The one that affects me is crash 2.

dragonsushi247, May 24th at 2:39 PM

Hi, since the latest update I can no longer use the scroll wheel to scroll through recipe or item variants. There are no errors in the logs that I've found.

Bannta , May 26th at 5:17 AM
@dragonsushi247: Hi, since the latest update I can no longer use the scroll wheel to scroll through recipe or item variants. There are no errors in the logs that I've found.

I'm not able to reproduce. I'm able to scroll. It appears to be a recipe behind(not lining up when you freeze the variant)

 

  1. Can you supply your client-main and server-main? You can send me an error for any with "improved, and errors in general" 
  2. Is all scrolling broken, or on specific items or groups of items?
dragonsushi247, May 26th at 11:00 PM
@Bannta: I'm not able to reproduce. I'm able to scroll. It appears to be a recipe behind(not lining up when you freeze the variant) Can you supply your client-main and server-main? You can send me an error for any with "improved, and errors in general" Is all scro

Hi, I was finally able to do some testing. I apparently jumped from mod version 1.0.0 (zip named 1.22.01) to 1222.0.2 (the latest zip). My process:

  • open the handbook to granite gravel
  • under the "ingredient for:" section, there should be one picture of fanned cobblestone that slideshows through all the variants
  • on the older version, the mouse wheel can be used to scroll between each variant
  • on the new version, the slideshow pauses as long as the mouse is over fanned cobblestone and will not cycle through variants until it's no longer hovered over

 

No other mods were changed when swapping between these 2.

 

In both versions, I can use the mouse wheel to scroll through variants in the "recipe" section, it's just the "ingredient for" and "can be placed into/onto" sections that broke, for every page in the handbook. Interestingly, the mouse wheel has the "bugged" behavior no matter the mod version if the "ingredient for" section is not at the bottom of the handbook page (i.e. the pies under raw redmeat won't scroll, but the various cabinets will for mod version 1.0.0).

 

What's the best way to send you log files? Granted, there is no error from this mod, only some unrelated errors from other mods (and a shocking number of grid recipe errors from Geodes and Gemstones lol).

Timbrage, May 22nd at 3:29 PM

I've found an issue, the recipe for the Iron Trapdoor doesn't work with this mod, the metal plaque recipe overrides. I've deactivated the mod and I could create an Iron Trapdoor with the recipe, so it's definitely an issue with this mod

 

image

Bannta , May 22nd at 11:46 PM
@Timbrage: I've found an issue, the recipe for the Iron Trapdoor doesn't work with this mod, the metal plaque recipe overrides. I've deactivated the mod and I could create an Iron Trapdoor with the recipe, so it's definitely an issue with this mod

1222.0.2 

  • hot fixes - This is a recipe matching conflict. The metal plaque recipe is likely also a 2×2 or shapeless involving iron plates and nails, so when you try to fill the trapdoor recipe, CanMake or Matches finds the plaque recipe first and fills that instead.

 

Thanks, Timbrage, for bringing that issue up!

Bannta , May 21st at 11:17 PM (modified May 21st at 11:19 PM)

 

release 1222.0.1

  • Issue: It appears that the open chest inventory was not being included in the validation of items on hand to construct a given item
    • Added open chest inventory for validation overlay(red)
    • Added tool if in the crafting grid overlay(red)
  • hardening the tooptip class - Removed SlideshowStack_Transpiler entirely — the SlideshowItemstackTextComponent patch was injecting an UpdateIndex call with a possibly wrong field reference, causing out-of-bounds array access during render. Scroll cycling on ingredient display stacks is removed. 
  • Cleanup in the tooptip class: Slideshow_Transpiler simplified and all isGrid branching removed since it's grid-only now. UpdateIndex simplified, removed the SlideshowItemstackTextComponent branch.
  • moving to my revision numbering system <compliled agaisn't game version no periods  1222>.<rc branch  0>.<mod release iteration 1> 1222.0.1

 

Double-checking my portcullis mods new lamp post recipes, and I noticed it wasn't scanning the open chest. I'm too lazy to hand-place 30 block item variations 

Banderi, May 20th at 11:55 PM (modified May 20th at 11:56 PM)

Hey there! I'm getting a crash mentioning this mod whenever I try to get recipes with 'H' over a blister steel ingot, I'm not sure if it's due to other mods but here's my log for it:

Crash Report
21.5.2026 01:26:25 [Fatal] Game Version: v1.22.1 (Stable)
5/21/2026 1:26:25: Critical error occurred
Loaded Mods: aeautosmithing@1.0.0, angelbelt@1.7.0, awearablelight@1.1.6, darkvision@1.3.1, flexibletools@3.6.0, foundrymod@1.0.0, hangingvessels@1.1.1, instantpickup@1.1.4, jsonpatcheslib@1.5.2, millwright@1.3.3, molds@0.3.0, morefuel@1.2.0, overhaullib@2.0.5, prospecttogether@2.2.1, pulverizegrindables@1.1.0, shelfobsessed@2.1.0, meapineapplefatcandle@1.0.1, vintageengineering@0.5.4, game@1.22.1, vsimgui@1.2.2, waterunderfarmland122@1.1.0, aculinaryartillery@2.0.0-dev.15, ancienttoolsresinharvest@1.0.0, animalcages@5.0.0, fishbreeding@1.0.5, attackfish@1.0.0, egocaribautomapmarkers@5.0.2, autolootreforged@1.0.6, bettererprospecting@3.2.3, blocksoverlay@4.10.4, botaniastory@0.1.3, brightermoonlight@1.1.0, butchering@1.13.1, cancrops@0.5.0, carryon@1.14.0, commonlib@2.8.0, configlib@1.11.1, configureeverything@3.0.0, danatweaks@4.0.0, farmlanddropssoilupdated@1.22.0, fillmybloomery@1.0.2, firewoodgivessticks@1.0.2, foodshelves@3.0.1, geologymap@1.1.0, harptechfix122@1.0.0, hudclockpatch@4.2.1, improvedhandbookrecipesfork@1.0.0, itempickupnotifier@2.2.0, medievalexpansionpatch@1.3.6, metalunittooltip@1.0.0, mobsradar@3.0.0, nbcartographer@2.3.0, panningmachine@1.0.9, particlesplus@2.5.8, petai@5.0.1, playermodellib@1.16.4, realsmoke@1.2.0, resinglue@0.1.0, RotatingMinimap@1.0.0, scarecrow@1.8.0, shearsrebalanced@1.0.0, slapalabelonit@1.0.0, tstools@3.1.2, creative@1.22.1, vsextbedrespawn@1.22.0, survival@1.22.1, workbenchexpansionpatch@1.1.1, autoconfiglib@2.0.10, expandedfoods@2.0.0-dev.8, extraoverlaysm4@1.7.0, koboldrdx@1.4.0, storagetweaks@1.2.5, wolftaming@5.0.1, zrustdrops@2.1.0
Involved Harmony IDs: improvedhandbookrecipes
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Vintagestory.API.Client.SlideshowItemstackTextComponent.RenderInteractiveElements_Patch3(SlideshowItemstackTextComponent this, Single deltaTime, Double renderX, Double renderY, Double renderZ)
at Vintagestory.API.Client.GuiElementRichtext.RenderInteractiveElements(Single deltaTime) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\GuiElementRichtext.cs:line 476
at Vintagestory.API.Client.GuiComposer.Render(Single deltaTime) in VintagestoryApi\Client\UI\GuiComposer.cs:line 737
at Vintagestory.API.Client.GuiDialog.OnRenderGUI(Single deltaTime) in VintagestoryApi\Client\UI\Dialog\GuiDialog.cs:line 396
at Vintagestory.GameContent.GuiDialogHandbook.OnRenderGUI_Patch3(GuiDialogHandbook this, Single deltaTime)
at Vintagestory.Client.NoObf.GuiManager.OnRenderFrameGUI(Single deltaTime) in VintagestoryLib\Client\Systems\Gui\GuiManager.cs:line 309
at Vintagestory.Client.NoObf.ClientMain.RenderToDefaultFramebuffer(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 1048
at Vintagestory.Client.GuiScreenRunningGame.RenderToDefaultFramebuffer(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 251
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 783
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 686
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Crash written to file at "C:\Users\Banderi\AppData\Roaming\VintagestoryData\Logs\client-crash.log"

 

Bannta , May 21st at 1:51 AM (modified May 21st at 1:58 AM)
@Banderi: Hey there! I'm getting a crash mentioning this mod whenever I try to get recipes with 'H' over a blister steel ingot, I'm not sure if it's due to other mods but here's my log for it: Crash Report 21.5.2026 01:26:25 [Fatal] Game Version: v1.22.1 (Stable)5/
  • foundrymod 1.16.1 gorssely outdated, there are reports it is broken in 1.22 - however that is not causing the conflict crash.
  • vintageengineering@0.5.4<!--TgQPHd|[]--><!--TgQPHd|[]-->: Retained from your last list, its complex blueprints heavily interact with handbook recipes.
    • crashes on Blister Steel, not even with crafting window up
        • crash when improvedhandbookrecipesfork is removed from the game
        • Same crash, same line 204, same vintageengineering@0.5.4. This is 100% a Vintage Engineering bug. It has nothing to do with your mod at all.
  • I'll go and send my crash logs over to Vintage Engineering Mod.

 

  • Can you please remove my mod, run the game and open the handbook and click on blister Steel ingot to comfirm the issue is what I'm getting? 

 

ShygalKacey, May 18th at 4:06 PM

Does this only work for recipes that conflict with vanilla item crafting? I'm attempting to use this mod with Shadehouse and Purposeful Storage installed and the mod isn't able to see the recipe conflict between Gear Rack and Shade Door.

Bannta , May 18th at 7:57 PM (modified May 18th at 7:57 PM)
@ShygalKacey: Does this only work for recipes that conflict with vanilla item crafting? I'm attempting to use this mod with Shadehouse and Purposeful Storage installed and the mod isn't able to see the recipe conflict between Gear Rack and Shade Door.

I'll check it out 

 

a conflict would be as an Example: axe + firewood = titan class nuclear missile(example mod) & axe + firewood = 2 Sticks(firewood to stick mod), at that point the "Next" Button should be selectable 

ShygalKacey, May 18th at 8:18 PM
@Bannta: I'll check it out a conflict would be as an Example: axe + firewood = titan class nuclear missile(example mod) & axe + firewood = 2 Sticks(firewood to stick mod), at that point the "Next" Button should be selectable

Yee. The two items I'm referring to have the same recipe (1 plank in the top left & middle slots, 1 stick in the middle left & middle-middle slots, and 1 plank in the bottom left & bottom middle slots.)

The_Revisionist, May 17th at 12:50 PM

What is the difference between "=" and "+"? They both add ingredients for one more item to the crafting grid.

Bannta , May 17th at 9:16 PM
@The_Revisionist: What is the difference between "=" and "+"? They both add ingredients for one more item to the crafting grid.

= Fill best match. Just tries to fill it with whatever you have in the inventory that are open near you

+ technically should fill what you stop the ingredients on during its cycling

Aceolu, May 15th at 6:39 PM

I am using toolsmith and a firewood to stick mod, and both of them have a recipie of knife over firewood, one for sticks, and one for a crude handle. The cycle next button does not appear despite this being a clear conflict of recipes.

Bannta , May 18th at 2:06 AM (modified May 18th at 2:06 AM)
@Aceolu: I am using toolsmith and a firewood to stick mod, and both of them have a recipie of knife over firewood, one for sticks, and one for a crude handle. The cycle next button does not appear despite this being a clear conflict of recipes.

All the recipes are unique

knife + handle = Stick (toolsmith)

knife + firewood = crude handle (toolsmith)

axe + firewood = Sticks (firewood to stick mod)

All the recipes are unique, a conflict would be Example: axe + firewood = crude handle(toolsmith) & axe + firewood = (firewood to stick mod)Sticks, at that point the "Next" Button should be selectable 

Bannta , May 13th at 5:28 AM (modified May 15th at 3:25 AM)

Tasks to do:

  • Storage Tweaks - compatibility check - inventory shortcuts from Storage Tweaks disappear 
    • Fix in Storage Tweaks -1.2.3 Release
  • player inventory lib - compatibility check -  issue it seems that the mod struggles with recipes that have multiple variants of the same material like plates in lantern or wood logs in axle recipes
    • This one might be too much work because it reworks related GUI dialogs (moving the foothold for buttons) and replaces the inventory system. There is a source it might be too foreign to make an extra container search that has it's own dynamic tree structure. 
Trojan96, May 14th at 9:23 PM (modified May 14th at 9:23 PM)
@Bannta: Tasks to do: Storage Tweaks - compatibility check - inventory shortcuts from Storage Tweaks disappear Fix in Storage Tweaks -1.2.3 Release player inventory lib - compatibility check - issue it seems that the mod struggles with recipes that have multiple v

Bannta I'm the author of Storage Tweaks. I just tested with the latest version of my mod and it seams to work now. I've made some changes to get player inventory lib to work which seams to also have fixed compatibility with this mod. I'll upload the version soon. It'll be in 1.2.3 of my mod.

Trojan96, May 15th at 12:10 AM (modified May 15th at 12:11 AM)
@Bannta: Tasks to do: Storage Tweaks - compatibility check - inventory shortcuts from Storage Tweaks disappear Fix in Storage Tweaks -1.2.3 Release player inventory lib - compatibility check - issue it seems that the mod struggles with recipes that have multiple v

So I actually found a fix. For some reason my AddDialogTitleBar function/patch never got run for the inventory gui with your mod. But if I also added a postfix patch for ComposeSurvivalInvDialog then AddDialogTitleBar got run. So now I'm just patching both, ComposeSurvivalInvDialog being the fallback but I'm never adding my buttons in ComposeSurvivalInvDialog because AddDialogTitleBar runs first and works. It's weird.

Seeing_piink, May 12th at 10:09 PM

sometimes the next button doesnt work 

Example: im trying to copnvert plain cloth into linen (normal) and its conflicting with the item linen headband 


wont let me cycle 🥹

Bannta , May 13th at 5:28 AM
@Seeing_piink: sometimes the next button doesnt work Example: im trying to copnvert plain cloth into linen (normal) and its conflicting with the item linen headband wont let me cycle 🥹

I'm not seeing a convert plain cloth into linen (normal)

I see plain cloth in the item linen headband 

----

There should be a plain cloth + shears to cut it back into linen, that would be nice.

Bannta , May 12th at 8:32 PM

Tasks to do:

  • Storage Tweaks - compatibility check - inventory shortcuts from Storage Tweaks disappear 
    • I used the bookmark mod; you could try that as a band-aid until I get on this. 
  • player inventory lib - compatibility check -  issue it seems that the mod struggles with recipes that have multiple variants of the same material like plates in lantern or wood logs in axle recipes
Timbrage, May 12th at 7:10 PM

Sadly this mod is incompatible with Storage Tweaks mod, the inventory shortcuts from Storage Tweaks disappear

Vinni_Pukh, May 12th at 5:24 PM

When player inventory lib is installed the buttons don't show up in my handbook, or there's a weird overlay issue of some kind. Definitely seems to have some issues

darklord1622, May 3rd at 12:43 PM

i found another issue it seems that the mod struggles with recipes that have multiple variants of the same material like plates in lantern or wood logs in axle recipes

Bannta , May 5th at 4:12 AM
@darklord1622: what do you mean exactly ?

 gold lantern, etc... however, I went through everything, so I need you to help me find the conflict or provide your mod list.

Can you do a find for "improvedhandbookrecipesfork" errors in your client and or server logs. If you can't find any errors than copy and paste your mod list... You can get that in your logs as well, check both client-main and server-main.log.

I can match what you have and check for any conflicts or try to reproduce. 

Thanks 

azzava, May 2nd at 8:11 AM

@ElTioGaara 

In my case it works in a way :

When I press H ( when inventory is closed ) i have original handbook

When I press H ( when inventory is opened ) i have improved handbook

So maybe this the issue....

Bannta , May 2nd at 4:25 PM
@azzava: @ElTioGaara In my case it works in a way : When I press H ( when inventory is closed ) i have original handbook When I press H ( when inventory is opened ) i have improved handbook So maybe this the issue....

When I press H ( when inventory is closed ), I have the original handbook - yes, this is the normal reaction. The improved needs that the crafting window be open. It's using that as a reference to determine some of the functions.

When I press H ( when inventory is opened ), I have the improved handbook - Yes, this is the only state the improved handbook should appear. The inventory crafting GUI must be open.

 

Thank you for responding quickly.  

Outwise, May 11th at 7:54 AM
@Bannta: When I press H ( when inventory is closed ), I have the original handbook - yes, this is the normal reaction. The improved needs that the crafting window be open. It's using that as a reference to determine some of the functions. When I press H ( when inv

Makes sense! I think all these kinds of mods require the player inventory (and crafting grid) to be open to work - but it might make for a better user experience if pressing H when player inventory is closed, opens the inventory then the improved handbook! If people are using your improved handbook mod, it's because they want YOURS, not the vanilla.🏆
Needing to pop open the player inventory first is an accepted part of any of these handbook->craft mods, automating it makes for a cleaner UX.

ElTioGaara, May 1st at 4:00 PM

It doesn't seem to work on version 1.22.1. I downloaded it today and when I opened the game, it showed nothing, just the normal handbook, without any of the features your mod adds.

Bannta , May 1st at 9:09 PM (modified May 2nd at 5:45 AM)
@ElTioGaara: It doesn't seem to work on version 1.22.1. I downloaded it today and when I opened the game, it showed nothing, just the normal handbook, without any of the features your mod adds.

not able to reproduce. Can you do a find for "improvedhandbookrecipesfork" errors in your client and or server logs. If you can't find any errors than copy and paste your mod list... you can get that in your logs as well. I can match what you have and check for any conflicts. 

 

Reason why the helper will not work: 

  1. In creative or spectator 
  2. Do not have the crafting/inventory GUI up. Got to be able to build in order for the button to appear. 

 

Example of a mods list: This is what I'm currently running at the moment:

example mod list found in your sever-main.log
1.5.2026 17:01:29 [Notification] Mods, sorted by dependency: capreolinae, catchledge, chiseltools, floralzonescaperegion, floralzonescaribbeanregion, floralzonescentralaustralianregion, floralzonescosmopolitanregion, floralzoneseastasiaticregion, floralzonesmediterraneanregion, floralzonesneozeylandicregion, nailsmold, primitivesurvival, sortablestorage, translocatorengineeringredux, undertangledboughs, vanillapluspatch, game, vsimgui, amuletbedspawn, autosmithmod, barkcanoe, betterruins, bettertraders, carryon, climbmountain, configlib, damagenumbers, extrainfo, handbookbookmarkbutton, hazmatsuit, improvedhandbookrecipesfork, madcrowglider, mapteleporter, noofflinecontainerfoodspoil, orekiwoofsbeehives, placeonslabs, portcullis, realisticwater, realsmoke, itemrarity, statushudcont, stepupcontinued, tabfix, thegrandrift, vigor, vsassetinspector, creative, vsroofing, survival, wateringcanfill, watersheds, xlibfork, autoconfiglib, realsmokeqppatch, terrainslabs, xskillsfork, xskillsgilded
ElTioGaara, May 2nd at 6:52 AM
@ElTioGaara: It doesn't seem to work on version 1.22.1. I downloaded it today and when I opened the game, it showed nothing, just the normal handbook, without any of the features your mod adds.

my mod list: 

AWearableLight-v1.1.7.zip, improvedhandbookrecipesfork-1.22.01.zip, configlib_1.12.0.zip, HudClock_4.2.3_VS1.22.1.zip, FlexibleTools-3.6.1.zip, th3dungeon_0.5.0.zip, XLib Fork v1.0.2.zip, xSkills Fork v1.0.11.zip, bettererprospecting_3.2.3.zip, foodshelves_3.0.1.zip, animalcages_v5.0.0.zip, StoneQuarryRepacked.3.6.2.zip, TallowCandle_1.0.1.zip, HelveHammerExtentsions.zip, TrashBinned_0.4.2.zip, farseer_1.4.0.zip, lunchbox_1.3.2.zip, vsimgui_1.2.2.zip, EternalS-Backpacks-3.0.1.zip, justthepepper-2.0.0.zip, CarryOn-1.22.0_v1.14.0.zip, coralcarbonate.zip, particlesplus-2.5.8.zip, CommonLibForked_VS1.22.0_net10_v2.8.1.zip, jsonpatcheslib_1.5.1.zip, stonebakeoven_1.2.2.zip, autoconfiglib_2.0.10.zip, unhallowedpatches_v2.0.1.zip, storagecontroller 1.2.2.zip, FullDrop_1.0.4.zip, ExtraInfo-v2.0.0.zip, primitivesurvival_5.0.5.zip, overhaullib_2.0.3.zip, projectiletracker_1.0.7.zip, infinitumpickupmod_1.2.9.zip, BetterSmelting_0.3.0.zip, buzzwords_1.8.2.zip, draconis_1.4.0-pre.2.zip, zoombuttonreborn_2.0.2.zip, Plainsandvalleys-v1.0.13.zip, jaunt_3.0.0-rc.3.zip, FotSA-Machairodontinae-v1.1.9.zip, FotSA-Caninae-v1.1.5.zip, FotSA-Capreolinae-v2.0.12.zip, AttributeRenderingLibrary-v3.0.0.zip, rivers_5.0.0.zip, sortablestorage_3.0.0.zip, BetterRuinsv0.6.0.zip, Toolsmith Fork v1.2.20.zip, lakulsenhancedvanillatrees.zip, biggerpocketsv1.0.6.zip, betterentitytooltip_1.1.0.zip, CrimsonsUpgradableStorage_v1.1.7.zip, Th3DungonTopEntrance_0.4.2.zip

that's al mods i have intslled, hope it helps :D

OS: Kubuntu 26.04 LTS
KDE Plasma: 6.6.4
KDE Frameworks: 6.24.0
Qt: 6.10.2
kernel: 7.0.0-14-generic (64 bits)
Gaphic Platform: Wayland
AMD Ryzen 5 5600X
32 GiB of RAM

AMD Radeon RX 6650 XT

darklord1622, Apr 26th at 10:04 PM

@bannta it is really random and sometimes the same item would return to normal after closing and opening the handbook so it isn't specific to one item 

Bannta , Apr 26th at 7:41 PM

"Issue that the buttons are sometimes blacked out, but they still work?" - Anyone else seeing this issue? may help me narrow in on the issue that darklord1622

 

Thanks!

darklord1622, Apr 26th at 3:50 PM (modified Apr 26th at 3:56 PM)

my game crashed when i tried openning the handbook on a stick

 

Crash Report
Game Version: v1.22.0 (Stable)
4/26/2026 6:46:00 PM: Critical error occurred
Loaded Mods: tadmorecharcoal@1.0.0, angelbelt@1.7.0, backpackpackplusfg@1.4.0, bulkmolds@1.1.2, craftingjonas@1.0.6, craftablemetalparts@1.0.0, fasterleatherandfoodpreservation@1.0.0, flexibletools@3.6.0, fragilecharcoal@0.0.1, fuelbriquettes@1.0.1, instantpickup@1.1.4, interestingoregen@2.3.4, millwright@1.3.3, oreandfoodstacksize@1.0.0, oresaplentyaddon@1.3.0, pigfeed@1.0.9, pinelogsfortannin@1.0.0, potashfoodandfarming@1.0.0, rtrullywoods@0.1.24, scythefix@1.3.1, stacksizeandpitchanges@1.0.0, stonequarryrepckfipil@3.6.1, swifttime@1.1.3, usefulshears@1.0.0, vintageengineering@0.5.4, game@1.22.0, vsimgui@1.2.2, waterunderfarmland122@1.1.0, animalcages@5.0.0, attributerenderinglibrary@3.1.0, egocaribautomapmarkers@5.0.1, betterentitytooltip@1.1.0, blocksoverlay@4.10.3, buildingwands@1.0.2, butchering@1.13.1, cokeoven@1.0.1, composter@1.2.2, configlib@1.11.1, craftableresin@1.0.0, craftablesticksmodern@1.0.0, upgradablestorage@1.1.7, danatweaks@4.0.0, dryingspeedoverhaul@1.1.2, electricalprogressivecore@3.0.0, elkvariants@3.6.2, tackandequipment@1.0.0, extrainfo@2.0.0, fastpouring@1.0.1, fixperishrate@1.0.1, genelib@3.0.1, grassiergrass@1.0.0, hudclockpatch@4.2.1, improvedhandbookrecipesfork@1.0.0, ithaniacannedgoods@2.0.0, jaunt@3.0.0-rc.3, kilnspreading@1.0.2, knapster@4.0.0, metalpots@1.7.2, mobsradar@3.0.0, noholdfruitpress@0.1.3, optitime@1.5.0, panningmachine@1.0.9, particlesplus@2.5.8, reedbuff@1.3.0, resonatorrangeincrease@1.0.1, sheepfeed@1.0.0, stepupadvanced@1.3.0, stonebakeoven@1.2.2, tradermult@1.0.0, traitacquirermoddedclasses@0.9.11, creative@1.22.0, survival@1.22.0, xlibfork@1.0.1, bettersmelting@0.3.0, draconis@1.4.0-pre.2, electricalprogressivebasics@3.0.0, equus@1.3.0-rc.1, pegasus@1.1.0-pre.4, scoopofjammod@1.2.0, sheepfeedcompat@1.0.0, xinvtweaksfork@1.9.0, xskillsfork@1.0.5, electricalprogressiveindustry@0.6.1, electricalprogressiveqol@3.0.0, electricalprogressivetransport@1.0.0, xskillsgilded@1.3.19
Involved Harmony IDs: vintageengineering, attributerenderinglibrary, improvedhandbookrecipes, extrainfo, electricalprogressive.handbook.patches
System.ArgumentException: Attempted to resolve the recipe ingredient wildcard Item game:axe-felling-* but there are no such items/blocks!
at Vintagestory.API.Client.SlideshowGridRecipeTextComponent.ResolveIngredients(Dictionary`2& unnamedIngredients, Queue`1 halfResolvedRecipes, GridRecipe toTestRecipe, Boolean& allResolved, ItemStack[] allStacks, Random fixedRand) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\Richtext\SlideshowGridRecipeTextComponent.cs:line 409
at Vintagestory.API.Client.SlideshowGridRecipeTextComponent.ResolveRecipes(List`1 resolvedGridRecipes, GridRecipe[] gridRecipes, ItemStack[] allStacks, Random fixedRand) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\Richtext\SlideshowGridRecipeTextComponent.cs:line 371
at Vintagestory.API.Client.SlideshowGridRecipeTextComponent..ctor(ICoreClientAPI api, GridRecipe[] gridRecipes, Double size, EnumFloat floatType, Action`1 onStackClicked, ItemStack[] allStacks) in VintagestoryApi\Client\UI\Elements\Impl\Interactive\Text\Richtext\SlideshowGridRecipeTextComponent.cs:line 82
at Vintagestory.GameContent.CollectibleBehaviorHandbookTextAndExtraInfo.addCreatedByInfo_Patch4(CollectibleBehaviorHandbookTextAndExtraInfo this, ICoreClientAPI capi, ItemStack[] allStacks, ActionConsumable`1 openDetailPageFor, ItemStack stack, List`1 components, Single marginTop, List`1 containers, List`1 fuels, List`1 molds, List`1 anvils, Boolean haveText)
at Vintagestory.GameContent.CollectibleBehaviorHandbookTextAndExtraInfo.GetHandbookInfo_Patch3(CollectibleBehaviorHandbookTextAndExtraInfo this, ItemSlot inSlot, ICoreClientAPI capi, ItemStack[] allStacks, ActionConsumable`1 openDetailPageFor)
at Vintagestory.GameContent.GuiHandbookItemStackPage.GetPageText(ICoreClientAPI capi, ItemStack[] allStacks, ActionConsumable`1 openDetailPageFor) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 119
at Vintagestory.GameContent.GuiHandbookItemStackPage.ComposePage(GuiComposer detailViewGui, ElementBounds textBounds, ItemStack[] allstacks, ActionConsumable`1 openDetailPageFor) in VSSurvivalMod\Systems\Handbook\Gui\GuiHandbookItemStackPage.cs:line 113
at Vintagestory.GameContent.ModSystemSurvivalHandbook.onComposePage(GuiHandbookPage page, GuiComposer detailViewGui, ElementBounds textBounds, ActionConsumable`1 openDetailPageFor) in VSSurvivalMod\Systems\Handbook\SurvivalHandbook.cs:line 135
at Vintagestory.GameContent.GuiDialogHandbook.initDetailGui() in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 260
at Vintagestory.GameContent.GuiDialogHandbook.OpenDetailPageFor(String pageCode) in VSSurvivalMod\Systems\Handbook\Gui\GuiDialogHandbook.cs:line 329
at Vintagestory.GameContent.ModSystemSurvivalHandbook.OnSurvivalHandbookHotkey_Patch1(ModSystemSurvivalHandbook this, KeyCombination key)
at Vintagestory.Client.HotkeyManager.TriggerHotKey(KeyEvent keyEventargs, IWorldAccessor world, IPlayer player, Boolean allowCharacterControls, Boolean isGlobal, Boolean fallBack, Boolean keyup) in VintagestoryLib\Client\HotkeyManager.cs:line 424
at Vintagestory.Client.HotkeyManager.TriggerHotKey(KeyEvent keyEventargs, IWorldAccessor world, IPlayer player, Boolean allowCharacterControls, Boolean keyUp) in VintagestoryLib\Client\HotkeyManager.cs:line 394
at Vintagestory.Client.NoObf.ClientMain.OnKeyDown(KeyEvent args) in VintagestoryLib\Client\ClientMain.cs:line 1876
at Vintagestory.Client.GuiScreenRunningGame.OnKeyDown(KeyEvent args) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 322
at Vintagestory.Client.ScreenManager.OnKeyDown(KeyEvent e) in VintagestoryLib\Client\ScreenManager.cs:line 902
at Vintagestory.Client.NoObf.ClientPlatformWindows.game_KeyDown(KeyboardKeyEventArgs e) in VintagestoryLib\Client\ClientPlatform\Input.cs:line 253
at OpenTK.Windowing.Desktop.NativeWindow.OnKeyDown(KeyboardKeyEventArgs e)
at OpenTK.Windowing.Desktop.NativeWindow.KeyCallback(Window* window, Keys key, Int32 scancode, InputAction action, KeyModifiers mods)
--- End of stack trace from previous location ---
at OpenTK.Windowing.Desktop.NativeWindow.RethrowCallbackExceptionsIfNeeded()
at OpenTK.Windowing.Desktop.NativeWindow.ProcessWindowEvents(Boolean waitForEvents)
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 354
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 131
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95

edit: nevermind i fixed it but there is still the issue that the buttons are sometimes blacked out but they still work

twisterr, Apr 25th at 11:43 AM

does this work for 21.6? if not can u make an update for it

Rauthr, Apr 24th at 10:11 AM

BLESS

Bannta , Apr 24th at 12:15 PM
@Rauthr: BLESS

thanks

Bannta , Apr 24th at 1:18 AM

lol, I left this in Draft... Enjoy, it's one of the mods I can't live without.