From 1878f4e20f34dee481d5ce4653d83fa364bf3d2d Mon Sep 17 00:00:00 2001 From: Baitinq Date: Thu, 12 Jan 2023 11:34:22 +0100 Subject: [PATCH 1/2] InventoryManager: Add "helpMend" setting This setting helps you mend items while being AFK (made thinking about AFK fishing) by replacing the offhand item with low HP items of the same type that have the mending enchantment. --- .../module/modules/player/InventoryManager.kt | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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..38aa2cd73 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,10 @@ 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 +164,14 @@ object InventoryManager : Module( } } + private fun SafeClientEvent.helpMend() { + val chosenItemSlots = player.inventorySlots.filter{it.stack.item.equals(player.heldItemOffhand.item) && EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, it.stack) != 0 && it.stack.itemDamage != 0} + if (chosenItemSlots.isNotEmpty()) { + MessageSendHelper.sendChatMessage("$chatName Switching offhand to another item (Help Mend).") + moveToSlot(this@InventoryManager, chosenItemSlots[0], player.offhandSlot) + } + } + private fun SafeClientEvent.refillBuilding() { player.storageSlots.firstID(buildingBlockID)?.let { quickMoveSlot(this@InventoryManager, it) From d2b16a92858a8bcc68d3bc9b0c1d15d14d2438ef Mon Sep 17 00:00:00 2001 From: Constructor Date: Sun, 22 Jan 2023 04:44:01 +0100 Subject: [PATCH 2/2] Cleanup --- .../module/modules/player/InventoryManager.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 38aa2cd73..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 @@ -118,7 +118,9 @@ object InventoryManager : Module( } private fun SafeClientEvent.helpMendCheck() : Boolean { - return helpMend && (player.heldItemOffhand.itemDamage == 0 || EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, player.heldItemOffhand) == 0) + return helpMend + && (player.heldItemOffhand.itemDamage == 0 + || EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, player.heldItemOffhand) == 0) } private fun SafeClientEvent.refillBuildingCheck(): Boolean { @@ -165,10 +167,13 @@ object InventoryManager : Module( } private fun SafeClientEvent.helpMend() { - val chosenItemSlots = player.inventorySlots.filter{it.stack.item.equals(player.heldItemOffhand.item) && EnchantmentHelper.getEnchantmentLevel(Enchantments.MENDING, it.stack) != 0 && it.stack.itemDamage != 0} - if (chosenItemSlots.isNotEmpty()) { + 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, chosenItemSlots[0], player.offhandSlot) + moveToSlot(this@InventoryManager, it, player.offhandSlot) } }