Résolu Créer une library pour un mod
-
Bonjour,
Je suis en train de créer une library pour un mod Minecraft. Cette library permettra de simplifier la sauvegarde de données et la synchronisation des données.
J’ai déjà compilé un prototype de cette library et pour l’implémenter à un mod, je fais tout simplement :
Properties → Java Build Path → Libraries → Add Jars…Mon problème est le suivant : Où doit se situer le jar de ma library ?
Quand je le met à la racine du projet le build du mod fonctionne très bien, mais une fois en jeu, le mod ne trouve plus les fichiers de ma library (normal : la library n’est pas build avec le mod).
Donc j’ai eu l’idée de la mettre dans les ressources du mod, sauf que là, le build ne fonctionne même plus : la console m’indique qu’elle ne trouve pas les fichiers de ma library (ce que je comprends moins).J’espère que vous saurez m’aider. Merci.
-
Salut,
Dans le dossier de forge / gradle, fais un dossier libs et mets-le dedans. -
Normalement tu dois avoir les deux jars (ton mod et la lib) dans le dossier mods du .minecraft une fois le tout terminé.
-
Ok merci, je teste ça.
Les gars vous êtes beaucoup trop chauds. J’ai à peine eu le temps de mettre mon pc en veille que j’ai reçu une notif par mail ! Et là 2 nouvelles réponses ! Merci en tout cas
Oubliez ce que j’ai dis précédemment, voici les vrais infos :
Quand je met ma library dans un dossier libs à la racine du projet le build du mod fonctionne très bien, mais une fois en jeu, le mod ne trouve plus les fichiers de ma library.
Donc j’ai eu l’idée de la mettre dans les ressources du mod, sauf que là, le build ne fonctionne même plus : la console m’indique qu’elle ne trouve pas les fichiers de ma library.
En fait cette erreur de build apparait du moment que la library n’est pas dans un dossier libs à la racine du projet. Elle apparait quand la library est directement à la racine du projet ou dans un dossier quelconque à la racine du projet, même dans le dossier gradle/libs par exemple.–-
Du coup, j’ai build mon mod avec la première option. Et cette fois j’ai mis ma library dans le dossier mods. Et là surprise, ça fonctionne… ou pas. En fait la fonction getMapStorage() n’est pas trouvée. C’est étrange car avec la même version de Minecraft et de Forge, ça fonctionne très bien dans mon environnement de développement.
:::---- Minecraft Crash Report ---- // There are four lights! Time: 4/27/17 8:13 PM Description: Exception in server tick loop net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from Example Mod (examplemod) Caused by: java.lang.NoSuchMethodError: net.minecraft.world.WorldServer.getMapStorage()Lnet/minecraft/world/storage/MapStorage; at com.trcgames.dbSynchronizer.database.Database.initInstance(Database.java:33) at com.trcgames.dbSynchronizer.DBSynchronizer.onServerStarted(DBSynchronizer.java:33) at com.example.examplemod.ExampleMod.onServerStared(ExampleMod.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:641) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:246) at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:224) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) at com.google.common.eventbus.EventBus.post(EventBus.java:275) at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:147) at net.minecraftforge.fml.common.Loader.serverStarted(Loader.java:872) at net.minecraftforge.fml.common.FMLCommonHandler.handleServerStarted(FMLCommonHandler.java:300) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:444) at java.lang.Thread.run(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details: Minecraft Version: 1.11.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 1.8.0_121, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 391019368 bytes (372 MB) / 676331520 bytes (645 MB) up to 954728448 bytes (910 MB) JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xms512m -Xmx1024m IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95 FML: MCP 9.38 Powered by Forge 13.20.0.2228 5 mods loaded, 5 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored UCHIJAAAA minecraft{1.11.2} [Minecraft] (minecraft.jar) UCHIJAAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar) UCHIJAAAA FML{8.0.99.99} [Forge Mod Loader] (forge-1.11.2-13.20.0.2228-universal.jar) UCHIJAAAA forge{13.20.0.2228} [Minecraft Forge] (forge-1.11.2-13.20.0.2228-universal.jar) UCHIJAAAE examplemod{1.0} [Example Mod] (DBSyncTest.jar) Loaded coremods (and transformers): GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread. Profiler Position: N/A (disabled) Player Count: 0 / 8; [] Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'fml,forge'
:::
-
La 1e solution est la bonne, mettre la librairie dans le dossier mod est aussi la bonne manière.
Tu l’as compilé avec quoi ta librairie ? Car le problème est qu’elle utilise les noms non obfusqués de l’environnement de dev au lieu de ceux obfusqués. -
Ah… d’accord, ça expliquerait tout !
En fait j’ai créer ma library comme si c’était un mod sauf que je ne l’ai pas build, j’ai juste exporter un jar avec les classes que j’ai créé (sauf la classe principale qui me servait de test).Du coup, comment je dois m’y prendre ?
-
Faut compiler comme si c’est un mod.
-
MERCI !
Ahh… l’explosion de joie quand j’ai vu que ça a fonctionné ! Merci encore !