From 0fc02d329541afe6772dfa132cb0c64ca05d1556 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Fri, 14 Jun 2024 23:04:20 +0200 Subject: Backend: Fixed SkyHanni not being a mod (#2099) Co-authored-by: nea Co-authored-by: jani270 <69345714+jani270@users.noreply.github.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/tweaker/ModLoadingTweaker.java | 51 ++++++++++++++++++++++ .../skyhanni/tweaker/SkyHanniTweaker.java | 1 + 2 files changed, 52 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/tweaker/ModLoadingTweaker.java (limited to 'src/main/java/at') diff --git a/src/main/java/at/hannibal2/skyhanni/tweaker/ModLoadingTweaker.java b/src/main/java/at/hannibal2/skyhanni/tweaker/ModLoadingTweaker.java new file mode 100644 index 000000000..418fa62ef --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/tweaker/ModLoadingTweaker.java @@ -0,0 +1,51 @@ +package at.hannibal2.skyhanni.tweaker; + + +import net.minecraft.launchwrapper.ITweaker; +import net.minecraft.launchwrapper.LaunchClassLoader; +import net.minecraftforge.fml.relauncher.CoreModManager; +import org.spongepowered.asm.launch.MixinBootstrap; + +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.List; + +/** + * The mod loading tweaker makes sure that we are recognized as a Forge Mod, despite having a Tweaker. + * We also add ourselves as a mixin container for integration with other mixin loaders. + * + * Taken from https://github.com/NotEnoughUpdates/NotEnoughUpdates/blob/20821e63057add096e314310ea8fa8e0c411e964/src/main/java/io/github/moulberry/notenoughupdates/loader/ModLoadingTweaker.java + */ +public class ModLoadingTweaker implements ITweaker { + @Override + public void acceptOptions(List args, File gameDir, File assetsDir, String profile) { + URL location = ModLoadingTweaker.class.getProtectionDomain().getCodeSource().getLocation(); + if (location == null) return; + if (!"file".equals(location.getProtocol())) return; + try { + MixinBootstrap.getPlatform().addContainer(location.toURI()); + String file = new File(location.toURI()).getName(); + CoreModManager.getIgnoredMods().remove(file); + CoreModManager.getReparseableCoremods().add(file); + } catch (URISyntaxException e) { + System.err.println("SkyHanni could not re-add itself as mod."); + e.printStackTrace(); + } + } + + @Override + public void injectIntoClassLoader(LaunchClassLoader classLoader) { + + } + + @Override + public String getLaunchTarget() { + return null; + } + + @Override + public String[] getLaunchArguments() { + return new String[0]; + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/tweaker/SkyHanniTweaker.java b/src/main/java/at/hannibal2/skyhanni/tweaker/SkyHanniTweaker.java index 6cdb1b204..0cede967d 100644 --- a/src/main/java/at/hannibal2/skyhanni/tweaker/SkyHanniTweaker.java +++ b/src/main/java/at/hannibal2/skyhanni/tweaker/SkyHanniTweaker.java @@ -20,6 +20,7 @@ public class SkyHanniTweaker implements ITweaker { public void acceptOptions(List args, File gameDir, File assetsDir, String profile) { List tweakClasses = (List) Launch.blackboard.get("TweakClasses"); tweakClasses.add(MixinTweaker.class.getName()); + tweakClasses.add(ModLoadingTweaker.class.getName()); } @Override -- cgit