diff --git a/src/main/kotlin/com/lambda/client/module/modules/player/InventoryManager.kt b/src/main/kotlin/com/lambda/client/module/modules/player/InventoryManager.kt index 4d84f6168..c4cf875d4 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/player/InventoryManager.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/player/InventoryManager.kt @@ -12,8 +12,11 @@ import com.lambda.client.setting.settings.impl.collection.CollectionSetting import com.lambda.client.util.TickTimer import com.lambda.client.util.TimeUnit import com.lambda.client.util.items.* +import com.lambda.client.util.text.MessageSendHelper import com.lambda.client.util.threads.safeListener import net.minecraft.client.gui.inventory.GuiContainer +import net.minecraft.enchantment.EnchantmentHelper +import net.minecraft.init.Enchantments import net.minecraft.inventory.Slot import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.gameevent.TickEvent @@ -43,10 +46,11 @@ object InventoryManager : Module( private val fullOnly by setting("Only At Full", false, { autoEject }) private val pauseMovement by setting("Pause Movement", true) private val delay by setting("Delay Ticks", 1, 0..20, 1, unit = " ticks") + private val helpMend by setting("Help Mend", false, description = "Helps mending items by replacing the offhand item with low HP items of the same type") val ejectList = setting(CollectionSetting("Eject List", defaultEjectList)) enum class State { - IDLE, SAVING_ITEM, REFILLING_BUILDING, REFILLING, EJECTING + IDLE, SAVING_ITEM, HELPING_MEND, REFILLING_BUILDING, REFILLING, EJECTING } private var currentState = State.IDLE @@ -78,6 +82,7 @@ object InventoryManager : Module( when (currentState) { State.SAVING_ITEM -> saveItem() + State.HELPING_MEND -> helpMend() State.REFILLING_BUILDING -> refillBuilding() State.REFILLING -> refill() State.EJECTING -> eject() @@ -91,6 +96,7 @@ object InventoryManager : Module( private fun SafeClientEvent.setState() { currentState = when { saveItemCheck() -> State.SAVING_ITEM + helpMendCheck() -> State.HELPING_MEND refillBuildingCheck() -> State.REFILLING_BUILDING refillCheck() -> State.REFILLING ejectCheck() -> State.EJECTING @@ -111,6 +117,12 @@ object InventoryManager : Module( return itemSaver && checkDamage(player.heldItemMainhand) } + private fun SafeClientEvent.helpMendCheck() : Boolean { + return helpMend + && (player.heldItemOffhand.itemDamage == 0 + || EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, player.heldItemOffhand) == 0) + } + private fun SafeClientEvent.refillBuildingCheck(): Boolean { if (!autoRefill || !buildingMode || buildingBlockID == 0) return false @@ -154,6 +166,17 @@ object InventoryManager : Module( } } + private fun SafeClientEvent.helpMend() { + player.inventorySlots.filterByStack { + it.item == player.heldItemOffhand.item + && EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, it) != 0 + && it.itemDamage != 0 + }.firstOrNull()?.let { + MessageSendHelper.sendChatMessage("$chatName Switching offhand to another item (Help Mend).") + moveToSlot(this@InventoryManager, it, player.offhandSlot) + } + } + private fun SafeClientEvent.refillBuilding() { player.storageSlots.firstID(buildingBlockID)?.let { quickMoveSlot(this@InventoryManager, it)