Don't touch filtered slots with non-stackable items in it

This commit is contained in:
DBotThePony 2025-02-17 19:26:00 +07:00
parent 3129db667d
commit 956531e08b
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -295,31 +295,7 @@ operator fun CraftingContainer.get(column: Int, row: Int, flop: Boolean): ItemSt
}
fun Container.sort(comparator: Comparator<ItemStack> = ItemStackSorter.DEFAULT) {
if (isEmpty)
return
val slots = slotIterator().filter { !it.isForbiddenForAutomation && it.getMaxStackSize() >= it.item.count }.toList()
if (slots.isEmpty())
return
val items = Object2ObjectOpenCustomHashMap<ItemStack, ItemStack>(ItemStackHashStrategy)
slots.forEach {
val get = items[it.item]
if (get == null) {
items[it.item] = it.item.copy()
} else {
get.count += it.item.count
}
}
val sortedItems = ObjectArrayList(items.values)
sortedItems.sortWith(comparator)
slots.forEach { it.remove() }
sortedItems.forEach { addItem(it, false) }
sortWithIndices(computeSortedIndices(comparator))
}
fun Container.sortWithIndices(sortedSlots: IntCollection) {
@ -337,7 +313,12 @@ fun Container.sortWithIndices(sortedSlots: IntCollection) {
if (value in 0 until containerSize && seen.add(value)) {
val slot = containerSlot(value)
if (slot.isNotEmpty && !slot.isForbiddenForAutomation && slot.item.count <= slot.getMaxStackSize()) {
if (
slot.isNotEmpty &&
!slot.isForbiddenForAutomation &&
slot.item.count <= slot.getMaxStackSize() &&
(!slot.hasFilter || slot.getFilter() != slot.item.item || slot.getMaxStackSize() > 1)
) {
valid.add(slot)
}
}