[feature] Nearby player check for AutoMend (#1856)

Co-authored-by: Dominika <sokolov.dominika@gmail.com>
This commit is contained in:
FriedrichM 2021-01-16 22:04:34 +02:00 committed by GitHub
parent e5cead1975
commit 13eef44cac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 11 deletions

View File

@ -2,11 +2,15 @@ package me.zeroeightsix.kami.module.modules.combat
import me.zeroeightsix.kami.event.SafeClientEvent
import me.zeroeightsix.kami.event.events.GuiEvent
import me.zeroeightsix.kami.manager.managers.FriendManager
import me.zeroeightsix.kami.module.Category
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.util.EntityUtils.isFakeOrSelf
import me.zeroeightsix.kami.util.items.swapToSlot
import me.zeroeightsix.kami.util.text.MessageSendHelper
import me.zeroeightsix.kami.util.threads.runSafe
import me.zeroeightsix.kami.util.threads.safeListener
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.init.Items
import net.minecraft.util.EnumHand
import net.minecraftforge.fml.common.gameevent.TickEvent
@ -21,14 +25,23 @@ internal object AutoMend : Module(
private val autoThrow by setting("AutoThrow", true)
private val autoSwitch by setting("AutoSwitch", true)
private val autoDisable by setting("AutoDisable", false, { autoSwitch })
private val threshold by setting("Repair%", 75, 1..100, 1)
private val gui by setting("RunInGUIs", false)
private val cancelNearby by setting("CancelNearby", NearbyMode.OFF, description = "Don't mend when an enemy is nearby")
private val pauseNearbyRadius by setting("NearbyRadius", 10, 1..8, 1, { cancelNearby != NearbyMode.OFF })
private val threshold by setting("RepairAt", 75, 1..100, 1, description = "Percentage to start repairing any armor piece")
private val gui by setting("AllowGUI", false, description = "Allow mending when inside a GUI")
private var initHotbarSlot = -1
private var isGuiOpened = false
private var paused = false
@Suppress("unused")
private enum class NearbyMode {
OFF, PAUSE, DISABLE
}
init {
onEnable {
paused = false
if (autoSwitch) {
runSafe {
initHotbarSlot = player.inventory.currentItem
@ -37,13 +50,7 @@ internal object AutoMend : Module(
}
onDisable {
if (autoSwitch) {
runSafe {
if (initHotbarSlot != -1 && initHotbarSlot != player.inventory.currentItem) {
player.inventory.currentItem = initHotbarSlot
}
}
}
switchback()
}
listener<GuiEvent.Displayed> {
@ -57,6 +64,18 @@ internal object AutoMend : Module(
safeListener<TickEvent.ClientTickEvent> {
if (isGuiOpened && !gui) return@safeListener
if (cancelNearby != NearbyMode.OFF && isNearbyPlayer()) {
if (cancelNearby == NearbyMode.DISABLE) {
disable()
} else {
if (!paused)
switchback()
paused = true
}
return@safeListener
}
paused = false
if (shouldMend(0) || shouldMend(1) || shouldMend(2) || shouldMend(3)) {
if (autoSwitch && player.heldItemMainhand.item !== Items.EXPERIENCE_BOTTLE) {
val xpSlot = findXpPots()
@ -92,4 +111,26 @@ internal object AutoMend : Module(
val stack = player.inventory.armorInventory[i]
return stack.isItemDamaged && 100 * stack.itemDamage / stack.maxDamage > reverseNumber(threshold, 1, 100)
}
private fun switchback() {
if (autoSwitch) {
runSafe {
if (initHotbarSlot != -1 && initHotbarSlot != player.inventory.currentItem) {
swapToSlot(initHotbarSlot)
}
}
}
}
private fun isNearbyPlayer(): Boolean {
for (entity in mc.world.loadedEntityList) {
if (entity !is EntityPlayer) continue
if (entity.isFakeOrSelf) continue
if (AntiBot.isBot(entity)) continue
if (mc.player.getDistance(entity) > pauseNearbyRadius) continue
if (FriendManager.isFriend(entity.name)) continue
return true
}
return false
}
}

View File

@ -5,6 +5,7 @@ import me.zeroeightsix.kami.manager.managers.WaypointManager
import me.zeroeightsix.kami.module.Category
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.util.EntityUtils.flooredPosition
import me.zeroeightsix.kami.util.EntityUtils.isFakeOrSelf
import me.zeroeightsix.kami.util.TickTimer
import me.zeroeightsix.kami.util.TimeUnit
import me.zeroeightsix.kami.util.text.MessageSendHelper
@ -43,8 +44,7 @@ internal object VisualRange : Module(
val loadedPlayerSet = LinkedHashSet(world.playerEntities)
for (entityPlayer in loadedPlayerSet) {
if (entityPlayer == mc.renderViewEntity || entityPlayer == player) continue // Self/Freecam check
if (entityPlayer.entityId < 0) continue // Fake entity check
if (entityPlayer.isFakeOrSelf) continue // Self / Freecam / FakePlayer check
if (!friends && FriendManager.isFriend(entityPlayer.name)) continue // Friend check
if (playerSet.add(entityPlayer) && isEnabled) {

View File

@ -37,6 +37,8 @@ object EntityUtils {
val Entity.isHostile get() = isMobAggressive(this)
val EntityPlayer.isFakeOrSelf get() = this == mc.player || this == mc.renderViewEntity || this.entityId < 0
private fun isNeutralMob(entity: Entity) = entity is EntityPigZombie
|| entity is EntityWolf
|| entity is EntityEnderman