From 27edfcb4f3cd0eac0c7fb24e87ee3fa67324ab0a Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Sat, 22 Aug 2020 14:04:05 +0200 Subject: [PATCH] Fix incompatibility with mods which mixin into Main (fixes #327) --- .../core/DummyChainLoadEntryPoint.java | 18 ++++++++++++++++++ src/main/resources/fabric.mod.json | 3 +++ 2 files changed, 21 insertions(+) create mode 100644 src/main/java/com/replaymod/core/DummyChainLoadEntryPoint.java diff --git a/src/main/java/com/replaymod/core/DummyChainLoadEntryPoint.java b/src/main/java/com/replaymod/core/DummyChainLoadEntryPoint.java new file mode 100644 index 00000000..3917859d --- /dev/null +++ b/src/main/java/com/replaymod/core/DummyChainLoadEntryPoint.java @@ -0,0 +1,18 @@ +//#if FABRIC>=1 +package com.replaymod.core; + +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; + +// Required for ReplayModMMLauncher. +// +// Chain-loading mixin configurations only works when the first class that is loaded doesn't have any mixins which +// target it. The first class would ordinarily be MC's Main but there are valid use cases for targeting it, see +// e.g. https://github.com/ReplayMod/ReplayMod/issues/327 +// So, instead of relying on the bad assumption that Main doesn't have any mixins, we'll instead register this +// dummy pre-launch entry point which is practically guaranteed to not have any mixins and gets called before Main. +public class DummyChainLoadEntryPoint implements PreLaunchEntrypoint { + @Override + public void onPreLaunch() { + } +} +//#endif diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 3f30a5c9..6bc530eb 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -25,6 +25,9 @@ "modmenu": [ "com.replaymod.core.gui.ModMenuApiImpl" ], + "preLaunch": [ + "com.replaymod.core.DummyChainLoadEntryPoint" + ], "mm:early_risers": [ "com.replaymod.core.ReplayModMMLauncher" ]