Create: Computing AgesDoc Brass
Bibliothèques

link

Les fréquences des Liaisons de redstone de Create, sans poser de bloc de liaison.

Tous les ordinateurs

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.

Brass
-- 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.

Fonctions
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.

Paramètres
item1 string
le premier objet de la fréquence, comme "minecraft:iron_ingot"
item2 string
le second objet de la fréquence
power number|boolean
une puissance de 0 à 15, ou true (15) et false (0)
Brass
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 plus

Comme 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 :

messagecause
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 :

Brass
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
end

Une 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) :

Brass
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()
end

Voir aussi link.get() rs.set()

Écouter

#

link.get(item1, item2)

→ number

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.

Paramètres
item1 string
le premier objet de la fréquence
item2 string
le second objet de la fréquence
Renvoie
number
le signal le plus fort que les autres liaisons à portée émettent dessus, de 0 à 15
Brass
-- 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 :

champvaleur
ale premier objet de la fréquence
ble second objet
powerla 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 :

Brass
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()
end
Astuce

Pour é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()