diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRendererManager.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRendererManager.java.patch index c0699f100..058639c97 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRendererManager.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRendererManager.java.patch @@ -1,10 +1,7 @@ --- a/net/minecraft/client/renderer/entity/EntityRendererManager.java +++ b/net/minecraft/client/renderer/entity/EntityRendererManager.java -@@ -255,8 +255,13 @@ - this.field_178637_m = new PlayerRenderer(this); - this.field_178636_l.put("default", this.field_178637_m); +@@ -257,6 +257,10 @@ this.field_178636_l.put("slim", new PlayerRenderer(this, true)); -+ net.minecraftforge.fml.client.registry.RenderingRegistry.loadEntityRenderers(this, this.field_78729_o); } + public Map getSkinMap() { diff --git a/src/main/java/net/minecraftforge/fml/ModLoader.java b/src/main/java/net/minecraftforge/fml/ModLoader.java index 88a71452a..8a0dc5c3f 100644 --- a/src/main/java/net/minecraftforge/fml/ModLoader.java +++ b/src/main/java/net/minecraftforge/fml/ModLoader.java @@ -21,11 +21,8 @@ package net.minecraftforge.fml; import com.google.common.collect.ImmutableList; import cpw.mods.modlauncher.TransformingClassLoader; -import net.minecraft.data.DataGenerator; import net.minecraft.util.registry.Bootstrap; 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; @@ -52,6 +49,7 @@ import java.util.*; import java.util.concurrent.Executor; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; import static net.minecraftforge.fml.Logging.CORE; @@ -124,20 +122,16 @@ public class ModLoader return INSTANCE == null ? INSTANCE = new ModLoader() : INSTANCE; } - private Runnable fireClientEvents() - { - return ()->postEvent(new ModelRegistryEvent()); - } - - public void loadMods(Executor mainThreadExecutor) { + public void loadMods(Executor mainThreadExecutor, Consumer>> preSidedRunnable, Consumer>> postSidedRunnable) { statusConsumer.ifPresent(c->c.accept("Loading mod config")); DistExecutor.runWhenOn(Dist.CLIENT, ()->()-> ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.CLIENT, FMLPaths.CONFIGDIR.get())); ConfigTracker.INSTANCE.loadConfigs(ModConfig.Type.COMMON, FMLPaths.CONFIGDIR.get()); statusConsumer.ifPresent(c->c.accept("Mod setup: SETUP")); dispatchAndHandleError(LifecycleEventProvider.SETUP, mainThreadExecutor); statusConsumer.ifPresent(c->c.accept("Mod setup: SIDED SETUP")); - DistExecutor.runWhenOn(Dist.CLIENT, this::fireClientEvents); + mainThreadExecutor.execute(()->preSidedRunnable.accept(c->ModList.get().forEachModContainer((mi,mc)->mc.acceptEvent(c.get())))); dispatchAndHandleError(LifecycleEventProvider.SIDED_SETUP, mainThreadExecutor); + mainThreadExecutor.execute(()->postSidedRunnable.accept(c->ModList.get().forEachModContainer((mi,mc)->mc.acceptEvent(c.get())))); statusConsumer.ifPresent(c->c.accept("Mod setup complete")); } diff --git a/src/main/java/net/minecraftforge/fml/client/ClientModLoader.java b/src/main/java/net/minecraftforge/fml/client/ClientModLoader.java index 8c08bf73b..f41f5e039 100644 --- a/src/main/java/net/minecraftforge/fml/client/ClientModLoader.java +++ b/src/main/java/net/minecraftforge/fml/client/ClientModLoader.java @@ -26,10 +26,13 @@ import net.minecraft.profiler.IProfiler; import net.minecraft.resources.*; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.event.ModelRegistryEvent; import net.minecraftforge.common.ForgeConfig; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.*; import net.minecraftforge.fml.client.gui.LoadingErrorScreen; +import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.packs.ResourcePackLoader; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -40,6 +43,8 @@ import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.function.Consumer; +import java.util.function.Supplier; import static net.minecraftforge.fml.loading.LogMarkers.LOADING; @@ -85,8 +90,17 @@ public class ClientModLoader private static void startModLoading(Executor executor) { earlyLoaderGUI.handleElsewhere(); - createRunnableWithCatch(() -> ModLoader.get().loadMods(executor)).run(); + createRunnableWithCatch(() -> ModLoader.get().loadMods(executor, ClientModLoader::preSidedRunnable, ClientModLoader::postSidedRunnable)).run(); } + + private static void postSidedRunnable(Consumer> perModContainerEventProcessor) { + RenderingRegistry.loadEntityRenderers(mc.getRenderManager()); + } + + private static void preSidedRunnable(Consumer> perModContainerEventProcessor) { + perModContainerEventProcessor.accept(ModelRegistryEvent::new); + } + private static void finishModLoading(Executor executor) { createRunnableWithCatch(() -> ModLoader.get().finishMods(executor)).run(); diff --git a/src/main/java/net/minecraftforge/fml/client/registry/RenderingRegistry.java b/src/main/java/net/minecraftforge/fml/client/registry/RenderingRegistry.java index 3ab4660c5..b48d01845 100644 --- a/src/main/java/net/minecraftforge/fml/client/registry/RenderingRegistry.java +++ b/src/main/java/net/minecraftforge/fml/client/registry/RenderingRegistry.java @@ -43,14 +43,14 @@ public class RenderingRegistry INSTANCE.entityRenderers.put(entityClass, renderFactory); } - public static void loadEntityRenderers(EntityRendererManager manager, Map, EntityRenderer> renderMap) + public static void loadEntityRenderers(EntityRendererManager manager) { - INSTANCE.entityRenderers.forEach((key, value) -> register(manager, renderMap, key, value)); + INSTANCE.entityRenderers.forEach((key, value) -> register(manager, key, value)); } @SuppressWarnings("unchecked") - private static void register(EntityRendererManager manager, Map, EntityRenderer> renderMap, Class entityClass, IRenderFactory renderFactory) + private static void register(EntityRendererManager manager, Class entityClass, IRenderFactory renderFactory) { - renderMap.put(entityClass, ((IRenderFactory)renderFactory).createRenderFor(manager)); + manager.func_217782_a(entityClass, ((IRenderFactory)renderFactory).createRenderFor(manager)); } } diff --git a/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java b/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java index 25cc0004d..d54217d47 100644 --- a/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java +++ b/src/main/java/net/minecraftforge/fml/server/ServerModLoader.java @@ -43,7 +43,7 @@ public class ServerModLoader LogicalSidedProvider.setServer(()->dedicatedServer); LanguageHook.loadForgeAndMCLangs(); ModLoader.get().gatherAndInitializeMods(); - ModLoader.get().loadMods(Runnable::run); + ModLoader.get().loadMods(Runnable::run, (a)->{}, (a)->{}); } public static void end() { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 1dfa976c4..b2f36e527 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -115,6 +115,9 @@ public net.minecraft.world.chunk.ChunkStatus (Ljava/lang/String;Lnet/minec # ItemRenderer protected net.minecraft.client.renderer.entity.ItemRenderer func_177078_a(Lnet/minecraft/item/ItemStack;)I # getMiniItemCount + +public net.minecraft.client.renderer.entity.EntityRendererManager func_217782_a(Ljava/lang/Class;Lnet/minecraft/client/renderer/entity/EntityRenderer;)V # addRenderer + public net.minecraft.item.crafting.TippedArrowRecipe public net.minecraft.item.crafting.ShieldRecipes$Decoration public net.minecraft.item.crafting.RecipesBanners$RecipeAddPattern