
link
Les fréquences des Liaisons de redstone de Create, sans poser de bloc de liaison.
Les Liaisons de redstone de Create transportent un signal de redstone à travers les airs : un émetteur et un récepteur qui tiennent les deux mêmes objets partagent une fréquence, et le récepteur restitue ce que l'émetteur reçoit. La bibliothèque link place l'ordinateur lui-même sur ces fréquences, comme s'il avait toutes les liaisons qu'il lui faut intégrées : link.set émet, link.get écoute. Aucun bloc à poser, et tous les ordinateurs l'ont, Calculateur à tubes compris.
Servez-vous-en pour piloter une machine à l'autre bout de la base (une porte, une chaîne de presses mécaniques, un signal de gare) ou pour recueillir les alarmes de détecteurs lointains, sans ligne de poudre ni câble.
-- ouvre les portes de l'entrepôt : une Liaison de redstone réceptrice (lingot de fer + lingot d'or) est posée à côté
link.set("minecraft:iron_ingot", "minecraft:gold_ingot", true)Une fréquence, ce sont deux objets. Écrivez chacun sous la forme de son identifiant d'objet, le nom que F3 + H affiche en bas des infobulles : "minecraft:iron_ingot", "create:brass_ingot". Sans espace de noms, minecraft: est sous-entendu : "red_dye" vaut "minecraft:red_dye". L'ordre compte, comme sur le bloc : (fer, or) et (or, fer) sont deux fréquences différentes. Le premier objet est le premier emplacement de la liaison, celui du haut sur une liaison posée contre un mur. En cas de doute, pilotez la Liaison de redstone comme périphérique et demandez-lui : redstone_link.frequency(). Un emplacement vide s'écrit "minecraft:air", en entier.
Portée. C'est la portée de Create qui s'applique : 256 blocs par défaut (le réglage linkRange de la configuration serveur de Create), mesurés entre l'ordinateur et chaque liaison. Les liaisons des chunks non chargés ne participent pas.
L'ordinateur ne s'entend jamais. link.get donne le signal le plus fort des autres liaisons à portée. Ce que l'ordinateur émet n'est jamais compté : un programme peut émettre et écouter sur la même fréquence sans entendre sa propre voix. Deux ordinateurs sur une même fréquence, eux, s'entendent.
En fin de tick. Comme pour rs.set, une émission atteint les autres liaisons à la fin du tick de l'ordinateur, et seule la dernière valeur réglée dans un tick compte.
Jusqu'au redémarrage. Une fréquence reste à l'antenne jusqu'à ce que le programme la remette à 0. La fin d'un programme ne la coupe pas, même sur une erreur ou par Ctrl+T, pas plus qu'un ordinateur qui attend sa rotation. Un démarrage, un redémarrage, un arrêt et le déchargement du chunk de l'ordinateur font taire toutes les fréquences et les oublient.
link.set(item1, item2, power) | Émet sur une fréquence, comme une Liaison de redstone émettrice alimentée avec cette puissance. Chaque récepteur de la fréquence à portée restitue le signal le plus fort émis dessus. |
link.get(item1, item2) | Lit une fréquence, comme une Liaison de redstone réceptrice : le signal le plus fort émis dessus par les autres liaisons à portée (et par d'autres ordinateurs), 0 quand personne n'émet. L'émission de l'ordinateur lui-même n'est jamais comptée. |
Émettre
link.set(item1, item2, power)
Émet sur une fréquence, comme une Liaison de redstone émettrice alimentée avec cette puissance. Chaque récepteur de la fréquence à portée restitue le signal le plus fort émis dessus.
item1string- le premier objet de la fréquence, comme
"minecraft:iron_ingot" item2string- le second objet de la fréquence
powernumber|boolean- une puissance de 0 à 15, ou
true(15) etfalse(0)
link.set("minecraft:iron_ingot", "minecraft:gold_ingot", 15)
link.set("red_dye", "blue_dye", true) -- "minecraft:" est sous-entendu
link.set("red_dye", "blue_dye", false) -- n'émet plusComme avec rs.set, une puissance au-dessus de 15 devient 15, en dessous de 0 devient 0, et elle doit être entière. Les erreurs que vous pouvez rencontrer :
| message | cause |
|---|---|
bad item id 'Iron Ingot' | le texte n'est pas un identifiant d'objet (majuscules, espaces) |
unknown item 'minecraft:iron_ingots' | aucun objet ne porte cet identifiant |
too many link frequencies (max 32) | l'ordinateur utilise déjà 32 fréquences |
La limite compte chaque fréquence utilisée depuis le démarrage de l'ordinateur, avec link.set, link.get ou une Liaison de redstone pilotée comme périphérique (Liaison de redstone). Elle revient à zéro au redémarrage suivant.
Des portes à l'autre bout de la base. La salle de contrôle ouvre les portes de l'entrepôt, à 120 blocs. À côté des portes, une Liaison de redstone réceptrice tient un lingot de fer et un lingot d'or, et les alimente :
local PORTES = {"minecraft:iron_ingot", "minecraft:gold_ingot"}
while true do
write("portes (ouvrir/fermer) : ")
local reponse = read()
if reponse == "ouvrir" then
link.set(PORTES[1], PORTES[2], true)
print("ouverture")
elseif reponse == "fermer" then
link.set(PORTES[1], PORTES[2], false)
print("fermeture")
end
endUne chaîne de presses commandée à distance. La chaîne de presses mécaniques s'arrête quand son embrayage est alimenté. Une Liaison de redstone réceptrice (plaque de fer + embrayage) posée contre l'embrayage l'alimente. Au loin, un comparateur lit le Coffre à objet renforcé en entrée de la chaîne et alimente une Liaison de redstone émettrice (lingot de fer + comparateur). L'ordinateur ne fait tourner la chaîne que s'il y a du fer à presser, et se réveille sur l'évènement link (voir link.get) :
local NIVEAU = {"minecraft:iron_ingot", "minecraft:comparator"}
local EMBRAYAGE = {"create:iron_sheet", "create:clutch"}
local function mettre_a_jour()
local niveau = link.get(NIVEAU[1], NIVEAU[2])
-- un embrayage alimenté débraye : on l'alimente pour arrêter la chaîne
link.set(EMBRAYAGE[1], EMBRAYAGE[2], niveau == 0)
if niveau == 0 then
print("entrée vide : chaîne arrêtée")
else
print("niveau d'entrée " .. niveau .. " : on presse")
end
end
mettre_a_jour()
while true do
os.pull_event("link")
mettre_a_jour()
endVoir aussi link.get() rs.set()
Écouter
Lit une fréquence, comme une Liaison de redstone réceptrice : le signal le plus fort émis dessus par les autres liaisons à portée (et par d'autres ordinateurs), 0 quand personne n'émet. L'émission de l'ordinateur lui-même n'est jamais comptée.
item1string- le premier objet de la fréquence
item2string- le second objet de la fréquence
- number
- le signal le plus fort que les autres liaisons à portée émettent dessus, de 0 à 15
-- un capteur de lumière du jour, sur le toit, alimente un émetteur (poudre lumineuse + horloge)
local lumiere = link.get("minecraft:glowstone_dust", "minecraft:clock")
print("lumière du jour : " .. lumiere .. "/15")Les identifiants d'objets sont vérifiés comme pour link.set, avec les mêmes erreurs.
**L'évènement link.** Le premier link.get ou link.set sur une fréquence lance aussi son écoute. Dès lors, chaque fois que la puissance reçue dessus change, l'ordinateur met en file un évènement link avec trois champs :
| champ | valeur |
|---|---|
a | le premier objet de la fréquence |
b | le second objet |
power | la nouvelle puissance reçue, de 0 à 15 |
Seules les fréquences que le programme a déjà utilisées l'envoient : appelez donc link.get une fois sur chaque fréquence à écouter. Ce premier appel renvoie ce qui est déjà à l'antenne : aucun évènement ne vient pour cela.
e.a et e.b sont écrits comme le programme les a écrits la première fois : après link.get("red_dye", "blue_dye"), l'évènement dit "red_dye", pas "minecraft:red_dye". Comparez avec la même écriture. Voir aussi Évènements.
Un réseau d'alarme sans fil. Autour de la base, chaque détecteur (une plaque de pression à la porte, un capteur sculk à l'entrée de la mine, un fil tendu entre deux crochets sur le quai) alimente une Liaison de redstone émettrice qui tient de la teinture rouge et l'objet de sa zone. Les cloches de la ville sont reliées à un récepteur (teinture rouge + cloche). L'ordinateur écoute toutes les zones, fait sonner les cloches tant que l'une d'elles est active, et affiche les zones à son écran :
local ZONES = {
{nom = "porte nord", objet = "minecraft:oak_door"},
{nom = "mine", objet = "minecraft:iron_pickaxe"},
{nom = "port", objet = "minecraft:oak_boat"},
}
for _, zone in ipairs(ZONES) do
zone.puissance = link.get("minecraft:red_dye", zone.objet) -- écoute à partir de maintenant
end
local function rafraichir()
local alarmes = {}
for _, zone in ipairs(ZONES) do
if zone.puissance > 0 then
table.insert(alarmes, zone.nom)
end
end
link.set("minecraft:red_dye", "minecraft:bell", #alarmes > 0)
term.clear()
term.set_cursor(1, 1)
if #alarmes == 0 then
print("tout est calme")
else
print("ALARME : " .. table.concat(alarmes, ", "))
end
end
rafraichir()
while true do
local e = os.pull_event("link")
for _, zone in ipairs(ZONES) do
if e.a == "minecraft:red_dye" and e.b == zone.objet then
zone.puissance = e.power
end
end
rafraichir()
endPour échanger des données entre ordinateurs plutôt qu'une puissance de 0 à 15, utilisez net (Mini-ordinateur et plus récents) : les messages transportent du texte et des tables. Les Liaisons de redstone brillent quand l'autre bout est une machine de Create ou un simple circuit de redstone.
Voir aussi link.set() os.pull_event()