Introduce compat source sets and move all kotlin sources to the main directory [no changelog]
67 lines
2.1 KiB
Kotlin
67 lines
2.1 KiB
Kotlin
|
|
package moe.nea.firmament.gui.hud
|
|
|
|
import io.github.notenoughupdates.moulconfig.gui.GuiComponentWrapper
|
|
import io.github.notenoughupdates.moulconfig.gui.GuiContext
|
|
import io.github.notenoughupdates.moulconfig.gui.component.TextComponent
|
|
import net.minecraft.resource.ResourceManager
|
|
import net.minecraft.resource.SynchronousResourceReloader
|
|
import moe.nea.firmament.events.FinalizeResourceManagerEvent
|
|
import moe.nea.firmament.events.HudRenderEvent
|
|
import moe.nea.firmament.gui.config.HudMeta
|
|
import moe.nea.firmament.util.MC
|
|
import moe.nea.firmament.util.MoulConfigUtils
|
|
|
|
abstract class MoulConfigHud(
|
|
val name: String,
|
|
val hudMeta: HudMeta,
|
|
) {
|
|
companion object {
|
|
private val componentWrapper by lazy {
|
|
object : GuiComponentWrapper(GuiContext(TextComponent("§cERROR"))) {
|
|
init {
|
|
this.client = MC.instance
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private var fragment: GuiContext? = null
|
|
|
|
fun forceInit() {
|
|
}
|
|
|
|
open fun shouldRender(): Boolean {
|
|
return true
|
|
}
|
|
|
|
init {
|
|
require(name.matches("^[a-z_/]+$".toRegex()))
|
|
HudRenderEvent.subscribe {
|
|
if (!shouldRender()) return@subscribe
|
|
val renderContext = componentWrapper.createContext(it.context)
|
|
if (fragment == null)
|
|
loadFragment()
|
|
it.context.matrices.push()
|
|
hudMeta.applyTransformations(it.context.matrices)
|
|
val renderContextTranslated =
|
|
renderContext.translated(hudMeta.absoluteX, hudMeta.absoluteY, hudMeta.width, hudMeta.height)
|
|
.scaled(hudMeta.scale)
|
|
fragment!!.root.render(renderContextTranslated)
|
|
it.context.matrices.pop()
|
|
}
|
|
FinalizeResourceManagerEvent.subscribe {
|
|
MC.resourceManager.registerReloader(object : SynchronousResourceReloader {
|
|
override fun reload(manager: ResourceManager?) {
|
|
fragment = null
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
fun loadFragment() {
|
|
fragment = MoulConfigUtils.loadGui(name, this)
|
|
}
|
|
|
|
}
|