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

      J’ai regardé, et j’en déduis que:
      le slot 0 enregistre un ItemFood
      le slot 1 un ItemArrow
      le slot 2 un ItemFood
      et le slot 3 il est 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

        Ok je crois avoir trouvé où est le problème.

        C’est dans la classe de ton tile entity :

        	public ItemStack getRecipeResult() {
        	    return RecipesGloriumMachine.getRecipeResult(new ItemStack[] {
        	            this.getStackInSlot(0), this.getStackInSlot(1) });
        	}
        

        ici tu appels ta fonction getRecipeResult avec deux items stack, or tes recettes prennent 3 items. Je pense que cela devrait être plutôt comme ceci :

        return RecipesGloriumMachine.getRecipeResult(new ItemStack[] {
        	            this.getStackInSlot(0), this.getStackInSlot(1), this.getStackInSlot(2) });
        
        1 réponse Dernière réponse Répondre Citer 0
        • 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