Tous les périphériques
Ce que tous les blocs pilotés par un ordinateur ont en commun : un objet de fonctions appelées avec un point, son type, plusieurs types sur un bloc, les erreurs quand le bloc disparaît.
Un périphérique est un bloc que pilote un ordinateur : un Feu tricolore, un coffre, une machine de Create, un moniteur, un capteur de Create Aeronautics. peripheral.wrap et peripheral.find renvoient un objet pour lui : une table dont les champs sont les fonctions de ce bloc, ses méthodes. Cette page explique ce que tous ces objets ont en commun ; les pages de chaque type (listées plus bas) décrivent leurs méthodes.
local feu = peripheral.wrap("left") -- le Feu tricolore de la face gauche
feu.set("green")
print(feu.get()) -- green
print(feu.type()) -- traffic_lightTous les ordinateurs pilotent des périphériques, Calculateur à tubes compris : contre l'une de leurs six faces, ou, à partir du Mini-ordinateur, n'importe où sur leur réseau de Câble de données. Les noms, la recherche et les coûts sont expliqués dans peripheral.
device.type() | Le type du périphérique, le même nom que peripheral.type donne pour le bloc. |
Appeler les méthodes
Avec un point, pas deux-points. Les méthodes d'un périphérique sont de simples fonctions rangées dans une table, pas des méthodes au sens de Lua : appelez-les avec un point, feu.set("green"). Avec deux-points, Brass passe l'objet lui-même en premier argument, et la méthode reçoit une table là où elle attendait du texte :
local feu = peripheral.wrap("left")
feu.set("red") -- juste
feu:set("red") -- faux : bad argument #1 to 'set' (string expected, got table)Une table ordinaire. Un objet périphérique se range dans une variable ou une table, se passe à une fonction et se parcourt avec pairs. Une petite fonction liste les méthodes de n'importe quel périphérique, triées :
local function methodes(peripherique)
local noms = {}
for nom, _ in pairs(peripherique) do
table.insert(noms, nom)
end
table.sort(noms)
return table.concat(noms, " ")
end
for _, nom in ipairs(peripheral.list()) do
print(nom .. " : " .. methodes(peripheral.wrap(nom)))
endPour un Feu tricolore, elle affiche get release set type. Le programme intégré devices va plus loin : il montre tout ce que l'ordinateur peut joindre, avec des mesures en direct.
Un objet ne vit que le temps du programme : après un redémarrage, refaites wrap sur le bloc.
Types
Chaque périphérique a un type, un nom court en anglais qui dit ce qu'il sait faire. Voici tous les types, avec la page de leurs méthodes :
| type | blocs | méthodes |
|---|---|---|
traffic_light | Feu tricolore | Feu tricolore |
inductive_loop | Boucle de détection | Boucle de détection |
monitor | Moniteur cathodique, Moniteur LCD | Moniteurs |
radio_modem | Modem radio | Modem radio et Routeur Wi-Fi |
wifi_router | Routeur Wi-Fi | Modem radio et Routeur Wi-Fi |
redstone_link | la Liaison de redstone de Create | Liaison de redstone |
kinetic | tout bloc de Create qui tourne : arbres, Meule, Presse mécanique, Contrôleur de vitesse de rotation... | Blocs cinétiques de Create |
inventory | tout bloc qui contient des objets : coffre, tonneau, Coffre à objet renforcé, Dépôt, Bassin... | Inventaires |
tank | tout bloc qui contient des fluides : Réservoir à fluide, Bassin... | Réservoirs |
altitude_sensor | capteur d'altitude (Altitude Sensor) de Create Aeronautics | Capteurs de Create Aeronautics |
gimbal_sensor | capteur gyroscopique (Gimbal Sensor) de Create Aeronautics | Capteurs de Create Aeronautics |
velocity_sensor | capteur de vitesse (Velocity Sensor) de Create Aeronautics | Capteurs de Create Aeronautics |
optical_sensor | capteur optique (Optical Sensor) de Create Aeronautics | Capteurs de Create Aeronautics |
navigation_table | table de navigation (Navigation Table) de Create Aeronautics | Capteurs de Create Aeronautics |
swivel_bearing | roulement pivotant (Swivel Bearing) de Create Aeronautics | Capteurs de Create Aeronautics |
torsion_spring | ressort de torsion (Torsion Spring) de Create Aeronautics | Capteurs de Create Aeronautics |
hot_air_burner | brûleur à air chaud (Hot Air Burner) de Create Aeronautics | Brûleur à air chaud |
Les types de Create Aeronautics n'existent que si ce mod est installé.
Un bloc, plusieurs types. Un bloc peut être plusieurs choses à la fois. Une meule de Create tourne et contient des objets : elle est à la fois kinetic et inventory. Un bassin contient des objets et des fluides : inventory et tank. Son objet a alors les méthodes de tous ses types réunies, et un seul objet fait tout :
local meule = peripheral.wrap("left")
print(meule.speed() .. " tr/min") -- une méthode de kinetic
print(meule.count() .. " objets dedans") -- une méthode d'inventorySon type, en revanche, est un seul nom : le premier de ses types, dans l'ordre du tableau ci-dessus (les types d'Aeronautics d'abord, puis de traffic_light jusqu'à tank). La meule est kinetic. Pour trouver un bloc par n'importe lequel de ses types, utilisez peripheral.list(type) ou peripheral.find(type), qui les regardent tous : peripheral.find("inventory") trouve aussi la meule.
Le type du périphérique, le même nom que peripheral.type donne pour le bloc.
- string
- le type du périphérique : son premier type
local peripherique = peripheral.wrap("left")
if peripherique and peripherique.type() == "inventory" then
print(peripherique.count() .. " objets")
endC'est le type qu'avait le bloc au moment de wrap : l'objet le garde, même si un autre bloc prend la place ensuite.
Un périphérique obtenu par wrap a toujours un vrai type, puisque peripheral.wrap renvoie nil quand il n'y a rien à qui parler. Seul peripheral.call("left", "type") sur une face vide répond "none".
Voir aussi peripheral.type() peripheral.find()
Quand le bloc disparaît
Un objet périphérique ne garde pas le bloc lui-même : chaque méthode cherche à nouveau le bloc au moment de l'appel. Un objet n'est donc jamais périmé. Cassez le coffre de gauche et posez-en un neuf : le même objet lit le nouveau coffre.
Quand le bloc a disparu, ou n'est plus du bon genre, la méthode arrête le programme avec une erreur :
| message | quand |
|---|---|
peripheral is not loaded | le chunk du bloc n'est pas chargé (tous les types) |
traffic light removed | un Feu tricolore a disparu (set) |
monitor removed | un moniteur a disparu |
radio removed | un Modem radio ou un Routeur Wi-Fi a disparu |
redstone link not ready | une Liaison de redstone a disparu, ou n'est pas encore prête |
not a kinetic block anymore | un bloc de Create qui tournait a disparu |
not an inventory anymore | un bloc qui contenait des objets a disparu |
not a tank anymore | un bloc qui contenait des fluides a disparu |
sensor removed | un capteur ou un brûleur à air chaud de Create Aeronautics a disparu |
burner removed | un brûleur à air chaud a disparu (amount, set_amount) |
Quelques lectures répondent nil au lieu d'échouer : le get d'un Feu tricolore disparu renvoie nil.
Les méthodes d'un objet sont choisies au moment de wrap. Si un bloc d'une autre sorte prend la place (un tonneau là où était le Feu tricolore), l'ancien objet garde les méthodes d'un Feu tricolore, qui échouent désormais : refaites wrap sur le bloc.
Pour qu'un programme survive à un bloc qui peut disparaître, appelez la méthode à travers pcall, qui renvoie une table au lieu d'arrêter le programme :
local coffre = peripheral.wrap("left")
while true do
local resultat = pcall(coffre.count, "minecraft:coal")
if resultat.ok then
print("charbon : " .. resultat.value)
else
print("le coffre à charbon a disparu !")
end
sleep(5)
endPour en savoir plus sur la capture des erreurs : pcall et Erreurs et débogage.