diff options
author | Linnea Gräf <nea@nea.moe> | 2024-10-18 00:41:25 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-10-18 14:36:51 +0200 |
commit | c89b663acad487caeb15f7521be3dd14342dd4e7 (patch) | |
tree | ae21daabaf5de1ac5281509c6fa9446259169ae5 /src/main/kotlin/util/mc/ScreenUtil.kt | |
parent | 7de0e8e7e09e3428c17ca9717c21c02469c31b76 (diff) | |
download | Firmament-c89b663acad487caeb15f7521be3dd14342dd4e7.tar.gz Firmament-c89b663acad487caeb15f7521be3dd14342dd4e7.tar.bz2 Firmament-c89b663acad487caeb15f7521be3dd14342dd4e7.zip |
Add slot binding
Diffstat (limited to 'src/main/kotlin/util/mc/ScreenUtil.kt')
-rw-r--r-- | src/main/kotlin/util/mc/ScreenUtil.kt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/main/kotlin/util/mc/ScreenUtil.kt b/src/main/kotlin/util/mc/ScreenUtil.kt new file mode 100644 index 0000000..36feb6b --- /dev/null +++ b/src/main/kotlin/util/mc/ScreenUtil.kt @@ -0,0 +1,26 @@ +package moe.nea.firmament.util.mc + +import net.minecraft.client.gui.screen.Screen +import net.minecraft.client.gui.screen.ingame.HandledScreen +import net.minecraft.entity.player.PlayerInventory +import net.minecraft.screen.slot.Slot + +object ScreenUtil { + private var lastScreen: Screen? = null + private var slotsByIndex: Map<SlotIndex, Slot> = mapOf() + + data class SlotIndex(val index: Int, val isPlayerInventory: Boolean) + + fun Screen.getSlotsByIndex(): Map<SlotIndex, Slot> { + if (this !is HandledScreen<*>) return mapOf() + if (lastScreen === this) return slotsByIndex + lastScreen = this + slotsByIndex = this.screenHandler.slots.associate { + SlotIndex(it.index, it.inventory is PlayerInventory) to it + } + return slotsByIndex + } + + fun Screen.getSlotByIndex( index: Int, isPlayerInventory: Boolean): Slot? = + getSlotsByIndex()[SlotIndex(index, isPlayerInventory)] +} |