[Life is peripheral] Inventory Interface (tuto ?)
3 participants
Page 1 sur 1
[Life is peripheral] Inventory Interface (tuto ?)
Ce topic pourrait avoir l'air d'un tuto, mais je ne saurais pas le faire.
Ce serait plutôt un brouillon, j'espère que chacun qui serait intéressé par ce mod contribuera à ce topic en ajoutant ses remarques, découvertes, astuces, idées d'applications...
Ainsi à terme, peut être bien qu'un tuto verra le jour.
L'Inventory Interface (Life is Peripheral) se connecte et s'utilise comme n'importe quel périphérique. Voici la liste des méthodes :
L'Inventory Interface permet de scanner l'inventaire d'un bloc conteneur.
Le détail des items est absolument complet, c'est aussi détaillé que si vous utilisiez un Command Computer. à titre de comparaison, turtle.getItemDetail() n'en retourne qu'une petite fraction.
à titre d'exemple, voici les données d'un stack de 16 pommes :
Voyez, l'Inventory Interface permettrait de distinguer les différents types d'enchantements, si l'objet a été renommé et comment, le contenu d'un document imprimé... Le potentiel n'est pas négligeable (quelques exemple de détails en fin de post).
Par exemple, il rend plus envisageable d'exploiter le loot de certaines usines, qui jusque là étaient plus considérés comme de la ferraille qui encombre les coffres. Ces items peuvent être triés, réparés et filtrés (conserver certains enchantement plus que d'autres, ou d'un certain niveau).
Des conteneurs vanilla : coffres, trapped_chest, dispenser, dropper, hopper, furnace, brewing stand?, jukebox?, table d'enchantement?, enclumes?
Je n'ai pas testé les derniers, et pour les autres, mis à part pour les coffres il semble que ça bug. (enfin j'ai pas réussi à obtenir quelque chose)
Les minecarts avec coffre, hopper, four... ne sont pas des blocs, mais des entités. Je n'ai pas testé, mais je doute que ça fonctionne.
Des conteneurs computercraft, il semble que ça bug pour l'instant.
Je ne me lancerais pas dans un test complet. Merci de rapporter dans ce topic les tests que vous avez fait, pour que chacun profitte d'un recencement plus exhaustif.
Pour faire fonctionner l'Inventory Interface :
Il faut qu'il soit posé à un des côtés d'un computer ou d'une turtle (n'importe).
L'Inventory interface est un bloc orienté. C'est à dire qu'il analysera un bloc conteneur qui se trouve à l'un de ses côtés. Ce côté est marqué d'un carré jaune :
Note aussi, que l'inventaire du bloc doit être accessible. Par exemple, si vous posez un bloc plein sur un coffre vanilla, vous ne pourrez plus l'ouvrir. Dans le même cas, l'Inventory Interface ne fonctionne pas.
Applications :
Comme il s'agit d'items, l'utilité de cet interface evidement lié aux turtles.
Malheureusement, le fait que le scan de l'inventaire d'une turtle bug, rend l'utilisation la plus élémentaire inefficace.
Il s'agirait pour la turtle de se placer devant le capteur de l'interface, afin de scanner en détail son propre inventaire.
La meilleure alternative que j'ai trouvé consiste à orienter l'interface vers un double chest. La turtle venant se caler contre le chest et l'interface en même temps, peut déposer des objets dans le coffre et les analyser.
Comme turtle.suck() ne permet d'aspirer que le premier slot disponible d'un coffre, il ne serait pas évident de sélectionner n'importe quel item du coffre, quand bien même, grace à l'interface nous conaitrions sa position.
Ce qui pourrait impliquer ce genre d'installation :
Screenshots
Avec un second coffre, pour déposer les items non désirés, tant que l'item souhaité ne serait pas récupéré. Le coffre du dessus est posé sur un hopper, que la turtle verrouille par un signal de redstone, afin que les items retirés ne retournent pas dans les premiers slots de l'autre coffre. Lorsque l'item désiré est récupéré, il n'y a plus qu'à déverrouiller le hopper pour que le contenu regagne son coffre d'origine.
En interraction avec de simples computeurs, l'Inventory interface pourrait faire office de sonde, notament dans les colonnes de dropper, hopper ou coffres se déversant les uns dans les autres.
Il pourrait également servir comme d'un monayeur, adapté à n'importe quelle forme d'échange. Le nom des items renommés pourrait faire office de référence, ou de signature.
à fin de test, voici le programme que j'ai utilisé. Il analyse l'objet se trouvant dans le premier slot d'un coffre, et enregistre la table retournée dans un fichier :
Ce serait plutôt un brouillon, j'espère que chacun qui serait intéressé par ce mod contribuera à ce topic en ajoutant ses remarques, découvertes, astuces, idées d'applications...
Ainsi à terme, peut être bien qu'un tuto verra le jour.
L'Inventory Interface (Life is Peripheral) se connecte et s'utilise comme n'importe quel périphérique. Voici la liste des méthodes :
- getItemInInventory()
Renvoi une table des slots, et pour chaque slot une table de toutes les données du stack d'item contenu, une table vide si le slot est vide - getItemInSlot()
Prend en paramètre le numéro du slot. Renvoi une table listant toutes les données du stack d'item contenu - getInventorySize()
Renvoi le nombre de slot du contenur, sinon nil - getInventoryType()
Renvoi le type de conteneur sous forme de string. "Chest" (coffre lambda, double ou piégé), "Dispenser", "Dropper", "Hopper", "Furnace", "EnderChest", "EnchantmentTable", "BrewingStand", "ox$TileEntityJukeBox" (bizarre) pour ceux que j'ai pu tester (Ne fonctionne pas sur une enclume) - getMethods()
Retourne la liste des méthodes
Prend en paramètre le nom d'une méthode sous forme de string pour renvoyer des détails sur la méthode concernée
L'Inventory Interface permet de scanner l'inventaire d'un bloc conteneur.
Le détail des items est absolument complet, c'est aussi détaillé que si vous utilisiez un Command Computer. à titre de comparaison, turtle.getItemDetail() n'en retourne qu'une petite fraction.
à titre d'exemple, voici les données d'un stack de 16 pommes :
- Code:
{
Enchants = {},
lifeMaxDuration = 0,
lifeDuration = 0,
displayName = "Apple",
stackSize = 16,
slot = 0,
isItemDamaged = false,
maxStackSize = 64,
isStackable = true,
metadata = 0,
isItemEnchantable = false,
hasDisplayName = false,
name = "minecraft:apple",
datatags = {
id = "minecraft:apple",
Count = 16,
Damage = 0,
},
isEnchanted = false,
repairCost = 0,
}
- Code:
{
count = 16,
name = "minecraft:apple",
Damage = 0,
}
Voyez, l'Inventory Interface permettrait de distinguer les différents types d'enchantements, si l'objet a été renommé et comment, le contenu d'un document imprimé... Le potentiel n'est pas négligeable (quelques exemple de détails en fin de post).
Par exemple, il rend plus envisageable d'exploiter le loot de certaines usines, qui jusque là étaient plus considérés comme de la ferraille qui encombre les coffres. Ces items peuvent être triés, réparés et filtrés (conserver certains enchantement plus que d'autres, ou d'un certain niveau).
Des conteneurs vanilla : coffres, trapped_chest, dispenser, dropper, hopper, furnace, brewing stand?, jukebox?, table d'enchantement?, enclumes?
Je n'ai pas testé les derniers, et pour les autres, mis à part pour les coffres il semble que ça bug. (enfin j'ai pas réussi à obtenir quelque chose)
Les minecarts avec coffre, hopper, four... ne sont pas des blocs, mais des entités. Je n'ai pas testé, mais je doute que ça fonctionne.
Des conteneurs computercraft, il semble que ça bug pour l'instant.
Je ne me lancerais pas dans un test complet. Merci de rapporter dans ce topic les tests que vous avez fait, pour que chacun profitte d'un recencement plus exhaustif.
Pour faire fonctionner l'Inventory Interface :
Il faut qu'il soit posé à un des côtés d'un computer ou d'une turtle (n'importe).
L'Inventory interface est un bloc orienté. C'est à dire qu'il analysera un bloc conteneur qui se trouve à l'un de ses côtés. Ce côté est marqué d'un carré jaune :
Note aussi, que l'inventaire du bloc doit être accessible. Par exemple, si vous posez un bloc plein sur un coffre vanilla, vous ne pourrez plus l'ouvrir. Dans le même cas, l'Inventory Interface ne fonctionne pas.
Applications :
Comme il s'agit d'items, l'utilité de cet interface evidement lié aux turtles.
Malheureusement, le fait que le scan de l'inventaire d'une turtle bug, rend l'utilisation la plus élémentaire inefficace.
Il s'agirait pour la turtle de se placer devant le capteur de l'interface, afin de scanner en détail son propre inventaire.
- Screenshots:
La meilleure alternative que j'ai trouvé consiste à orienter l'interface vers un double chest. La turtle venant se caler contre le chest et l'interface en même temps, peut déposer des objets dans le coffre et les analyser.
Comme turtle.suck() ne permet d'aspirer que le premier slot disponible d'un coffre, il ne serait pas évident de sélectionner n'importe quel item du coffre, quand bien même, grace à l'interface nous conaitrions sa position.
Ce qui pourrait impliquer ce genre d'installation :
Screenshots
- Spoiler:
Avec un second coffre, pour déposer les items non désirés, tant que l'item souhaité ne serait pas récupéré. Le coffre du dessus est posé sur un hopper, que la turtle verrouille par un signal de redstone, afin que les items retirés ne retournent pas dans les premiers slots de l'autre coffre. Lorsque l'item désiré est récupéré, il n'y a plus qu'à déverrouiller le hopper pour que le contenu regagne son coffre d'origine.
- screenshots:
En interraction avec de simples computeurs, l'Inventory interface pourrait faire office de sonde, notament dans les colonnes de dropper, hopper ou coffres se déversant les uns dans les autres.
Il pourrait également servir comme d'un monayeur, adapté à n'importe quelle forme d'échange. Le nom des items renommés pourrait faire office de référence, ou de signature.
- Voici plusieurs exemples de données:
Livre enchanté Looting 3 :- Code:
{
Enchants = {},
lifeMaxDuration = 0,
lifeDuration = 0,
displayName = "Enchanted Book",
stackSize = 1,
slot = 0,
isItemDamaged = false,
maxStackSize = 1,
isStackable = false,
metadata = 0,
isItemEnchantable = false,
hasDisplayName = false,
name = "minecraft:enchanted_book",
datatags = {
Count = 1,
tag = {
StoredEnchantments = {
{
id = 21,
lvl = 3,
},
},
},
Damage = 0,
id = "minecraft:enchanted_book",
},
isEnchanted = false,
repairCost = 0,
}
épée enchantée Looting 3, légèrement endommagée :- Code:
{
Enchants = {
{
enchantName = "lootBonus",
enchantLvl = 3,
},
},
lifeMaxDuration = 1561,
lifeDuration = 1559,
displayName = "Diamond Sword",
stackSize = 1,
slot = 0,
isItemDamaged = true,
maxStackSize = 1,
isStackable = false,
metadata = 2,
isItemEnchantable = false,
hasDisplayName = false,
name = "minecraft:diamond_sword",
datatags = {
Count = 1,
tag = {
ench = {
{
id = 21,
lvl = 3,
},
},
RepairCost = 1,
},
Damage = 2,
id = "minecraft:diamond_sword",
},
isEnchanted = true,
repairCost = 1,
}
Une page imprimée en noir, avec le texte "Hello world" :- Code:
{
Enchants = {},
lifeMaxDuration = 0,
lifeDuration = 0,
displayName = "Printed Page",
stackSize = 1,
slot = 0,
isItemDamaged = false,
maxStackSize = 1,
isStackable = false,
metadata = 0,
isItemEnchantable = false,
hasDisplayName = false,
name = "computercraft:printout",
datatags = {
Count = 1,
tag = {
title = "test",
line8 = " ",
line11 = " ",
colour14 = "fffffffffffffffffffffffff",
colour20 = "fffffffffffffffffffffffff",
line15 = " ",
colour10 = "fffffffffffffffffffffffff",
line14 = " ",
line3 = " ",
line16 = " ",
line1 = " ",
line18 = " ",
colour0 = "fffffffffffffffffffffffff",
colour19 = "fffffffffffffffffffffffff",
pages = 1,
line13 = " ",
line20 = " ",
colour16 = "fffffffffffffffffffffffff",
colour8 = "fffffffffffffffffffffffff",
colour2 = "fffffffffffffffffffffffff",
line6 = " ",
line10 = " ",
colour17 = "fffffffffffffffffffffffff",
colour9 = "fffffffffffffffffffffffff",
colour13 = "fffffffffffffffffffffffff",
line4 = " ",
line0 = "hello world ",
colour11 = "fffffffffffffffffffffffff",
colour3 = "fffffffffffffffffffffffff",
line9 = " ",
colour7 = "fffffffffffffffffffffffff",
colour18 = "fffffffffffffffffffffffff",
colour4 = "fffffffffffffffffffffffff",
colour6 = "fffffffffffffffffffffffff",
colour12 = "fffffffffffffffffffffffff",
line7 = " ",
line2 = " ",
line17 = " ",
colour15 = "fffffffffffffffffffffffff",
line5 = " ",
colour1 = "fffffffffffffffffffffffff",
line19 = " ",
line12 = " ",
colour5 = "fffffffffffffffffffffffff",
},
Damage = 0,
id = "computercraft:printout",
},
isEnchanted = false,
repairCost = 0,
}
Un livre non signé : (Avec "Hello world" écrit en première page)- Code:
{
Enchants = {},
lifeMaxDuration = 0,
lifeDuration = 0,
displayName = "Book and Quill",
stackSize = 1,
slot = 0,
isItemDamaged = false,
maxStackSize = 1,
isStackable = false,
metadata = 0,
isItemEnchantable = false,
hasDisplayName = false,
name = "minecraft:writable_book",
datatags = {
Count = 1,
tag = {
pages = {},
},
Damage = 0,
id = "minecraft:writable_book",
},
isEnchanted = false,
repairCost = 0,
}
Un livre signé, et titre "Mon bouquin" : (Avec "Hello world" écrit en première page)- Code:
{
Enchants = {},
lifeMaxDuration = 0,
lifeDuration = 0,
displayName = "Mon bouquin",
stackSize = 1,
slot = 0,
isItemDamaged = false,
maxStackSize = 16,
isStackable = true,
metadata = 0,
isItemEnchantable = false,
hasDisplayName = false,
name = "minecraft:written_book",
datatags = {
Count = 1,
tag = {
author = "SukaiPoppuGo",
pages = {},
title = "Mon bouquin",
},
Damage = 0,
id = "minecraft:written_book",
},
isEnchanted = false,
repairCost = 0,
}
à fin de test, voici le programme que j'ai utilisé. Il analyse l'objet se trouvant dans le premier slot d'un coffre, et enregistre la table retournée dans un fichier :
- Code:
local s = peripheral.wrap("left")
local item = s.getItemInSlot(1)
local f = fs.open("data","w")
f.write(textutils.serialise(item))
f.close()
Dernière édition par skypop le Mar 23 Aoû - 23:05, édité 1 fois
skypop- Messages : 95
Date d'inscription : 25/07/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Merci beaucoup a toi d'avoir fais ce tuto sur notre mod
Si tu veut des source ou explication sur d'autre block envoie nous un message
a moi,shira ou clem105.
Sur ce ciao et a plus en jeu.
Si tu veut des source ou explication sur d'autre block envoie nous un message
a moi,shira ou clem105.
Sur ce ciao et a plus en jeu.
dydy70310- Messages : 1
Date d'inscription : 05/04/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Je fait juste quelque precision
Ca marche sur le brewing stand mais pas sur enclume et table d'enchantement
Pour ce qui est des minecart il sera possible mais pas avec l'inventoryInterface mais avec le EntityDetector
Il sera possible de scanner les turtle dans une future Maj
Ciao
Ca marche sur le brewing stand mais pas sur enclume et table d'enchantement
Pour ce qui est des minecart il sera possible mais pas avec l'inventoryInterface mais avec le EntityDetector
Il sera possible de scanner les turtle dans une future Maj
Ciao
dydy70310- Messages : 1
Date d'inscription : 05/04/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Bonne nouvelle
Un autre bloc de computercraft qu'il pourrait être utile de scanner, c'est l'imprimante. Car ça permettrais de développer une imprimante couleur très fiable. En tout cas plus fiable et plus compacte que ce que j'ai pu envisager jusque là (mais j'y suis pas encore)
Pour info, au sujet de la table d'enchantement, elle est bien lue par la fonction getInventoryType() qui retourne "EnchantmentTable". Ce n'est pas le cas de l'enclume en effet.
Un autre bloc de computercraft qu'il pourrait être utile de scanner, c'est l'imprimante. Car ça permettrais de développer une imprimante couleur très fiable. En tout cas plus fiable et plus compacte que ce que j'ai pu envisager jusque là (mais j'y suis pas encore)
Pour info, au sujet de la table d'enchantement, elle est bien lue par la fonction getInventoryType() qui retourne "EnchantmentTable". Ce n'est pas le cas de l'enclume en effet.
skypop- Messages : 95
Date d'inscription : 25/07/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Merci de ta réponse
Ca fait nous fait extremement plaisir de voir que notre travail plait au joueur
J'ai deja noter l'idee d'un plus grosse imprimante mais ayant changer de pc et étant en vacance je ne peut pas developper pour le moment je m'y remet a la rentré
A+
Ca fait nous fait extremement plaisir de voir que notre travail plait au joueur
J'ai deja noter l'idee d'un plus grosse imprimante mais ayant changer de pc et étant en vacance je ne peut pas developper pour le moment je m'y remet a la rentré
A+
dydy70310- Messages : 1
Date d'inscription : 05/04/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Juste au cas ou, je précise ma suggestion : c'est que l'Inventory Interface puisse scanner l'inventaire d'une imprimante computercraft. L'imprimante couleur, c'est juste le projet que j'ai derrière la tête (une machine à construire ingame), et qui motive cette suggestion.
skypop- Messages : 95
Date d'inscription : 25/07/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Je viens de remarquer que le World Interface, fait doublon aux fonctionnalités de l'Inventory Interface.
Par sa fonction getBlockInfos() qui délivre toutes les informations de n'importe quel bloc, où qu'il soit, sans contrainte... Si le bloc visé est un conteneur, on obtient toutes les données du contenu, et absolument toutes.
Ce n'est que mon avis, dans le jeu on a pas d'intérêt à utiliser l'Inventory Interface, si un seul World Interface permet de scanner tous les conteneur du monde. Il serait sans doute préférable de réduire la quantité de données renvoyées par getBlockInfos. Pourquoi pas limiter à ce que que rendre la fonction turtle.inspect().
Par sa fonction getBlockInfos() qui délivre toutes les informations de n'importe quel bloc, où qu'il soit, sans contrainte... Si le bloc visé est un conteneur, on obtient toutes les données du contenu, et absolument toutes.
Ce n'est que mon avis, dans le jeu on a pas d'intérêt à utiliser l'Inventory Interface, si un seul World Interface permet de scanner tous les conteneur du monde. Il serait sans doute préférable de réduire la quantité de données renvoyées par getBlockInfos. Pourquoi pas limiter à ce que que rendre la fonction turtle.inspect().
skypop- Messages : 95
Date d'inscription : 25/07/2016
Re: [Life is peripheral] Inventory Interface (tuto ?)
Une remarque qui semble totalement justifiée, sans doute réduirons nous en effet les infos au seul nom du contenaire.
|Clem105|- Messages : 12
Date d'inscription : 07/04/2016
Sujets similaires
» Trieur à mobs [Vanilla] [CC] [Life is peripheral]
» Entity Detector getEntityList : Range (rayon) [Life id peripheral]
» Le Saviez-vous [peripheral.wrap (computer, turtle)]
» Entity Detector getEntityList : Range (rayon) [Life id peripheral]
» Le Saviez-vous [peripheral.wrap (computer, turtle)]
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum