Empêcher d'installer d'autres mods /texturespack



  • Bonjour à tous, comme le titre l'indique je cherche à mettre, sur un mod un système pour empêcher les gens de tricher comme par exemple xray    j'ai fait cela :  mais cela ne donne rien et on peut, via le dossier mods de mon .serveur y ajouter ce qu'on veut

    
      if(event.getSide().isClient())
             {
                if(!Minecraft.getMinecraft().mcDataDir.getAbsolutePath().contains("Craftesys") && !Minecraft.getMinecraft().mcDataDir.equals(new File(".")))
               {
                Throwables.propagate(new Exception("java.lang.Throwable$WrappedPrintStream:println:7490"));
               }
             }
    
             if (Loader.isModLoaded("cheatingessentials")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("hud")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("XaeroMinimap")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("XaeroBetterPvP")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("EllianMaterialDetector")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("CJB|Cheats")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("DirectionHUD")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("alluwant")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("VoxelMap")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
             if (Loader.isModLoaded("thebombzenapi")) {
                 Throwables.propagate(new Exception("java.io.FileNotFoundException.4"));
                }
    
    

    merci d'avance,
    cordiamelement,
    Sventus


  • Administrateurs

    System.exit(-1);
    plus radical.

    Ah et :

               if(!Minecraft.getMinecraft().mcDataDir.getAbsolutePath().contains("Craftesys") && !Minecraft.getMinecraft().mcDataDir.equals(new File(".")))
    

    ->

               if(!Minecraft.getMinecraft().mcDataDir.getAbsolutePath().contains("Craftesys") || !Minecraft.getMinecraft().mcDataDir.equals(new File(".")))
    

    et tu peux également retrouvé toutes tes conditions en une avec des ||



  • tu me conseils de mettre  System.exit(1) à la place de : Throwables.propagate(new Exception("java.io.FileNotFoundException.4")); ??

    puis xray devrait être supprimé de mon serveur avec ce code la du coup ?

    je viens d'essayer et ça ne fait absolument rien, j'ai installé mon xray et j'arrive toujours à l'utiliser 😕

    j'ai d'ailleurs ce message d'erreur dans les logs :

    [00:30:25] [Client thread/WARN] [FML/craftesys]: =============================================================
    [00:30:25] [Client thread/WARN] [FML/craftesys]: MOD HAS DIRECT REFERENCE System.exit() THIS IS NOT ALLOWED REROUTING TO FML!
    [00:30:25] [Client thread/WARN] [FML/craftesys]: Offendor: fr/craftesys/craftesys/common/Mods.preInit(Lcpw/mods/fml/common/event/FMLPreInitializationEvent;)V
    [00:30:25] [Client thread/WARN] [FML/craftesys]: Use FMLCommonHandler.exitJava instead
    [00:30:25] [Client thread/WARN] [FML/craftesys]: =============================================================
    
    

    Si je fais : if !=(load.modloades("modid") {
    [size=largeMinecraft.getMinecraft().shutdown()]
    [size=large}]

    [size=largeÇa va ?]


  • Administrateurs

    ah oui c'est vrai que FML interdit le System.shutdown( );
    Minecraft.getMinecraft().shutdown() devrait fonctionner.



  • f (Loader.isModLoaded("Craftesys")) {
                Minecraft.getMinecraft().shutdown();

    }

    j'ai donc essayé cela, en sachant que Craftesys c'est le nom de mon mod de base  donc en théorie je devrais être déco pendant le chargement et pourtant ça ne fait rien (en sachant que le mod est sur le serveur  et pas encore sur le launcher)

    de plus  si je fais cela comme ça :

    if (!Loader.isModLoaded("Anticheat") || (!Loader.isModLoaded("ccc") || (!Loader.isModLoaded("Craftesys") || (!Loader.isModLoaded("nei") || (!Loader.isModLoaded("Anticheat")))))) {

    Minecraft.getMinecraft().shutdown();
                }

    cela devrait faire crash non ? si l'on ajoute autre chose


  • Administrateurs

    Non …
    Cette ligne va couper le jeu si un des mods de cette liste n'est pas présent.
    Si tu veux bloquer le jeu en cas d'ajout d'un mod regarde le nombre de mod présent. Si c'est supérieur au nombre voulu coupe le jeu.



  • ce qui devrait donner quoi car Loader.ModLoader(=>5) ne marche pas ^^

    pis je dois avoir ModLoader sur le serveur aussi non ?


  • Administrateurs

    … Non.
    Et si tu as écrit "Loader.ModLoader(=>5)" c'est normal que ça ne fonctionne pas ...



  • Bah faut mettre quoi alors

    Mais on est d'accord qu'il faut le mettre sur le launcher et non pas sur le serveur car c'est le launcher qui doit se fermer


  • Administrateurs

    Tu as déjà la condition   if(event.getSide().isClient()) qui permet de check que tu es côté client et non côté serveur.

            if(event.getSide().isClient())
            {
                if(Loader.instance().getActiveModList().size() > nbrDeMod)
                {
                    try
                    {
                        throw new Exception("mod interdit détecté");
                    }
                    catch(Exception e)
                    {
                        FMLClientHandler.instance().getClient().shutdown();
                        e.printStackTrace();
                    }
                }
            }
    

    Attention aux nombres de mod, certains mod contient des sous mods. Il ne faut pas oublier de les compter (au pire lances le jeu avec les mods voulus tu verra bien dans le menu le nombre de mod actif en bas à gauche).
    Rien d'avec Forge tu en as 3 (mcp, fml et Forge)



  • on a 4 mods installé

    je vais donc essayer de mettre 4 en nombre max et d'ajouter xray pour voir si cela fonctionne

    j'ai compris le soucis, en réalité on met un nombre précis de mods mais le truc c'est que le launcher ne retourne pas dans le .serveur pour voir si d'autres mods on été ajouté.

    ou en faite quand on ajoute xray dans le dossier mods du serveur,   le mod qui est sensé analyser ne le reconnait pas comme étant un mod  car j'ai essayé d'installer ModControl qui permet de faire une whitelist des mods que j'autorise  et il bloque tout mes mods, les uns après les autres (que j'autorise au fur et à mesure) sauf qu'il ne bloque pas xray !

    Pourtant quand j'essaye de supprimer un mod,   que je relance le launcher et que j'essaye de me connecter, j'ai bien un message d'erreur me disant qu'il manque un mod ….

    je viens d'essayer de le mettre dans la blacklist et il ne reconnait pas Xray comme étant un mod ...



  • désolé de faire un repost mais comme j'ai changé mon message entre temps, je sais pas si tu vois les édits que je fais, je pense donc avoir compris le soucis entre temps comme expliqué au-dessus


  • Administrateurs

    Surement car le mod xray n'est pas un mod mais un plugin FML et que l'auteur n'a pas ajouté ce qu'il faut pour être reconnu en temps que mod.
    Du-coup le seul moyen de vérifier ça présence et de regarder si une de ses classes est présente dans le classpath.



  • et faut faire cela comment ??

    car pour voir les class il suffit d'ouvrir avec winrar et j'ai vu un XRayInstaller.class  ou encore   XRayTweaker.class

    XRay18.class


  • Administrateurs

    try {
    Class.forName("nom.du.package.NomDeLaClasse"); // on essaie de trouver la classe
    // ajouter ici le code pour quitter le jeu
    } catch( ClassNotFoundException e ) {
    // la classe n'existe pas, on ne fait rien
    }
    


  • donc j'ai trouvé un système pour trouver les package, mais du coup si d'autres mods ne sont pas considéré comme tels, ça sera toujours pareil, donc il n'est pas possible de faire en sorte d'interdire l'ajout de toutes genre de choses à l'intérieur du dossier mods ? ou de réinstaller les dossiers à chaque lancement (ce qui devrait être rapide normalement si aucun fichier n'a changé)


  • Administrateurs

    Tu peux gérer ça depuis le launcher / depuis mon installateur.



  • depuis le launcher je peux gérer ce qui est dans mods ?


  • Administrateurs

    Normalement oui. Tu télécharges bien les mods depuis le launcher ? Donc tu peux aussi supprimer les mods indésirable.
    Il suffit de comparer les mods locales et les mods distant. C'est ce que je fais avec mon installateur.
    https://github.com/FFMT/ModPackInstaller/tree/master/src/main/java/fr/minecraftforgefrance/common



  • oui les mods sont installés depuis le launcher donc une de tes classes du lien permet de supprimer les choses non voulues


Log in to reply