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

      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