Allow Model Loading API to inject and load extra models

This commit is contained in:
embeddedt 2023-08-25 15:00:21 -04:00
parent ce7b7cbaf2
commit eadb19d386
No known key found for this signature in database
GPG Key ID: A69433EC199B5613

View File

@ -87,7 +87,6 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
// we can handle recursion in getModel without issues // we can handle recursion in getModel without issues
fabric_enableGetOrLoadModelGuard = false; fabric_enableGetOrLoadModelGuard = false;
this.blockColors = val; this.blockColors = val;
this.ignoreModelLoad = true;
this.loadedBakedModels = CacheBuilder.newBuilder() this.loadedBakedModels = CacheBuilder.newBuilder()
.expireAfterAccess(ModelBakeryHelpers.MAX_MODEL_LIFETIME_SECS, TimeUnit.SECONDS) .expireAfterAccess(ModelBakeryHelpers.MAX_MODEL_LIFETIME_SECS, TimeUnit.SECONDS)
.maximumSize(ModelBakeryHelpers.MAX_BAKED_MODEL_COUNT) .maximumSize(ModelBakeryHelpers.MAX_BAKED_MODEL_COUNT)
@ -119,6 +118,11 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
this.bakedTopLevelModels = new DynamicBakedModelProvider((ModelBakery)(Object)this, bakedCache); this.bakedTopLevelModels = new DynamicBakedModelProvider((ModelBakery)(Object)this, bakedCache);
} }
@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 0))
private void ignoreFutureModelLoads(CallbackInfo ci) {
this.ignoreModelLoad = true;
}
private <K, V> void onModelRemoved(RemovalNotification<K, V> notification) { private <K, V> void onModelRemoved(RemovalNotification<K, V> notification) {
if(!debugDynamicModelLoading) if(!debugDynamicModelLoading)
return; return;
@ -193,7 +197,10 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
@Redirect(method = "bakeModels", at = @At(value = "INVOKE", target = "Ljava/util/Map;keySet()Ljava/util/Set;")) @Redirect(method = "bakeModels", at = @At(value = "INVOKE", target = "Ljava/util/Map;keySet()Ljava/util/Set;"))
private Set<ResourceLocation> skipBake(Map<ResourceLocation, UnbakedModel> instance) { private Set<ResourceLocation> skipBake(Map<ResourceLocation, UnbakedModel> instance) {
return Collections.emptySet(); Set<ResourceLocation> modelSet = new HashSet<>(instance.keySet());
if(modelSet.size() > 0)
ModernFix.LOGGER.info("Early baking {} models", modelSet.size());
return modelSet;
} }
/** /**