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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par robin4002

      Alors comme tu as enlevé les importations les numéros de ligne ne correspondent pas. À quel ligne correspond ceci ?

      at fr.gloria.glore.guis.GuiGloriumMachine.drawGuiContainerForegroundLayer(GuiGloriumMachine.java:45)

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

        Il correspond à la ligne :

        this.fontRenderer.drawString(this.playerInv.getDisplayName().getUnformattedText(), 122, this.ySize - 96 + 2, 4210752);
        
        
        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 ta variable playerInv qui n’est jamais initialisé.

          Dans le constructeur, ajoutes this.playerInv = playerInv;

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

            Merci de ton aide. Ca marche, mais j’ai désormais un problème avec les recettes. Aucune erreur dans la console ni dans les logs pourtant le code semble bon.

            public class RecipesGloriumMachine 
            {
            	private static final RecipesGloriumMachine smeltingBase = new RecipesGloriumMachine();
            	private Map smeltingList = new HashMap();
            	
            	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 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

              Lances ton jeu en debug, mets un point d’arrêt dans la fonction canSmelt de ton four et regardes la valeur des variables.

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

                Ces valeurs là ?
                Capture.PNG

                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

                  regardes surtout le résultat de this.getStackInSlot(0), this.getStackInSlot(1) et de ItemStack result = this.getRecipeResult();

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

                    Il faut que je rajoute ?

                    this.getStackInSlot(0), this.getStackInSlot(1), this.getStackInSlot(2) });
                    
                    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, que tu regardes via le débugueur leur valeur quand tu es sur le point d’arrêt, pour comprendre ce qu’il se passe.

                      Dans l’onglet expression de débugueur tu peux y mettre des fonctions à interpréter, afin de récupérer la valeur.

                      1 réponse Dernière réponse Répondre Citer 0
                      • 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
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB