From bd4622fc0d7982ce00f03ae5f2971ddf8588b271 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Wed, 19 Mar 2025 10:57:24 +0700 Subject: [PATCH] Ignore slot filters when taking from chests --- .../mc/otm/compat/vanilla/MatteryChestMenu.kt | 2 +- .../compat/vanilla/MatteryShulkerBoxMenu.kt | 2 +- .../dbotthepony/mc/otm/menu/QuickMoveInput.kt | 22 +++++++++---------- .../mc/otm/menu/decorative/CargoCrateMenu.kt | 2 +- .../mc/otm/network/MatteryPlayerPackets.kt | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryChestMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryChestMenu.kt index b9f17a670..36c787e4e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryChestMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryChestMenu.kt @@ -24,7 +24,7 @@ class MatteryChestMenu( } override val quickMoveToStorage = QuickMoveInput.create(this, playerCombinedInventorySlots, containerSlots) - override val quickMoveFromStorage = QuickMoveInput.create(this, containerSlots, playerInventorySlots) + override val quickMoveFromStorage = QuickMoveInput.create(this, containerSlots, playerInventorySlots, false) companion object { @JvmStatic diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryShulkerBoxMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryShulkerBoxMenu.kt index e987c22b6..df242a70a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryShulkerBoxMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/vanilla/MatteryShulkerBoxMenu.kt @@ -26,7 +26,7 @@ class MatteryShulkerBoxMenu( } override val quickMoveToStorage = QuickMoveInput.create(this, playerCombinedInventorySlots, containerSlots) - override val quickMoveFromStorage = QuickMoveInput.create(this, containerSlots, playerInventorySlots) + override val quickMoveFromStorage = QuickMoveInput.create(this, containerSlots, playerInventorySlots, false) class Slot(container: Container, slot: Int) : MatteryMenuSlot(container, slot) { override fun mayPlace(stack: ItemStack): Boolean { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/QuickMoveInput.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/QuickMoveInput.kt index 2f9ed9df4..13d5d8bc8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/QuickMoveInput.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/QuickMoveInput.kt @@ -15,15 +15,15 @@ import ru.dbotthepony.mc.otm.core.util.ItemStackKey import ru.dbotthepony.mc.otm.core.util.asKey import ru.dbotthepony.mc.otm.core.util.asKeyOrNull -class QuickMoveInput(private val menu: MatteryMenu, val from: Collection, val to: Collection, val mode: Mode) { +class QuickMoveInput(private val menu: MatteryMenu, val from: Collection, val to: Collection, val mode: Mode, val dontTouchFilteredSlots: Boolean = true) { enum class Mode(val iconFromStorage: AbstractMatterySprite, val iconToStorage: AbstractMatterySprite) { RESTOCK( Widgets18.RESTOCK_FROM_STORAGE, Widgets18.RESTOCK_TO_STORAGE ) { - override fun move(from: Collection, to: Collection, player: Player) { + override fun move(from: Collection, to: Collection, player: Player, dontTouchFilteredSlots: Boolean) { if (from.isEmpty() || to.isEmpty()) return - val (_, itemsFrom) = computeSlotLists(from, true) + val (_, itemsFrom) = computeSlotLists(from, dontTouchFilteredSlots) val (_, itemsTo) = computeSlotLists(to, false) val intersect = if (itemsFrom.size < itemsTo.size) itemsFrom.keys.filter { it in itemsTo.keys } else itemsTo.keys.filter { it in itemsFrom.keys } @@ -39,9 +39,9 @@ class QuickMoveInput(private val menu: MatteryMenu, val from: Collection, Widgets18.RESTOCK_WITH_MOVE_FROM_STORAGE, Widgets18.RESTOCK_WITH_MOVE_TO_STORAGE ) { - override fun move(from: Collection, to: Collection, player: Player) { + override fun move(from: Collection, to: Collection, player: Player, dontTouchFilteredSlots: Boolean) { if (from.isEmpty() || to.isEmpty()) return - val (_, itemsFrom) = computeSlotLists(from, true) + val (_, itemsFrom) = computeSlotLists(from, dontTouchFilteredSlots) val (emptyTo, itemsTo) = computeSlotLists(to, false) val intersect = if (itemsFrom.size < itemsTo.size) itemsFrom.keys.filter { it in itemsTo.keys } else itemsTo.keys.filter { it in itemsFrom.keys } @@ -61,20 +61,20 @@ class QuickMoveInput(private val menu: MatteryMenu, val from: Collection, Widgets18.MOVE_EVERYTHING_FROM_STORAGE, Widgets18.MOVE_EVERYTHING_TO_STORAGE ) { - override fun move(from: Collection, to: Collection, player: Player) { + override fun move(from: Collection, to: Collection, player: Player, dontTouchFilteredSlots: Boolean) { if (from.isEmpty() || to.isEmpty()) return val toSorted = prioritySortSlots(to) from.forEach { val slot = it.containerSlotOrNull() - if (slot !is IFilteredContainerSlot || !slot.hasFilter) + if (!dontTouchFilteredSlots || slot !is IFilteredContainerSlot || !slot.hasFilter) moveItemStackTo(player, it, toSorted, sort = false) } } }; - abstract fun move(from: Collection, to: Collection, player: Player) + abstract fun move(from: Collection, to: Collection, player: Player, dontTouchFilteredSlots: Boolean = true) val textFromStorage: Component get() { return TranslatableComponent("otm.gui.quickmove_from.${name.lowercase()}") @@ -92,12 +92,12 @@ class QuickMoveInput(private val menu: MatteryMenu, val from: Collection, } private fun handle() { - mode.move(from, to, menu.player) + mode.move(from, to, menu.player, dontTouchFilteredSlots) } companion object { - fun create(menu: MatteryMenu, from: Collection, to: Collection): Map { - return Mode.entries.associateWith { QuickMoveInput(menu, from, to, it) } + fun create(menu: MatteryMenu, from: Collection, to: Collection, dontTouchFilteredSlots: Boolean = true): Map { + return Mode.entries.associateWith { QuickMoveInput(menu, from, to, it, dontTouchFilteredSlots) } } private fun computeSlotLists(slots: Collection, skipFilteredSlots: Boolean): Pair, MutableMap>> { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/CargoCrateMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/CargoCrateMenu.kt index 5f46a3188..c718af908 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/CargoCrateMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/decorative/CargoCrateMenu.kt @@ -22,7 +22,7 @@ class CargoCrateMenu( val sort = SortInput(this, actualContainer, playerSortSettings) val quickMoveToStorage = QuickMoveInput.create(this, playerCombinedInventorySlots, storageSlots) - val quickMoveFromStorage = QuickMoveInput.create(this, storageSlots, playerInventorySlots) + val quickMoveFromStorage = QuickMoveInput.create(this, storageSlots, playerInventorySlots, false) init { if (trackedPlayerOpen) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/MatteryPlayerPackets.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/MatteryPlayerPackets.kt index 6eb691ae9..ab82f1c57 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/MatteryPlayerPackets.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/MatteryPlayerPackets.kt @@ -480,7 +480,7 @@ class QuickStackPacket( if (fromExopack) mode.move(player.matteryPlayer.exoPackMenu.playerCombinedInventorySlots, cap.getSlotsFor(player), player) else - mode.move(cap.getSlotsFor(player), player.matteryPlayer.exoPackMenu.playerInventorySlots, player) + mode.move(cap.getSlotsFor(player), player.matteryPlayer.exoPackMenu.playerInventorySlots, player, false) } } }