MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Crash ouverture Gui

    Planifier Épinglé Verrouillé Déplacé Non résolu Support pour les moddeurs
    1.12.2
    29 Messages 2 Publieurs 1.3k Vues 2 Watching
    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.
    • M Hors-ligne
      matlion
      dernière édition par

      Le Gui semble marcher mais pour une raison inconnu, le slot 3 récupére l’item comme combustible ce qui fait que la recette ne marche pas. Une idéé ?

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Comment ça comme combustible ? à quoi ressemble ton gui ?

        1 réponse Dernière réponse Répondre Citer 0
        • M Hors-ligne
          matlion
          dernière édition par

          Il ressemble à ça:
          custom_furnace.png
          et il prends le slot de gauche c’est à dire celui de la patate comme combustible et allume le feu. Or j’aimerais que la pomme la flèche et la patate donne mon objet.

          1 réponse Dernière réponse Répondre Citer 0
          • M Hors-ligne
            matlion
            dernière édition par

            J’ai modifié les lignes suivantes :

            public boolean isItemValidForSlot(int index, ItemStack stack) {
            	return true;
            }
            

            et

            public void update() {
            	    if (!this.world.isRemote) {
            	 
            	        /* Si le carburant brûle, on réduit réduit le temps restant */
            	        if (this.isBurning()) {
            	            this.burningTimeLeft--;
            	        }
            	 
            	        /*
            	            * Si la on peut faire cuire la recette et que le four ne cuit pas
            	            * alors qu'il peut, alors on le met en route
            	            */
            	        if (!this.isBurning() && this.canSmelt()) {
            	            this.burningTimeLeft = this.getFullBurnTime();
            	            this.decrStackSize(2, 1);
            	        }
            	 
            	        /* Si on peut faire cuire la recette et que le feu cuit */
            	        if (this.isBurning() && this.canSmelt()) {
            	            this.timePassed++;
            	            if (timePassed >= this.getFullRecipeTime()) {
            	                timePassed = 0;
            	                this.smelt();
            	            }
            	        } else {
            	            timePassed = 0;
            	        }
            	        this.markDirty();
            	    }
            	}
            

            Mais toujours le même soucis

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              C’est plutôt dans la fonction smelt qu’il faut changer le slot utilisé pour le carburant.

              1 réponse Dernière réponse Répondre Citer 0
              • M Hors-ligne
                matlion
                dernière édition par

                J’ai modifié la fonction smelt comme suit :

                	public void smelt() {
                
                		if(this.canSmelt()) 
                		{
                			ItemStack input1 = (ItemStack)this.stacks.get(0);
                			ItemStack input2 = (ItemStack)this.stacks.get(1);
                			ItemStack result = RecipesGloriumMachine.getInstance().getRecipeResult(input1);
                			ItemStack output = (ItemStack)this.stacks.get(3);
                			
                			if(output.isEmpty()) this.stacks.set(3, result.copy());
                			else if(output.getItem() == result.getItem()) output.grow(result.getCount());
                			
                			input1.shrink(1);
                			input2.shrink(1);
                		}
                	}
                

                mais j’ai une erreur à:

                ItemStack result = RecipesGloriumMachine.getInstance().getRecipeResult(input1);
                

                Qui me dit "the method getRecipeResult(ItemStack[]) in the type RecipesGloriumMachine is not applicable for the arguments (ItemStack).

                La classe méthode en question :

                public static ItemStack getRecipeResult(ItemStack[] ingredients) {
                	    Iterator<Entry<ItemStack[], ItemStack>> it = recipes.entrySet().iterator();
                	    while(it.hasNext()) {
                	        Entry <ItemStack[], ItemStack>entry = it.next();
                	        if(areKeysEqual(entry.getKey(), ingredients)) {
                	            return entry.getValue();
                	        }
                	    }
                	    return null;
                	}
                
                1 réponse Dernière réponse Répondre Citer 0
                • robin4002R Hors-ligne
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                  dernière édition par

                  Bha oui, ta fonction prend un array d’itemstack, pas un itemstack seul.

                  1 réponse Dernière réponse Répondre Citer 0
                  • M Hors-ligne
                    matlion
                    dernière édition par

                    Ok j’ai modifié le code, ce qui donne:

                    	public void smelt() {
                    
                    		if(this.canSmelt()) 
                    		{
                    			ItemStack input1 = (ItemStack)this.stacks.get(0);
                    			ItemStack input2 = (ItemStack)this.stacks.get(1);
                    			ItemStack result = RecipesGloriumMachine.getInstance().getRecipeResult(new ItemStack[] {this.stacks[0], this.stacks[1], this.stacks[2]);
                    			ItemStack output = (ItemStack)this.stacks.get(3);
                    			
                    			if(output.isEmpty()) this.stacks.set(3, result.copy());
                    			else if(output.getItem() == result.getItem()) output.grow(result.getCount());
                    			
                    			input1.shrink(1);
                    			input2.shrink(1);
                    		}
                    	}
                    

                    mais j’ai une erreur ici:

                    {this.stacks[0], this.stacks[1], this.stacks[2]}
                    

                    qui me dit:
                    The type of the expression must be an array type but it resolved to NonNullList<ItemStack>
                    Je ne vois pas pourquoi ça fait une erreur, alors que c’est sensé être un array. Merci de ton aide

                    1 réponse Dernière réponse Répondre Citer 0
                    • robin4002R Hors-ligne
                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                      dernière édition par

                      Non, stack c’est une non null list.
                      Un plus tu y accès juste au dessus …
                      C’est this.stacks.get(x) pour y accéder.

                      1 réponse Dernière réponse Répondre Citer 0
                      • M Hors-ligne
                        matlion
                        dernière édition par

                        Ok merci, j’ai plus d’erreur, la patate sert plus de carburant mais la recette marche toujours pas.
                        Ci-dessous ma classe recette:

                        public class RecipesGloriumMachine 
                        {
                        	private static final RecipesGloriumMachine smeltingBase = new RecipesGloriumMachine();
                        	private Map smeltingList = new HashMap();
                        	
                        	public static RecipesGloriumMachine getInstance()
                        	{
                        		return getInstance();
                        	}
                        	
                        	private static final HashMap <ItemStack[], ItemStack>recipes = new HashMap<ItemStack[], ItemStack>();
                        	static {
                        	    addRecipe(Items.APPLE, Items.ARROW, Items.BAKED_POTATO, new ItemStack(ItemsMod.lingot_glorium));
                        	}
                        	
                        	
                        	private static void addRecipe(Item ingredient1, Item ingredient2, Item ingredient3, ItemStack resultat1) {
                        	    addRecipe(new ItemStack(ingredient1), new ItemStack(ingredient2), new ItemStack(ingredient3), resultat1);
                        	}
                        	 
                            public static void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3, ItemStack stack4)
                            {
                                ItemStack[] stackList = new ItemStack[]{stack1, stack2, stack3};
                                recipes.put(stackList, stack4);
                            }
                        	private static boolean areKeysEqual(ItemStack[] key1, ItemStack[] key2) {
                        	    if(key1.length != key2.length) return false;
                        	 
                        	    for(int i = 0; i < key1.length; i++) {
                        	        ItemStack s1 = key1[i];
                        	        ItemStack s2 = key2[i];
                        	        if(s1.isEmpty() && !s2.isEmpty()) return false;
                        	        if(!s1.isEmpty() && s2.isEmpty()) return false;
                        	        if(s1.getItem() != s2.getItem()) return false;
                        	        if(s1.getItemDamage() != s2.getItemDamage()) return false;
                        	    }
                        	    return true;
                        	}
                        	
                        	public ItemStack getRecipeResult(ItemStack[] ingredients) {
                        		 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(ingredients, (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; //Au début ce n'est pas la même
                                for(int i=0; i<=2; i++) // Pour les 3 items
                                {
                                    if(stackList[i].getItem() == stackList2[i].getItem()) //On vérifie si ce sont les même
                                    {
                                        isSame = true; // Si c'est le cas alors isSame vaut true
                                    }
                                    else
                                    {
                                        return false; //Si un seul n'est pas bon, on cherche pas, c'est pas la bonne recette
                                    }
                                }
                                return isSame;
                            }
                        	
                            public static RecipesGloriumMachine smelting()
                            {
                                return smeltingBase;
                            }
                        	
                        }
                        

                        Je me demande si la recette ne marche pas à cause de la dernière fonction ou si c’est autre chose.

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

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB