From 7dbb926787d27a320e9a58b36c38777dda8cc457 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 20 Jul 2023 21:34:04 -0400 Subject: [PATCH] Forceload RenderType/RenderStateShard on the main thread during startup Fixes launch deadlock with Registrate/Quark --- .../mixin/core/BootstrapClientMixin.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java new file mode 100644 index 00000000..d1706ba7 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/core/BootstrapClientMixin.java @@ -0,0 +1,22 @@ +package org.embeddedt.modernfix.forge.mixin.core; + +import net.minecraft.client.renderer.RenderType; +import net.minecraft.server.Bootstrap; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +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; + +@Mixin(Bootstrap.class) +@ClientOnlyMixin +public class BootstrapClientMixin { + /** + * Hack to workaround RenderStateShard deadlock (by loading it early on a single thread). We use validate + * here to ensure Forge registries are initialized. + */ + @Inject(method = "validate", at = @At("HEAD")) + private static void loadClientClasses(CallbackInfo ci) { + RenderType.solid(); + } +}