aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/impl
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-11-24 23:42:00 +0100
committerLinnea Gräf <nea@nea.moe>2025-11-24 23:42:00 +0100
commit6dd14e7225ff60361fe9f87020c424c0eb89a68b (patch)
tree6977d5a71850924becc71b1ac53f1865a1c8330a /src/main/kotlin/impl
parent3f33928c8fefe4816af9d538fa3fce48d5e76f7c (diff)
downloadFirmament-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.kt48
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)
+ }
+}