aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util/mc/ScreenUtil.kt
blob: 36feb6bf5a1dac369a1c5b63e211b32da695f131 (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
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)]
}