Add ModelBakeEvent alternative for dynamic models
This commit is contained in:
parent
a6d924535e
commit
8937ca020d
|
|
@ -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.
|
||||||
|
* <p></p>
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -30,10 +30,12 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
import net.minecraft.world.level.block.state.StateDefinition;
|
||||||
import net.minecraftforge.client.ForgeHooksClient;
|
import net.minecraftforge.client.ForgeHooksClient;
|
||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import org.apache.commons.lang3.tuple.Triple;
|
import org.apache.commons.lang3.tuple.Triple;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.embeddedt.modernfix.ModernFix;
|
import org.embeddedt.modernfix.ModernFix;
|
||||||
import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider;
|
import org.embeddedt.modernfix.dynamicresources.DynamicBakedModelProvider;
|
||||||
|
import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent;
|
||||||
import org.embeddedt.modernfix.dynamicresources.ModelLocationCache;
|
import org.embeddedt.modernfix.dynamicresources.ModelLocationCache;
|
||||||
import org.embeddedt.modernfix.dynamicresources.ResourcePackHandler;
|
import org.embeddedt.modernfix.dynamicresources.ResourcePackHandler;
|
||||||
import org.spongepowered.asm.mixin.*;
|
import org.spongepowered.asm.mixin.*;
|
||||||
|
|
@ -289,8 +291,10 @@ public abstract class ModelBakeryMixin {
|
||||||
if(ibakedmodel == null) {
|
if(ibakedmodel == null) {
|
||||||
ibakedmodel = iunbakedmodel.bake((ModelBakery) (Object) this, textureGetter, arg2, arg);
|
ibakedmodel = iunbakedmodel.bake((ModelBakery) (Object) this, textureGetter, arg2, arg);
|
||||||
}
|
}
|
||||||
this.bakedCache.put(triple, ibakedmodel);
|
DynamicModelBakeEvent event = new DynamicModelBakeEvent(arg, ibakedmodel);
|
||||||
return ibakedmodel;
|
MinecraftForge.EVENT_BUS.post(event);
|
||||||
|
this.bakedCache.put(triple, event.getModel());
|
||||||
|
return event.getModel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user