diff --git a/fml/client/net/minecraft/src/BaseMod.java b/fml/client/net/minecraft/src/BaseMod.java index a15876c85..ac811556a 100644 --- a/fml/client/net/minecraft/src/BaseMod.java +++ b/fml/client/net/minecraft/src/BaseMod.java @@ -34,10 +34,12 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr { // CALLBACK MECHANISMS + private boolean fml_lastWorld = false; + public final boolean doTickInGame(TickType tick, boolean tickEnd, Object... data) { Minecraft mc = FMLClientHandler.instance().getClient(); - boolean hasWorld = true; + boolean hasWorld = mc.field_71441_e != null; // World and render ticks if (tickEnd && ( tick==TickType.RENDER || tick==TickType.CLIENT ) && hasWorld) { return onTickInGame((Float) data[0], mc); @@ -48,6 +50,16 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr public final boolean doTickInGUI(TickType tick, boolean tickEnd, Object... data) { Minecraft mc = FMLClientHandler.instance().getClient(); + boolean hasWorld = mc.field_71441_e != null; + if (!hasWorld && !fml_lastWorld) + { + fml_lastWorld = true; + } + else if (!hasWorld && fml_lastWorld) + { + return true; + } + if (tickEnd && ( tick==TickType.RENDER || tick==TickType.CLIENT)) { return onTickInGUI((Float) data[0], mc, mc.field_71462_r); } diff --git a/fml/common/cpw/mods/fml/common/FMLModContainer.java b/fml/common/cpw/mods/fml/common/FMLModContainer.java index d47e25395..be1533cf5 100644 --- a/fml/common/cpw/mods/fml/common/FMLModContainer.java +++ b/fml/common/cpw/mods/fml/common/FMLModContainer.java @@ -84,6 +84,7 @@ public class FMLModContainer implements ModContainer .put(FMLServerStoppingEvent.class, Mod.ServerStopping.class) .build(); private static final BiMap, Class> modTypeAnnotations = modAnnotationTypes.inverse(); + private String annotationDependencies; public FMLModContainer(String className, File modSource, Map modDescriptor) @@ -138,7 +139,8 @@ public class FMLModContainer implements ModContainer List requirements = Lists.newArrayList(); List dependencies = Lists.newArrayList(); List dependants = Lists.newArrayList(); - Loader.instance().computeDependencies((String) descriptor.get("dependencies"), requirements, dependencies, dependants); + annotationDependencies = (String) descriptor.get("dependencies"); + Loader.instance().computeDependencies(annotationDependencies, requirements, dependencies, dependants); modMetadata.requiredMods = requirements; modMetadata.dependencies = dependencies; modMetadata.dependants = dependants; @@ -176,7 +178,7 @@ public class FMLModContainer implements ModContainer @Override public String getSortingRules() { - return modMetadata.printableSortingRules(); + return (overridesMetadata ? annotationDependencies : modMetadata.printableSortingRules()); } @Override diff --git a/fml/common/cpw/mods/fml/common/LoadController.java b/fml/common/cpw/mods/fml/common/LoadController.java index 88576d4f4..051db9624 100644 --- a/fml/common/cpw/mods/fml/common/LoadController.java +++ b/fml/common/cpw/mods/fml/common/LoadController.java @@ -147,7 +147,7 @@ public class LoadController { builder.put(mc, mc.getMod()); } - if (mc.getMod()==null && !mc.isImmutable()) + if (mc.getMod()==null && !mc.isImmutable() && state!=LoaderState.CONSTRUCTING) { FMLLog.severe("There is a severe problem with %s - it appears not to have constructed correctly", mc.getModId()); if (state != LoaderState.CONSTRUCTING) diff --git a/fml/common/cpw/mods/fml/common/ModMetadata.java b/fml/common/cpw/mods/fml/common/ModMetadata.java index bd5979155..65257cde8 100644 --- a/fml/common/cpw/mods/fml/common/ModMetadata.java +++ b/fml/common/cpw/mods/fml/common/ModMetadata.java @@ -156,6 +156,6 @@ public class ModMetadata public String printableSortingRules() { - return null; + return ""; } } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index 3a57899c7..5adab4b8b 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -25,6 +25,7 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ICraftingHandler; import cpw.mods.fml.common.IFuelHandler; import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.TickType; import cpw.mods.fml.common.network.IConnectionHandler; @@ -42,7 +43,7 @@ public class ModLoaderHelper public static IModLoaderSidedHelper sidedHelper; public static void updateStandardTicks(BaseMod mod, boolean enable, boolean useClock) { - ModLoaderModContainer mlmc = findOrBuildModContainer(mod); + ModLoaderModContainer mlmc = (ModLoaderModContainer) Loader.instance().activeModContainer(); BaseModTicker ticker = mlmc.getGameTickHandler(); EnumSet ticks = ticker.ticks(); // If we're enabled we get render ticks diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index 9ef4506f1..6a2964c0c 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -33,6 +33,7 @@ import java.util.logging.Level; import net.minecraft.src.MLProp; +import com.google.common.base.Strings; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -103,7 +104,7 @@ public class ModLoaderModContainer implements ModContainer this.modClazzName = className; this.modSource = modSource; this.modId = className.contains(".") ? className.substring(className.lastIndexOf('.')+1) : className; - this.sortingProperties = sortingProperties; + this.sortingProperties = Strings.isNullOrEmpty(sortingProperties) ? "" : sortingProperties; } /** @@ -494,6 +495,9 @@ public class ModLoaderModContainer implements ModContainer { ModClassLoader modClassLoader = event.getModClassLoader(); modClassLoader.addFile(modSource); + EnumSet ticks = EnumSet.noneOf(TickType.class); + this.gameTickHandler = new BaseModTicker(ticks, false); + this.guiTickHandler = new BaseModTicker(ticks.clone(), true); Class modClazz = (Class) Class.forName(modClazzName, true, modClassLoader); configureMod(modClazz, event.getASMHarvestedData()); isNetworkMod = FMLNetworkHandler.instance().registerNetworkMod(this, modClazz, event.getASMHarvestedData()); @@ -512,9 +516,6 @@ public class ModLoaderModContainer implements ModContainer { try { - EnumSet ticks = EnumSet.noneOf(TickType.class); - this.gameTickHandler = new BaseModTicker(ticks, false); - this.guiTickHandler = new BaseModTicker(ticks.clone(), true); this.gameTickHandler.setMod(mod); this.guiTickHandler.setMod(mod); TickRegistry.registerTickHandler(this.gameTickHandler, Side.CLIENT);