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

      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