Add LiteLoader compat

This commit is contained in:
glowredman authored and makamys committed 2023-12-18 18:04:01 +01:00
1 parent 220d040ebd
commit d66394b2ea
2 files changed
+38 -4

No files matched your search

+1 -1
View File
@@ -1 +1 @@
extraVersion=2.1.15 extraVersion=2.2.0
@@ -5,13 +5,15 @@ import com.gtnewhorizon.gtnhmixins.GTNHMixins;
import com.gtnewhorizon.gtnhmixins.ILateMixinLoader; import com.gtnewhorizon.gtnhmixins.ILateMixinLoader;
import com.gtnewhorizon.gtnhmixins.LateMixin; import com.gtnewhorizon.gtnhmixins.LateMixin;
import com.gtnewhorizon.gtnhmixins.Reflection; import com.gtnewhorizon.gtnhmixins.Reflection;
import com.gtnewhorizon.gtnhmixins.core.GTNHMixinsCore;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModClassLoader; import cpw.mods.fml.common.ModClassLoader;
import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.discovery.ASMDataTable; import cpw.mods.fml.common.discovery.ASMDataTable;
import cpw.mods.fml.common.event.FMLConstructionEvent; import cpw.mods.fml.common.event.FMLConstructionEvent;
import net.minecraft.launchwrapper.Launch; import net.minecraft.launchwrapper.Launch;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.MixinEnvironment; import org.spongepowered.asm.mixin.MixinEnvironment;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@@ -21,7 +23,11 @@ import org.spongepowered.asm.mixin.transformer.Config;
import org.spongepowered.asm.mixin.transformer.Proxy; import org.spongepowered.asm.mixin.transformer.Proxy;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
@@ -45,8 +51,11 @@ public class LateMixinOrchestrationMixin {
ASMDataTable asmDataTable = (ASMDataTable)eventData[1]; ASMDataTable asmDataTable = (ASMDataTable)eventData[1];
final Loader loader = Loader.instance(); final Loader loader = Loader.instance();
final Set<String> loadedMods = loader.getIndexedModList().keySet(); final Set<String> loadedModsTemp = new HashSet<>();
GTNHMixinsCore.LOGGER.info("LoadedMods {}", loadedMods.toString()); loadedModsTemp.addAll(loader.getIndexedModList().keySet());
loadedModsTemp.addAll(getLiteLoaderMods());
final Set<String> loadedMods = Collections.unmodifiableSet(loadedModsTemp);
GTNHMixins.LOGGER.info("LoadedMods {}", loadedMods.toString());
for (ASMDataTable.ASMData asmData : asmDataTable.getAll(LateMixin.class.getName())) { for (ASMDataTable.ASMData asmData : asmDataTable.getAll(LateMixin.class.getName())) {
modClassLoader.addFile(asmData.getCandidate().getModContainer()); // Add to path before `newInstance` modClassLoader.addFile(asmData.getCandidate().getModContainer()); // Add to path before `newInstance`
@@ -91,4 +100,29 @@ public class LateMixinOrchestrationMixin {
Reflection.invokeSelectConfigs(transformer, env); Reflection.invokeSelectConfigs(transformer, env);
Reflection.invokePrepareConfigs(transformer, env); Reflection.invokePrepareConfigs(transformer, env);
} }
@SuppressWarnings("unchecked")
private static Set<String> getLiteLoaderMods() {
Set<String> mods = new HashSet<>();
try {
Class<?> LiteLoaderTweaker = Class.forName("com.mumfrey.liteloader.launch.LiteLoaderTweaker");
Class<?> LoadableModClassPath = Class.forName("com.mumfrey.liteloader.core.api.LoadableModClassPath");
Object instance = FieldUtils.readDeclaredStaticField(LiteLoaderTweaker, "instance", true);
Object bootstrap = FieldUtils.readDeclaredField(instance, "bootstrap", true);
Object enumerator = FieldUtils.readDeclaredField(bootstrap, "enumerator", true);
Map<String, ?> enabledContainers = (Map<String, ?>) FieldUtils.readDeclaredField(enumerator, "enabledContainers", true);
GTNHMixins.LOGGER.info("LiteLoader present, adding its mods to the list.");
for(Entry<String, ?> e : enabledContainers.entrySet()) {
// Classpath mods include e.g. all libraries (lwjgl, guava, etc.) - we don't want those
if(!LoadableModClassPath.isInstance(e.getValue())) {
mods.add(e.getKey());
}
}
} catch (ClassNotFoundException e) {
GTNHMixins.LOGGER.info("LiteLoader not present.");
} catch (Exception e) {
GTNHMixins.LOGGER.error("Failed to get LiteLoader mods.", e);
}
return mods;
}
} }