local items_list = {} function is_value_in_list (value, list) for i, v in pairs (list) do if v == value then return true end end end for resource_name, resource in pairs (data.raw.resource) do if resource.minable then local item_name = resource.minable.result if item_name and not is_value_in_list (item_name, items_list) then table.insert (items_list, item_name) end end end log(serpent.line (items_list)) -- result for vanilla: -- {"iron-ore", "copper-ore", "coal", "stone", "uranium-ore"} local type = "ammo" local ammo_type = { category = "bullet", action = { { type = "direct", action_delivery = { { type = "instant", source_effects = { { type = "create-explosion", entity_name = "explosion-gunshot" } }, target_effects = { { type = "create-entity", entity_name = "explosion-hit", offsets = {{0, 1}}, offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}} }, { type = "damage", damage = { amount = 1 , type = "physical"} } } } } } } } local magazine_size = 10 local subgroup = "ammo" for i, item_name in pairs (items_list) do local item = data.raw.item[item_name] if item then data.raw.item[item_name] = nil item.type = type item.ammo_type = table.deepcopy(ammo_type) item.magazine_size = magazine_size item.subgroup = subgroup data:extend({item}) else log ('no item ["' .. item_name .. '"]') end end