• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Crash Custom Furnace

    1.7.x
    1.7.10
    2
    3
    1278
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • sosoh
      sosoh dernière édition par

      Bonjour, j’ai suivis le tutoriel de bodri afin de faire un nouveau four (ici un chaudron), je voudrais pouvoir créer des recettes a 5 ingrédients et d’autres a moins. J’enregistre alors mes recettes a moins de 5 ingrédients avec des “null” pour dire que le slot doit être vide, mais je crash:

      0
      
      1
      2
      3
      4
      5
      [16:41:45] [Server thread/ERROR]: Encountered an unexpected exception
      net.minecraft.util.ReportedException: Ticking block entity
      at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:709) ~[MinecraftServer.class:?]
      at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) ~[MinecraftServer.class:?]
      at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) ~[IntegratedServer.class:?]
      at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
      at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
      Caused by: java.lang.NullPointerException
      at fr.sosoh.hogsmod.common.recipes.CauldronRecipes.isSameKey(CauldronRecipes.java:66) ~[CauldronRecipes.class:?]
      at fr.sosoh.hogsmod.common.recipes.CauldronRecipes.getSmeltingResult(CauldronRecipes.java:55) ~[CauldronRecipes.class:?]
      at fr.sosoh.hogsmod.common.blocks.tileentity.TileEntityCauldron.canSmelt(TileEntityCauldron.java:196) ~[TileEntityCauldron.class:?]
      at fr.sosoh.hogsmod.common.blocks.tileentity.TileEntityCauldron.updateEntity(TileEntityCauldron.java:211) ~[TileEntityCauldron.class:?]
      at net.minecraft.world.World.updateEntities(World.java:2160) ~[World.class:?]
      at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515) ~[WorldServer.class:?]
      at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703) ~[MinecraftServer.class:?]
      … 4 more
      

      Voila ma classe:
      :::

      ​package fr.sosoh.hogsmod.common.recipes;
      
      import java.util.HashMap;
      import java.util.Iterator;
      import java.util.Map;
      import java.util.Map.Entry;
      
      import fr.sosoh.hogsmod.common.Hogsmod;
      import net.minecraft.block.Block;
      import net.minecraft.init.Blocks;
      import net.minecraft.init.Items;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      
      public class CauldronRecipes {
      
      private static final CauldronRecipes smeltingBase = new CauldronRecipes();
      private Map smeltingList = new HashMap();
      
      public CauldronRecipes()
      {
      this.addRecipe(Hogsmod.itemBottle, Items.coal, Items.apple, Items.apple, Items.apple, null, null, new ItemStack(Blocks.diamond_block));
      }
      
      public void addRecipe(ItemStack bottle, ItemStack coal, ItemStack ingredient1, ItemStack ingredient2,
      ItemStack ingredient3, ItemStack ingredient4, ItemStack ingredient5, ItemStack result) //Cette fonction de comprend que des ItemStack, c'est celle qui ajoute les recettes à la HashMap
      {
      ItemStack[] stackList = new ItemStack[]{bottle, coal, ingredient1, ingredient2, ingredient3, ingredient4, ingredient5};
      this.smeltingList.put(stackList, result);
      }
      
          public void addRecipe(Item bottle, Item coal, Item item1, Item item2, Item item3, Item item4, Item item5, ItemStack result) //Coal is item
      {
      this.addRecipe(new ItemStack(bottle), new ItemStack(coal), new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), new ItemStack(item4), new ItemStack(item5), result);
      }
      
          public void addRecipe(Item bottle, Block coal, Item item1, Item item2, Item item3, Item item4, Item item5, ItemStack result) //Coal is block
      {
      this.addRecipe(new ItemStack(bottle), new ItemStack(Item.getItemFromBlock(coal)), new ItemStack(item1), new ItemStack(item2), new ItemStack(item3), new ItemStack(item4), new ItemStack(item5), result);
      }
      
      public ItemStack getSmeltingResult(ItemStack[] stack) //En argument : un tableau avec le contenu des trois slots d'input
      {
      Iterator iterator = this.smeltingList.entrySet().iterator();
         Entry entry;
      
         do
         {
          if (!iterator.hasNext()) // Si il n'y a plus de recettes dans la liste
             {
              return null; //Il n'y a pas de recette correspondante
             }
          entry = (Entry)iterator.next(); //prend la recette suivante
         }
         while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); //Check si le tableau passé en argument correspond à celui de la recette, vous avez une erreur ici, on crée la fonction tout de suite.
      
          return (ItemStack)entry.getValue(); //retourne l'itemstack : resultat de la recette
      }
      
      private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2)
      {
      boolean isSame = false;
      for(int i=0; i<=6; i++)
      {
      System.out.println(i);
      if(stackList*.getItem() == stackList2*.getItem())
      {
      isSame = true;
      }
      else
      {
      return false;
      }
      }
      return isSame;
      }
      
      public Map getSmeltingList()
      {
             return this.smeltingList;
          }
      
      public static CauldronRecipes smelting()
      {
      return smeltingBase;
      }
      }
      

      :::

      Merci de votre aide 🙂

      Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

      1 réponse Dernière réponse Répondre Citer 0
      • SCAREX
        SCAREX dernière édition par

        Le copié-collé est une TRES TRES TRES TRES mauvaise idée premièrement.

        Deuxièmement, essaye avec çà :

        
        if(stackList* != null && stackList2* != null && stackList*.getItem() == stackList2*.getItem())
        {
        isSame = true;
        }
        else
        {
        return false;
        }
        
        

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

        1 réponse Dernière réponse Répondre Citer 0
        • sosoh
          sosoh dernière édition par

          J’ai copié collé mais j’ai compris les méthodes, tu peux voir que les méthodes sont différentes car ce que je veux est différent, après les méthodes communes sont les mêmes… Avec ce code ça ne crash plus et ça ne cuit pas non plus 😕 J’ai reussi:

          ​if(stackList* == null && stackList2* == null)
          
          {
          isSame = true;
          }
          else if(stackList* != null && stackList2* != null && stackList*.getItem() == stackList2*.getItem())
          {
          isSame = true;
          }
          else
          {
          return false;
          }
          

          Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

          1 réponse Dernière réponse Répondre Citer 0
          • 1 / 1
          • Premier message
            Dernier message
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB