From 7621966360f2d01b61dd1e7a6f8dc9aee428a874 Mon Sep 17 00:00:00 2001 From: FalsePattern <30945458+FalsePattern@users.noreply.github.com> Date: Sat, 11 Feb 2023 11:14:04 +0100 Subject: [PATCH] unimixins compat --- .../com/falsepattern/lib/mixin/MixinInfo.java | 20 +++++++- .../lib/mixin/MixinInfoCompatCompanion.java | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java diff --git a/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java b/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java index fcf4682..615f6e8 100644 --- a/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java +++ b/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java @@ -33,7 +33,12 @@ import java.util.Optional; @StableAPI(since = "0.10.2") public final class MixinInfo { @StableAPI.Expose - public static final MixinBootstrapperType mixinBootstrapper = detect(); + public static final MixinBootstrapperType mixinBootstrapper; + + static { + MixinInfoCompatCompanion.mixinInfoClassLoaded = true; + mixinBootstrapper = detect(); + } @StableAPI.Expose public static boolean isMixinsInstalled() { @@ -68,6 +73,11 @@ public final class MixinInfo { return mixinBootstrapper == MixinBootstrapperType.GasStation; } + @StableAPI.Expose(since = "0.10.15") + public static boolean isUniMixin() { + return mixinBootstrapper == MixinBootstrapperType.UniMixin; + } + @StableAPI.Expose public static MixinBootstrapperType bootstrapperType() { return mixinBootstrapper; @@ -97,6 +107,11 @@ public final class MixinInfo { private static MixinBootstrapperType detect() { if (!isClassPresentSafe("org.spongepowered.asm.launch.MixinBootstrap")) return MixinBootstrapperType.None; + for (val candidate: MixinInfoCompatCompanion.UNIMIXIN_CANDIDATES) { + if (isClassPresentSafe(candidate)) { + return MixinBootstrapperType.UniMixin; + } + } if (isClassPresentSafe("com.falsepattern.gasstation.GasStation")) return MixinBootstrapperType.GasStation; if (isClassPresentSafe("ru.timeconqueror.spongemixins.core.SpongeMixinsCore")) @@ -115,6 +130,7 @@ public final class MixinInfo { @StableAPI.Expose SpongeMixins, @StableAPI.Expose Grimoire, @StableAPI.Expose MixinBooterLegacy, - @StableAPI.Expose Other + @StableAPI.Expose Other, + @StableAPI.Expose(since = "0.10.15") UniMixin } } diff --git a/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java b/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java new file mode 100644 index 0000000..6f83cf6 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2022 FalsePattern + * All Rights Reserved + * + * The above copyright notice, this permission notice and the word "SNEED" + * shall be included in all copies or substantial portions of the Software. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.falsepattern.lib.mixin; + +import com.falsepattern.lib.StableAPI; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * This is a class you can use to interact with MixinInfo before it gets classloaded. + * (Originally placed here for future unimixins compat in case they change the class names) + */ +@StableAPI(since = "0.10.15") +public class MixinInfoCompatCompanion { + /** + * A list of all mixin classes that are candidates for unimixins. + * This is used to determine if a mixin plugin is unimixins. Once MixinInfo is classloaded, this list has no effect. + */ + @StableAPI.Expose + public static final List UNIMIXIN_CANDIDATES = new ArrayList<>(Arrays.asList("io.github.legacymoddingmc.unimixins.compat.CompatCore", + "io.github.legacymoddingmc.unimixins.devcompat.DevCompatCore", + "io.github.legacymoddingmc.unimixins.all.AllCore", + "io.github.legacymoddingmc.unimixins.mixin.MixinModule")); + + @Getter(onMethod_ = @StableAPI.Expose) + static boolean mixinInfoClassLoaded = false; +}