aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/impl/v1
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/impl/v1')
-rw-r--r--src/main/kotlin/impl/v1/FirmamentAPIImpl.kt67
1 files changed, 67 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..8c6b732
--- /dev/null
+++ b/src/main/kotlin/impl/v1/FirmamentAPIImpl.kt
@@ -0,0 +1,67 @@
+package moe.nea.firmament.impl.v1
+
+import java.util.Collections
+import java.util.Optional
+import net.fabricmc.loader.api.FabricLoader
+import kotlin.jvm.optionals.getOrNull
+import net.minecraft.world.item.ItemStack
+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.features.items.recipes.ItemList
+import moe.nea.firmament.repo.ExpensiveItemCacheApi
+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)
+ }
+
+ @OptIn(ExpensiveItemCacheApi::class)
+ 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()
+ val itemListStack = ItemList.findStackUnder(xpos.toInt(), ypos.toInt())
+ if (itemListStack != null)
+ return object : FirmamentItemWidget {
+ override fun getPlacement(): FirmamentItemWidget.Placement {
+ return FirmamentItemWidget.Placement.ITEM_LIST
+ }
+
+ override fun getItemStack(): ItemStack {
+ return itemListStack.second.asImmutableItemStack()
+ }
+
+ override fun getSkyBlockId(): String {
+ return itemListStack.second.skyblockId.neuItem
+ }
+
+ }.intoOptional()
+ return Optional.empty()
+ }
+
+ fun loadExtensions() {
+ for (container in FabricLoader.getInstance()
+ .getEntrypointContainers(FirmamentExtension.ENTRYPOINT_NAME, 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)
+ }
+}