Item avec vie
-
Bonjour,
J’ai créer un item a vec une durabilité jusque la tous va bien sa marche super bien. Sauf que je voudrai le repaire dans un table de craft sauf que comme le metadata change bah on peut pas le repaire comme c’est pas le meme donc j’ai pensé de mettre un metadata dans le craft sauf que sa ne marche pas sa crash a chaque fois.
Si quelle qu’un a une idée
Et je voulias savoir aussi si ou pouvais detecté pour pas que les gens mettre 2 fois le meme object dans l’inventaire.
Merci d’avance pour vos aide
-
Dans la classes Item il y a une méthode isRepairable, essayé de regarder de ce côté
-
Pour ta deuxième question, si il s’agit d’un item que tu as crée, faut regarder dans sa méthode onUpdate. Sinon si il s’agit d’item vanilla, alors tick handler.
-
@‘AymericRed’:
Dans la classes Item il y a une méthode isRepairable, essayé de regarder de ce côté
package fr.darkvince.ultra; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class itemRepaire extends Item{ public itemRepaire() { this.maxStackSize = 1; } public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if (!world.isRemote && player.inventory.hasItemStack(new ItemStack(Main.itemRepaireIridium))) { } return stack; } public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected) { if(entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) entity; for(int i = 0; i < 4; i++) { ItemStack armor = player.getCurrentArmor(i); if(armor != null) { if(armor.getItemDamage() > 0 && stack.getItemDamage() < stack.getMaxDamage()) { stack.setItemDamage(stack.getItemDamage() + 1); armor.setItemDamage(armor.getItemDamage() - 1); } } } } } } Voilà ma class
-
Alors déjà t’a pas mis le nom de fonction que je t’ai donné et je te conseille de mettre des @Override devant chaque fonction de l’item.
Je vais vois comment que c’est codé pour l’épéeTu veux dans une enclume ou dans une table de craft, ou les deux ?
-
@‘AymericRed’:
Alors déjà t’a pas mis le nom de fonction que je t’ai donné et je te conseille de mettre des @Override devant chaque fonction de l’item.
Je vais vois comment que c’est codé pour l’épéeJe c’est que je les pas mis c’est juste pour te montrer mon code mais je veut juste changé le craft car sinon tous marche
-
T’es sur que ça marche pas ? T’as bien register une recette avec ton item (ne mets pas la metadata) ?
Parce que d’après ce que je vois dans le code vanilla, ça devrait marcher comme ça. -
public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { return repair != null && repair.getItem() == L'itemQueTuVeuxPourRéparer; }
-
Pour l’enclume il faut ça mais par contre ça changera rien pour dans la table de craft.
-
@‘robin4002’:
public boolean getIsRepairable(ItemStack toRepair, ItemStack repair) { return repair != null && repair.getItem() == L'itemQueTuVeuxPourRéparer; }
Sa c’est pour l’enclume ? car moi je voudrai dans la table de craft
deit: ```java
GameRegistry.addRecipe(new ItemStack(Main.itemRepaireIridium, 1), new Object[] {“OOO”, “OSO”, “0OO”, ‘O’, Main.itemRepairePoudreUltra, ‘S’, Main.itemRepaireIridium, 10000});Voilà se que j'ai essayé 10000 est le metadata de l'item a zero de dura
-
Pour la première question, oui
Et pour le deuxième je pensais qu’en fait tu voulais juste mettre ton Item endommagé et un autre info et que ça en donne 1 réparé, pas que tu voulais faire comme ça -
Ah si c’est pour dans la table de craft fait comme ça :
GameRegistry.addRecipe(new ItemStack(Main.itemRepaireIridium, 1), new Object[] {"OOO", "OSO", "OOO", 'O', Main.itemRepairePoudreUltra, 'S', new ItemStack(Main.itemRepaireIridium, 1, OreDictionary.WILDCARD_VALUE)});
-
@‘robin4002’:
Ah si c’est pour dans la table de craft fait comme ça :
GameRegistry.addRecipe(new ItemStack(Main.itemRepaireIridium, 1), new Object[] {"OOO", "OSO", "0OO", 'O', Main.itemRepairePoudreUltra, 'S', new ItemStack(Main.itemRepaireIridium, 1, OreDictionary.WILDCARD_VALUE)});
Merci est vous aurai pas une idée pour que je puisse avoir qu’une seul fois l’item dans l’inventaire
-
Ça c’est plus compliqué, il faut que tu parcoures l’inventaire et que tu vérifies pour chaque slot l’item
-
@‘AymericRed’:
Ça c’est plus compliqué, il faut que tu parcoures l’inventaire et que tu vérifies pour chaque slot l’item
Y a pas d’autre solution ? Car la sa va etre long
-
Non je connais pas d’autre solution
-
C’est pas long, c’est juste une petite boucle à faire dans un event de tick de joueur.
-
Bonjour, je pense qu’il vaut mieux ne pas faire de boucle car ça pourrait surcharger Minecraft si elle est appelée en permanence, je te donne un exemple pour pas que l’Item soit ramassé (en une ligne), après il te reste à faire l’event pour pas que l’Item soit récupéré d’un inventaire (c’est la même chose ;))
@SubscribeEvent public void EntityItemPickup(EntityItemPickupEvent e) { e.setCanceled(e.entity instanceof EntityPlayer && e.item.getEntityItem().getItem() instanceof TonItem && e.entityPlayer.inventory.hasItem(Main.tonItem)); }
-
C’est pas une petite boucle comme ça qui va vraiment surcharger le jeu ^^
Mais ta solution me paraît pas mal -
Ouais après pour quand on prend un item dans un inventaire, à ma connaissance il n’y a pas d’event (je me trompe peut-être).