@@ -48,8 +48,8 @@ object InventoryUtils {
4848 val player = minecraft.player ? : return - 1
4949 val inventory = player.inventory
5050
51- return findSlot(9 , { inventory.getItem(it) }) {
52- it .displayName.string.contains(name, ignoreCase = true )
51+ return findSlot(9 , { inventory.getItem(it) }) { _, stack ->
52+ stack .displayName.string.contains(name, ignoreCase = true )
5353 }
5454 }
5555
@@ -58,63 +58,70 @@ object InventoryUtils {
5858 val player = minecraft.player ? : return - 1
5959 val inventory = player.inventory
6060
61- return findSlot(9 , { inventory.getItem(it) }) { stack ->
61+ return findSlot(9 , { inventory.getItem(it) }) { _, stack ->
6262 ItemUtils .getLoreLines(stack).any { it.string.contains(lore, ignoreCase = true ) }
6363 }
6464 }
6565
6666 @JvmStatic
6767 fun findItemInInventory (name : String ): Int {
6868 val player = minecraft.player ? : return - 1
69- val inventory = player.inventory
69+ val menu = player.containerMenu
7070
71- return findSlot(inventory.containerSize, { inventory.getItem(it) }) {
72- it.displayName.string.contains(name, ignoreCase = true )
71+ return findSlot(menu.slots.size, { menu.getSlot(it).item }) { slot, stack ->
72+ menu.getSlot(slot).container == player.inventory &&
73+ stack.displayName.string.contains(name, ignoreCase = true )
7374 }
7475 }
7576
7677 @JvmStatic
7778 fun findItemInInventory (item : Item ): Int {
7879 val player = minecraft.player ? : return - 1
79- val inventory = player.inventory
80+ val menu = player.containerMenu
8081
81- return findSlot(inventory.containerSize, { inventory.getItem(it) }) { it.item == item }
82+ return findSlot(menu.slots.size, { menu.getSlot(it).item }) { slot, stack ->
83+ menu.getSlot(slot).container == player.inventory &&
84+ stack.item == item
85+ }
8286 }
8387
8488 @JvmStatic
8589 fun findItemInContainer (name : String ): Int {
8690 val player = minecraft.player ? : return - 1
8791 val menu = player.containerMenu
88- val containerSlots = menu.slots.size - player.inventory.nonEquipmentItems.size
8992
90- return findSlot(containerSlots, { menu.getSlot(it).item }) {
91- it.displayName.string.contains(name, ignoreCase = true )
93+ return findSlot(menu.slots.size, { menu.getSlot(it).item }) { slot, stack ->
94+ menu.getSlot(slot).container != player.inventory &&
95+ stack.displayName.string.contains(name, ignoreCase = true )
9296 }
9397 }
9498
9599 @JvmStatic
96100 fun findItemInContainer (item : Item ): Int {
97101 val player = minecraft.player ? : return - 1
98102 val menu = player.containerMenu
99- val containerSlots = menu.slots.size - player.inventory.nonEquipmentItems.size
100103
101- return findSlot(containerSlots, { menu.getSlot(it).item }) { it.item == item }
104+ return findSlot(menu.slots.size, { menu.getSlot(it).item }) { slot, stack ->
105+ menu.getSlot(slot).container != player.inventory &&
106+ stack.item == item
107+ }
102108 }
103109
104110 @JvmStatic
105111 fun findItemInInventoryWithLore (lore : String ): Int {
106112 val player = minecraft.player ? : return - 1
107- val inventory = player.inventory
113+ val menu = player.containerMenu
108114
109- return findSlot(inventory.containerSize, { inventory.getItem(it) }) { stack ->
110- ItemUtils .getLoreLines(stack).any { it.string.contains(lore, ignoreCase = true ) }
115+ return findSlot(menu.slots.size, { menu.getSlot(it).item }) { slot, stack ->
116+ menu.getSlot(slot).container == player.inventory &&
117+ ItemUtils .getLoreLines(stack).any { it.string.contains(lore, ignoreCase = true ) }
111118 }
112119 }
113120
114121 private inline fun findSlot (
115122 size : Int ,
116123 getStack : (Int ) -> ItemStack ,
117- predicate : (ItemStack ) -> Boolean ,
124+ predicate : (slot: Int , stack: ItemStack ) -> Boolean ,
118125 ): Int {
119126 for (slot in 0 until size) {
120127 val stack = getStack(slot)
@@ -123,7 +130,7 @@ object InventoryUtils {
123130 continue
124131 }
125132
126- if (predicate(stack)) {
133+ if (predicate(slot, stack)) {
127134 return slot
128135 }
129136 }
0 commit comments