Skip to content

Commit d0dd1eb

Browse files
committed
fix: InventoryUtils slot searching
1 parent 825ff28 commit d0dd1eb

2 files changed

Lines changed: 28 additions & 21 deletions

File tree

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ org.gradle.jvmargs=-Xms1024m -Xmx4096m -XX:+UseZGC
99

1010
baseGroup=org.cobalt
1111
modName=cobalt
12-
modVersion=1.0.2
13-
shouldBuild=false
14-
shouldRelease=false
12+
modVersion=1.0.3
13+
shouldBuild=true
14+
shouldRelease=true
1515

1616
loom.ignoreDependencyLoomVersionValidation=true

src/main/kotlin/org/cobalt/util/inventory/InventoryUtils.kt

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)