NRF Guide

Créer un mod

Coopérer avec un autre mod

Un bouton facultatif, un service Kotlin et deux mods qui restent indépendants.

Proposer une action si le fournisseur est présent

Dans votre déclaration signalModel
signalModel("mon-reseau.principal", "Signal principal", "mes_textures",
    fallback = Indication(Aspect.Closed, Reason.Unknown)) {
    action("inspecter", "Inspecter ce signal",
        whenMod = "mon-inspecteur", service = "inspect.v1")
    rules { Indication(Aspect.Closed, Reason.Unknown) }
    images { "closed.svg" }
}

Le SDK affiche le bouton seulement si mon-inspecteur déclare inspect.v1 et dispose d’une observation fraîche de la même partie. Son absence masque le bouton. Elle ne désactive aucune règle du signal et n’ajoute aucune dépendance obligatoire au paquet.

Créer votre propre fournisseur

src/main/kotlin/Entry.kt
package nimby.mod

import nimby.*

fun createMod() = toolMod("mon-inspecteur", "Mon inspecteur") {
    service("inspect.v1") { demande ->
        log("Signal choisi : ${demande.signalId}")
        showPanel(demande, "Signal sélectionné", listOf(
            ToolButton("actualiser", "Actualiser")
        ))
    }
}

Un outil possède son propre projet et son propre mod.json, préparés comme dans le tutoriel d’installation. Il ne déclare pas de faux type de signal. Le bloc service reçoit les clics, y compris ceux de ses nouveaux boutons : demande.action indique lequel a été choisi.

Le SDK appelle le service sur le worker de l’outil. Il copie les messages et rejette les clics périmés lors d’un changement de partie, d’un déchargement du fournisseur ou d’un remplacement des boutons. Il n’exécute pas le code du mod depuis le thread d’affichage.

Lire et agir depuis le callback

AppelUsage
network()Obtenir une nouvelle copie du réseau et de ses métriques disponibles.
showPanel(demande, message, boutons)Remplacer votre action par un message et au maximum 12 boutons.
log(message)Écrire un événement dans le journal des mods.
onTick { … }Suivre une opération en cours sans dépendre d’un clic supplémentaire.
onStop { … }Libérer la mémoire propre à l’outil lors de son arrêt.

Conservez les valeurs copiées, pas le ToolContext du callback. Les propriétés worldId et generation servent à invalider vos mémoires lorsque la partie change. Un clic ne donne pas à lui seul l’autorisation de construire.

Pour construire : préparez un ticket, capturez le réseau après la préparation, calculez les positions et demandez une confirmation. Une réponse Pending se suit avec pollConstruction sur le même ticket. Ne renvoyez pas createSignals après une réponse incertaine. La pose utilise le pont Windows expérimental.