diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 34b35db1c3..10c73db6d2 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -45,6 +45,7 @@ import javax.vecmath.Vector4f; import net.minecraft.client.MouseHelper; import net.minecraftforge.client.event.RecipesUpdatedEvent; +import net.minecraftforge.fml.ModLoader; import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -179,24 +180,24 @@ public class ForgeHooksClient public static void onTextureStitchedPre(AtlasTexture map) { - MinecraftForge.EVENT_BUS.post(new TextureStitchEvent.Pre(map)); + ModLoader.get().postEvent(new TextureStitchEvent.Pre(map)); // ModelLoader.White.INSTANCE.register(map); // TODO Custom TAS ModelDynBucket.LoaderDynBucket.INSTANCE.register(map); } public static void onTextureStitchedPost(AtlasTexture map) { - MinecraftForge.EVENT_BUS.post(new TextureStitchEvent.Post(map)); + ModLoader.get().postEvent(new TextureStitchEvent.Post(map)); } public static void onBlockColorsInit(BlockColors blockColors) { - MinecraftForge.EVENT_BUS.post(new ColorHandlerEvent.Block(blockColors)); + ModLoader.get().postEvent(new ColorHandlerEvent.Block(blockColors)); } public static void onItemColorsInit(ItemColors itemColors, BlockColors blockColors) { - MinecraftForge.EVENT_BUS.post(new ColorHandlerEvent.Item(itemColors, blockColors)); + ModLoader.get().postEvent(new ColorHandlerEvent.Item(itemColors, blockColors)); } static final ThreadLocal renderLayer = new ThreadLocal(); @@ -373,7 +374,7 @@ public class ForgeHooksClient public static void onModelBake(ModelManager modelManager, Map modelRegistry, ModelLoader modelLoader) { - MinecraftForge.EVENT_BUS.post(new ModelBakeEvent(modelManager, modelRegistry, modelLoader)); + ModLoader.get().postEvent(new ModelBakeEvent(modelManager, modelRegistry, modelLoader)); modelLoader.onPostBakeEvent(modelRegistry); } diff --git a/src/main/java/net/minecraftforge/client/event/ModelBakeEvent.java b/src/main/java/net/minecraftforge/client/event/ModelBakeEvent.java index 658cf62f43..58d6ebe0df 100644 --- a/src/main/java/net/minecraftforge/client/event/ModelBakeEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ModelBakeEvent.java @@ -26,13 +26,14 @@ import net.minecraft.client.renderer.model.ModelManager; import net.minecraft.client.renderer.model.ModelResourceLocation; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.eventbus.api.Event; /** * Fired when the ModelManager is notified of the resource manager reloading. * Called after model registry is setup, but before it's passed to BlockModelShapes. */ // TODO: try to merge with ICustomModelLoader -public class ModelBakeEvent extends net.minecraftforge.eventbus.api.Event +public class ModelBakeEvent extends Event { private final ModelManager modelManager; private final Map modelRegistry; diff --git a/src/main/java/net/minecraftforge/fml/ModContainer.java b/src/main/java/net/minecraftforge/fml/ModContainer.java index c1856b79fc..137e4cce15 100644 --- a/src/main/java/net/minecraftforge/fml/ModContainer.java +++ b/src/main/java/net/minecraftforge/fml/ModContainer.java @@ -19,6 +19,7 @@ package net.minecraftforge.fml; +import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.forgespi.language.IModInfo; import org.apache.commons.lang3.tuple.Pair; @@ -158,4 +159,10 @@ public abstract class ModContainer * @return the mod object instance */ public abstract Object getMod(); + + /** + * Accept an arbitrary event for processing by the mod. Probably posted to an event bus in the lower level container. + * @param e Event to accept + */ + protected void acceptEvent(Event e) {} } diff --git a/src/main/java/net/minecraftforge/fml/ModLoader.java b/src/main/java/net/minecraftforge/fml/ModLoader.java index ee10beb19a..977af62c21 100644 --- a/src/main/java/net/minecraftforge/fml/ModLoader.java +++ b/src/main/java/net/minecraftforge/fml/ModLoader.java @@ -27,6 +27,7 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.capabilities.CapabilityManager; +import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.config.ConfigTracker; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; @@ -118,16 +119,16 @@ public class ModLoader return INSTANCE == null ? INSTANCE = new ModLoader() : INSTANCE; } - private static Runnable fireClientEvents() + private Runnable fireClientEvents() { - return ()->MinecraftForge.EVENT_BUS.post(new ModelRegistryEvent()); + return ()->postEvent(new ModelRegistryEvent()); } public void loadMods() { DistExecutor.runWhenOn(Dist.CLIENT, ()->()-> ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get())); ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); dispatchAndHandleError(LifecycleEventProvider.SETUP); - DistExecutor.runWhenOn(Dist.CLIENT, ModLoader::fireClientEvents); + DistExecutor.runWhenOn(Dist.CLIENT, this::fireClientEvents); dispatchAndHandleError(LifecycleEventProvider.SIDED_SETUP); } @@ -200,6 +201,10 @@ public class ModLoader } } + public void postEvent(Event e) { + ModList.get().forEachModContainer((id, mc) -> mc.acceptEvent(e)); + } + public void finishMods() { dispatchAndHandleError(LifecycleEventProvider.ENQUEUE_IMC); diff --git a/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java b/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java index 0f13a66df8..d8b5303bd6 100644 --- a/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java +++ b/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java @@ -157,4 +157,9 @@ public class FMLModContainer extends ModContainer { return this.eventBus; } + + @Override + protected void acceptEvent(final Event e) { + this.eventBus.post(e); + } }