mirror of https://github.com/kami-blue/client
[feature] Nearby player check for AutoMend (#1856)
Co-authored-by: Dominika <sokolov.dominika@gmail.com>
This commit is contained in:
parent
e5cead1975
commit
13eef44cac
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue