Problème forge : Modifier une class existante



  • Bonjour,

    Voila je cherchais via un mod forge à modifier une class du jeu (impossible de modder directement le .jar quand c'est pour un serveur ^^)

    C'est en fait pour changer les potions (nerf des potions de force 2).

    Je ne suis pas le meilleur en modage (c'est pourquoi je suis ici :D) donc j'ai essayé pas mal de trucs.

    J'ai vu sur un site qu'il fallais creer un event du coup la class de mon mod est comme ceci :

    package yPotion;
    
    /**
    *
    */
    /**
    * @author NTE
    *
    */
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockOre;
    import net.minecraft.block.BlockOreStorage;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.EnumArmorMaterial;
    import net.minecraft.item.EnumToolMaterial;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemAppleGold;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemAxe;
    import net.minecraft.item.ItemFood;
    import net.minecraftforge.common.EnumHelper;
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemSpade;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.ItemSword;
    import net.minecraft.potion.*;
    import net.minecraft.src.ModLoader;
    import net.minecraft.world.World;
    import net.minecraft.world.gen.feature.WorldGenMinable;
    import torti.mod.common.CommonProxy;
    import cpw.mods.fml.common.Mod;
    import net.minecraft.potion.*;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.common.registry.LanguageRegistry;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import torti.mod.*;
    import yPotion3.CommonProxy2;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Random;
    
    @Mod(modid = "19999", name = "Tortiiiiiicounette", version = "1.0.0.0")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    
    public class Potion extends net.minecraft.potion.PotionHelper
    {      
       public static final String MODID = null;
    @Instance("ModCatnos")
       public static Potion modInstance;
       @SidedProxy(clientSide="yPotion2.ClientProxy2", serverSide="yPotion3.CommonProxy2", bukkitSide="yPotion3.CommonProxy2")
       public static CommonProxy2 proxy;
    
       @PreInit
       public void initConfig(FMLPreInitializationEvent event)
       {
               proxy.registerRender();
       }
    
       @Init
       public void load(FMLInitializationEvent event)
       {
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.regeneration.getId()), "0 & !1 & !2 & !3 & 0+6");
        net.minecraft.potion.PotionHelper.sugarEffect = "-0+1-2-3&4-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.moveSpeed.getId()), "!0 & 1 & !2 & !3 & 1+6");
        net.minecraft.potion.PotionHelper.magmaCreamEffect = "+0+1-2-3&4-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.fireResistance.getId()), "0 & 1 & !2 & !3 & 0+6");
        net.minecraft.potion.PotionHelper.speckledMelonEffect = "+0-1+2-3&4-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.heal.getId()), "0 & !1 & 2 & !3");
        net.minecraft.potion.PotionHelper.spiderEyeEffect = "-0-1+2-3&4-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.poison.getId()), "!0 & !1 & 2 & !3 & 2+6");
        net.minecraft.potion.PotionHelper.fermentedSpiderEyeEffect = "-0+3-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.weakness.getId()), "!0 & !1 & !2 & 3 & 3+6");
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.harm.getId()), "!0 & !1 & 2 & 3");
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.moveSlowdown.getId()), "!0 & 1 & !2 & 3 & 3+6");
        net.minecraft.potion.PotionHelper.blazePowderEffect = "+0-1-2+3&4-4+13";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.damageBoost.getId()), "0 & !1 & !2 & 3 & 3+6");
        net.minecraft.potion.PotionHelper.goldenCarrotEffect = "-0+1+2-3+13&4-4";
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.nightVision.getId()), "!0 & 1 & 2 & !3 & 2+6");
        net.minecraft.potion.PotionHelper.potionRequirements.put(Integer.valueOf(net.minecraft.potion.Potion.invisibility.getId()), "!0 & 1 & 2 & 3 & 2+6");
        net.minecraft.potion.PotionHelper.glowstoneEffect = "3+6";
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.moveSpeed.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.digSpeed.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.damageBoost.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.regeneration.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.harm.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.heal.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.resistance.getId()), "5");
        net.minecraft.potion.PotionHelper.potionAmplifiers.put(Integer.valueOf(net.minecraft.potion.Potion.poison.getId()), "5");
        net.minecraft.potion.PotionHelper.redstoneEffect = "-5+6-7";
        net.minecraft.potion.PotionHelper.gunpowderEffect = "+14&13-13";
        net.minecraft.potion.PotionHelper.field_77925_n = new HashMap();
        net.minecraft.potion.PotionHelper.potionPrefixes = new String[] {"potion.prefix.mundane", "potion.prefix.uninteresting", "potion.prefix.bland", "potion.prefix.clear", "potion.prefix.milky", "potion.prefix.diffuse", "potion.prefix.artless", "potion.prefix.thin", "potion.prefix.awkward", "potion.prefix.flat", "potion.prefix.bulky", "potion.prefix.bungling", "potion.prefix.buttered", "potion.prefix.smooth", "potion.prefix.suave", "potion.prefix.debonair", "potion.prefix.thick", "potion.prefix.elegant", "potion.prefix.fancy", "potion.prefix.charming", "potion.prefix.dashing", "potion.prefix.refined", "potion.prefix.cordial", "potion.prefix.sparkling", "potion.prefix.potent", "potion.prefix.foul", "potion.prefix.odorless", "potion.prefix.rank", "potion.prefix.harsh", "potion.prefix.acrid", "potion.prefix.gross", "potion.prefix.stinky"};
    
       }
    }
    
    

    Le changement se situe sur le glowstone effect. Mais pour une raison que j'ignore forge reconnais bien le mod mais le changement ne se fais pas. J'ai peux être tout raté, si c'est le cas merci de votre aide 🙂


  • Administrateurs

    Salut, alors déjà quelques questions :

    yPotion2.ClientProxy2
    

    Pourquoi mettre un 2 dans le nom de la classe et utiliser un package différent pour les proxy ?

       public static final String MODID = null;
    

    Id de mod null ? Pas très bonne idée

    public class Potion extends net.minecraft.potion.PotionHelper
    

    Une classe principale extends PotionHelper ?!?

    @Mod(modid = "19999"
    

    Tu sors d'où cette id de mod ?

    Ensuite ce que tu es en train de faire ne fonctionnera pas.
    À mon avis il faudrait plutôt patcher la classe PotionAttackDamage pour avoir quelque chose de fonctionnel, et utiliser ASM n'est pas facile (xavpok prépare actuellement un tutoriel)

    Et sinon, les règles sont si difficile à lire ?

    Franchement je ne vois pas comment être plus clair, code = programmation, donc → Support pour les moddeurs PAS ICI
    Je déplace le sujet dans la bonne section.



  • 1)Pour le 2 c'est parce que dans le même mcp, il y a un autre mod (pour ajouter des minerais) qui utilise le même nom. Puisque celui la fonctionne, je me suis dit que j'allais copier tout en changeant juste les valeurs ^^

    2)Id de mod je ne sais pas ce qu'il faut mettre, sa fonctionne pour un autre mod donc…

    3)Qu'est-ce que tu entend par la ?

    4)C'est pas une id que l'on choisis ?

    Peux-tu être plus précis ?
    Et comment patcher la classe PotionAttackDamage ?

    Surtout que le mod est reconnu par forge et ne fais pas crash le jeu donc je pense que c'est surtout un code qui n'est pas bon ^^

    J'ai réussit, avec un bout de code choppé sur un autre forum a modifier le Gui donc je pense que c'est faisable pour les potions.

    Enfin, désolé pour la section je n'avais pas fais gaffe pas besoin d'être agressif


  • Administrateurs

    Modifier le gui ? Quel gui ?
    Patcher avec ASM c'est compliqué comme je l'ai dit, personnellement je n'ai pas encore vraiment toucher à ça, mais d'autres personnes du forum l'ont déjà fait.

    Et pour toutes mes autres remarques : http://www.minecraftforgefrance.fr/showthread.php?tid=587



  • Le Gui du menu au lancement (se connecter, solo ect…) et le Gui Ig (quand on fais échap)

    Pour l'ASM je me rend bien compte que c'est compliqué ^^ mais d'autres personnes peuvent sans doute m'aider (enfin je l'espère) car ce que je demande doit tout de même être possible...

    Et pour ton tuto je l'ai déjà lu il y a un moment mais comme mon truc fonctionnais je n'y ai pas touché ^^


  • Administrateurs

    Oui ces gui la sont faciles à modifier puisqu'il suffit de faire que lorsque le gui est ouvert, on ouvre un autre modifié à la place. Mais pour les effets de potion ce n'est pas aussi simple.



  • @'robin4002':

    Oui ces gui la sont faciles à modifier puisqu'il suffit de faire que lorsque le gui est ouvert, on ouvre un autre modifié à la place. Mais pour les effets de potion ce n'est pas aussi simple.

    Ce que je veux modifier ce n'est pas l'effet de la potion. C'est le fait que lorsque l'on met la potion avec une poudre de glow dans l'alambic, on obtient la potion en 6 minutes au lieu du stade II de l'effet, d'ou le 3+6 ^^.


  • Administrateurs

    Il faudrait demander à xavpok pour ça, il a beaucoup touché au potion.



  • @'robin4002':

    Il faudrait demander à xavpok pour ça, il a beaucoup touché au potion.

    Et je fais comment pour lui demander ? 😄

    Sinon si tu pouvais lui passer le message pour qu'il voit mon post

    Merci de ton aide en tout cas


  • Modérateurs

    J'ai vu ton post.
    J'ai beaucoup touché aux potions.
    J'ai vu l'enfer. Crois-moi, c'est de loin la chose la plus dure a faire en modding.

    Sent from my GT-I9000 using Tapatalk 2



  • @'jglrxavpok':

    J'ai vu ton post.
    J'ai beaucoup touché aux potions.
    J'ai vu l'enfer. Crois-moi, c'est de loin la chose la plus dure a faire en modding.

    Sent from my GT-I9000 using Tapatalk 2

    Mais, est-ce impossible de faire ce que je demande ? Si non, comment le faire ?

    Je ne demande pas de creer un effet mais juste de modifier pour que quand on met une poudre de glow dans l'alambic, ce soit le temps qui augmente (d'ou le 3+6) au lieu du niveau. Cela permet de suprimer les potions de Forces II sans avoir a toucher aux effets.



  • Installe un plugin qui empeche de faire les potions de force 2 sinon



  • @'sosoh':

    Installe un plugin qui empeche de faire les potions de force 2 sinon

    Sa existe ? Empêcher de les crafter ?



  • Je crois que j'ai déjà vu ca, ou du moins empêcher de les avoir dans l'inventaire: ca doit checker à chaque tick, si le joueur a cette potion alors ca la supprime..

    Je sais que c'est faisable en command block donc en plugin ou en mod je penses que ca l'est ..


  • Modérateurs

    @'torticounette':

    @'jglrxavpok':

    J'ai vu ton post.
    J'ai beaucoup touché aux potions.
    J'ai vu l'enfer. Crois-moi, c'est de loin la chose la plus dure a faire en modding.

    Sent from my GT-I9000 using Tapatalk 2

    Mais, est-ce impossible de faire ce que je demande ? Si non, comment le faire ?

    Je ne demande pas de creer un effet mais juste de modifier pour que quand on met une poudre de glow dans l'alambic, ce soit le temps qui augmente (d'ou le 3+6) au lieu du niveau. Cela permet de suprimer les potions de Forces II sans avoir a toucher aux effets.

    Fesable. Mais va falloir utiliser la réflexion pour modifier la valeur du field.



  • @'jglrxavpok':

    @'torticounette':

    @'jglrxavpok':

    J'ai vu ton post.
    J'ai beaucoup touché aux potions.
    J'ai vu l'enfer. Crois-moi, c'est de loin la chose la plus dure a faire en modding.

    Sent from my GT-I9000 using Tapatalk 2

    Mais, est-ce impossible de faire ce que je demande ? Si non, comment le faire ?

    Je ne demande pas de creer un effet mais juste de modifier pour que quand on met une poudre de glow dans l'alambic, ce soit le temps qui augmente (d'ou le 3+6) au lieu du niveau. Cela permet de suprimer les potions de Forces II sans avoir a toucher aux effets.

    Fesable. Mais va falloir utiliser la réflexion pour modifier la valeur du field.

    Ok Merci beaucoup je vais aller tester sa 🙂

    Sinon je voudrais modifier la class AbstractClientPlayer

    Savez vous comment je doit m'y prendre ?


  • Modérateurs

    @'torticounette':

    Ok Merci beaucoup je vais aller tester sa 🙂 
    Sinon je voudrais modifier la class AbstractClientPlayer
    Savez vous comment je doit m'y prendre ?

    ASM et encore, c'est pas sûr que Minecraft accepte puisque World est pas accepté je crois.



  • @'jglrxavpok':

    @'torticounette':

    Ok Merci beaucoup je vais aller tester sa 🙂 
    Sinon je voudrais modifier la class AbstractClientPlayer
    Savez vous comment je doit m'y prendre ?

    ASM et encore, c'est pas sûr que Minecraft accepte puisque World est pas accepté je crois.

    Et quel code dois-je taper pour cela ?

    Merci de votre aide en tout cas les potions fonctionnent ^^


  • Modérateurs

    @'torticounette':

    @'jglrxavpok':

    @'torticounette':

    Ok Merci beaucoup je vais aller tester sa 🙂 
    Sinon je voudrais modifier la class AbstractClientPlayer
    Savez vous comment je doit m'y prendre ?

    ASM et encore, c'est pas sûr que Minecraft accepte puisque World est pas accepté je crois.

    Et quel code dois-je taper pour cela ?

    Merci de votre aide en tout cas les potions fonctionnent ^^

    Alors là… Faut voir s'il reste pas des bouts d'ASM qui trainent sur le forum, mais j'y crois pas trop.



  • @'jglrxavpok':

    @'torticounette':

    @'jglrxavpok':

    @'torticounette':

    Ok Merci beaucoup je vais aller tester sa 🙂 
    Sinon je voudrais modifier la class AbstractClientPlayer
    Savez vous comment je doit m'y prendre ?

    ASM et encore, c'est pas sûr que Minecraft accepte puisque World est pas accepté je crois.

    Et quel code dois-je taper pour cela ?

    Merci de votre aide en tout cas les potions fonctionnent ^^

    Alors là… Faut voir s'il reste pas des bouts d'ASM qui trainent sur le forum, mais j'y crois pas trop.

    non mais je parle juste en théorie.

    Je ne demande pas de me faire le code en entier mais de m'expliquer genre "tu commence en mettant cette balise, ensuite tu recopie le code de cette classe" ect…