From c010d700a827df8ce7bc0d51ec822583aba2481d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 10 Apr 2023 08:00:50 -0400 Subject: [PATCH 1/3] Make entity ID syncer not crash if a class can't be loaded Related: #55 --- .../entity/EntityDataIDSyncHandler.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java b/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java index 63b47dd3..70fc97cc 100644 --- a/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java +++ b/src/main/java/org/embeddedt/modernfix/entity/EntityDataIDSyncHandler.java @@ -43,19 +43,23 @@ public class EntityDataIDSyncHandler { List fieldsToSync = new ArrayList<>(); for(Class eClass : entityPoolMap.keySet()) { fieldsToSync.clear(); - Field[] classFields = eClass.getDeclaredFields(); - for(Field field : classFields) { - if(!Modifier.isStatic(field.getModifiers())) - continue; - field.setAccessible(true); - Object o = field.get(null); - if(o != null && EntityDataAccessor.class.isAssignableFrom(o.getClass())) { - fieldsToSync.add(field); + try { + Field[] classFields = eClass.getDeclaredFields(); + for(Field field : classFields) { + if(!Modifier.isStatic(field.getModifiers())) + continue; + field.setAccessible(true); + Object o = field.get(null); + if(o != null && EntityDataAccessor.class.isAssignableFrom(o.getClass())) { + fieldsToSync.add(field); + } } - } - for(Field field : fieldsToSync) { - int id = ((EntityDataAccessor)field.get(null)).id; - fieldsToSyncMap.computeIfAbsent(eClass, k -> new ArrayList<>()).add(Pair.of(field.getName(), id)); + for(Field field : fieldsToSync) { + int id = ((EntityDataAccessor)field.get(null)).id; + fieldsToSyncMap.computeIfAbsent(eClass, k -> new ArrayList<>()).add(Pair.of(field.getName(), id)); + } + } catch(Throwable e) { + ModernFix.LOGGER.error("Skipping entity ID sync for {}: {}", eClass.getName(), e); } } } From af85a4293a98b0094ba2dc1e7384b3536babab97 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 10 Apr 2023 10:02:15 -0400 Subject: [PATCH 2/3] Add compat for SuperMartijn642CoreLib --- build.gradle | 1 + .../ClientRegistrationHandlerMixin.java | 56 +++++++++++++++++++ src/main/resources/modernfix.mixins.json | 1 + 3 files changed, 58 insertions(+) create mode 100644 src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java diff --git a/build.gradle b/build.gradle index 00e55d3f..cc83e53a 100644 --- a/build.gradle +++ b/build.gradle @@ -97,6 +97,7 @@ dependencies { modCompileOnly("curse.maven:twforest-227639:3575220") modRuntimeOnly("curse.maven:ferritecore-429235:4074330") modCompileOnly("team.chisel.ctm:CTM:${ctm_version}") + modCompileOnly("curse.maven:supermartijncore-454372:4455378") } tasks.withType(JavaCompile) { diff --git a/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java new file mode 100644 index 00000000..807f91a2 --- /dev/null +++ b/src/main/java/org/embeddedt/modernfix/mixin/perf/dynamic_resources/supermartijncore/ClientRegistrationHandlerMixin.java @@ -0,0 +1,56 @@ +package org.embeddedt.modernfix.mixin.perf.dynamic_resources.supermartijncore; + +import com.supermartijn642.core.registry.ClientRegistrationHandler; +import com.supermartijn642.core.util.Pair; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.embeddedt.modernfix.dynamicresources.DynamicModelBakeEvent; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Stream; + +@Mixin(ClientRegistrationHandler.class) +public class ClientRegistrationHandlerMixin { + @Shadow @Final private List>, Function>> modelOverwrites; + + private Map> modelOverwritesByLocation = new Object2ObjectOpenHashMap<>(); + + @Redirect(method = "handleModelBakeEvent", at = @At(value = "FIELD", target = "Lcom/supermartijn642/core/registry/ClientRegistrationHandler;modelOverwrites:Ljava/util/List;"), remap = false) + private List skipModelOverwrites(ClientRegistrationHandler h) { + modelOverwritesByLocation.clear(); + for(Pair>, Function> pair : this.modelOverwrites) { + Stream locationStream = pair.left().get(); + Function swapper = pair.right(); + locationStream.forEach(l -> { + modelOverwritesByLocation.put(l, swapper); + }); + } + return Collections.emptyList(); + } + + @Inject(method = "", at = @At("RETURN")) + private void registerDynBake(String modid, CallbackInfo ci) { + FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onDynamicModelBake); + } + + @SubscribeEvent + public void onDynamicModelBake(DynamicModelBakeEvent event) { + Function replacer = modelOverwritesByLocation.get(event.getLocation()); + if(replacer != null) + event.setModel(replacer.apply(event.getModel())); + } +} diff --git a/src/main/resources/modernfix.mixins.json b/src/main/resources/modernfix.mixins.json index 0d212903..ae37e36b 100644 --- a/src/main/resources/modernfix.mixins.json +++ b/src/main/resources/modernfix.mixins.json @@ -80,6 +80,7 @@ "perf.dynamic_resources.ModelBakeryMixin", "perf.dynamic_resources.ctm.TextureMetadataHandlerMixin", "perf.dynamic_resources.ctm.CTMPackReloadListenerMixin", + "perf.dynamic_resources.supermartijncore.ClientRegistrationHandlerMixin", "perf.model_optimizations.OBJLoaderMixin", "perf.model_optimizations.SelectorMixin", "perf.model_optimizations.TransformationMatrixMixin", From 059779a29abdf718a1b8b18e2626776c20d7cfa5 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 10 Apr 2023 10:08:23 -0400 Subject: [PATCH 3/3] Update core lib version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 73059cc0..0785e888 100644 --- a/build.gradle +++ b/build.gradle @@ -96,7 +96,7 @@ dependencies { modCompileOnly("dev.latvian.mods:kubejs-forge:${kubejs_version}") modRuntimeOnly("curse.maven:ferritecore-429235:4074294") modCompileOnly("team.chisel.ctm:CTM:${ctm_version}") - modCompileOnly("curse.maven:supermartijncore-454372:4455378") + modCompileOnly("curse.maven:supermartijncore-454372:4455384") } tasks.withType(JavaCompile) {