cannot read recipe subgroup from data.raw

Place to get help with not working mods / modding interface.
scruffyvoltherder
Inserter
Inserter
Posts: 23
Joined: Fri Jun 14, 2024 12:33 am
Contact:

cannot read recipe subgroup from data.raw

Post by scruffyvoltherder »

I'm trying to copy recipes in data-final-fixes.lua, and I need to be able to read the subgroup. None of the recipes in data.raw["recipe"] have the subgroup member present. If I deepcopy a recipe, it still has the original subgroup. I can change the subgroup, but i need to be able to modify the subgroup based on the original name.
User avatar
yaim904
Fast Inserter
Fast Inserter
Posts: 120
Joined: Wed Nov 17, 2021 11:26 pm
Contact:

Re: cannot read recipe subgroup from data.raw

Post by yaim904 »

I think I can help you, but I don't understand the explanation.

Can you give me a code or before and after data?
Solo entiendo español, pero si tu también lo entiendes, escríbeme
:D
Everything i write in English is translated by Deepl.
:D
scruffyvoltherder
Inserter
Inserter
Posts: 23
Joined: Fri Jun 14, 2024 12:33 am
Contact:

Re: cannot read recipe subgroup from data.raw

Post by scruffyvoltherder »

Code: Select all

local function process_recipe(name, recipe)

    if not recipe.results or next(recipe.results) == nil then return end
    if ends_with(name,"_rcomb") then return end


    local new_recipe=table.deepcopy(recipe)
    new_recipe.name=new_recipe.name.."_rcomb"
    new_recipe.hide_from_signal_gui = false
    new_recipe.show_amount_in_title = true
    
    local sg = new_recipe.subgroup
    -- SG is nil here
    
    new_recipe.subgroup="recipe-subgroup"
    --but i can assign it here. 
    
    new_recipe.localised_name=recipe.name

    data.raw.recipe[name.."_rcomb"]=new_recipe
User avatar
yaim904
Fast Inserter
Fast Inserter
Posts: 120
Joined: Wed Nov 17, 2021 11:26 pm
Contact:

Re: cannot read recipe subgroup from data.raw

Post by yaim904 »

scruffyvoltherder wrote: Fri May 16, 2025 12:48 am
I don't see any error in your code, I think you are missing information.

I suggest changing this line

Code: Select all

    new_recipe.localised_name=recipe.name
To the following line, if you want to assign a name to the object depending on the language and not just the name of the object.

Code: Select all

    new_recipe.localised_name={recipe.name}
Documents

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

I think your problem is that you have not created the subgroup.

The following is an example of the code to create a sub-group

Code: Select all

data:extend({
    {
        [ 'type' ] = 'item-subgroup',
        [ 'name' ] = 'recipe-subgroup',
        [ 'group' ] = 'logistics',
        [ 'order' ] = 'a'
    }
})
Recipes can be linked to a subgroup, but the subgroup must be created. The order property will give you the position in which it will appear. Also, note that each subgroup must belong to a group (or you can create your own).

The following is an example of the code of a group

Code: Select all

{
    [ 'type' ] = 'item-group',
    [ 'name' ] = 'logistics',
    [ 'order' ] = 'a',
    [ 'icon' ] = '__base__/graphics/item-group/logistics.png',
    [ 'icon_size' ] = 128
}
This information can be found at

Code: Select all

data.raw["item-group"]
data.raw["item-subgroup"]
13 - copia.png
13 - copia.png (202.35 KiB) Viewed 278 times
--------------------------------------------------------------------------------------
I hope I've been helpful, and if not, I'll look forward to hearing from you.
Solo entiendo español, pero si tu también lo entiendes, escríbeme
:D
Everything i write in English is translated by Deepl.
:D
scruffyvoltherder
Inserter
Inserter
Posts: 23
Joined: Fri Jun 14, 2024 12:33 am
Contact:

Re: cannot read recipe subgroup from data.raw

Post by scruffyvoltherder »

I've created a group and subgroup for my new recipes. I don't have any problem assigning them into that subgroup. The problem though, is that i want to create similarly named subgroups inside my group as the original recipe. However, i can't figure out how to get the original subgroup from the old recipe.

Putting the recipe name in brackets doesn't work, i get unknown key errors
trying

Code: Select all

new_recipe.localised_name={"recipe-name."..recipe.name}
works for some recipes, but not all of them.
Lihop
Burner Inserter
Burner Inserter
Posts: 5
Joined: Tue Jun 03, 2025 7:21 pm
Contact:

Re: cannot read recipe subgroup from data.raw

Post by Lihop »

scruffyvoltherder wrote: Fri May 16, 2025 12:48 am

Code: Select all

local function process_recipe(name, recipe)

    if not recipe.results or next(recipe.results) == nil then return end
    if ends_with(name,"_rcomb") then return end


    local new_recipe=table.deepcopy(recipe)
    new_recipe.name=new_recipe.name.."_rcomb"
    new_recipe.hide_from_signal_gui = false
    new_recipe.show_amount_in_title = true
    
    local sg = new_recipe.subgroup
    -- SG is nil here
    
    new_recipe.subgroup="recipe-subgroup"
    --but i can assign it here. 
    
    new_recipe.localised_name=recipe.name

    data.raw.recipe[name.."_rcomb"]=new_recipe
Is this code complete because a final "end" is missing, whatever.
Some of recipe name is based on the product.
With your function, is your recipe fully functional or what is missing ? Only subgroup ? Did you see recipe in game ?
scruffyvoltherder
Inserter
Inserter
Posts: 23
Joined: Fri Jun 14, 2024 12:33 am
Contact:

Re: cannot read recipe subgroup from data.raw

Post by scruffyvoltherder »

Yes, they do show up in-game. right now i'm just adding the copied recipes into a subgroup called "recipe-subgroup". What i want to do is create subgroups based on the original recipe's subgroup.

for example, if the original recipe had the "circuit-network" subgroup, i want the copied recipe to have the subgroup "circuit-network-rcomb". all of the rcomb recipes are going to sit in their own tab.

The problem is though, that I cannot read the subgroup from the original recipe. If i were to deepcopy the recipe, and not assign any values to the subgroup member, my copied recipe would end up right next to the original. I don't understand how that information can get transferred from the old recipe to the copy when i do a deepcopy, but cannot be read by my lua script.

deepcopying a recipe gives the new recipe the same subgroup as the old one, but if i try

Code: Select all

local recipe_subgroup = recipe.subgroup
local new_recipe_subgroup=recipe_subgroup.."-rcomb"
--check if subgroup for new recipe exists already
--create new subgroup if not
new_recipe.subgroup=new_recipe_subgroup
recipe_subgroup comes back as null, therefore therefore there is no way to derive a name for the subgroup that the new recipe will be in.
Lihop
Burner Inserter
Burner Inserter
Posts: 5
Joined: Tue Jun 03, 2025 7:21 pm
Contact:

Re: cannot read recipe subgroup from data.raw

Post by Lihop »

According to your code If recipe_subgroup comes back as nil, you get an error because concatenate nil and string is not possible.(Line 2)
If you get an error when loading, send us the error if it pass can you send us the newly named subgroup

Copying with deepcopy copy all the table, there is no reason you can't access the subgroup or comes back as nil (if it exists)
Post Reply

Return to “Modding help”