Objet qui s'use
-
@‘EclipseOnFire’:
Essaye avec le code que j’ai conseillé, l’exception vient du fait que la boucle dépasse la taille de la liste.
for(ItemStack i : player.inventory.mainInventory){ if(i != null && i.itemID == itemId){ return i; } return -1; }Regarde bien ce que tu fais ici. i est un ItemStack, et tu return i or la fonction est un int. Ça ne peux pas fonctionner …
Si j’ai utiliser un nombre i c’est pas pour rien, je connais aussi les itérateurs, mais ils ne convient pas dans ce cas.Je comprends pas pourquoi il return -1 alors que ton code vérifie que le joueur à bien l’item sur lui, c’est étrange.
Tu peux faire du debug ?
private int getItemIntoInventory(EntityPlayer player, int itemId) { for(int i = 0; i < player.inventory.mainInventory.lenth; i ++) { if(player.inventory.mainInventory* != null && player.inventory.mainInventory*.itemID == itemId) { return i; System.out.println("l'item se trouve dans le slot : " + i); } } System.out.println("l'item non trouvé"); return -1; }EDIT : j’ai mit le return -1 au mauvais endroit, c’est pour ça x)
-
Parfait, ça marche, sauf que la boite de munition ne se détruit pas lorsqu’elle est vide.
-
Remplace
player.inventory.mainInventory[getItemIntoInventory(player, EastonIsland.I9mm.itemID)].damageItem(1, player);par :
int slotId = getItemIntoInventory(player, EastonIsland.I9mm.itemID); player.inventory.mainInventory[slotId].damageItem(1, player); if(player.inventory.mainInventory[slotId].getItemDamage == 0) { player.inventory.mainInventory[slotId] = null; } -
Je vire mes posts ça va alléger !
-
Une erreur a
int slotId = player.inventory.mainInventory[getItemIntoInventory(player, EastonIsland.I9mm.itemID)];:```
Type mismatch: cannot convert from ItemStack to int -
oups x)
int slotId = getItemIntoInventory(player, EastonIsland.I9mm.itemID); -
Parfait, merci.
-
En fait non, il m’envoie une erreur à :
java.lang.ArrayIndexOutOfBoundsException: -1La classe de l’item
package assets.ei.Weapons; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import assets.NolanCore.Data.EntityShoot; import assets.ei.Data.EastonIsland; import assets.ei.Data.EntityBullet; import assets.ei.Data.ItemWeapon; import assets.mgs.common.Main; public class W_GP extends ItemWeapon { private int timer = 0; public W_GP(int par1) { super(par1); this.maxStackSize = 1; this.setCreativeTab(EastonIsland.Ei3); } /* * private int getItemIntoInventory(EntityPlayer player, int itemId) { for(int i = 0; i < player.inventory.mainInventory.lenth; i ++) { if(player.inventory.mainInventory* != null && player.inventory.mainInventory*.itemID == itemId) { return i; } return -1; } }*/ public boolean onEntitySwing(EntityLivingBase e, ItemStack s) { if (s.getItemDamage() == 0) if (e instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) e; boolean flag = false; if (player.capabilities.isCreativeMode) { flag = true; } else { player.inventory.mainInventory[getItemIntoInventory(player, EastonIsland.I9mm.itemID)].damageItem(1, player); } if (flag) { EntityBullet bullet = new EntityBullet(e.worldObj, e, false, "GP", 5, 64); if (!e.worldObj.isRemote) e.worldObj.spawnEntityInWorld(bullet); e.worldObj.playSoundAtEntity(e, "ei:pistol_fire", 0.5f, 1); onUsed(s, e); int slotId = getItemIntoInventory(player, EastonIsland.I9mm.itemID); player.inventory.mainInventory[slotId].damageItem(1, player); if(player.inventory.mainInventory[slotId].getItemDamage() == 0) { player.inventory.mainInventory[slotId] = null; } } else e.worldObj.playSoundAtEntity(e, "ei:ClipEmpty_Pistol",0.5f, 1); } return true; } private int getItemIntoInventory(EntityPlayer player, int itemId) { for(int i = 0; i < player.inventory.mainInventory.length; i ++) { if(player.inventory.mainInventory* != null && player.inventory.mainInventory*.itemID == itemId) { return i; } } System.out.println("l'item non trouvé"); return -1; } public boolean onBlockStartBreak(ItemStack s, int x, int y, int z,EntityPlayer player) { return true; } public boolean hitEntity(ItemStack s, EntityLivingBase e, EntityLivingBase source) { if (s.getItemDamage() == 0) if (source instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) source; boolean flag = false; if (player.capabilities.isCreativeMode) { flag = true; } else { flag = player.inventory .consumeInventoryItem(EastonIsland.I9mm.itemID); } if (flag) { if (!e.worldObj.isRemote) new EntityBullet(source.worldObj, source, false, "GP",5, 64).onImpact(new MovingObjectPosition(e)); onUsed(s, source); } else source.worldObj.playSoundAtEntity(source,"ei:ClipEmpty_Pistol", 1, 1); } return false; } private void onUsed(ItemStack s, EntityLivingBase e) { s.setItemDamage(20); } public void onUpdate(ItemStack s, World w, Entity p, int i, boolean flag) { super.onUpdate(s, w, p, i, flag); if (s.getItemDamage() > 0) { s.setItemDamage(s.getItemDamage() - 1); } } @Override public void registerIcons(IconRegister iconRegister) { itemIcon = iconRegister.registerIcon("ei:Pistolet Browning GP"); } } -
int slotId = getItemIntoInventory(player, EastonIsland.I9mm.itemID); if(slotId >= 0) { player.inventory.mainInventory[slotId].damageItem(1, player); if(player.inventory.mainInventory[slotId].getItemDamage() == 0) { player.inventory.mainInventory[slotId] = null; } }Tu n’avais pas de munition quand tu as eu le crash, si ?
-
Non, je n’en n’avais pas