Bloc repaire



  • Bonjour,

    Je suis entreint de faire un block que quand on marche dessus il repaire notre armure et nos item

    package fr.darkvince.ultrav2;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class Repaire extends Block{
    
    protected Repaire(Material p_i45394_1_) {
    super(p_i45394_1_);
    // TODO Auto-generated constructor stub
    }
    public void onEntityWalking(World world, int x, int y, int z, Entity entity)
        {
    ItemStack stack = null;
    
      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);
             }
           }
         }
         for (int i = 0; i < 9; i++)
         {
           ItemStack targetStack = player.inventory.getStackInSlot(i);
           if ((targetStack != null) && (targetStack.getItem().isRepairable()) && 
             (targetStack != null) && (targetStack.getItem() != Main.hoeLinarite)) {
             if ((targetStack.getItemDamage() > 0) && (stack.getItemDamage() < stack.getMaxDamage()))
             {
               stack.setItemDamage(stack.getItemDamage() + 1);
               targetStack.setItemDamage(targetStack.getItemDamage() - 1);
             }
           }
         }
       }
     }
    
    }
    
    

    Je pense que sa vien du null mais je c'est pas part quoi le remplacer

    –-- Minecraft Crash Report ----
    // Quite honestly, I wouldn't worry myself about that.

    Time: 30/11/16 16:06
    Description: Ticking entity

    java.lang.NullPointerException: Ticking entity
    at fr.darkvince.ultrav2.Repaire.onEntityWalking(Repaire.java:39)
    at net.minecraft.entity.Entity.moveEntity(Entity.java:889)
    at net.minecraft.entity.EntityLivingBase.moveEntityWithHeading(EntityLivingBase.java:1680)
    at net.minecraft.entity.player.EntityPlayer.moveEntityWithHeading(EntityPlayer.java:1862)
    at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2023)
    at net.minecraft.entity.player.EntityPlayer.onLivingUpdate(EntityPlayer.java:612)
    at net.minecraft.client.entity.EntityPlayerSP.onLivingUpdate(EntityPlayerSP.java:299)
    at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:1816)
    at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:327)
    at net.minecraft.client.entity.EntityClientPlayerMP.onUpdate(EntityClientPlayerMP.java:96)
    at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2298)
    at net.minecraft.world.World.updateEntity(World.java:2258)
    at net.minecraft.world.World.updateEntities(World.java:2108)
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:2097)
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
    at net.minecraft.client.Minecraft.run(Minecraft.java:962)
    at net.minecraft.client.main.Main.main(Main.java:164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)



  • Ridicule je trouve…
    Faudra quand même un jour apprendre à résoudre tout seul des NPE _
    Surtout là ! Plus visible tu peux pas !



  • @'Plaigon':

    Ridicule je trouve…
    Faudra quand même un jour apprendre à résoudre tout seul des NPE _
    Surtout là ! Plus visible tu peux pas !

    Je c'est que sa vient de cette ligne je pense que c'est a cause stack que j'ai mis en null

     if ((targetStack.getItemDamage() > 0) && (stack.getItemDamage() < stack.getMaxDamage()))
    

  • Administrateurs

    Je vais créer une nouvelle règle : interdiction de demande de l'aide pour un NPE …

    EDIT : oui c'est bien ça, tu as créé un objet qui a pour valeur null, puis tu as appelé une fonction de cette objet. Forcement ça ne fonctionne pas.



  • Du coup j'ai changer un peu mon code ma sa fonctionne toujours pas

    public void onEntityWalking(World world, int x, int y, int z, Entity entity)
        {
    
      if ((entity instanceof EntityPlayer))
       {
         EntityPlayer player = (EntityPlayer)entity;
    ItemStack stack = player.getItemInUse();
         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);
             }
           }
         }
         for (int i = 0; i < 9; i++)
         {
           ItemStack targetStack = player.inventory.getStackInSlot(i);
           if ((targetStack != null) && (targetStack.getItem().isRepairable()) && 
             (targetStack != null) && (targetStack.getItem() != Main.hoeLinarite)) {
             if ((targetStack.getItemDamage() > 0) && (stack.getItemDamage() < stack.getMaxDamage()))
             {
               stack.setItemDamage(stack.getItemDamage() + 1);
               targetStack.setItemDamage(targetStack.getItemDamage() - 1);
             }
           }
         }
       }
     }
    

    Si vous pouvais juste m'expliqué l'erreur pour que je puisse comprendre


  • Administrateurs

    Tout ce qui est en rapport avec stack, c'est pour faire un item qui répare les autres.
    Toi tu veux juste le bloc et non cette item, donc retires cette ligne :
    ItemStack stack = player.getItemInUse();

    Et toutes les conditions qui en dépendent :
    if ((armor.getItemDamage() > 0) && (stack.getItemDamage() < stack.getMaxDamage()))
    devient :
    if (armor.getItemDamage() > 0)

    stack.setItemDamage(stack.getItemDamage() + 1); -> à retirer.
    etc …