Résolu AddRecipe avec des items de son mod
-
Bonjour, Bonsoir,
Je tente actuellement de faire des recettes pour une machine type four.
J’aimerais faire une recette comprenant des items de mon mod, seulement je ne sais pas comment faire pour que ce soit le bon metadata.
Je sais juste faire Monmod.itemMod… Comme ça:this.addRecipe(Mod.itemMod, Mod.itemMod, Mod.itemMod, new ItemStack(Mod.itemMod));
Ce qui me crafte Mod.itemMod de metadata 0 “évidemment”.
Quelle est la bonne notation svp.
-
new ItemStack(block, amount, meta)
-
Simple, Rapide et Efficace.
Merci pour cette réponse.Edit:
Par contre j’ai un problème pour le recette en elle même.
N’importe quel metadata de l’item me retourne toujours comme résultat l’item metadata 0.Où est ce que je peux préciser qu’il faut vérifier le matadata de l’item dans mon code svp.
:::
public class MachineStupRecipes { private static final MachineStupRecipes smeltingBase = new MachineStupRecipes(); private Map <itemstack[], itemstack="">smeltingList = new HashMap<itemstack[], itemstack="">(); public MachineStupRecipes() { this.addRecipe(new ItemStack(Modpg.itemPG, 1, 4),new ItemStack(Modpg.itemPG, 1, 5), new ItemStack(Modpg.itemPG, 1, 6), new ItemStack(Modpg.itemPG, 1, 1)); this.addRecipe(new ItemStack(Modpg.itemPG, 1, 7),new ItemStack(Modpg.itemPG, 1, 8), new ItemStack(Modpg.itemPG, 1, 9), new ItemStack(Modpg.itemPG, 1, 2)); this.addRecipe(new ItemStack(Modpg.itemPG, 1, 10),new ItemStack(Modpg.itemPG, 1, 11), new ItemStack(Modpg.itemPG, 1, 12), new ItemStack(Modpg.itemPG, 1, 3)); } public void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3, ItemStack stack4) { ItemStack[] stackList = new ItemStack[]{stack1, stack2, stack3}; this.smeltingList.put(stackList, stack4); } public void addRecipe(Item item1, Item item2, Item item3, ItemStack stack) { this.addRecipe(new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), stack); } // public void addRecipe(Block block1, Item item2, Item item3, ItemStack stack) // { // this.addRecipe(Item.getItemFromBlock(block1), item2, item3, stack); // } // // public void addRecipe(Block block1, Block block2, Item item3, ItemStack stack) // { // this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), item3, stack); // } // // public void addRecipe(Block block1, Block block2, Block block3, ItemStack stack) // { // this.addRecipe(Item.getItemFromBlock(block1), Item.getItemFromBlock(block2), Item.getItemFromBlock(block3), stack); // } @SuppressWarnings("rawtypes") public ItemStack getSmeltingResult(ItemStack[] stack) { Iterator iterator = this.smeltingList.entrySet().iterator(); Entry entry; do { if (!iterator.hasNext()) { return null; } entry = (Entry)iterator.next(); } while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); return (ItemStack)entry.getValue(); } private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2) { boolean isSame = false; for(int i=0; i<=2; i++) { if(stackList*.getItem() == stackList2*.getItem()) { isSame = true; } else { return false; } } return isSame; } @SuppressWarnings("rawtypes") public Map getSmeltingList() { return this.smeltingList; } public static MachineStupRecipes smelting() { return smeltingBase; } } }
:::</itemstack[],></itemstack[],>
-
Il faut que tu modifie la fonction isSameKey(ItemStack[], ItemStack[]) de façon à check aussi le metadata
-
Je ne sais malheureusement pas faire ça justement x]
C’est un truc qui permettrait de compléter ton tuto d’ailleurs, je suppose que d’autres personnes auront ce type de questions.
ps: Après je pourrais m’amuser à mettre des “, metadata” partout jusqu’à trouver où ça fonctionne mais j’aimerais plutôt comprendre comment intégrer cet argument.
-
Bah, je t’envoi ça dans pas longtemps mais sans tester, tu me dira si ça marche
EDIT :
private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2) { boolean isSame = false; for(int i = 0; i < TileEntityMachinePala.INPUT_SLOTS; i++) { if(stackList*.getItem() == stackList2*.getItem() && stackList*.getItemDamage() == stackList2*.getItemDamage()) { isSame = true; } else { return false; } } return isSame; }
-
Mmmh, ça demande de créer un field dans la classe de le TileEntity de la machine (que j’ai mis au nom du mien ici, au cas où tu demandes).
Mais ça ne semble rien changer, enfin si, aucun craft ne fonctionne.EDIT:
Rectification, ça fonctionne, j’avais juste à ne pas remettre la partie Input qui doit être propre à ta façon d’utiliser ta machine.
Je te remercie pour ces précieuses précisions quand à cette condition sur les metadata des items.
(ps: en bonus à ton tuto, ça a sa place je pense)
-
C’est ma faute je me suis trompé de classe à modifier, remplace TileEntityMachinePala.INPUT_SLOTS par le nombre de slots que tu as en input, c’est 3 dans ton cas il me semble
-
Au final j’ai mis comme ça et tout fonctionne.
private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2) { boolean isSame = false; for(int i=0; i<=2; i++) { if(stackList*.getItem() == stackList2*.getItem() && stackList*.getItemDamage() == stackList2*.getItemDamage()) { isSame = true; } else { return false; } } return isSame; }
J’ai laissé i<=2 comme dans ton tuto.
Je pense pouvoir passer en résolu.
-
Oui, en fait il y avait que la condition à changer