From eb4b815095666bd9d13074a052c4329ba9ac7da7 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Wed, 14 Feb 2024 20:46:25 +0100 Subject: Add mod identification for outgoing mod calls and show this data in /shchathistory. #987 --- .../at/hannibal2/skyhanni/utils/ReflectionUtils.kt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/main/java/at/hannibal2/skyhanni/utils') diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt index 2cf613b39..5ef72ddd7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ReflectionUtils.kt @@ -1,5 +1,7 @@ package at.hannibal2.skyhanni.utils +import net.minecraftforge.fml.common.Loader +import net.minecraftforge.fml.common.ModContainer import java.lang.reflect.Constructor import java.lang.reflect.Field import java.lang.reflect.Modifier @@ -59,4 +61,23 @@ object ReflectionUtils { javaClass.getDeclaredField("modifiers").makeAccessible().set(this, modifiers and (Modifier.FINAL.inv())) return this } + + fun StackTraceElement.getClassInstance(): Class<*> { + return Class.forName(this.className) + } + + private val packageLookup by lazy { + Loader.instance().modList + .flatMap { mod -> mod.ownedPackages.map { it to mod } } + .toMap() + } + + val Class<*>.shPackageName + get() = + canonicalName.substringBeforeLast('.') + + fun Class<*>.getModContainer(): ModContainer? { + return packageLookup[shPackageName] + } + } -- cgit