Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

  • 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);
}

  • 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.

  • 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?

  • Author

cpw says core mods should never do these things. But he didn't give a reason why. =(

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

  • 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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.