Posted August 9, 201312 yr Hello, I'm writing a core mod now. For some reason, FMLCommonHandler.instance().findContainerFor(mod) doesn't work on core mods. It can't find the container and just returns null. After glancing at the source, it seems this is by design. InjectedModContainers goes to great lengths to "override" the isImmutable() method and disable inclusion of the mod in the usual lookup list that findContainerFor() uses. So my question is, how can my core mod use findContainerFor()? Or more importantly, how can my core mod use Forge functions that rely on findContainerFor() like entity registration, gui registration, etc? Are core mods not supposed to register these things for some reason? Am I required to split my mod into two mods? One FML mod and one core mod? It would be nice to keep everything in one mod. Thanks, Cuchaz
August 9, 201312 yr Author If for some reason it's not taboo to have core mods registering things like entities and guis, this small patch seems to resolve the issue: in cpw.mods.fml.common.FMLCommonHandler: public ModContainer findContainerFor(Object mod) { if( mod instanceof ModContainer ) { return (ModContainer)mod; } return Loader.instance().getReversedModObjectList().get(mod); }
August 9, 201312 yr Author And while I'm thinking of it, the event dispatcher for core mods seems to swallow exceptions. That makes debugging slightly more difficult, but it's not a huge problem. ie, if my mod container has a method like this: @Subscribe public void construct( FMLConstruction event ) { throw new RuntimeException( "where does this go?" ); } The exception appears nowhere in the log. =( The easy workaround for now is to just remember to put a try/catch in all my event handlers.
August 10, 201312 yr Author I take it not many people write coremods around here... Is there any way to get a dev response on this? What's the usual procedure for lobbying for patches to the forge codebase?
August 11, 201312 yr Author cpw says core mods should never do these things. But he didn't give a reason why. =(
August 11, 201312 yr Let me think... FML itself is a coremod and deals with the loading order of other coremods and mods... I see three solutions to your problem (which actually is to not being able to register things through Forge methods): -make a coremod part and a mod part -load your own mod section in your coremod like FML does -don't use Forge methods, make your own
August 11, 201312 yr Author Thanks for the suggestions. The limitations of core mods seems to be a philosophy decision from cpw. There's no technical reason why core mods can't do these things. That's disappointing, but there doesn't seem to be anything I can do about it. Your first suggestion is what I'll have to do. I'll just have to split my mod into two mods.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.