Démarrer avec RitnLib¶
Ce guide montre comment intégrer RitnLib à un mod Factorio (nouveau ou existant). À la fin, ton mod consomme RitnLib aux trois stages : data, settings et control.
1. Installer le mod¶
Deux options :
- En jeu : s'abonner au mod RitnLib sur le Mod Portal.
- Manuel : cloner ou télécharger ce dépôt dans
Factorio/mods/RitnLib/. Le dossier doit s'appeler exactementRitnLib— pasRitnLib-mainaprès un téléchargement GitHub.
Vérifie que Factorio/mods/RitnLib/info.json existe et que sa factorio_version correspond à la tienne (actuellement 2.0).
2. Déclarer la dépendance dans ton mod¶
Dans le info.json de ton propre mod, ajoute "RitnLib" aux dependencies :
{
"name": "mon-mod",
"version": "0.1.0",
"factorio_version": "2.0",
"title": "Mon mod",
"author": "moi",
"dependencies": [
"base",
"RitnLib"
]
}
Factorio garantit que RitnLib sera chargé avant ton mod aux trois stages.
3. Premier usage — data stage¶
Au data stage, RitnLib n'exécute rien automatiquement, mais il expose ses manipulateurs via le registre ritnlib.defines.
Crée mon-mod/data.lua :
require("__RitnLib__.defines")
local RitnProtoRecipe = require(ritnlib.defines.class.prototype.recipe)
-- Ajouter un câble de cuivre à la recette d'automation-science-pack
RitnProtoRecipe("automation-science-pack")
:addIngredient({"copper-cable", 1})
À retenir :
- require("__RitnLib__.defines") peuple le global ritnlib. À faire une fois en haut du fichier ; les require suivants sont idempotents.
- ritnlib.defines.class.prototype.recipe est un chemin abstrait — RitnLib le résout vers le fichier source actuel. Pas besoin de hard-coder __RitnLib__/classes/prototypes/Recipe.
- Les classes de prototype (RitnProto*) s'utilisent en local … = require(...) — elles ne polluent pas _G.
Pour aller plus loin (recettes, technos, items, minerais, etc.) : Mon premier prototype.
4. Premier usage — control stage¶
Au control stage, les classes runtime de RitnLib sont déjà disponibles en _G (RitnLib s'en occupe à son chargement). Tu peux les utiliser directement.
Crée mon-mod/control.lua :
script.on_event(defines.events.on_player_created, function(event)
local player = game.get_player(event.player_index)
RitnLibPlayer(player):print("Bienvenue ! Tu joues avec mon-mod.")
end)
script.on_event(defines.events.on_research_finished, function(event)
local tech = RitnLibTechnology(event.research)
log("Recherche terminée : " .. tech.name)
end)
À retenir :
- Pas de require pour les classes runtime — elles sont en global (RitnLibPlayer, RitnLibTechnology, RitnLibEvent, RitnLibSurface, etc.).
- Ce sont des vues temporaires : tu en crées une nouvelle à chaque event. Ne jamais les stocker dans storage. Voir Wrappers temporaires pour le détail.
Pour les patterns plus avancés (snapshot d'inventaire, GUI, désactivation cascade de recettes) : Mon premier handler runtime.
5. Premier usage — settings stage¶
Crée mon-mod/settings.lua :
require("__RitnLib__.defines")
local RitnLibSetting = require(ritnlib.defines.class.ritnClass.setting)
RitnLibSetting("mon-mod-enable-feature-x")
:setSettingStartup()
:setDefaultValueBool(true)
:new()
Le :new() final déclenche le data:extend({...}) qui enregistre le setting auprès de Factorio. Tu verras le toggle apparaître dans Settings → Mods → Startup avec la clé mon-mod-enable-feature-x.
⚠ 0.9.8 — limitation connue : le setter
:setTypeBoolean()ne fonctionne pas (cf. BUG-009). Heureusement le constructeur initialise déjàdataType = "bool", donc le chaînage ci-dessus produit bien unbool-setting. Pour les autres types (int,double,string,color), attendre la version0.10.0-fixou les ajouter manuellement àself.data_setting.type.
6. Vérifier que ça tourne¶
Lance Factorio. Ouvre Settings → Mods → Startup et vérifie que mon-mod-enable-feature-x apparaît.
Charge une partie de test. Le message « Bienvenue ! » devrait s'afficher au moment où le joueur arrive sur la carte.
Si ce n'est pas le cas, ouvre factorio-current.log (Windows : %appdata%\Factorio\, Linux : ~/.factorio/) pour lire les erreurs. Les messages préfixés RitnLib ou RitnProto* viennent de la lib.
La suite¶
- 🧩 Architecture en 4 couches — comprendre comment RitnLib est organisé.
- ⚠ Wrappers temporaires — la règle d'or à connaître avant de toucher aux classes runtime.
- 🗺 Carte des classes — lister tout ce qui est disponible.
- 📖 Les guides couvrent les patterns avancés (snapshot d'inventaire, GUI complète, désactivation cascade, etc.).