mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 00:07:45 +00:00
[1.18] Fix reload listener registration in ModelLoaderRegistry (#8650)
This commit is contained in:
1 parent
c48698f680
commit
ccaa20b006
5 files changed
+60
-12
No files matched your search
+13
@@ -0,0 +1,13 @@
|
||||
--- a/net/minecraft/server/packs/resources/ReloadableResourceManager.java
|
||||
+++ b/net/minecraft/server/packs/resources/ReloadableResourceManager.java
|
||||
@@ -68,4 +_,10 @@
|
||||
public Stream<PackResources> m_7536_() {
|
||||
return this.f_203815_.m_7536_();
|
||||
}
|
||||
+
|
||||
+ public void registerReloadListenerIfNotPresent(PreparableReloadListener listener) {
|
||||
+ if (!this.f_203816_.contains(listener)) {
|
||||
+ this.m_7217_(listener);
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
@@ -5,12 +5,16 @@
|
||||
|
||||
package net.minecraftforge.client.event;
|
||||
|
||||
import net.minecraftforge.client.model.ForgeModelBakery;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.client.model.IModelLoader;
|
||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
import net.minecraftforge.fml.event.IModBusEvent;
|
||||
|
||||
/**
|
||||
* Fired when the {@link ForgeModelBakery} is ready to register model loaders
|
||||
* Fired when the {@link ModelLoaderRegistry} is ready to register model loaders
|
||||
*
|
||||
* @see ModelLoaderRegistry#registerLoader(ResourceLocation, IModelLoader)
|
||||
*/
|
||||
public class ModelRegistryEvent extends Event implements IModBusEvent
|
||||
{
|
||||
|
||||
@@ -96,7 +96,6 @@ public class ClientModLoader
|
||||
DataPackConfig.DEFAULT.addModPacks(ResourcePackLoader.getPackNames());
|
||||
mcResourceManager.registerReloadListener(ClientModLoader::onResourceReload);
|
||||
mcResourceManager.registerReloadListener(BrandingControl.resourceManagerReloadListener());
|
||||
ModelLoaderRegistry.init();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,6 +162,8 @@ public class ClientModLoader
|
||||
if (error == null) {
|
||||
// We can finally start the forge eventbus up
|
||||
MinecraftForge.EVENT_BUS.start();
|
||||
// allow the ModelLoaderRegistry to register loaders as reload listeners
|
||||
ModelLoaderRegistry.afterFirstReload();
|
||||
} else {
|
||||
// Double check we have the langs loaded for forge
|
||||
LanguageHook.loadForgeAndMCLangs();
|
||||
|
||||
@@ -22,6 +22,7 @@ import net.minecraft.util.GsonHelper;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import com.mojang.math.Transformation;
|
||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
||||
import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
|
||||
import net.minecraftforge.client.model.geometry.IModelGeometry;
|
||||
import net.minecraftforge.client.model.geometry.ISimpleModelGeometry;
|
||||
import net.minecraftforge.client.model.obj.OBJLoader;
|
||||
@@ -48,6 +49,7 @@ import net.minecraft.client.resources.model.Material;
|
||||
import net.minecraft.client.resources.model.ModelBakery;
|
||||
import net.minecraft.client.resources.model.ModelState;
|
||||
import net.minecraft.client.resources.model.UnbakedModel;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
|
||||
/**
|
||||
* Central hub for custom model loaders.
|
||||
@@ -63,17 +65,23 @@ public class ModelLoaderRegistry
|
||||
// Forge built-in loaders
|
||||
public static void init()
|
||||
{
|
||||
registerLoader(new ResourceLocation("minecraft","elements"), VanillaProxy.Loader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge","obj"), OBJLoader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge","bucket"), DynamicBucketModel.Loader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge","composite"), CompositeModel.Loader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge","multi-layer"), MultiLayerModel.Loader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge","item-layers"), ItemLayerModel.Loader.INSTANCE);
|
||||
registerLoader(new ResourceLocation("forge", "separate-perspective"), SeparatePerspectiveModel.Loader.INSTANCE);
|
||||
var builtInLoaders = Map.of(
|
||||
new ResourceLocation("minecraft", "elements"), VanillaProxy.Loader.INSTANCE,
|
||||
new ResourceLocation("forge", "obj"), OBJLoader.INSTANCE,
|
||||
new ResourceLocation("forge", "bucket"), DynamicBucketModel.Loader.INSTANCE,
|
||||
new ResourceLocation("forge", "composite"), CompositeModel.Loader.INSTANCE,
|
||||
new ResourceLocation("forge", "multi-layer"), MultiLayerModel.Loader.INSTANCE,
|
||||
new ResourceLocation("forge", "item-layers"), ItemLayerModel.Loader.INSTANCE,
|
||||
new ResourceLocation("forge", "separate-perspective"), SeparatePerspectiveModel.Loader.INSTANCE
|
||||
);
|
||||
|
||||
// TODO: Implement as new model loaders
|
||||
//registerLoader(new ResourceLocation("forge:b3d"), new ModelLoaderAdapter(B3DLoader.INSTANCE));
|
||||
//registerLoader(new ResourceLocation("forge:fluid"), new ModelLoaderAdapter(ModelFluid.FluidLoader.INSTANCE));
|
||||
|
||||
var modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||
modEventBus.<RegisterClientReloadListenersEvent>addListener(event -> builtInLoaders.values().forEach(event::registerReloadListener));
|
||||
modEventBus.<ModelRegistryEvent>addListener(event -> builtInLoaders.forEach(ModelLoaderRegistry::registerLoader));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,8 +98,25 @@ public class ModelLoaderRegistry
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes system aware of your loader.
|
||||
* Internal method, only present for enabling legacy behavior of automatic registration of model loaders
|
||||
* as resource reload listeners.
|
||||
*/
|
||||
@Deprecated
|
||||
public static void afterFirstReload()
|
||||
{
|
||||
for (IModelLoader<?> loader : loaders.values())
|
||||
{
|
||||
((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListenerIfNotPresent(loader);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes system aware of your loader.<br>
|
||||
* <b>Must be called from within {@link ModelRegistryEvent}</b>
|
||||
* <br><br>
|
||||
* <b>Note:</b> This method currently registers the model loader as a resource reload listener automatically,
|
||||
* if it is not already registered. This behavior is <i>deprecated</i> and will be removed in the future.
|
||||
* If the model loader needs to be a resource reload listener as well, use {@link net.minecraftforge.client.event.RegisterClientReloadListenersEvent}.
|
||||
*/
|
||||
public static void registerLoader(ResourceLocation id, IModelLoader<?> loader)
|
||||
{
|
||||
@@ -101,7 +126,6 @@ public class ModelLoaderRegistry
|
||||
synchronized(loaders)
|
||||
{
|
||||
loaders.put(id, loader);
|
||||
((ReloadableResourceManager) Minecraft.getInstance().getResourceManager()).registerReloadListener(loader);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
|
||||
import net.minecraftforge.common.crafting.PartialNBTIngredient;
|
||||
import net.minecraftforge.common.crafting.DifferenceIngredient;
|
||||
@@ -174,6 +175,11 @@ public class ForgeMod
|
||||
BiomeDictionary.init();
|
||||
|
||||
ForgeRegistries.ITEMS.tags().addOptionalTagDefaults(Tags.Items.ENCHANTING_FUELS, Set.of(Items.LAPIS_LAZULI.delegate));
|
||||
|
||||
if (FMLEnvironment.dist == Dist.CLIENT)
|
||||
{
|
||||
ModelLoaderRegistry.init();
|
||||
}
|
||||
}
|
||||
|
||||
public void registerCapabilities(RegisterCapabilitiesEvent event)
|
||||
|
||||
Reference in new issue
Block a user