[1.7.x] Modifier des recettes vanilla



  • Bonsoir tout le monde, je voudrais modifier les recettes de crafting de la pomme d'or, en remplaçant la pomme du milieu par une pomme crée via le mod, tout fonctionne bien, le seul problème, c'est que l'on peut quand même crafter la pomme d'or avec la recette classique, j'ai donc cherché sur google et j'ai trouvé cette fonction :

    
    private void removeRecipe(ItemStack resultItem)
    {
    ItemStack recipeResult = null;
    ArrayList recipes = (ArrayList) CraftingManager.getInstance().getRecipeList();
    for (int scan = 0; scan < recipes.size(); scan++)
    {
    IRecipe tmpRecipe = (IRecipe) recipes.get(scan);
    if (tmpRecipe instanceof ShapedRecipes)
    {
    ShapedRecipes recipe = (ShapedRecipes)tmpRecipe;
    recipeResult = recipe.getRecipeOutput();
    }
    if (tmpRecipe instanceof ShapelessRecipes)
    {
    ShapelessRecipes recipe = (ShapelessRecipes)tmpRecipe;
    recipeResult = recipe.getRecipeOutput();
    }
    if (ItemStack.areItemStacksEqual(resultItem, recipeResult))
    {
    System.out.println("[MODID] Removed Recipe: " + recipes.get(scan) + " -> " + recipeResult);
    recipes.remove(scan);
    }
    }
    }
    
    

    Voilà ce que j'ai mis :

    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    removeRecipe(new ItemStack(Items.golden_apple));
    removeRecipe(new ItemStack(Items.speckled_melon));
    /* La suite … */
    
    

    EDIT : Le nouveau craft du melon marche bien et le craft vanilla est désactivé mais celui de la pomme persiste
    Sauf que le problème c'est que euh ça marche pas ^^ Donc comme en forge 1.7.2 avec gradle nous ne pouvons plus modifier les fichiers minecrafts vanillas alors je voudrais demander si modifier une recette de craft vanilla serait possible 🙂

    Merci d'avance ;)[



  • Bah… Je crois que tu dois utiliser MCP pour changer les codes du jeu. Forge Gradle permet justement de ne pas toucher à ces fichiers (Pour éviter certain malin d'exploiter un bug ou autre...)



  • Ok merci de ta réponse 😉


  • Administrateurs

    Tu parle de la pomme en or cheaté avec les blocs d'or ? Car c'est ça :
    removeRecipe(new ItemStack(Items.golden_apple, 1, 1));
    L'autre code :
    removeRecipe(new ItemStack(Items.golden_apple));
    C'est pour la pomme normal.

    Aussi, mets le code dans postInit, et non dans preInit comme tu touche au recette.

    Et en passant, 24h avant un up.



  • Non, je veux changer le craft de la pomme d'or normale, en remplacant la pomme du milieu par une autre pomme crée par le mod,
    PS : Si je le mets dans le postInit, les recettes crées dans le preInit vont s'effacer aussi non ?


  • Administrateurs

    Oui, tu dois refaire ta recette après avoir supprimé l'autre.
    D'ailleurs les recettes ne vont pas dans preInit, normalement elles vont dans init ou postInit.



  • Merci pour ta réponse 🙂 Le craft du melon doré est bien remplacé par le nouveau mais le craft vanilla de la pomme reste activé saurais-tu pourquoi ?


  • Administrateurs

    Essaye avec ça :

    public static void removeRecipe(ItemStack stack)
    {
    List <irecipe>recipeList = CraftingManager.getInstance().getRecipeList();
    for(int i = 0; i < recipeList.size(); i++)
    {
    ItemStack output = recipeList.get(i).getRecipeOutput();
    if(output != null && stack.getItem() == output.getItem() && stack.getItemDamage() == output.getItemDamage())
    {
    recipeList.remove(i);
    System.out.println("Removed recipe for : " + output.getItem().getUnlocalizedName(output));
    }
    }
    }
    ```</irecipe>


  • RESOLU ! Merci beaucoup Robin ! 🙂


    Comment as-tu trouvé ceci ?


  • Administrateurs

    C'est un code que j'avais modifié pour ffmt lib, la fonction areItemStacksEqual que tu utilisais dans l'autre méthode vérifie aussi le tagnbt et d'autre truc il me semble, dans ma fonction je vérifie que l'item et sont metadata.