Refined Storage

Refined Storage

115M Downloads

Performance issue/ Server Crash with exporter and autocraft upgrade

Closed this issue ยท 6 comments

commented

Describe the bug

With the 5 second timeout added to large crafts I found if you add an exporter to a chest to export a large craft item and then add the auto crafting upgrade refined storage would start working on the large craft and bypass the 5 second time out for calculating large crafts. This would lag the server and cause moments of non-responsiveness.

The large craft being used for this was Modern Industrialization processing unit. Server now reports a ServerHangWatchdog in the crash log when a player attempts to join the server. If no player attempts to join the server it will remain online passing memory leak tests. I am unsure if the server crash is related to the auto crafting exporter or if these are two different issues.

Crash on login was fixed by deleting this exporter using NBTExplorer

The crash logs are from beta.10 (native RS2 mod with current ATM10 build) and beta.11 swapped in
crash-2025-08-25_20.45.50-server.txt
crash-2025-08-25_20.54.53-server.txt

Image

How can we reproduce this bug or crash?

  1. Setup a chest with an exporter
  2. Set export to a large craft item
  3. Add auto crafting upgrade to exporter.

What Minecraft version is this happening on?

Minecraft 1.21.1

What NeoForge or Fabric version is this happening on?

21.1.203

What Refined Storage version is this happening on?

refinedstorage-neoforge-2.0.0-beta.10, refinedstorage-neoforge-2.0.0-beta.11

What modpack and modpack version, if any, are you using?

All the Mods 10-4.10

Relevant log output

        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculate(CraftingTree.java:69) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:182) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:153) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.tryCalculateChild(CraftingTree.java:136) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateIngredient(CraftingTree.java:110) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculate(CraftingTree.java:76) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:182) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:153) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.tryCalculateChild(CraftingTree.java:136) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateIngredient(CraftingTree.java:110) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculate(CraftingTree.java:76) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:182) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateChild(CraftingTree.java:153) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.tryCalculateChild(CraftingTree.java:136) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculateIngredient(CraftingTree.java:110) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingTree.calculate(CraftingTree.java:76) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.calculation.CraftingCalculatorImpl.calculate(CraftingCalculatorImpl.java:42) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.craftability.IsCraftableCraftingCalculatorListener.isCraftable(IsCraftableCraftingCalculatorListener.java:35) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.autocrafting.craftability.IsCraftableCraftingCalculatorListener.binarySearchMaxAmount(IsCraftableCraftingCalculatorListener.java:50) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.autocrafting.AutocraftingNetworkComponentImpl.getMaxAmountSync(AutocraftingNetworkComponentImpl.java:153) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.autocrafting.AutocraftingNetworkComponentImpl.ensureTask(AutocraftingNetworkComponentImpl.java:207) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.node.exporter.MissingResourcesListeningExporterTransferStrategy$OnMissingResources.lambda$scheduleAutocrafting$0(MissingResourcesListeningExporterTransferStrategy.java:44) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.node.exporter.MissingResourcesListeningExporterTransferStrategy.transfer(MissingResourcesListeningExporterTransferStrategy.java:25) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.common.exporter.CompositeExporterTransferStrategy.transfer(CompositeExporterTransferStrategy.java:29) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.node.exporter.ExporterNetworkNode$ExporterTask.run(ExporterNetworkNode.java:87) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.node.task.DefaultSchedulingMode.execute(DefaultSchedulingMode.java:11) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.api.network.impl.node.exporter.ExporterNetworkNode.doWork(ExporterNetworkNode.java:41) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer$ThrottledNetworkNodeTicker.tick(UpgradeContainer.java:205) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity.doWork(AbstractBaseNetworkNodeContainerBlockEntity.java:132) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.common.support.network.NetworkNodeBlockEntityTicker.tick(NetworkNodeBlockEntityTicker.java:40) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/com.refinedmods.refinedstorage.common.support.network.NetworkNodeBlockEntityTicker.tick(NetworkNodeBlockEntityTicker.java:16) ~[refinedstorage-neoforge-2.0.0-beta.10.jar%23904!/:?] {re:classloading}
        at TRANSFORMER/[email protected]/net.minecraft.world.level.chunk.LevelChunk$BoundTickingBlockEntity.tick(LevelChunk.java:711) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:polymorph.mixins.json:MixinLevelChunk from mod polymorph,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.world.level.chunk.LevelChunk$RebindableTickingBlockEntityWrapper.tick(LevelChunk.java:788) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:classloading,pl:accesstransformer:B}
        at TRANSFORMER/[email protected]/net.minecraft.world.level.Level.redirect$bgm000$observable$redirectTick(Level.java:2324) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:default,re:computing_frames,pl:accesstransformer:B,xf:fml:default,re:classloading,pl:accesstransformer:B,xf:fml:default,pl:mixin:APP:mffs.mixins.json:LevelMixin from mod mffs,pl:mixin:APP:alltheleaks.mixins.json:main.LevelMixin from mod alltheleaks,pl:mixin:APP:observable.common.json:LevelMixin from mod observable,pl:mixin:APP:xycraft_core.mixins.json:LevelRainShieldMixin from mod xycraft_core,pl:mixin:APP:aether.mixins.json:common.accessor.LevelAccessor from mod aether,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin from mod refurbished_furniture,pl:mixin:APP:kubejs.mixins.json:LevelMixin from mod kubejs,pl:mixin:APP:the_bumblezone-common.mixins.json:world.LevelMixin from mod the_bumblezone,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.world.level.Level.tickBlockEntities(Level.java:565) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:default,re:computing_frames,pl:accesstransformer:B,xf:fml:default,re:classloading,pl:accesstransformer:B,xf:fml:default,pl:mixin:APP:mffs.mixins.json:LevelMixin from mod mffs,pl:mixin:APP:alltheleaks.mixins.json:main.LevelMixin from mod alltheleaks,pl:mixin:APP:observable.common.json:LevelMixin from mod observable,pl:mixin:APP:xycraft_core.mixins.json:LevelRainShieldMixin from mod xycraft_core,pl:mixin:APP:aether.mixins.json:common.accessor.LevelAccessor from mod aether,pl:mixin:APP:refurbished_furniture.common.mixins.json:LevelMixin from mod refurbished_furniture,pl:mixin:APP:kubejs.mixins.json:LevelMixin from mod kubejs,pl:mixin:APP:the_bumblezone-common.mixins.json:world.LevelMixin from mod the_bumblezone,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:428) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:cupboard.mixins.json:ServerAddEntityMixin from mod cupboard,pl:mixin:APP:betterendisland.mixins.json:ServerLevelMixin from mod betterendisland,pl:mixin:APP:modernfix-common.mixins.json:bugfix.chunk_deadlock.ServerLevelMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.cache_strongholds.ServerLevelMixin from mod modernfix,pl:mixin:APP:supplementaries-common.mixins.json:ServerLevelMixin from mod supplementaries,pl:mixin:APP:the_bumblezone-common.mixins.json:world.ServerWorldMixin from mod the_bumblezone,pl:mixin:APP:corgilib-common.mixins.json:MixinServerLevel from mod corgilib,pl:mixin:APP:observable.common.json:ServerLevelMixin from mod observable,pl:mixin:APP:eternal_starlight-common.mixins.json:ServerLevelMixin from mod eternal_starlight,pl:mixin:APP:immersiveengineering.mixins.json:coremods.ServerWorldMixin from mod immersiveengineering,pl:mixin:APP:ohthetreesyoullgrow.mixins.json:MixinServerLevel from mod ohthetreesyoullgrow,pl:mixin:APP:polymorph.mixins.json:MixinServerLevel from mod polymorph,pl:mixin:APP:hyperbox.mixins.json:ServerLevelMixin from mod hyperbox,pl:mixin:APP:ars_elemental.mixins.json:ServerLevelMixin from mod ars_elemental,pl:mixin:APP:aether.mixins.json:common.accessor.ServerLevelAccessor from mod aether,pl:mixin:APP:refurbished_furniture.common.mixins.json:ServerLevelMixin from mod refurbished_furniture,pl:mixin:APP:kubejs.mixins.json:ServerLevelMixin from mod kubejs,pl:mixin:APP:comforts.mixins.json:MixinServerSleepStatus from mod comforts,pl:mixin:APP:betterdeserttemples.mixins.json:ServerLevelMixin from mod betterdeserttemples,pl:mixin:APP:moonlight-common.mixins.json:ServerLevelMixin from mod moonlight,pl:mixin:APP:create.mixins.json:accessor.ServerLevelAccessor from mod create,pl:mixin:APP:betterendisland.mixins.json:EndergeticExpansionMixins from mod betterendisland,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1037) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:alltheleaks.mixins.json:main.MinecraftServerMixin from mod alltheleaks,pl:mixin:APP:ponder-common.mixins.json:accessor.MinecraftServerAccessor from mod ponder,pl:mixin:APP:balm.neoforge.mixins.json:MinecraftServerMixin from mod balm,pl:mixin:APP:iceandfire.mixins.json:MinecraftServerMixin from mod iceandfire,pl:mixin:APP:aether.mixins.json:common.accessor.MinecraftServerAccessor from mod aether,pl:mixin:APP:uranus.mixins.json:MinecraftServerMixin from mod uranus,pl:mixin:APP:kubejs.mixins.json:MinecraftServerMixin from mod kubejs,pl:mixin:APP:regions_unexplored.mixins.json:MinecraftServerMixin from mod regions_unexplored,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin from mod ae2,pl:mixin:APP:extended_industrialization.mixins.json:TeslaNetworkHolderMinecraftServerMixin from mod extended_industrialization,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:317) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,re:classloading,pl:mixin:APP:resourcefulconfig.mixins.json:common.DedicatedServerAccessor from mod resourcefulconfig,pl:mixin:APP:lithostitched.mixins.json:server.DedicatedServerMixin from mod lithostitched,pl:mixin:APP:mixins/common/nochatreports.mixins.json:server.MixinDedicatedServer from mod nochatreports,pl:mixin:APP:tombstone.mixins.json:DedicatedServerMixin from mod tombstone,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:917) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:alltheleaks.mixins.json:main.MinecraftServerMixin from mod alltheleaks,pl:mixin:APP:ponder-common.mixins.json:accessor.MinecraftServerAccessor from mod ponder,pl:mixin:APP:balm.neoforge.mixins.json:MinecraftServerMixin from mod balm,pl:mixin:APP:iceandfire.mixins.json:MinecraftServerMixin from mod iceandfire,pl:mixin:APP:aether.mixins.json:common.accessor.MinecraftServerAccessor from mod aether,pl:mixin:APP:uranus.mixins.json:MinecraftServerMixin from mod uranus,pl:mixin:APP:kubejs.mixins.json:MinecraftServerMixin from mod kubejs,pl:mixin:APP:regions_unexplored.mixins.json:MinecraftServerMixin from mod regions_unexplored,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin from mod ae2,pl:mixin:APP:extended_industrialization.mixins.json:TeslaNetworkHolderMinecraftServerMixin from mod extended_industrialization,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:707) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:alltheleaks.mixins.json:main.MinecraftServerMixin from mod alltheleaks,pl:mixin:APP:ponder-common.mixins.json:accessor.MinecraftServerAccessor from mod ponder,pl:mixin:APP:balm.neoforge.mixins.json:MinecraftServerMixin from mod balm,pl:mixin:APP:iceandfire.mixins.json:MinecraftServerMixin from mod iceandfire,pl:mixin:APP:aether.mixins.json:common.accessor.MinecraftServerAccessor from mod aether,pl:mixin:APP:uranus.mixins.json:MinecraftServerMixin from mod uranus,pl:mixin:APP:kubejs.mixins.json:MinecraftServerMixin from mod kubejs,pl:mixin:APP:regions_unexplored.mixins.json:MinecraftServerMixin from mod regions_unexplored,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin from mod ae2,pl:mixin:APP:extended_industrialization.mixins.json:TeslaNetworkHolderMinecraftServerMixin from mod extended_industrialization,pl:mixin:A}
        at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:267) ~[server-1.21.1-20240808.144430-srg.jar%23563!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftServerMixin from mod modernfix,pl:mixin:APP:modernfix-neoforge.mixins.json:core.MinecraftServerMixin from mod modernfix,pl:mixin:APP:alltheleaks.mixins.json:main.MinecraftServerMixin from mod alltheleaks,pl:mixin:APP:ponder-common.mixins.json:accessor.MinecraftServerAccessor from mod ponder,pl:mixin:APP:balm.neoforge.mixins.json:MinecraftServerMixin from mod balm,pl:mixin:APP:iceandfire.mixins.json:MinecraftServerMixin from mod iceandfire,pl:mixin:APP:aether.mixins.json:common.accessor.MinecraftServerAccessor from mod aether,pl:mixin:APP:uranus.mixins.json:MinecraftServerMixin from mod uranus,pl:mixin:APP:kubejs.mixins.json:MinecraftServerMixin from mod kubejs,pl:mixin:APP:regions_unexplored.mixins.json:MinecraftServerMixin from mod regions_unexplored,pl:mixin:APP:ae2.mixins.json:spatial.MinecraftServerMixin from mod ae2,pl:mixin:APP:extended_industrialization.mixins.json:TeslaNetworkHolderMinecraftServerMixin from mod extended_industrialization,pl:mixin:A}
commented

Report of others bugs

commented

The difference between this bug and #987 is the fact that we should care about the timeout here.
Even with that, it will probably still be slow due to running on the server thread instead of offthread.

commented

Starting task from automation should still be on the server thread I think, because storage contents can change if we offthread it.

Moreover, since 9954935 tasks started from the UI are started on the server thread as well.

commented

Linking #1100 as that is the root issue, autocrafting calculations shouldn't take 10 seconds to begin with.

commented

Fix for this issue will be to pass the cancellation token properly.

commented

#987 is closely related, as it also has to do with automated autocrafting requests.

Fixes we made so far:

  • Pass the cancellation token properly so the timeout is respected for automation too.
  • Only calculate the max amount if there are missing resources, don't do an unbounded max amount check by default.
  • Exit early for crafting plans if there are missing resources from automation.