Reorganize sided event dispatch slightly. Dispatch model and entityrenderer

functions at more appropriate times.

Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
cpw 2019-06-23 16:01:20 -04:00
parent bdad2af27b
commit 0a819da0e7
No known key found for this signature in database
GPG Key ID: 8EB3DF749553B1B7
6 changed files with 28 additions and 20 deletions

View File

@ -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<String, PlayerRenderer> getSkinMap() {

View File

@ -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<Consumer<Supplier<Event>>> preSidedRunnable, Consumer<Consumer<Supplier<Event>>> 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"));
}

View File

@ -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<Supplier<Event>> perModContainerEventProcessor) {
RenderingRegistry.loadEntityRenderers(mc.getRenderManager());
}
private static void preSidedRunnable(Consumer<Supplier<Event>> perModContainerEventProcessor) {
perModContainerEventProcessor.accept(ModelRegistryEvent::new);
}
private static void finishModLoading(Executor executor)
{
createRunnableWithCatch(() -> ModLoader.get().finishMods(executor)).run();

View File

@ -43,14 +43,14 @@ public class RenderingRegistry
INSTANCE.entityRenderers.put(entityClass, renderFactory);
}
public static void loadEntityRenderers(EntityRendererManager manager, Map<Class<? extends Entity>, EntityRenderer<? extends Entity>> 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 <T extends Entity> void register(EntityRendererManager manager, Map<Class<? extends Entity>, EntityRenderer<? extends Entity>> renderMap, Class<T> entityClass, IRenderFactory<?> renderFactory)
private static <T extends Entity> void register(EntityRendererManager manager, Class<T> entityClass, IRenderFactory<?> renderFactory)
{
renderMap.put(entityClass, ((IRenderFactory<T>)renderFactory).createRenderFor(manager));
manager.func_217782_a(entityClass, ((IRenderFactory<T>)renderFactory).createRenderFor(manager));
}
}

View File

@ -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() {

View File

@ -115,6 +115,9 @@ public net.minecraft.world.chunk.ChunkStatus <init>(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