blob: 3ca4778cb3ffb751a10577cc4d6cf5cef28e1256 (
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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("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)
}
}
|