Deux petites erreurs dans mon four



  • Bonjour,

    J'ai récemment créer un four, surtout pour m’entraîner avec les container de process , mais j'ai deux petites erreurs qui arrive dans le jeux

    1. Quand je met à cuire/fondre des items stackés, le stack disparais et je me retrouve avec un seul item au résultat
      Réparer ! juste a la ligne 244 il fallait pas faire :

      if(this.furnaceItemStacks[0].stackSize **>**= 0){
      this.furnaceItemStacks[0] = null;
      }
      

      mais

      if(this.furnaceItemStacks[0].stackSize **<**= 0){
      this.furnaceItemStacks[0] = null;
      }
      
    2. Je ne peux pas mettre les carburants de base du jeu mais seulement ceux que j'ai mis pour le four

      sufit seulement de copier ça dans le getItemBurnTime dans le til_entity du four

      if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200;
      if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200;
      if (item instanceof ItemHoe && ((ItemHoe)item).getToolMaterialName().equals("WOOD")) return 200;
      if (item == Items.stick) return 100;
      if (item == Items.coal) return 1600;
      if (item == Items.lava_bucket) return 20000;
      if (item == Item.getItemFromBlock(Blocks.sapling)) return 100;
      if (item == Items.blaze_rod) return 2400;
      


  • A mon avis sans ton code, on ne peut pas t'aider ^^



  • Comme j'ai dit avant il me semble que c'est un fichier qui gère la liste des items et le temps de combustion



  • J'ai rajouter le code source pour vous faciliter le travail !

    @'pulganr':

    Comme j'ai dit avant il me semble que c'est un fichier qui gère la liste des items et le temps de combustion

    Oui mais le problème c'est quel est ce fichier ^^'



  • Apparement personne veut m'aider


  • Administrateurs

    J'avais déjà regardé mais sans trouvé le problème, la je viens de regarder à nouveau je crois avoir trouvé où est le problème.
    Ta fonction
            public static int getItemBurnTime(ItemStack itemstack){
    ne m'a pas l'air correcte.

    Sur mon mod j'ai fait comme ça :

    ​    public static int getItemBurnTime(ItemStack stack)
       {
           return TileEntityFurnace.getItemBurnTime(stack);
       }
    

    Donc a mon avis tu devrais plutôt faire comme ça :

    ​    public static int getItemBurnTime(ItemStack stack)
       {
           if(stack == null)
           {
                   return 0;
           }
           else
           {
                   // les conditions pour tes items customs
    
                   return TileEntityFurnace.getItemBurnTime(stack);
           }
       }
    


  • @'robin4002':

    J'avais déjà regardé mais sans trouvé le problème, la je viens de regarder à nouveau je crois avoir trouvé où est le problème.
    Ta fonction
            public static int getItemBurnTime(ItemStack itemstack){
    ne m'a pas l'air correcte.

    Sur mon mod j'ai fait comme ça :

    ​    public static int getItemBurnTime(ItemStack stack)
       {
           return TileEntityFurnace.getItemBurnTime(stack);
       }
    

    Donc a mon avis tu devrais plutôt faire comme ça :

    ​    public static int getItemBurnTime(ItemStack stack)
       {
           if(stack == null)
           {
                   return 0;
           }
           else
           {
                   // les conditions pour tes items customs
           
                   return TileEntityFurnace.getItemBurnTime(stack);
           }
       }
    

    Nope … marche pas ... Je peux mettre les items de base mais leur valeur de cuisson est totalement bugué


  • Administrateurs

    Pourtant dans mon mod ça fonctionne très bien, c'est étrange 😕



  • Sûrement que dans ton mod tu n'a pas de carburant personnalisé

    EDIT : Nope vient pas de là non plus. Tu as dû coder quelque chose différemment c'est sûrement pour ça.



  • Pour mon four j'ai créer mon propre fichier de recettes crée en un et met le a la place de FurnaceRecipes et voit si sa marche

    ​     private boolean canSmelt(){
    
            if (this.slots[0] == null){
                return false;
            }else{
    
                ItemStack itemstack = FourArcRecipes.smelting().getSmeltingResult(this.slots[0]);
                if(itemstack == null) return false;
                if(this.slots[2] == null) return true;
                if(!this.slots[2].isItemEqual(itemstack)) return false;
                int result = slots[2].stackSize + (itemstack.stackSize);
                return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
    
            }
    
        }
    

    Ton fichier de recettes devrait ressembler a sa

    ​package com.bowser.robotic.common;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class FourArcRecipes {
    
        private static final FourArcRecipes SMELTING_BASE = new FourArcRecipes();
    
        private Map smeltingList = new HashMap();
        private Map experienceList = new HashMap();
    
        public static FourArcRecipes smelting() {
            return SMELTING_BASE;
        }
    
        //RECETTES FOUR A ARC
        private FourArcRecipes(){
            //this.addRecipie(Robotic.copperIngot, new ItemStack(Robotic.cuivreOre), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.tungsteneOre), new ItemStack(Robotic.tungsteneIngot), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.siliciumOre), new ItemStack(Robotic.siliciumIngot), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.cuivreOre), new ItemStack(Robotic.copperIngot), 0.8F);
    
        }
    
        public void addRecipie(Item item, ItemStack itemstack, float experience){
            this.addLists(item, itemstack, experience);
        }
    
        public void addLists(Item item, ItemStack itemstack, float experience){
            this.putLists(new ItemStack(item, 1, 32767), itemstack, experience);
        }
    
        public void putLists(ItemStack itemstack, ItemStack itemstack2, float experience){
            this.smeltingList.put(itemstack, itemstack2);
            this.experienceList.put(itemstack2, Float.valueOf(experience));
        }
    
        public ItemStack getSmeltingResult(ItemStack itemstack) {
            Iterator iterator = this.smeltingList.entrySet().iterator();
            Entry entry;
    
            do {
                if (!iterator.hasNext()) {
                    return null;
                }
                entry = (Entry) iterator.next();
            } while (!canBeSmelted(itemstack, (ItemStack) entry.getKey()));
            return (ItemStack) entry.getValue();
        }
    
        private boolean canBeSmelted(ItemStack itemstack, ItemStack itemstack2) {
            return itemstack2.getItem() == itemstack.getItem() && (itemstack2.getItemDamage() == 32767 || itemstack2.getItemDamage() == itemstack.getItemDamage());
        }
    
        public float giveExperience(ItemStack itemstack){
            Iterator iterator = this.experienceList.entrySet().iterator();
            Entry entry;
    
            do{
                if(!iterator.hasNext()){
                    return 0.0f;
                }
    
                entry = (Entry) iterator.next();
            }
            while(!this.canBeSmelted(itemstack, (ItemStack) entry.getKey()));
    
            if(itemstack.getItem().getSmeltingExperience(itemstack) != -1){
                    return itemstack.getItem().getSmeltingExperience(itemstack);
            }
    
            return ((Float) entry.getValue()).floatValue();
        }
    }
    


  • @'Bowser338':

    Pour mon four j'ai créer mon propre fichier de recettes crée en un et met le a la place de FurnaceRecipes et voit si sa marche

    ​     private boolean canSmelt(){
    
            if (this.slots[0] == null){
                return false;
            }else{
           
                ItemStack itemstack = FourArcRecipes.smelting().getSmeltingResult(this.slots[0]);
                if(itemstack == null) return false;
                if(this.slots[2] == null) return true;
                if(!this.slots[2].isItemEqual(itemstack)) return false;
                int result = slots[2].stackSize + (itemstack.stackSize);
                return (result <= getInventoryStackLimit() && result <= itemstack.getMaxStackSize());
               
            }
           
           
        }
    

    Ton fichier de recettes devrait ressembler a sa

    ​package com.bowser.robotic.common;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class FourArcRecipes {
    
        private static final FourArcRecipes SMELTING_BASE = new FourArcRecipes();
    
        private Map smeltingList = new HashMap();
        private Map experienceList = new HashMap();
    
        public static FourArcRecipes smelting() {
            return SMELTING_BASE;
        }
        
        //RECETTES FOUR A ARC
        private FourArcRecipes(){
            //this.addRecipie(Robotic.copperIngot, new ItemStack(Robotic.cuivreOre), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.tungsteneOre), new ItemStack(Robotic.tungsteneIngot), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.siliciumOre), new ItemStack(Robotic.siliciumIngot), 0.8F);
            this.addRecipie(Item.getItemFromBlock(Robotic.cuivreOre), new ItemStack(Robotic.copperIngot), 0.8F);
            
            
            
            
            
            
        }
        
        public void addRecipie(Item item, ItemStack itemstack, float experience){
            this.addLists(item, itemstack, experience);
        }
        
        public void addLists(Item item, ItemStack itemstack, float experience){
            this.putLists(new ItemStack(item, 1, 32767), itemstack, experience);
        }
        
        public void putLists(ItemStack itemstack, ItemStack itemstack2, float experience){
            this.smeltingList.put(itemstack, itemstack2);
            this.experienceList.put(itemstack2, Float.valueOf(experience));
        }
    
        public ItemStack getSmeltingResult(ItemStack itemstack) {
            Iterator iterator = this.smeltingList.entrySet().iterator();
            Entry entry;
    
            do {
                if (!iterator.hasNext()) {
                    return null;
                }
                entry = (Entry) iterator.next();
            } while (!canBeSmelted(itemstack, (ItemStack) entry.getKey()));
            return (ItemStack) entry.getValue();
        }
    
        private boolean canBeSmelted(ItemStack itemstack, ItemStack itemstack2) {
            return itemstack2.getItem() == itemstack.getItem() && (itemstack2.getItemDamage() == 32767 || itemstack2.getItemDamage() == itemstack.getItemDamage());
        }
        
        public float giveExperience(ItemStack itemstack){
            Iterator iterator = this.experienceList.entrySet().iterator();
            Entry entry;
            
            do{
                if(!iterator.hasNext()){
                    return 0.0f;
                }
                
                entry = (Entry) iterator.next();
            }
            while(!this.canBeSmelted(itemstack, (ItemStack) entry.getKey()));
            
            if(itemstack.getItem().getSmeltingExperience(itemstack) != -1){
                    return itemstack.getItem().getSmeltingExperience(itemstack);
            }
            
            return ((Float) entry.getValue()).floatValue();
        }
    }
    

    Hum… Je ne vois pas l'utilité car mon problème est juste que je ne peux pas utiliser les carburants de base



  • Ah oui excuse moi

    en regardant dans ton tile entity par rapport au getItemBurnTime

    ​public static int getItemBurnTime(ItemStack itemstack){              if(itemstack == null){  
    
                            return 0;
                  }else{
                           Item item = itemstack.getItem();
    
                            if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){
                                    Block block = Block.getBlockFromItem(item);
    
                                    if(block == ModBlocks.HoleChest)
    {
                                            return 512000;
                                    }
                            }
    
                            if(item == ModItems.awesomeCrystal) return 128000;
                            if(item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("awesomeToolMaterial")) return256000;
                            return GameRegistry.getFuelValue(itemstack);
                    }
            }
    

    voila les carburants de ton four ( qui ont des valeurs un peux folles xD 😞
    HoleChest
    awesomeCrystal
    et tout les outils du material awesomeToolMaterial

    Si je dit pas de conneries ton four marche uniquement avec ces 2 items ou blocks



  • exactement et j'ai changer les valeurs entre-temps aussi elles sont moins abusive xD



  • donc si tu rajoute les carburants de minecraft vanilla sa marche pas ?



  • le truc est que les valeurs sont complètements buguer quand je réussi à les ajouter donc 😕



  • tu met ces valeurs la ?

    ​
                if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200;
                if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200;
                if (item instanceof ItemHoe && ((ItemHoe)item).getToolMaterialName().equals("WOOD")) return 200;
                if (item == Items.stick) return 100;
                if (item == Items.coal) return 1600;
                if (item == Items.lava_bucket) return 20000;
                if (item == Item.getItemFromBlock(Blocks.sapling)) return 100;
                if (item == Items.blaze_rod) return 2400;
    


  • non mais la personne juste avant m'avait donner une ligne de code qui devrait être dans ce style … mais le probleme de ces valeurs est quelles ne couvrent pas tous les item de base.



  • Beh tu change le Items.item et tu le fais avec tout le comburant



  • mais c'est long 😧



  • Si c'est tout les items/blocks de base, j'ai trouver sa dans le four minecraft basique tout y est listé
    Tu as tout les outils de type bois tu as les stick le charbon etc y a rien de moins après tu rajoute si tu as des carburants spécifiques à ton mod ou des blocks/items vanilla que tu veux utiliser comme carburant.