Make Snowy.annotatedButtons lazy
Fixes usage on neoforge Signed-off-by: Username404-59 <w.iron.zombie@gmail.com>
This commit is contained in:
parent
e647bfb286
commit
54dc2169fc
@ -14,7 +14,7 @@ abstract class Snowy {
|
||||
protected fun Class<*>.isValidForButtonCollection(): Boolean =
|
||||
!Modifier.isAbstract(modifiers) && declaredAnnotations.any { it is ButtonInfo && !it.ignored }
|
||||
private val displayInitMessage: Boolean by Configuration
|
||||
abstract val annotatedButtons: Set<Class<out ButtonImpl>>
|
||||
abstract val annotatedButtons: Lazy<Set<Class<out ButtonImpl>>>
|
||||
companion object {
|
||||
val MissingComponent: Component = translatable("MISSING_COMPONENT")
|
||||
@Suppress("JVM_STATIC_ON_CONST_OR_JVM_FIELD") // See KT-39868
|
||||
@ -25,7 +25,7 @@ abstract class Snowy {
|
||||
@JvmField
|
||||
val logs: Logger = LogManager.getLogger()
|
||||
}
|
||||
init { Companion.annotatedButtons = ::annotatedButtons::get }
|
||||
init { Companion.annotatedButtons = { annotatedButtons.value } }
|
||||
private fun eventsInit() {
|
||||
onEvent("EndTick") {
|
||||
for (key in AddKeyMaps.list.keys) {
|
||||
|
||||
@ -7,6 +7,7 @@ import net.fabricmc.api.ClientModInitializer
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback.EVENT
|
||||
import net.fabricmc.loader.api.FabricLoader
|
||||
import net.fabricmc.loader.launch.common.FabricLauncherBase
|
||||
import net.minecraft.client.DeltaTracker
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import kotlin.io.path.exists
|
||||
@ -25,16 +26,21 @@ class FabricInit: Snowy(), ClientModInitializer {
|
||||
}
|
||||
)
|
||||
}
|
||||
override val annotatedButtons = FabricLoader.getInstance().allMods.mapNotNull {
|
||||
override val annotatedButtons = lazy {
|
||||
FabricLoader.getInstance().allMods.mapNotNull {
|
||||
it.findPath(FEATURE_PACKAGE.replace('.', '/')).getOrNull()
|
||||
}.filter { it.exists() && it.isDirectory() }.flatMap { buttonsDirectory ->
|
||||
mutableSetOf<Class<out ButtonImpl>>().apply {
|
||||
buttonsDirectory.listDirectoryEntries("*.class").forEach { file ->
|
||||
@Suppress("DEPRECATION") net.fabricmc.loader.launch.common.
|
||||
FabricLauncherBase.getClass(file.pathString.drop(1).replace('/', '.').removeSuffix(".class")).let { foundClass ->
|
||||
if (foundClass.isValidForButtonCollection()) add(foundClass.asSubclass(ButtonImpl::class.java))
|
||||
}
|
||||
buttonsDirectory.listDirectoryEntries("*.class").mapNotNull { file ->
|
||||
@Suppress("DEPRECATION")
|
||||
FabricLauncherBase.getClass(
|
||||
file.pathString.drop(1)
|
||||
.replace('/', '.').removeSuffix(".class")
|
||||
).let { foundClass ->
|
||||
if (foundClass.isValidForButtonCollection())
|
||||
foundClass.asSubclass(ButtonImpl::class.java)
|
||||
else null
|
||||
}
|
||||
}
|
||||
}.toSet()
|
||||
}
|
||||
}
|
||||
@ -16,7 +16,8 @@ import net.neoforged.neoforgespi.language.ModFileScanData
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
class ForgeInit(container: ModContainer): Snowy() {
|
||||
private fun initSetup(event: FMLClientSetupEvent) = atInit()
|
||||
override val annotatedButtons = ModList.get() // Forge-specific reflection
|
||||
override val annotatedButtons = lazy { // Forge-specific reflection
|
||||
ModList.get()
|
||||
.allScanData
|
||||
.flatMap { obj: ModFileScanData -> obj.classes }
|
||||
.filter { data: ModFileScanData.ClassData? ->
|
||||
@ -28,6 +29,7 @@ class ForgeInit(container: ModContainer): Snowy() {
|
||||
}?.asSubclass(ButtonImpl::class.java)
|
||||
}
|
||||
.toSet()
|
||||
}
|
||||
init {
|
||||
container.eventBus!!.run {
|
||||
addListener(this@ForgeInit::initSetup)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user