From 383bc5a9047f574ce973482605dfd31b4871122c Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Mon, 9 Feb 2015 17:36:02 -0800 Subject: [PATCH] Fix crafting algo. to avoid cycles #47 * Adjust recipes in Thermal Expansion to likewise avoid cycles --- .../4.0.0B8-23/mod-version.cg | 64 +++++++++---------- src/scripts/models/crafting_plan.coffee | 12 +++- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/src/data/thermal_expansion/4.0.0B8-23/mod-version.cg b/src/data/thermal_expansion/4.0.0B8-23/mod-version.cg index 34baac4f6..3f5b7c953 100644 --- a/src/data/thermal_expansion/4.0.0B8-23/mod-version.cg +++ b/src/data/thermal_expansion/4.0.0B8-23/mod-version.cg @@ -278,14 +278,6 @@ item: Copper Gear tools: Crafting Table item: Copper Ingot - recipe: - input: Pulverized Copper, furnace fuel - pattern: .0. ... .1. - tools: Furnace - recipe: - input: Pulverized Copper - pattern: ... .0. ... - tools: Redstone Furnace recipe: input: Copper Ore, furnace fuel pattern: .0. ... .1. @@ -294,6 +286,14 @@ item: Copper Ingot input: Copper Ore pattern: ... .0. ... tools: Redstone Furnace + recipe: + input: Pulverized Copper, furnace fuel + pattern: .0. ... .1. + tools: Furnace + recipe: + input: Pulverized Copper + pattern: ... .0. ... + tools: Redstone Furnace recipe: extras: Gold Ingot input: Cinnabar, Copper Ore @@ -1089,14 +1089,6 @@ item: Lead Gear tools: Crafting Table item: Lead Ingot - recipe: - input: Pulverized Lead, furnace fuel - pattern: .0. ... .1. - tools: Furnace - recipe: - input: Pulverized Lead - pattern: ... .0. ... - tools: Redstone Furnace recipe: input: Lead Ore, furnace fuel pattern: .0. ... .1. @@ -1105,6 +1097,14 @@ item: Lead Ingot input: Lead Ore pattern: ... .0. ... tools: Redstone Furnace + recipe: + input: Pulverized Lead, furnace fuel + pattern: .0. ... .1. + tools: Furnace + recipe: + input: Pulverized Lead + pattern: ... .0. ... + tools: Redstone Furnace recipe: extras: Silver Ingot input: Cinnabar, Lead Ore @@ -2031,14 +2031,6 @@ item: Silver Gear tools: Crafting Table item: Silver Ingot - recipe: - input: Pulverized Silver, furnace fuel - pattern: .0. ... .1. - tools: Furnace - recipe: - input: Pulverized Silver - pattern: ... .0. ... - tools: Redstone Furnace recipe: input: Silver Ore, furnace fuel pattern: .0. ... .1. @@ -2047,6 +2039,14 @@ item: Silver Ingot input: Silver Ore pattern: ... .0. ... tools: Redstone Furnace + recipe: + input: Pulverized Silver, furnace fuel + pattern: .0. ... .1. + tools: Furnace + recipe: + input: Pulverized Silver + pattern: ... .0. ... + tools: Redstone Furnace recipe: extras: Lead Ingot input: Cinnabar, Silver Ore @@ -2149,14 +2149,6 @@ item: Tin Gear tools: Crafting Table item: Tin Ingot - recipe: - input: Pulverized Tin, furnace fuel - pattern: .0. ... .1. - tools: Furnace - recipe: - input: Pulverized Tin - pattern: ... .0. ... - tools: Redstone Furnace recipe: input: Tin Ore, furnace fuel pattern: .0. ... .1. @@ -2165,6 +2157,14 @@ item: Tin Ingot input: Tin Ore pattern: ... .0. ... tools: Redstone Furnace + recipe: + input: Pulverized Tin, furnace fuel + pattern: .0. ... .1. + tools: Furnace + recipe: + input: Pulverized Tin + pattern: ... .0. ... + tools: Redstone Furnace recipe: extras: Iron Ingot input: Cinnabar, Tin Ore diff --git a/src/scripts/models/crafting_plan.coffee b/src/scripts/models/crafting_plan.coffee index 5d5dce99a..e59651dda 100644 --- a/src/scripts/models/crafting_plan.coffee +++ b/src/scripts/models/crafting_plan.coffee @@ -47,9 +47,11 @@ module.exports = class CraftingPlan extends BaseModel @result.addInventory @have @steps = {} + @_reservedSteps = {} @want.each (stack)=> @_findSteps stack.slug @need.add stack.slug, stack.quantity + @_reservedSteps = null @steps = _.values @steps @_resolveNeeds() @@ -89,7 +91,6 @@ module.exports = class CraftingPlan extends BaseModel # Private Methods ############################################################################## _addStep: (recipe)-> - return if @_hasStep recipe.slug logger.verbose "adding step: #{recipe.slug}" @steps[recipe.slug] = recipe:recipe @@ -97,6 +98,7 @@ module.exports = class CraftingPlan extends BaseModel return item.getPrimaryRecipe() _findSteps: (slug)-> + logger.debug "finding steps for #{slug}" item = @modPack.findItem slug return unless item? return unless item.isCraftable @@ -109,13 +111,19 @@ module.exports = class CraftingPlan extends BaseModel if not @_hasStep toolStack.slug @_findSteps toolStack.slug + return if @_hasStep item.slug + logger.debug "reserving: #{item.slug}" + @_reservedSteps[item.slug] = recipe + for inputStack in recipe.input @_findSteps inputStack.slug @_addStep recipe _hasStep: (slug)-> - return @steps[slug]? + return true if @steps[slug]? + return true if @_reservedSteps[slug]? + return false _removeExtraSteps: -> result = (step for step in @steps when step.multiplier > 0)