Create: Computing AgesDoc Brass
Programmes intégrés

stock

surveille un coffre

Tourne sur Tous Tous les ordinateurs · 16 lignes
Tapez ceci à l'invite d'un ordinateur pour le copier sur le support :
Terminal
> examples stock
> edit stock

Surveille un coffre (ou un Coffre à objet renforcé de Create, un tonneau, un dépôt...) et allume une alarme quand il contient moins de 64 objets. Le total part aussi à l'écran et vers les Liaisons d'affichage. Le cœur de toute usine : savoir ce qu'on a, et réagir quand ça manque.

Quoi construire

  • À gauche de l'ordinateur (vu face à l'écran), un bloc avec un inventaire : coffre, tonneau, Coffre à objet renforcé, dépôt...
  • Dessus, une Lampe à redstone pour l'alarme, ou tout ce qui obéit à la redstone.
  • Si vous voulez, une Liaison d'affichage de Create pointée sur l'ordinateur, pour afficher Stock : 123 sur un Panneau d'affichage.

Si aucun périphérique ne touche la face gauche, le programme s'arrête aussitôt avec pas de coffre à gauche.

Comment il marche

Brass
local chest = peripheral.wrap("left")
if chest == nil then
  error("pas de coffre à gauche")
end

peripheral.wrap() donne un objet pour piloter le bloc d'une face, ou nil quand il n'y en a pas. error() arrête le programme avec un message, bien plus clair qu'un plantage quelques lignes plus loin.

Brass
local total = chest.count()
rs.set("top", total < threshold)

inventory.count() additionne les objets de tous les emplacements ; chest.count("minecraft:iron_ingot") ne compte qu'une sorte d'objet. total < threshold vaut true ou false, que rs.set() accepte directement : la lampe est allumée exactement tant que le stock est bas.

Brass
display.set({"Stock : " .. total})
print("Objets : " .. total)
sleep(5)

Un inventaire n'envoie aucun évènement quand il change : le programme regarde donc de nouveau toutes les 5 secondes. Compter coûte quelques instructions par emplacement de l'inventaire : un grand coffre renforcé, c'est très bien toutes les quelques secondes, mais pas vingt fois par seconde.

Astuce

Pour piloter une chaîne de production plutôt qu'une lampe, posez un Embrayage de Create dessus et écrivez total >= threshold : un embrayage alimenté débraye, les machines s'arrêtent donc quand le coffre est plein et repartent quand il se vide.

Idées

  • Ne comptez que ce qui compte : chest.count("minecraft:iron_ingot"). Les identifiants des objets s'affichent dans les infobulles avancées (F3+H).
  • Empêchez la lampe de clignoter autour du seuil avec deux limites : l'alarme démarre sous 64 et ne s'arrête qu'au-dessus de 256.

    Brass
    local BAS, HAUT = 64, 256
    local alarme = false
    for _, total in ipairs({300, 200, 60, 100, 250, 260}) do
      if total < BAS then
        alarme = true
      elseif total > HAUT then
        alarme = false
      end
      print(total, alarme)
    end
    Écran
    300 false
    200 false
    60  true
    100 true
    250 true
    260 false
  • Surveillez plusieurs coffres : à partir du Mini-ordinateur, les coffres le long d'un Câble de données sont aussi des périphériques, trouvés avec peripheral.find() ou peripheral.list().
  • Déplacez des objets quand le stock est haut avec inventory.push().
  • La recette alarme de stock en construit une version complète, avec un écran et plusieurs objets.

Le programme

stock
-- Surveille le coffre (ou coffre-fort, dépôt...) à gauche.
-- Sous le seuil, la sortie du dessus s'allume : une lampe d'alarme.
-- Pour piloter une chaîne de production par un embrayage Create,
-- écrivez total >= threshold : un embrayage alimenté débraye.
local chest = peripheral.wrap("left")
if chest == nil then
  error("pas de coffre à gauche")
end
local threshold = 64
while true do
  local total = chest.count()  -- ou chest.count("minecraft:iron_ingot")
  rs.set("top", total < threshold)
  display.set({"Stock : " .. total})
  print("Objets : " .. total)
  sleep(5)
end