AE2 model wrapping support
This commit is contained in:
parent
a3e7435c61
commit
e771af2330
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user