diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-11-24 23:42:00 +0100 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-11-24 23:42:00 +0100 |
| commit | 6dd14e7225ff60361fe9f87020c424c0eb89a68b (patch) | |
| tree | 6977d5a71850924becc71b1ac53f1865a1c8330a /src/main/kotlin/impl | |
| parent | 3f33928c8fefe4816af9d538fa3fce48d5e76f7c (diff) | |
| download | Firmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.tar.gz Firmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.tar.bz2 Firmament-6dd14e7225ff60361fe9f87020c424c0eb89a68b.zip | |
feat: firmament api
Diffstat (limited to 'src/main/kotlin/impl')
| -rw-r--r-- | src/main/kotlin/impl/v1/FirmamentAPIImpl.kt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/main/kotlin/impl/v1/FirmamentAPIImpl.kt b/src/main/kotlin/impl/v1/FirmamentAPIImpl.kt new file mode 100644 index 0000000..d5fc0de --- /dev/null +++ b/src/main/kotlin/impl/v1/FirmamentAPIImpl.kt @@ -0,0 +1,48 @@ +package moe.nea.firmament.impl.v1 + +import com.mojang.blaze3d.platform.InputConstants +import java.util.Collections +import java.util.Optional +import net.fabricmc.loader.api.FabricLoader +import kotlin.jvm.optionals.getOrNull +import moe.nea.firmament.Firmament +import moe.nea.firmament.api.v1.FirmamentAPI +import moe.nea.firmament.api.v1.FirmamentExtension +import moe.nea.firmament.api.v1.FirmamentItemWidget +import moe.nea.firmament.util.MC +import moe.nea.firmament.util.intoOptional + +object FirmamentAPIImpl : FirmamentAPI() { + @JvmField + val INSTANCE: FirmamentAPI = FirmamentAPIImpl + + private val _extensions = mutableListOf<FirmamentExtension>() + override fun getExtensions(): List<FirmamentExtension> { + return Collections.unmodifiableList(_extensions) + } + + override fun getHoveredItemWidget(): Optional<FirmamentItemWidget> { + val mouse = MC.instance.mouseHandler + val window = MC.window + val xpos = mouse.getScaledXPos(window) + val ypos = mouse.getScaledYPos(window) + val widget = MC.screen + ?.getChildAt(xpos, ypos) + ?.getOrNull() + if (widget is FirmamentItemWidget) return widget.intoOptional() + return Optional.empty() + } + + fun loadExtensions() { + for (container in FabricLoader.getInstance() + .getEntrypointContainers("firmament:v1", FirmamentExtension::class.java)) { + Firmament.logger.info("Loading extension ${container.entrypoint} from ${container.provider.metadata.name}") + loadExtension(container.entrypoint) + } + extensions.forEach { it.onLoad() } + } + + fun loadExtension(entrypoint: FirmamentExtension) { + _extensions.add(entrypoint) + } +} |
