From a19d519b4b609908166a5c790aacc64d289a2537 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:01:36 -0400 Subject: [PATCH 1/9] Temporarily shift splash screen control to background thread during registry events --- .../loading_screen_freeze/GameDataMixin.java | 20 +++++++ .../forge/util/AsyncLoadingScreen.java | 53 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java new file mode 100644 index 00000000..b42ef336 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java @@ -0,0 +1,20 @@ +package org.embeddedt.modernfix.forge.mixin.bugfix.loading_screen_freeze; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.registries.GameData; +import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(value = GameData.class, remap = false) +public class GameDataMixin { + @WrapOperation(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) + private static void swapThreadAndPost(ModLoader loader, Event event, Operation operation) { + try(AsyncLoadingScreen ignored = new AsyncLoadingScreen()) { + operation.call(loader, event); + } + } +} diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java new file mode 100644 index 00000000..bfa8f62d --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java @@ -0,0 +1,53 @@ +package org.embeddedt.modernfix.forge.util; + +import net.minecraftforge.fml.loading.ImmediateWindowHandler; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.opengl.GL; + +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.LockSupport; + +public class AsyncLoadingScreen extends Thread implements AutoCloseable { + private final long theWindow; + private final AtomicBoolean keepRunning; + + private static int splashThreadNum = 1; + + public AsyncLoadingScreen() { + this.setName("ModernFix splash thread " + splashThreadNum++); + this.theWindow = GLFW.glfwGetCurrentContext(); + if(this.theWindow == 0) + throw new IllegalStateException("No context found but async loading screen was requested"); + this.keepRunning = new AtomicBoolean(true); + this.start(); + } + + @Override + public synchronized void start() { + GLFW.glfwMakeContextCurrent(0); + super.start(); + } + + @Override + public void run() { + GLFW.glfwMakeContextCurrent(theWindow); + GL.createCapabilities(); // seems to be needed, otherwise we get a "function not valid for context" error + while(keepRunning.get()) { + LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50)); + ImmediateWindowHandler.renderTick(); + } + GLFW.glfwMakeContextCurrent(0); + } + + @Override + public void close() { + keepRunning.set(false); + try { + this.join(); + } catch(InterruptedException e) { + Thread.currentThread().interrupt(); + } + GLFW.glfwMakeContextCurrent(theWindow); + } +} From ae59c2496eda1680fee770f482682345122f9343 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:26:26 -0400 Subject: [PATCH 2/9] Show mod names and progress during registry events --- .../loading_screen_freeze/GameDataMixin.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java index b42ef336..070c68e4 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java @@ -1,20 +1,34 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.loading_screen_freeze; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoader; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.StartupMessageManager; +import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.GameData; +import net.minecraftforge.registries.RegisterEvent; import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(value = GameData.class, remap = false) public class GameDataMixin { - @WrapOperation(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) - private static void swapThreadAndPost(ModLoader loader, Event event, Operation operation) { + @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) + private static void swapThreadAndPost(ModLoader loader, T event) { + RegisterEvent registryEvent = (RegisterEvent)event; + var pb = StartupMessageManager.addProgressBar(registryEvent.getRegistryKey().location().toString(), ModList.get().size()); try(AsyncLoadingScreen ignored = new AsyncLoadingScreen()) { - operation.call(loader, event); + loader.postEventWithWrapInModOrder(event, (mc, e) -> { + ModLoadingContext.get().setActiveContainer(mc); + pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); + pb.increment(); + }, (mc, e) -> { + ModLoadingContext.get().setActiveContainer(null); + }); + } finally { + pb.complete(); } } } From fe8d0434c59d307438305adf1a70edee96a58327 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:27:10 -0400 Subject: [PATCH 3/9] Rename feature --- .../registry_event_progress}/GameDataMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename forge/src/main/java/org/embeddedt/modernfix/forge/mixin/{bugfix/loading_screen_freeze => feature/registry_event_progress}/GameDataMixin.java (95%) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java similarity index 95% rename from forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java rename to forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java index 070c68e4..a6a86c13 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/loading_screen_freeze/GameDataMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -1,4 +1,4 @@ -package org.embeddedt.modernfix.forge.mixin.bugfix.loading_screen_freeze; +package org.embeddedt.modernfix.forge.mixin.feature.registry_event_progress; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.ModList; From 8d766a8cc8c5c0f5dac1524f49c32a36ac37d2d2 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:35:20 -0400 Subject: [PATCH 4/9] Avoid calling createCapabilities many times, mark mixin as client-only --- .../feature/registry_event_progress/GameDataMixin.java | 2 ++ .../embeddedt/modernfix/forge/util/AsyncLoadingScreen.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java index a6a86c13..5daba9fb 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -8,12 +8,14 @@ import net.minecraftforge.fml.StartupMessageManager; import net.minecraftforge.fml.event.IModBusEvent; import net.minecraftforge.registries.GameData; import net.minecraftforge.registries.RegisterEvent; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(value = GameData.class, remap = false) +@ClientOnlyMixin public class GameDataMixin { @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) private static void swapThreadAndPost(ModLoader loader, T event) { diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java index bfa8f62d..3cb765b8 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/util/AsyncLoadingScreen.java @@ -3,6 +3,7 @@ package org.embeddedt.modernfix.forge.util; import net.minecraftforge.fml.loading.ImmediateWindowHandler; import org.lwjgl.glfw.GLFW; import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GLCapabilities; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -14,9 +15,13 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable { private static int splashThreadNum = 1; + private static GLCapabilities caps; + public AsyncLoadingScreen() { this.setName("ModernFix splash thread " + splashThreadNum++); this.theWindow = GLFW.glfwGetCurrentContext(); + if(caps == null) + caps = GL.createCapabilities(); if(this.theWindow == 0) throw new IllegalStateException("No context found but async loading screen was requested"); this.keepRunning = new AtomicBoolean(true); @@ -32,7 +37,7 @@ public class AsyncLoadingScreen extends Thread implements AutoCloseable { @Override public void run() { GLFW.glfwMakeContextCurrent(theWindow); - GL.createCapabilities(); // seems to be needed, otherwise we get a "function not valid for context" error + GL.setCapabilities(caps); while(keepRunning.get()) { LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(50)); ImmediateWindowHandler.renderTick(); From 73d2a4405ddacd23f59d5ebccc460f4df812bd12 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 20 Aug 2023 20:51:46 -0400 Subject: [PATCH 5/9] Improve performance of async handoff --- .../registry_event_progress/GameDataMixin.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java index 5daba9fb..4b0b568e 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/feature/registry_event_progress/GameDataMixin.java @@ -12,16 +12,32 @@ import org.embeddedt.modernfix.annotation.ClientOnlyMixin; import org.embeddedt.modernfix.forge.util.AsyncLoadingScreen; 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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = GameData.class, remap = false) @ClientOnlyMixin public class GameDataMixin { + + private static AsyncLoadingScreen mfix$asyncScreen; + + @Inject(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", ordinal = 0)) + private static void createAsyncScreen(CallbackInfo ci) { + mfix$asyncScreen = new AsyncLoadingScreen(); + } + + @Inject(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Ljava/lang/RuntimeException;getSuppressed()[Ljava/lang/Throwable;", ordinal = 0)) + private static void closeAsyncScreen(CallbackInfo ci) { + mfix$asyncScreen.close(); + mfix$asyncScreen = null; + } + @Redirect(method = "postRegisterEvents", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModLoader;postEventWrapContainerInModOrder(Lnet/minecraftforge/eventbus/api/Event;)V")) private static void swapThreadAndPost(ModLoader loader, T event) { RegisterEvent registryEvent = (RegisterEvent)event; var pb = StartupMessageManager.addProgressBar(registryEvent.getRegistryKey().location().toString(), ModList.get().size()); - try(AsyncLoadingScreen ignored = new AsyncLoadingScreen()) { + try { loader.postEventWithWrapInModOrder(event, (mc, e) -> { ModLoadingContext.get().setActiveContainer(mc); pb.label(pb.name() + " - " + mc.getModInfo().getDisplayName()); From 375276ea1f5d840afbb8ec5585f1425c7808fb1f Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 29 Oct 2023 21:05:17 -0400 Subject: [PATCH 6/9] Disable mixin.feature.registry_event_progress by default --- .../embeddedt/modernfix/core/config/ModernFixEarlyConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 2456a20a..a01bb22b 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -176,6 +176,7 @@ public class ModernFixEarlyConfig { .put("mixin.perf.remove_spawn_chunks", isDevEnv) .putConditionally(() -> !isFabric, "mixin.bugfix.fix_config_crashes", true) .putConditionally(() -> !isFabric, "mixin.bugfix.forge_at_inject_error", true) + .putConditionally(() -> !isFabric, "mixin.feature.registry_event_progress", false) .putConditionally(() -> isFabric, "mixin.perf.clear_fabric_mapping_tables", false) .build(); From d358ea37a894de0a90626d9fda3edeb6975da0d9 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:30:36 -0400 Subject: [PATCH 7/9] Remove Diagonal Fences mixin on 1.20+, mod now uses dynres-compatible logic Related: #199 --- common/build.gradle | 2 - .../MultipartAppenderMixin.java | 56 ------------------- 2 files changed, 58 deletions(-) delete mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java diff --git a/common/build.gradle b/common/build.gradle index fceb26c9..7f53ff75 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -27,8 +27,6 @@ dependencies { transitive = false } - modCompileOnly("curse.maven:diagonal-fences-458048:${diagonal_fences_version}") - modCompileOnly "curse.maven:spark-361579:${rootProject.spark_version}" // compile against the JEI API but do not include it at runtime modCompileOnly("mezz.jei:jei-${jei_minecraft_version}-common:${jei_version}") diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java deleted file mode 100644 index dcbe8653..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.diagonalfences; - -import fuzs.diagonalfences.api.world.level.block.DiagonalBlock; -import fuzs.diagonalfences.client.model.MultipartAppender; -import fuzs.diagonalfences.mixin.client.accessor.ModelBakeryAccessor; -import net.minecraft.client.renderer.block.model.multipart.MultiPart; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.client.resources.model.UnbakedModel; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.FenceBlock; -import net.minecraft.world.level.block.IronBarsBlock; -import org.apache.logging.log4j.util.BiConsumer; -import org.embeddedt.modernfix.ModernFixClient; -import org.embeddedt.modernfix.annotation.RequiresMod; -import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; -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.callback.CallbackInfo; - -@Mixin(MultipartAppender.class) -@RequiresMod("diagonalfences") -public abstract class MultipartAppenderMixin { - @Shadow(remap = false) - public static void appendDiagonalSelectors(BiConsumer modelBakery, MultiPart multiPart, boolean rotateCenter) { - throw new AssertionError(); - } - - private static boolean handlerInjected = false; - - @Inject(method = "onPrepareModelBaking", at = @At("HEAD"), cancellable = true) - private static void setupHelper(CallbackInfo ci) { - ci.cancel(); - if(handlerInjected) - return; - handlerInjected = true; - ModernFixClient.CLIENT_INTEGRATIONS.add(new ModernFixClientIntegration() { - @Override - public UnbakedModel onUnbakedModelLoad(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) { - if(originalModel instanceof MultiPart multipart) { - Block block = multipart.definition.getOwner(); - if((block instanceof FenceBlock || block instanceof IronBarsBlock) && block instanceof DiagonalBlock diagonalBlock && diagonalBlock.hasProperties()) { - try { - appendDiagonalSelectors(((ModelBakeryAccessor)bakery)::diagonalfences$callCacheAndQueueDependencies, multipart, block instanceof IronBarsBlock); - } catch(RuntimeException e) { - e.printStackTrace(); - } - } - } - return originalModel; - } - }); - } -} From 58f79e25e9d5a2a05274958f92142d4c9504b897 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:41:11 -0400 Subject: [PATCH 8/9] Update Diagonal Fences mixin on 1.19 --- .../diagonalfences/MultipartAppenderMixin.java | 9 ++++++--- gradle.properties | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java index fcbc591a..1e77e8b2 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/dynamic_resources/diagonalfences/MultipartAppenderMixin.java @@ -2,12 +2,15 @@ package org.embeddedt.modernfix.common.mixin.perf.dynamic_resources.diagonalfenc import fuzs.diagonalfences.api.world.level.block.DiagonalBlock; import fuzs.diagonalfences.client.model.MultipartAppender; +import fuzs.diagonalfences.mixin.client.accessor.ModelBakeryAccessor; import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.FenceBlock; +import net.minecraft.world.level.block.IronBarsBlock; +import org.apache.logging.log4j.util.BiConsumer; import org.embeddedt.modernfix.ModernFixClient; import org.embeddedt.modernfix.annotation.RequiresMod; import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration; @@ -21,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @RequiresMod("diagonalfences") public abstract class MultipartAppenderMixin { @Shadow(remap = false) - public static void appendDiagonalSelectors(ModelBakery modelBakery, MultiPart multiPart) { + public static void appendDiagonalSelectors(BiConsumer modelBakery, MultiPart multiPart, boolean rotateCenter) { throw new AssertionError(); } @@ -38,8 +41,8 @@ public abstract class MultipartAppenderMixin { public UnbakedModel onUnbakedModelLoad(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) { if(originalModel instanceof MultiPart multipart) { Block block = multipart.definition.getOwner(); - if(block instanceof FenceBlock && block instanceof DiagonalBlock diagonalBlock && diagonalBlock.hasProperties()) { - appendDiagonalSelectors(bakery, multipart); + if((block instanceof FenceBlock || block instanceof IronBarsBlock) && block instanceof DiagonalBlock diagonalBlock && diagonalBlock.hasProperties()) { + appendDiagonalSelectors(((ModelBakeryAccessor)bakery)::diagonalfences$callCacheAndQueueDependencies, multipart, block instanceof IronBarsBlock); } } return originalModel; diff --git a/gradle.properties b/gradle.properties index 270f1d87..3ade520b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,7 +22,7 @@ fabric_api_version=0.76.0+1.19.2 modmenu_version=4.1.2 appeng_version=12.9.3 -diagonal_fences_version=4545943 +diagonal_fences_version=4658719 spark_version=4505310 From 32ad8f6df1c1edd7fe86c50e436d7cb140c08af9 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:48:58 -0400 Subject: [PATCH 9/9] Update RS integration for 1.18+ --- .../mixin/perf/dynamic_resources/rs/ClientSetupMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java index 873c0ec7..e7865e4a 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/dynamic_resources/rs/ClientSetupMixin.java @@ -22,8 +22,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class ClientSetupMixin { @Shadow(remap = false) @Final private static BakedModelOverrideRegistry BAKED_MODEL_OVERRIDE_REGISTRY; - @Inject(method = "", at = @At("RETURN")) - private void addDynamicListener(CallbackInfo ci) { + @Inject(method = "registerBakedModelOverrides", at = @At("RETURN"), remap = false) + private static void addDynamicListener(CallbackInfo ci) { ModernFixClient.CLIENT_INTEGRATIONS.add(new ModernFixClientIntegration() { @Override public BakedModel onBakedModelLoad(ResourceLocation location, UnbakedModel baseModel, BakedModel originalModel, ModelState state, ModelBakery bakery) {