• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Crash Custom Furnace

    1.7.x
    1.7.10
    2
    3
    1151
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • sosoh
      sosoh last edited by

      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 Reply Last reply Reply Quote 0
      • SCAREX
        SCAREX last edited by

        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 Reply Last reply Reply Quote 0
        • sosoh
          sosoh last edited by

          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 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Design by Woryk
          Contact / Mentions Légales

          MINECRAFT FORGE FRANCE © 2018

          Powered by NodeBB