aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/gui/config/FirmamentConfigScreenProvider.kt
blob: 582f701dedaadeaeb347d07aa185b4e4e21abcc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package moe.nea.firmament.gui.config

import java.util.ServiceLoader
import kotlin.streams.asSequence
import net.minecraft.client.gui.screen.Screen
import moe.nea.firmament.Firmament

interface FirmamentConfigScreenProvider {
    val key: String
    val isEnabled: Boolean get() = true

    fun open(parent: Screen?): Screen

    companion object {
        private val loader = ServiceLoader.load(FirmamentConfigScreenProvider::class.java)

        val providers by lazy {
            loader.stream().asSequence().mapNotNull { service ->
                kotlin.runCatching { service.get() }
                    .getOrElse {
                        Firmament.logger.warn("Could not load config provider ${service.type()}", it)
                        null
                    }
            }.filter { it.isEnabled }.toList()
        }
    }
}