AE2 model wrapping support

This commit is contained in:
embeddedt 2023-04-25 11:33:26 -04:00
parent a3e7435c61
commit e771af2330
No known key found for this signature in database
GPG Key ID: A69433EC199B5613
3 changed files with 60 additions and 0 deletions

View File

@ -102,6 +102,7 @@ dependencies {
modCompileOnly("curse.maven:supermartijncore-454372:4455378")
modCompileOnly("curse.maven:valhesiastructures-347488:3476252")
modCompileOnly files("deps/starlight-1.2.jar")
modCompileOnly("appeng:appliedenergistics2:8.4.7")
}
tasks.withType(JavaCompile) {

View File

@ -0,0 +1,58 @@
package org.embeddedt.modernfix.mixin.perf.dynamic_resources.ae2;
import appeng.bootstrap.components.IModelBakeComponent;
import appeng.bootstrap.components.ModelOverrideComponent;
import appeng.core.Api;
import appeng.core.AppEng;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.function.BiFunction;
@Mixin(targets = { "appeng/core/Registration" })
public class RegistrationMixin {
private static Field customizerField;
@Inject(method = "registerClientEvents", at = @At("TAIL"), remap = false)
private void doRegisterDynBake(CallbackInfo ci) {
MinecraftForge.EVENT_BUS.addListener(this::onDynamicModelBake);
customizerField = ObfuscationReflectionHelper.findField(ModelOverrideComponent.class, "customizer");
}
private void onDynamicModelBake(DynamicModelBakeEvent event) {
if (!event.getLocation().getNamespace().equals(AppEng.MOD_ID)) {
return;
}
BakedModel missing = event.getModelLoader().getBakedTopLevelModels().get(ModelBakery.MISSING_MODEL_LOCATION);
if(event.getModel() == missing)
return;
Api.INSTANCE.definitions().getRegistry().getBootstrapComponents(IModelBakeComponent.class).forEachRemaining(c -> {
if(c instanceof ModelOverrideComponent)
handleModelOverride((ModelOverrideComponent)c, event);
});
}
private void handleModelOverride(ModelOverrideComponent c, DynamicModelBakeEvent event) {
Map<String, BiFunction<ResourceLocation, BakedModel, BakedModel>> customizer;
try {
customizer = (Map<String, BiFunction<ResourceLocation, BakedModel, BakedModel>>)customizerField.get(c);
} catch(ReflectiveOperationException e) {
ModernFix.LOGGER.error("Can't replace model", e);
return;
}
BiFunction<ResourceLocation, BakedModel, BakedModel> fn = customizer.get(event.getLocation().getPath());
if(fn != null) {
event.setModel(fn.apply(event.getLocation(), event.getModel()));
}
}
}

View File

@ -86,6 +86,7 @@
"perf.dynamic_resources.BlockModelShaperMixin",
"perf.dynamic_resources.ItemModelShaperMixin",
"perf.dynamic_resources.ModelBakeryMixin",
"perf.dynamic_resources.ae2.RegistrationMixin",
"perf.dynamic_resources.ctm.TextureMetadataHandlerMixin",
"perf.dynamic_resources.ctm.CTMPackReloadListenerMixin",
"perf.dynamic_resources.supermartijncore.ClientRegistrationHandlerMixin",