Skip to content
This repository has been archived by the owner on May 26, 2018. It is now read-only.
cpw edited this page Oct 27, 2012 · 15 revisions

Specific FAQs

Some frequently asked questions about FML

  1. Are you serious? FML?
    Yes, FML is a deliberate acronym. I know what it means. It also means Forge Mod Loader. The original longer name was FMLMP. I shortened it slightly because FMLMP does mean what you think.

  2. Is this compatible with RML (Risugami's ModLoader) Yes. We aim for 100% compatibility with any mod that does not edit minecraft classes directly, and even then most will still work. If you have ANY mod that does not edit minecraft classes and yes does not work with FML, but does with RML, then please [report an issue] (../issues).

    FML was developed using clean room techniques. Risugami Mod Loader (RML) compatibility is based on the published API and error reports indicating how different things behave differently between RML and FML. There has never been any code copied from RML to FML and there never will be.

  3. Is this compatible with MLMP? No. MLMP is an unpublished standard, meaning I cannot not usefully create a "clean" reimplementation. It contains many elements that are unknowable without decompiling and basically copying the code.

    However I welcome pull requests aimed at reintroducing MLMP support into FML. It is my belief that such changes would be fairly small for FML to make. I will not add them myself, but this is a standing invitation for SDK or other acknowledged author of MLMP to submit pull requests against this open source library for that purpose.

  4. Why do you have so much more code than ModLoader?
    This project is architected to merge the client and server code, thereby creating a single programming experience for both environments simultaneously. Additionally, it supports the ability to load heterogenous mod types- I am planning to support scala based modding shortly, amongst other things. Also, the architecture of FML makes updates easy. Most of the code does not change- only the bits that tell FML what to do.

  5. Why do you merge client and server? Minecraft, as built by Mojang, is a single code base. There's not a "server project" and "client project" at Mojang. Up until 1.3 was released, the Mojang build system basically ran two passes of the obfuscator, one for the client entry point, one for the server. This meant that classes for the server were different from the client. In 1.3, with the internal merge of client and server, came a change to the obfuscation as well- the server has the same obfuscation data as the client, meaning that classes in the client jar are compatible with the server. MCP rebuilt their mappings so they were also unified. Taken as a whole it meant it is possible for FML to re-merge the client and server code, to generate a single code base. This makes a lot of things a lot easier - it is possible to develop mods for both client and server as a single universal jar, for example. Basically, FML is attempting to recreate that single codebase that exists inside Mojang.

  6. Why does FML download stuff? FML is downloading additional libraries that were identified as being highly useful. Rather than make you download them every single time you get an update, we created a system that allows for external downloads to occur. This means you download less, because these libraries do not change anywhere near as often as the rest of the code base. The libraries currently downloaded are:

    • ASM: this allows us to do runtime bytecode manipulations. A lot of the "class merging magic" is because we use this.
    • Guava: this is just an excellent filler for a lot of missing "basic" Java functionality. Multimaps are everywhere inside FML.
    • Argo: minecraft actually uses and obfuscates this code. We replace it with a real copy of Argo.

    We currently don't ship bouncy castle because we identified performance challenges with it. This may change in the future.

  7. WTF is a coremod? Coremods are a new type of mod that has special access to some of the advanced capabilities of FML. FML is performing runtime bytecode class manipulation. This can be useful for modders who know their way around [ASM] (http://asm.ow2.org/) and wish to inject "clever" code without actually editing any base code at all. It's a bit like what MCPatcher does, except it's at runtime. This is one of the reasons we're generally incompatible with MCPatcher (there are others, but this is one of the main ones). For most people, just copy some "magic" code into coremods and you'll be good to go.

  8. Do you have any how-to guides for using this at all?
    There is at least one on the minecraft forums written by AtomicStryker and others here. I will try and keep the list up to date.

  9. What's all the FMLModContainer and @Mod stuff about?
    This is a new way to specify a Mod to FML. It doesn't suffer the drawbacks that BaseMod has, and was designed from the ground up for the capability to work in all three primary environments.

  10. I have a mod X that does Y on ModLoader or ModLoaderMP but doesn't on FML.
    File an issue here please. Any discrepancies between MLMP or ML and FML need to be noted and fixed. Test cases or log files will help a lot. Thanks!

  11. Where can I find you and give you money?
    I am often found on the #minecraftforge, #mcportcentral or #Direwolf20 channels on esper.net along with most other minecraft mod developers.

    If you wish to give me money, I recommend you give it to LexManos instead, he does a lot more for minecraft modding than I ever will. If you really want to give me money, I ask that you donate something to childsplay. I seriously am not accepting any donations.

Clone this wiki locally