Supprimer les crafts des armures de bases



  • Bonjour,

    je commence depuis peu à modder avec Forge, j'ai fais un mod qui rajoute des armures à Minecraft.
    Et séparément, j'aimerai faire un mod qui permet de supprimer les crafts de bases des armures de minecrafts pour qu'ils ne soient plus craftables et qu'ils soient seulement dans le créative.

    Mais je ne sais pas comment m'y prendre sans toucher aux fichiers originaux! J'ai cru voir une fois un post parlant de ça, mais impossible de retomber sur le lien! Je suppose que je dois faire un lien vers le craftingManager.java où là, je fais un null sur les crafts?  :huh:  :huh:

    En espérant avoir une réponse claire  😊

    Cordialement,
    RageAgain


  • Administrateurs



  • J'ai pas pensé à regarder chez les anglais…merci beaucoup! :)___Et où dois-je l'insérer?

    En sachant que mon code de base ne ressemble que à ça pour l'instant :

    package fr.anticraftarmor.common;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import fr.anticraftarmor.proxy.CommonProxy;
    
    @Mod(modid = "anticraftarmor", name = "Anti Craft Armor", version = "1.0.0")
    public class AntiCraftArmor {
    @Instance("anticraftarmor")
    public static AntiCraftArmor instance;
    
    @SidedProxy(clientSide = "fr.anticraftarmor.proxy.ClientProxy", serverSide = "fr.anticraftarmor.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static final String MODID = "anticraftarmor";
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event){
    
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event){
    
    proxy.RegisterRender();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event){
    
    }
    }
    

  • Administrateurs

    N'importe ou dans la classe, puis dans la fonction postInit tu appelle la fonction avec en argument l'item que tu veux retirer.



  • Non, en faites, le code que tu m'as donné, c'est pour enlever les recettes d'items, mais lorsque je met en paramètre, ca me dit qu'il faut que ca soit un ItemArmor… 😞


  • Administrateurs

    Heu tu as fait quoi ?
    Envoie ton code.



  • package fr.anticraftarmor.common;
    
    import java.util.List;
    
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.crafting.CraftingManager;
    import net.minecraft.item.crafting.IRecipe;
    import net.minecraft.item.crafting.RecipesArmor;
    import net.minecraft.item.crafting.ShapedRecipes;
    import net.minecraft.item.crafting.ShapelessRecipes;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import fr.anticraftarmor.proxy.CommonProxy;
    
    @Mod(modid = "anticraftarmor", name = "Anti Craft Armor", version = "1.0.0")
    public class AntiCraftArmor {
    @Instance("anticraftarmor")
    public static AntiCraftArmor instance;
    
    @SidedProxy(clientSide = "fr.anticraftarmor.proxy.ClientProxy", serverSide = "fr.anticraftarmor.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static final String MODID = "anticraftarmor";
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event){
    
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event){
    
    proxy.RegisterRender();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event){
    
    removeRecipe(Items.leather_helmet); //Ici, erreur : The method removeRecipe(ItemStack) in the type AntiCraftArmor is not applicable for the arguments (ItemArmor)
    
    }
    
    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);
    FFMTLibs.ffmtLog.info("Removed recipe for : " + output.getItem().getUnlocalizedName(output)); //Ici, erreur aussi : FFMTLibs cannot be resolved
    }
    }
    }
    
    }
    
    

    Voila…la je coince! :(</irecipe>


  • Administrateurs

    removeRecipe(new ItemStack(Items.leather_helmet));



  • Il y a toujours cette erreur là :

    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);
    FFMTLibs.ffmtLog.info("Removed recipe for : " + output.getItem().getUnlocalizedName(output));
    //Ici, erreur aussi : FFMTLibs cannot be resolved
    }
    }
    }
    ```</irecipe>


  • Mais en tout cas, merci beaucoup, c'est déjà une erreur en moins 😄



  • J'ai rien dis! Il a suffit que je supprime cette ligne :

    FFMTLibs.ffmtLog.info("Removed recipe for : " + output.getItem().getUnlocalizedName(output));
    

    Et c'était réglé, c'était juste une info d'après ce que je comprend!
    Le craft est enlevé! J'ai plus qu'a faire ca pour le reste des items 😄

    T'es un vrai DIEU robin4002! 😄 😄 ❤
    Merci beaucoup à toi!



  • ENCORE UN PROBLEME =(
    Au lancement de minecraft, celui-ci se crash après que j'ai rajouté mon petit AntiCraftArmor mod… 😞

    Le log dans le spoiler !



  • Si il faut, voila les codes de mon mod!

    AntiCraftArmor.java

    package fr.anticraftarmor.common;
    
    import java.util.List;
    
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.crafting.CraftingManager;
    import net.minecraft.item.crafting.IRecipe;
    import net.minecraft.item.crafting.RecipesArmor;
    import net.minecraft.item.crafting.ShapedRecipes;
    import net.minecraft.item.crafting.ShapelessRecipes;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import fr.anticraftarmor.proxy.CommonProxy;
    
    @Mod(modid = "anticraftarmor", name = "Anti Craft Armor", version = "1.0.0")
    public class AntiCraftArmor {
    @Instance("anticraftarmor")
    public static AntiCraftArmor instance;
    
    @SidedProxy(clientSide = "fr.anticraftarmor.proxy.ClientProxy", serverSide = "fr.anticraftarmor.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static final String MODID = "anticraftarmor";
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event){
    
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event){
    
    proxy.RegisterRender();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event){
    
    //SUPPRESSION DES CRAFTS POUR LES ARMURES DE BASES
    //Leather Armor
    removeRecipes.removeRecipe(new ItemStack(Items.leather_helmet));
    removeRecipes.removeRecipe(new ItemStack(Items.leather_chestplate));
    removeRecipes.removeRecipe(new ItemStack(Items.leather_leggings));
    removeRecipes.removeRecipe(new ItemStack(Items.leather_boots));
    
    //Chainmail Armor
    removeRecipes.removeRecipe(new ItemStack(Items.chainmail_helmet));
    removeRecipes.removeRecipe(new ItemStack(Items.chainmail_chestplate));
    removeRecipes.removeRecipe(new ItemStack(Items.chainmail_leggings));
    removeRecipes.removeRecipe(new ItemStack(Items.chainmail_boots));
    
    //Iron Armor
    removeRecipes.removeRecipe(new ItemStack(Items.iron_helmet));
    removeRecipes.removeRecipe(new ItemStack(Items.iron_chestplate));
    removeRecipes.removeRecipe(new ItemStack(Items.iron_leggings));
    removeRecipes.removeRecipe(new ItemStack(Items.iron_boots));
    
    //Golden Armor
    removeRecipes.removeRecipe(new ItemStack(Items.golden_helmet));
    removeRecipes.removeRecipe(new ItemStack(Items.golden_chestplate));
    removeRecipes.removeRecipe(new ItemStack(Items.golden_leggings));
    removeRecipes.removeRecipe(new ItemStack(Items.golden_boots));
    
    //Diamond Armor
    removeRecipes.removeRecipe(new ItemStack(Items.diamond_helmet));
    removeRecipes.removeRecipe(new ItemStack(Items.diamond_chestplate));
    removeRecipes.removeRecipe(new ItemStack(Items.diamond_leggings));
    removeRecipes.removeRecipe(new ItemStack(Items.diamond_boots));
    }
    
    }
    
    

    removeRecipes.java

    package fr.anticraftarmor.common;
    
    import java.util.List;
    
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.crafting.CraftingManager;
    import net.minecraft.item.crafting.IRecipe;
    
    public class removeRecipes extends AntiCraftArmor{
    
    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);
    }
    }
    }
    }
    
    ```</irecipe>

  • Administrateurs

    Tu as compilé comment ton mod ?


  • Administrateurs

    Déjà, les multi-posts d'affilé ne sont pas autorisés, il y a le bouton "Editer" qui est là. Ensuite, je te conseille fortement d'apprendre le Java et l'Anglais, parce que les erreurs sont en anglais.



  • @robin4002: J'ai sélectionné mes packages et je les ais exporté en un .jar !

    @Superloup10: Excusez moi pour les multis post… 😕 D'accord pour l'anglais, mais le java, j'ai déjà fait des petites applications en console après avoir terminé le tutoriel sur le POO de openclassrooms, donc je crois avoir au moins les bases, mais j'ai beaucoup de mal en reprenant le codage de Minecraft et Forge... 😕 existe-t-il une javadoc?


  • Administrateurs

    Tu compile mal ton mod.
    Il faut faire comme pour le setup de forge, sauf que la c'est :
    gradlew build
    Ensuite le jar du mod se trouve dans <dossier de="" forge="">/build/libs/ et s'appelle par défaut modid-1.0.jar</dossier>



  • Okay! Super!
    merci beaucoup ! 🙂