diff --git a/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicModelBakeEvent.java b/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicModelBakeEvent.java new file mode 100644 index 00000000..8a199d43 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/dynamicresources/DynamicModelBakeEvent.java @@ -0,0 +1,33 @@ +package org.embeddedt.modernfix.dynamicresources; + +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.Event; + +/** + * Fired when a model is baked dynamically. Intended to be used as a replacement for ModelBakeEvent + * if mods want to replace a model. + *

+ * Note that this event can fire many times for the same resource location, as models are unloaded + * if unused/under memory pressure. + */ +public class DynamicModelBakeEvent extends Event { + private final ResourceLocation location; + private BakedModel model; + public DynamicModelBakeEvent(ResourceLocation location, BakedModel model) { + this.location = location; + this.model = model; + } + + public ResourceLocation getLocation() { + return this.location; + } + + public BakedModel getModel() { + return this.model; + } + + public void setModel(BakedModel model) { + this.model = model; + } +} diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java index 66aaeba5..f1a6b8f4 100644 --- a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/ModelBakeryMixin.java @@ -30,10 +30,12 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.common.MinecraftForge; import org.apache.commons.lang3.tuple.Triple; import org.apache.logging.log4j.Logger; import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider; +import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; import org.embeddedt.modernfix.dynamicresources.ModelLocationCache; import org.embeddedt.modernfix.dynamicresources.ResourcePackHandler; import org.spongepowered.asm.mixin.*; @@ -289,8 +291,10 @@ public abstract class ModelBakeryMixin { if(ibakedmodel == null) { ibakedmodel = iunbakedmodel.bake((ModelBakery) (Object) this, textureGetter, arg2, arg); } - this.bakedCache.put(triple, ibakedmodel); - return ibakedmodel; + DynamicModelBakeEvent event = new DynamicModelBakeEvent(arg, ibakedmodel); + MinecraftForge.EVENT_BUS.post(event); + this.bakedCache.put(triple, event.getModel()); + return event.getModel(); } } }