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 = mapOf() data class SlotIndex(val index: Int, val isPlayerInventory: Boolean) fun Screen.getSlotsByIndex(): Map { 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)] }