Aller au contenu

RitnProtoRecipe

Manipulateur data stage pour data.raw["recipe"][<nom>]. Boîte à outils fluente pour muter une recette : activer/désactiver, masquer/afficher, ajouter/retirer/remplacer des ingrédients, propager le tint des packs de science et le subgroup vers l'item correspondant. Chaque setter réécrit dans data.raw (via :update()) et renvoie self (chaînable).

Avertissement — API Factorio 1.x : cette classe n'a pas été révisée depuis Factorio 2.0 ; elle conserve des constructions de l'API 1.x (notamment les variantes de difficulté normal / expensive). Utilisable au data stage, mais non validée pour 2.0 — voir Migration Factorio 2.0.

Source classes/prototypes/Recipe.lua
Stage data
Accès require(ritnlib.defines.class.prototype.recipe)
Hérite de RitnPrototype
object_name "RitnProtoRecipe"
-- mon-mod/data.lua
require("__RitnLib__.defines")
local RitnProtoRecipe = require(ritnlib.defines.class.prototype.recipe)

Constructeur

RitnProtoRecipe(recipe_name)RitnProtoRecipe

Pose les bases via RitnPrototype.init puis deep-copie data.raw["recipe"][recipe_name] dans prototype. Si la recette n'existe pas, prototype reste nil (tous les setters deviennent no-op).

Paramètres - recipe_name :: string — nom de la recette dans data.raw.


Attributs

name :: string [Read]

Nom de la recette (hérité de RitnPrototype).

type :: string [Read]

Type résolu ("recipe").

prototype :: table? [Read]

Copie de travail de data.raw["recipe"][name]. Toutes les mutations s'appliquent dessus, puis :update() réécrit dans data.raw. nil si la recette n'existe pas.

object_name :: "RitnProtoRecipe" [Read]

Sentinelle de type.

listTint :: string[] [Read]

Liste ordonnée des clés de tint ("red", "automation", "logistic"…), depuis core/constants.lua.

tint :: table<string, table> [Read]

Palette de tints (jeu {primary, secondary, tertiary, quaternary} par clé), depuis core/constants.lua.


Format d'ingrédient

Les méthodes d'ingrédient acceptent (via RitnIngredient) :

  • forme array : { "advanced-circuit", 2 }
  • forme table : { type = "item", name = "steel-plate", amount = 4 }
  • string seule : "steel-plate" (pour les recherches/suppressions)

Méthodes — activation & visibilité

:setEnabled(value?)RitnProtoRecipe

Définit le flag enabled sur le prototype et sur les branches legacy normal / expensive si présentes. value défaut true.

RitnProtoRecipe('logistic-science-pack'):setEnabled()
RitnProtoRecipe('light-armor'):setEnabled(false)

:disable()RitnProtoRecipe

Désactive et masque la recette, puis pose flags = {"hidden"} sur l'item résultat (via RitnProtoItem).

:setHidden(value, crafting?, stats?)RitnProtoRecipe

Définit hidden sur le prototype et ses branches de difficulté. Si crafting est non-nil, pose aussi hide_from_player_crafting ; si stats est non-nil, hide_from_player_stats.

Paramètres - value :: boolean — valeur du flag. - crafting :: any? — si non-nil, applique aussi à hide_from_player_crafting. - stats :: any? — si non-nil, applique aussi à hide_from_player_stats.


Méthodes — ingrédients

:addIngredient(ingredient)RitnProtoRecipe

Ajoute l'ingrédient ; combine (somme les quantités) si un ingrédient du même nom existe déjà.

:addNewIngredient(ingredient)RitnProtoRecipe

Ajoute l'ingrédient ; ignore si un ingrédient du même nom existe déjà.

:setIngredient(ingredient)RitnProtoRecipe

Remplace sur place chaque entrée matchant le nom de l'ingrédient.

:removeIngredient(ingredient)RitnProtoRecipe

Retire l'ingrédient de toutes les branches.

:removeAllIngredient()RitnProtoRecipe

Vide toutes les listes d'ingrédients.

:getIngredient(ingredient)table?

Renvoie le payload item normalisé du premier ingrédient au nom donné, ou nil.

Paramètres : ingredient :: string — nom recherché.

:ingredientExiste(ingredient)boolean

true si un ingrédient au nom donné existe dans la recette.


Méthodes — tint & subgroup

:changeTint(parameter, tint)RitnProtoRecipe

Affecte une couleur de tint (par clé : "red", "automation"…) au champ parameter du prototype (typiquement "crafting_machine_tint"). No-op si la clé est inconnue.

:updatePackTint()RitnProtoRecipe

Auto-détecte les packs de science (nom finissant par -science-pack) et applique le tint correspondant au crafting_machine_tint.

:changeSubgroup(subgroup, order?)RitnProtoRecipe

Définit subgroup (et order) sur la recette et propage à l'item correspondant (via RitnProtoItem). Override la version héritée pour gérer la propagation à l'item.


Méthodes héritées de RitnPrototype

Disponibles sur toute instance — voir RitnPrototype pour le détail :

Méthode Rôle
:changePrototype(parameter, value) écrit prototype[parameter] = value puis :update().
:setPrototype(parameter, value) idem, sans log.
:changeSubPrototype(parameter, sub, value) écrit prototype[parameter][sub] = value.
:getProperties(propertie) lit une propriété de prototype.
:update() réécrit prototype dans data.raw[type][name] (appelé par chaque setter).

Exemples d'usage

Recomposer entièrement une recette de module (RitnElectronic/prototypes/update-recipes.lua) :

local recipeModule = RitnProtoRecipe("speed-module"):removeAllIngredient()
recipeModule:addIngredient({ "advanced-circuit-module", 1 })
recipeModule:addIngredient({ "electronic-circuit-module", 1 })

Ajout conditionnel via pcall (RitnElectronic/prototypes/update-recipes.lua) :

local ok = pcall(function()
    RitnProtoRecipe("electric-furnace"):addIngredient({ type = "item", name = "steel-furnace", amount = 1 })
end)
if not ok then
    RitnProtoRecipe("electric-furnace"):addNewIngredient({ type = "item", name = "steel-furnace", amount = 1 })
end
RitnProtoRecipe("electric-furnace"):setIngredient({ type = "item", name = "steel-plate", amount = 4 })

Déplacer une recette de subgroup (RitnDemo/data.lua) :

RitnProtoRecipe("wooden-chest"):changeSubgroup("belt")

Remarques

  • Data stage uniquement — à utiliser depuis data.lua / data-updates.lua / data-final-fixes.lua, jamais au runtime.
  • Copie + écriture — les mutations s'appliquent sur une copie (prototype) ; chaque setter appelle :update() qui réécrit dans data.raw. Pas besoin d'appeler data:extend toi-même.
  • Branches normal / expensive — résidus des variantes de difficulté Factorio 1.x. Les méthodes les parcourent en plus de ingredients (canonique 2.0) ; si elles n'existent pas sur le prototype chargé, ces branches sont simplement no-op. Voir Migration Factorio 2.0.

Voir aussi