Partagez
Aller en bas

CC turtle.suck()

le Jeu 2 Aoû - 12:58
Moins qu'un tuto, c'est plutôt pour compléter la documentation de cette méthode.

Ce qu'en dit le wiki officiel (à ce jour)

https://www.computercraft.info/wiki/Turtle.suck a écrit:Function turtle.suck
Moves one or more items from either the ground in front of the turtle, or, from an inventory-enabled block (such as a chest) in front of the turtle.

  • If an item is in the square directly in front of the turtle, it picks up one of those items.
  • If a chest is in the square directly in front of the turtle, it picks up the items from the first non-empty chest slot, moving from top left to bottom right. The items are moved into the currently selected turtle slot if there is room.
  • If the currently selected turtle slot is filled up before all of the items are picked up, the remaining picked up items are put in the next available turtle slot.
  • If the currently selected turtle slot is 16 and the next slot is required, it will loop around and try turtle slot 1, and so on.
  • As of ComputerCraft 1.6, if an amount is specified, the turtle will attempt to pick up at most the specified number of items. Earlier builds always attempt to pick up a full slot.


Syntaxturtle.suck([number amount])
Returnsboolean true if at least one item was moved into the turtle's inventory; false otherwise.
Part ofComputerCraft
APIturtle

Que dire de plus

Pour ma part, j'ai longtemps assez mal interprêté le paramètre amount et son paramètre par défaut. Enfin, jusqu'à ce que ça me pose un problème, et que je perde une heure à revoir toutes les erreur probables que j'aurais commis dans mon programme. Voici les conclusions que j'en ai tiré.

La valeur par défaut de amount est 64, et il ne s'agit pas de confondre ça avec la notion de stack ou de slot.
En effet, un stack ou un slot, ça représente une quantité de 64 pour la plupart des items. Comme cas particuliers, il y a les items non-stackables (comme les armes, outils etc.). Il y a aussi certains items qui se stack par quantité de 16 (oeufs, ender-prearl, etc.)
Il s'agira de retenir le fait que turtle.suck() ne traite pas de cas particuliers, et je vais vous en faire la démonstration.

Je pense que ça pourrait poser des soucis, dans un programme qui effectuerai des craft, ou bien une turtle qui pourrait échanger son équipement.
La solution serait de bien préciser la quantité maximale attendue, sinon des slots imprévus à cet effet pourraient se voir remplir.

Exemples

L'expérience consiste à aspirer des items contenus dans un dispenser, ceci avec le paramètre par défaut de turtle.suck() (pour démontrer la nuance entre un stack, et une quantité de 64)

Le dispisitif est le suivant :


Le coffre à gauche contient les items qui serviront à l'expérience (5 lots) :


  • 3 épées : sans aucun dommage. Des items non-stackables, et identiques
  • 6 épées endommagées : dont 4 d'entre elles sont identiques
  • 3 livres enchantés : des items non-stackables, et dont la "damage-value" n'est pas pertinente
  • 3 pioches : dont une d'entre elles a été renommée. Les items sont identiques, mais l'un d'entre eux se distingue par un NBT tag
  • 5 stacks d'oeufs : items identiques, qui s'empilent par paquets de 16




La turtle aurait aspiré 64 épées si elle le pouvait.



Si la turtle fait bien la distinction des "damage-value", on voit ici qu'elle parcourera tout l'inventaire jusqu'à atteindre la quantité (Elle ne s'interrompera pas au premier slot comprenant un item différent).



Même résultat avec des items comprenant des tags NBT.



Les tags NBT sont bien pris en compte dans la comparaison des items. Car la pioche nommée "Test" restera dans l'inventaire du dispenser.



Concernant des items qui se stack par paquet de 16, la turtle tentera tout de même d'en aspirer la quantité demandée (limitée à 64), quitte à remplir 4 slot.
Notez qu'un stack d'oeuf sera resté dans le dispenser.
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum