Comment rendre un Launcher obligatoire ?



  • Salut à tous 😄 J'aimerai modifier une class qui m'énerve assez … j'aimerai comment dire changer le 'numéro' qui correspond au client et ce 'numéro' le serveur le lis et si il est exacte le joueur peut entrer dans le serveur et si il est pas exacte le serveur kick le joueur

    Mais bon comme on le sais tous avec Forge Gradlew ce n'est plus possible de modifier les class Vanilla/Forge
    ( Petite question : On peut contourner le Forge Gradlew ? en gros obtenir toutes les class , J'ai vue que c'était possible je crois mais on ne peut pas recompiler les class.. :dodgy: )

    La class que je dois modifier :

    • NetHandlerHandshakeTCP

    Je sais qu'on doit utiliser les Events de forge .. mais je ne comprends pas très bien .. si quelqu'un pourrai m'aider je vous remercie !!


  • Moddeurs confirmés Rédacteurs Administrateurs

    Ou alors comme on ne peut pas se connecté a un serveur moddé sans avoir les mods qui y sont présents, il te suffit de faire que ton mod ne fonctionne pas si il n'est pas sur ton launcher.
    Soit tu envoies un argument depuis le launcher, et si il n'y ait pas -> crash
    Soit tu regardes si Minecraft.getMinecraft().mcDataDir.getAbsolutePath() contient le nom de ton launcher ou pas. Et si non -> crash

    (System.exit(1); -> méthode radical
    Throwables.propagate(new Exception("Launcher non autorisé")); -> méthode moins violente avec un rapport de crash)



  • Oui c'est une bonne idée mais comment pourrai je faire que sa :
    Minecraft.getMinecraft().mcDataDir.getAbsolutePath()

    Obtient le nom de mon Launcher ?
    Fin le modifier tu vois, car la class Minecraft je ne peut pas la modifier….


  • Moddeurs confirmés Rédacteurs Administrateurs

    Ton launcher, il utilise bien un dossier de jeu différent, par exemple .nom_de_ton_launcher à la place de .minecraft non ?
    Donc Minecraft.getMinecraft().mcDataDir.getAbsolutePath() contiendra le nom de ton launcher.



  • Oui mais comment t'éxpliquer … c'est dans le Minecraft.java ou on modifie le nom du launcher, et justement comment je pourrai faire pour le modifier ..


  • Moddeurs confirmés Rédacteurs Administrateurs

    Non, c'est toi qui n'a pas comprit ce que je t'expliques.

    Dans ton mod, dans la fonction preInit, mets ça :

    if(event.getSide().isClient())
    {
         System.out.println("–------ dossier du jeu ----------")
         System.out.println(Minecraft.getMinecraft().mcDataDir.getAbsolutePath())
    }
    

    Ensuite compile ton mod, mets-le sur ton launcher, lances le jeu, et regardes les logs. Tu vas comprendre.



  • ça m'affiches : –------ dossier du jeu ----------
    C:\Users\xxxx\Desktop\1.7.2 Forge\eclipse.

    Même il a juste à reprendre les mods dans le .minecraft/mods , et voilà il pourra jouer sur le launcher..


  • Moddeurs confirmés Rédacteurs Administrateurs

    Une fois compilé et sur ton launcher. Pas sur eclipse.

    @'FR_Style13':

    Même il a juste à reprendre les mods dans le .minecraft/mods , et voilà il pourra jouer sur le launcher..

    Justement non, puisqu'on va faire crasher le jeu si il n'y a pas le nom de ton launcher dans le chemin du jeu.



  • Ah …Mais je pourrai mêttre comment le code ? 😕 Genre quand il crash si ce n'ai pas le nom du launcher


  • Moddeurs confirmés Modérateurs

    bha
    une condition qui verifie le string du launcher, et au passage base du java



  • Oui je suis un débutant.. avant j'avais juste à modifier les class du Minecraft.. mais bon maintenant c'est un peu plus compliqué car on ne peut plus ..

    Mais bon pour l'instant j'ai déjà bien avancer sur mon projet 🙂 Bref, revenons sur la transformation de la class, On ne pourrai pas tout simplement modifier le numéro ?

    Je sais je suis nul mais bon ^^ sans aide on ne peut pas avancer 😕

    Merci de votre aide,


  • Moddeurs confirmés Modérateurs

    Comment ça modifier le numéro?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bon, dans la fonction preinit de ton mod, ajoutes ça :

    if(event.getSide().isClient())
    {
        if(!Minecraft.getMinecraft().mcDataDir.getAbsolutePath().contains("nom_de_ton_launcher") && !Minecraft.getMinecraft().mcDataDir.equals(new File(".")))
        {
            Throwables.propagate(new Exception("Launcher non autorisé"));
        }
    }
    

    Ensuite compiles ton mod en tapant gradlew build dans la console, mets le mod dans ton launcher et regardes. Mais le mod dans un autre launcher et regardes également.



  • Rien qui change 😕 Même dans les logs il y a aucune chose


  • Moddeurs confirmés Rédacteurs Administrateurs

    Avec ce que je t'ai donné le jeu devrait crasher si tu le lance sur un autre launcher que le tiens.



  • Regarde le code :

    –-------------------------------------------------

    package fr.style13;
    
    import java.io.File;
    import com.google.common.base.Throwables;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiMainMenu;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.init.Blocks;
    import net.minecraftforge.common.MinecraftForge;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import cpw.mods.fml.common.gameevent.TickEvent;
    import cpw.mods.fml.common.gameevent.TickEvent.Phase;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    @Mod(modid = BaseMod.MODID, version = BaseMod.VERSION)
    public class BaseMod
    {
        public static final String MODID = "examplemod";
        public static final String VERSION = "1.0";
    
        @SubscribeEvent
        @EventHandler
        public void init(FMLInitializationEvent event)
        {
            // some example code
    
            System.out.println("DIRT BLOCK >> " + Blocks.dirt.getUnlocalizedName());
        }
    
        @SideOnly(Side.CLIENT)
        public void preInit(FMLInitializationEvent event)
        {
    
            if(event.getSide().isClient())
            {
                if(!Minecraft.getMinecraft().mcDataDir.getAbsolutePath().contains("originalcraft") && !Minecraft.getMinecraft().mcDataDir.equals(new File(".")))
                {
                    Throwables.propagate(new Exception("Launcher non autorisé"));
    
                }
            }
        }
    }
    

    Quand je le recompile avec gradlew je le met dans mon .minecraft/mods et aucun succès normalement il dois crash.. 😞


  • Moddeurs confirmés Rédacteurs Administrateurs

    @SideOnly(Side.CLIENT)
    public void preInit(FMLInitializationEvent event)
    

    -> c'est complètement faux.
    ça devrait être comme ça :

    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    


  • Tu es un dieu mec !! :rolleyes:

    ça me fait bien une erreur :

    java.lang.RuntimeException: java.lang.Exception: Launcher non autoris�

    Merci beaucoup 😄


Log in to reply