Fix CJB mod compatibilty for real. Gui container registration can now happen in the constructor. YUK!

This commit is contained in:
Christian 2012-09-03 21:14:11 -04:00
parent 2af15b3a95
commit 6de655df47
4 changed files with 24 additions and 13 deletions

View file

@ -493,13 +493,19 @@ public class ModLoaderModContainer implements ModContainer
Class<? extends BaseModProxy> modClazz = (Class<? extends BaseModProxy>) modClassLoader.loadBaseModClass(modClazzName); Class<? extends BaseModProxy> modClazz = (Class<? extends BaseModProxy>) modClassLoader.loadBaseModClass(modClazzName);
configureMod(modClazz, event.getASMHarvestedData()); configureMod(modClazz, event.getASMHarvestedData());
isNetworkMod = FMLNetworkHandler.instance().registerNetworkMod(this, modClazz, event.getASMHarvestedData()); isNetworkMod = FMLNetworkHandler.instance().registerNetworkMod(this, modClazz, event.getASMHarvestedData());
Constructor<? extends BaseModProxy> ctor = modClazz.getConstructor(); ModLoaderNetworkHandler dummyHandler = null;
ctor.setAccessible(true);
mod = modClazz.newInstance();
if (!isNetworkMod) if (!isNetworkMod)
{ {
FMLLog.fine("Injecting dummy network mod handler for BaseMod %s", getModId()); FMLLog.fine("Injecting dummy network mod handler for BaseMod %s", getModId());
FMLNetworkHandler.instance().registerNetworkMod(new ModLoaderNetworkHandler(this, mod)); dummyHandler = new ModLoaderNetworkHandler(this);
FMLNetworkHandler.instance().registerNetworkMod(dummyHandler);
}
Constructor<? extends BaseModProxy> ctor = modClazz.getConstructor();
ctor.setAccessible(true);
mod = modClazz.newInstance();
if (dummyHandler != null)
{
dummyHandler.setBaseMod(mod);
} }
ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide()); ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide());
} }

View file

@ -9,10 +9,14 @@ public class ModLoaderNetworkHandler extends NetworkModHandler
{ {
private BaseModProxy baseMod; private BaseModProxy baseMod;
public ModLoaderNetworkHandler(ModLoaderModContainer mlmc, BaseModProxy mod) public ModLoaderNetworkHandler(ModLoaderModContainer mlmc)
{ {
super(mlmc, null); super(mlmc, null);
this.baseMod = mod; }
public void setBaseMod(BaseModProxy baseMod)
{
this.baseMod = baseMod;
} }
@Override @Override

View file

@ -31,6 +31,7 @@ import com.google.common.collect.Sets;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.Side; import cpw.mods.fml.common.Side;
import cpw.mods.fml.common.network.FMLPacket.Type; import cpw.mods.fml.common.network.FMLPacket.Type;
@ -263,6 +264,11 @@ public class NetworkRegistry
public void registerGuiHandler(Object mod, IGuiHandler handler) public void registerGuiHandler(Object mod, IGuiHandler handler)
{ {
ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod); ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod);
if (mc == null)
{
mc = Loader.instance().activeModContainer();
FMLLog.log(Level.WARNING, "Mod %s attempted to register a gui network handler during a construction phase", mc.getModId());
}
NetworkModHandler nmh = FMLNetworkHandler.instance().findNetworkModHandler(mc); NetworkModHandler nmh = FMLNetworkHandler.instance().findNetworkModHandler(mc);
if (nmh == null) if (nmh == null)
{ {

View file

@ -24,11 +24,6 @@ public class Downloader extends JOptionPane
boolean stopIt; boolean stopIt;
Thread pokeThread; Thread pokeThread;
public Downloader()
{
super();
}
private Box makeProgressPanel() private Box makeProgressPanel()
{ {
Box box = Box.createVerticalBox(); Box box = Box.createVerticalBox();