Résolu Bloquer des mods non désirables au lancement du jeu
-
Mdr Robin => la science infuse
Mais dit moi, pour cette solution tu dois connaitre le nombre de mod à l’avance , mais si on utilise un installateur avec une liste de mods optionnelle ce nombre est juste introuvable, non ?
```java
if(Loader.instance().getModList().size() != 50) // à changer
{
FMLCommonHandler.instance().exitJava(1, true);
}::: Et aussi j'ai look un peut les vidéos de "Hacke" , et j'ai testé sur ton installateur, et c'est vrai qu'il est possible pour un humain d'ajouter un mod entre le moment où le clean passe et le moment où Minecraft se lance ! :::
-
En effet.
Si tu utilises mon installateur afin d’avoir une couche de sécurité en plus il faut dans son mod, dans la fonction init ou post init lire tous les md5 du dossier sync ainsi que ceux de la white-list et vérifier le md5 de chaque fichier du dossier mods. Si un md5 ne correspond pas tu coupe le jeu. (le code qui compare les md5 se trouve dans ces classes : https://github.com/FFMT/ModPackInstaller/tree/master/src/main/java/fr/minecraftforgefrance/common)Avec ça tu as une sécurité très bonne (enfin très bonne pour un petit serveur Minecraft), l’un des seuls moyens serait de créer un conflit de md5 (en gros un fichier qui a le même md5 qu’un mod autorisé mais qui est différent) mais c’est loin d’être à la porté de tous.
Ou alors de décompiler ton mod pour supprimer la sécurité. Pas impossible mais comme pour le conflit de md5 ce n’est pas à la porté de tous. -
genre juste avant que je met se que robin a dis sa marchait mais je les mis je l’export je met 1mod car mon mod plus l’autre sa fait 2 je lance sa marche pas j’en mais deux sans compté mon mod non plus voici ma class principale
package com.adamitemod.mod; import java.awt.Color; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraftforge.common.MinecraftForge; import com.adamitemod.mod.Dynamite.EntityDynamite; import com.adamitemod.mod.blocks.BlockElevator; import com.adamitemod.mod.blocks.ElevatorEvent; import com.adamitemod.mod.blocks.GuiCustomMainMenu; import com.adamitemod.mod.init.BlocksMod; import com.adamitemod.mod.init.CraftsMod; import com.adamitemod.mod.init.ItemsMod; import com.adamitemod.mod.items.ItemDynamite; import com.adamitemod.mod.proxy.CommonProxy; import com.adamitemod.mod.world.WorldRegister; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; 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.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid = References.MOD_ID, name = References.MOD_NAME, version = References.VERSION) public class AdamiteMod { @Instance(References.MOD_ID) public static AdamiteMod instance; public static Item Dynamite; public static Block Machine; @SidedProxy(clientSide = References.CLIENT_PROXY, serverSide = References.SERVER_PROXY) public static CommonProxy proxy; public static Block Elevator; public static CreativeTabs Ada = new CreativeTabs("Ada") { @SideOnly(Side.CLIENT) public Item getTabIconItem() { return ItemsMod.adamiteChestplate; } }; @EventHandler public void preInit(FMLPreInitializationEvent event) { BlocksMod.init(); Elevator = new BlockElevator().setBlockTextureName(References.MOD_ID + ":elevator").setHardness(3.5F).setBlockName("Elevator").setCreativeTab(AdamiteMod.Ada); GameRegistry.registerBlock(Elevator, "Elevator"); BlocksMod.register(); ItemsMod.init(); Machine = new Machine().setBlockName("machine"); ItemsMod.register(); Dynamite = new ItemDynamite(Dynamite).setUnlocalizedName("Dynamite").setCreativeTab(AdamiteMod.Ada).setTextureName(References.MOD_ID + ":dynamite"); GameRegistry.registerItem(Dynamite, "Dynamite"); GameRegistry.registerBlock(Machine, "Machine"); CraftsMod.init(); WorldRegister.mainRegsitry(); proxy.registerRenders(); EntityRegistry.registerModEntity(EntityDynamite.class, "Dynamite", 7, this, 64, 20, true); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenders(); MinecraftForge.EVENT_BUS.register(new ElevatorEvent()); FMLCommonHandler.instance().bus().register(new ElevatorEvent()); NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); EntityRegistry.registerModEntity(EntityDynamite.class, "Dynamite", 7, this, 64, 20, true); GameRegistry.registerTileEntity(TileEntityMachine.class, References.MOD_ID + ":MachineTileEntity"); } @EventHandler public void postInit(FMLPostInitializationEvent event) { if(Loader.instance().getModList().size() != 2) // à changer { FMLCommonHandler.instance().exitJava(1, true); } EntityRegistry.registerModEntity(EntityDynamite.class, "Dynamite", 7, this, 64, 20, true); } @SubscribeEvent @SideOnly(Side.CLIENT) public void onTick(TickEvent.ClientTickEvent event) { Minecraft mc = FMLClientHandler.instance().getClient(); if(mc.currentScreen != null && mc.currentScreen.getClass().equals(GuiMainMenu.class)) { mc.displayGuiScreen(new GuiCustomMainMenu()); } } }
-
Rien qu’avec Forge + FML + MCP il y a 3 mods.
Donc + le tient + l’autre ça fait 5. -
Où sinon, avec une liste de tous les mods :
@NetworkCheckHandler public boolean isConnectionAcceptable(Map mods, Side side) { return true;//Si c'est false, mc crash }
A mettre dans la classe principale.
ça te donne un map avec en key le modid et en value la version qui correspond, donc si tu veux vérifier les mods, du fais un iterator de la map pour vérifier les mods : ```java
Iterator <string>it = mods.keySet().iterator();
while(it.hasNext())
{
String lemodid = it.next();
}C'est appelé quand forge charge le mod, quand tu te connectes sur un monde et quand un client se co sur le serveur.</string>
-
Pas mal aussi.
Même meilleur. -
Alors la . . .
j’ai perdu %(#333333)[size=small][[color=#0072bc]AymericRed] -
Alors en gros tu mets ça dans ta classe principale :
@NetworkCheckHandler public boolean isConnectionAcceptable(Map mods, Side side) { for(String lemodid : mods.keySet()) //Ceci va éxécuter le for avec tous les modid qui se trouvent dans la liste de mods { if(taListeDeModsIdIncorrects.contains(lemodid)) //Ou lemodid.equals("UnModIncorrect") { System.out.println("Ce mod n'est pas autorisé : " + lemodid + " !"); return false; } } return true;//Si c'est false, mc crash }
Donc après t’a plus qu’à faire ta liste de mods que tu veux pas et c’est bon.
Ceci va être vérifié quand FML “trouve” ton mod et le charge, quand tu te co sur un monde (solo/multi) et quand le serveur reçoit une requête de co d’un client. -
Résolu ?
-
car si tu as un laucnher, tu fais dans le launcher un scan de ton dossier .serveur et si un mod/pack de textures ou quoi ne devrait pas être la, le launcher lesupprime.
-
nan mais ses simple ses déja fait avant que je poste mon pb lis de la premiere page et tu verra
-
Oui bah résolu ou pas ? Réponds à la question
-
a oups désoler j’avais pas vue
-
j’ai un dossier qui se nome 1.7.10 dans mon dossier mods donc je sait pas s’il compte comme un mod
-
Non il compte pas, et je pense que tous les mods dedans ne seront chargés que si tu es avec Forge 1.7.10.
-
ok mes dans mon dossier il y a un mod
-
C’est quel mod?
-
cod chiken libs et bspksrscore
-
Et donc qu’est ce que ça fait ?!? C’est pas grave.
Envoyé de mon RAINBOW LITE 4G en utilisant Tapatalk
-
laisse tomber