From 4d934cf24f5dce21c943643d0274f6e3a0df06e0 Mon Sep 17 00:00:00 2001
From: IceTank <61137113+IceTank@users.noreply.github.com>
Date: Tue, 3 Feb 2026 00:21:28 +0100
Subject: [PATCH 1/6] feat(AutoMount): Add AutoMount module to automatically
mount or remount entities
---
.../module/modules/movement/AutoMount.kt | 87 +++++++++++++++++++
1 file changed, 87 insertions(+)
create mode 100644 src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
diff --git a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
new file mode 100644
index 000000000..e06d0cd54
--- /dev/null
+++ b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2026 Lambda
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.lambda.module.modules.movement
+
+import com.lambda.context.SafeContext
+import com.lambda.event.events.TickEvent
+import com.lambda.event.listener.SafeListener.Companion.listen
+import com.lambda.module.Module
+import com.lambda.module.tag.ModuleTag
+import com.lambda.util.Timer
+import com.lambda.util.world.fastEntitySearch
+import net.minecraft.entity.Entity
+import net.minecraft.entity.EntityType
+import net.minecraft.registry.Registries
+import kotlin.time.Duration.Companion.milliseconds
+
+class AutoMount : Module(
+ name = "AutoMount",
+ description = "Automatically mounts entities",
+ tag = ModuleTag.MOVEMENT
+) {
+ var autoRemount by setting("Auto Remount", false, description = "Automatically remounts if you get off")
+ var autoMountEntities by setting("Auto Mount Entities", true, description = "Automatically mounts nearby entities in range")
+ var autoMountEntityList by setting("Auto Mount Entity List", mutableListOf>(), mutableListOf(Registries.ENTITY_TYPE.toList())) { autoMountEntities }
+
+ var interval by setting("Interval", 50, 1..200, 1, unit = "ms", description = "Interact interval")
+ var range by setting("Range", 5.0, 1.0..10.0, 0.1, description = "Mount range")
+
+ val intervalTimer = Timer()
+ var lastEntity: Entity? = null
+
+ init {
+ listen {
+ if (!intervalTimer.timePassed(interval.milliseconds)) {
+ return@listen
+ }
+ if (autoMountEntities && !player.isRiding) {
+ val entity = fastEntitySearch(range) {
+ autoMountEntityList.contains(it.type) && canRide(it) && it.distanceTo(player) <= range
+ }
+ entity.firstOrNull()?.let {
+ intervalTimer.reset()
+ player.startRiding(it)
+ }
+ }
+ if (autoRemount) {
+ if (player.isRiding) {
+ lastEntity = player.vehicle
+ } else {
+ lastEntity?.let {
+ if (it.isRemoved || it.distanceTo(player) > range) {
+ lastEntity = null
+ } else {
+ if (canRide(it)) {
+ intervalTimer.reset()
+ player.startRiding(it)
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ private fun SafeContext.canRide(entity: Entity): Boolean {
+ return entity.canAddPassenger(player)
+ }
+
+ private fun Entity.canAddPassenger(other: Entity): Boolean {
+ return this.canAddPassenger(other)
+ }
+}
\ No newline at end of file
From 4774b62789083090da2afead4c05380c630da0d8 Mon Sep 17 00:00:00 2001
From: Ic3Tank <61137113+IceTank@users.noreply.github.com>
Date: Tue, 3 Feb 2026 22:01:59 +0100
Subject: [PATCH 2/6] fix(AutoMount): Fix AutoMount module
---
.../module/modules/movement/AutoMount.kt | 57 ++++++++++++++-----
src/main/resources/lambda.accesswidener | 3 +
2 files changed, 45 insertions(+), 15 deletions(-)
diff --git a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
index e06d0cd54..bde70bb7a 100644
--- a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
+++ b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
@@ -17,16 +17,27 @@
package com.lambda.module.modules.movement
+import com.lambda.config.AutomationConfig
import com.lambda.context.SafeContext
import com.lambda.event.events.TickEvent
import com.lambda.event.listener.SafeListener.Companion.listen
+import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker
+import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.findRotation
import com.lambda.module.Module
import com.lambda.module.tag.ModuleTag
+import com.lambda.threading.runSafeAutomated
+import com.lambda.util.Communication.debug
+import com.lambda.util.Communication.info
+import com.lambda.util.EntityUtils
import com.lambda.util.Timer
+import com.lambda.util.math.dist
import com.lambda.util.world.fastEntitySearch
import net.minecraft.entity.Entity
import net.minecraft.entity.EntityType
+import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket
import net.minecraft.registry.Registries
+import net.minecraft.util.Hand
+import net.minecraft.util.math.Vec3d
import kotlin.time.Duration.Companion.milliseconds
class AutoMount : Module(
@@ -36,30 +47,45 @@ class AutoMount : Module(
) {
var autoRemount by setting("Auto Remount", false, description = "Automatically remounts if you get off")
var autoMountEntities by setting("Auto Mount Entities", true, description = "Automatically mounts nearby entities in range")
- var autoMountEntityList by setting("Auto Mount Entity List", mutableListOf>(), mutableListOf(Registries.ENTITY_TYPE.toList())) { autoMountEntities }
+ var autoMountEntityList by setting("Auto Mount Entity List",
+ mutableListOf(),
+ Registries.ENTITY_TYPE.toList()
+ ) { autoMountEntities }
var interval by setting("Interval", 50, 1..200, 1, unit = "ms", description = "Interact interval")
- var range by setting("Range", 5.0, 1.0..10.0, 0.1, description = "Mount range")
+ var range by setting("Range", 4.0, 1.0..20.0, 0.1, description = "Mount range")
+
+ override var automationConfig = AutomationConfig(
+ name = "AutoMount"
+ )
val intervalTimer = Timer()
var lastEntity: Entity? = null
init {
+ onEnable {
+ intervalTimer.reset()
+ lastEntity = null
+ }
+
listen {
if (!intervalTimer.timePassed(interval.milliseconds)) {
return@listen
}
- if (autoMountEntities && !player.isRiding) {
- val entity = fastEntitySearch(range) {
- autoMountEntityList.contains(it.type) && canRide(it) && it.distanceTo(player) <= range
- }
- entity.firstOrNull()?.let {
- intervalTimer.reset()
- player.startRiding(it)
+ if (autoMountEntities && player.vehicle == null) {
+ runSafeAutomated {
+ val entity = fastEntitySearch(10.0) {
+ autoMountEntityList.contains(it.type) && canRide(it) && it.findRotation(range, player.eyePos) != null
+ }.sortedBy { it.squaredDistanceTo(player.pos) }
+ entity.firstOrNull()?.let {
+ intervalTimer.reset()
+ interactEntity(it)
+ debug("Mounting ${it.name}")
+ }
}
}
if (autoRemount) {
- if (player.isRiding) {
+ if (player.vehicle != null) {
lastEntity = player.vehicle
} else {
lastEntity?.let {
@@ -68,7 +94,7 @@ class AutoMount : Module(
} else {
if (canRide(it)) {
intervalTimer.reset()
- player.startRiding(it)
+ interactEntity(it)
}
}
}
@@ -77,11 +103,12 @@ class AutoMount : Module(
}
}
- private fun SafeContext.canRide(entity: Entity): Boolean {
- return entity.canAddPassenger(player)
+ private fun SafeContext.interactEntity(entity: Entity) {
+ mc.networkHandler?.sendPacket(PlayerInteractEntityC2SPacket.interactAt(entity, false, Hand.MAIN_HAND, Vec3d(0.5, 0.5, 0.5)))
+ mc.networkHandler?.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, false, Hand.MAIN_HAND))
}
- private fun Entity.canAddPassenger(other: Entity): Boolean {
- return this.canAddPassenger(other)
+ private fun SafeContext.canRide(entity: Entity): Boolean {
+ return entity.canAddPassenger(player)
}
}
\ No newline at end of file
diff --git a/src/main/resources/lambda.accesswidener b/src/main/resources/lambda.accesswidener
index ad63e9eda..5413273d7 100644
--- a/src/main/resources/lambda.accesswidener
+++ b/src/main/resources/lambda.accesswidener
@@ -155,3 +155,6 @@ transitive-accessible method net/minecraft/block/AbstractBlock getPickStack (Lne
transitive-accessible field net/minecraft/client/gui/screen/ingame/HandledScreen focusedSlot Lnet/minecraft/screen/slot/Slot;
transitive-accessible field net/minecraft/registry/SimpleRegistry frozen Z
transitive-accessible field net/minecraft/client/gui/screen/ingame/AbstractSignEditScreen messages [Ljava/lang/String;
+
+# AutoMount
+accessible method net/minecraft/entity/Entity canAddPassenger (Lnet/minecraft/entity/Entity;)Z
From 7f03cd1486095ffe606b1d84c5c1565c0caae412 Mon Sep 17 00:00:00 2001
From: Ic3Tank <61137113+IceTank@users.noreply.github.com>
Date: Fri, 27 Feb 2026 21:10:18 +0100
Subject: [PATCH 3/6] Fix pr code comments
---
.../module/modules/movement/AutoMount.kt | 55 ++++++++-----------
1 file changed, 23 insertions(+), 32 deletions(-)
diff --git a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
index bde70bb7a..9adcb8638 100644
--- a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
+++ b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
@@ -17,23 +17,18 @@
package com.lambda.module.modules.movement
-import com.lambda.config.AutomationConfig
+import com.lambda.config.AutomationConfig.Companion.setDefaultAutomationConfig
import com.lambda.context.SafeContext
import com.lambda.event.events.TickEvent
import com.lambda.event.listener.SafeListener.Companion.listen
-import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.findRotation
import com.lambda.module.Module
import com.lambda.module.tag.ModuleTag
import com.lambda.threading.runSafeAutomated
-import com.lambda.util.Communication.debug
import com.lambda.util.Communication.info
-import com.lambda.util.EntityUtils
import com.lambda.util.Timer
-import com.lambda.util.math.dist
import com.lambda.util.world.fastEntitySearch
import net.minecraft.entity.Entity
-import net.minecraft.entity.EntityType
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket
import net.minecraft.registry.Registries
import net.minecraft.util.Hand
@@ -47,22 +42,17 @@ class AutoMount : Module(
) {
var autoRemount by setting("Auto Remount", false, description = "Automatically remounts if you get off")
var autoMountEntities by setting("Auto Mount Entities", true, description = "Automatically mounts nearby entities in range")
- var autoMountEntityList by setting("Auto Mount Entity List",
- mutableListOf(),
- Registries.ENTITY_TYPE.toList()
- ) { autoMountEntities }
+ var autoMountEntityList by setting("Auto Mount Entity List", mutableListOf(), Registries.ENTITY_TYPE.toList()) { autoMountEntities }
var interval by setting("Interval", 50, 1..200, 1, unit = "ms", description = "Interact interval")
var range by setting("Range", 4.0, 1.0..20.0, 0.1, description = "Mount range")
-
- override var automationConfig = AutomationConfig(
- name = "AutoMount"
- )
+ var debug by setting("Debug", false, description = "Print debug messages")
val intervalTimer = Timer()
var lastEntity: Entity? = null
init {
+ setDefaultAutomationConfig("AutoMount")
onEnable {
intervalTimer.reset()
lastEntity = null
@@ -80,24 +70,27 @@ class AutoMount : Module(
entity.firstOrNull()?.let {
intervalTimer.reset()
interactEntity(it)
- debug("Mounting ${it.name}")
+ if (debug) info("Mounting ${it.name}")
}
}
}
- if (autoRemount) {
- if (player.vehicle != null) {
- lastEntity = player.vehicle
- } else {
- lastEntity?.let {
- if (it.isRemoved || it.distanceTo(player) > range) {
- lastEntity = null
- } else {
- if (canRide(it)) {
- intervalTimer.reset()
- interactEntity(it)
- }
- }
- }
+ if (!autoRemount) {
+ return@listen
+ }
+ if (player.vehicle != null) {
+ lastEntity = player.vehicle
+ }
+ if (lastEntity == null) {
+ return@listen
+ }
+ lastEntity?.let {
+ if (it.isRemoved || it.distanceTo(player) > range) {
+ lastEntity = null
+ return@let
+ }
+ if (canRide(it)) {
+ intervalTimer.reset()
+ interactEntity(it)
}
}
}
@@ -108,7 +101,5 @@ class AutoMount : Module(
mc.networkHandler?.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, false, Hand.MAIN_HAND))
}
- private fun SafeContext.canRide(entity: Entity): Boolean {
- return entity.canAddPassenger(player)
- }
+ private fun SafeContext.canRide(entity: Entity) = entity.canAddPassenger(player)
}
\ No newline at end of file
From 87945070929b3458db31e811ed4f64e83a44dad0 Mon Sep 17 00:00:00 2001
From: Ic3Tank <61137113+IceTank@users.noreply.github.com>
Date: Mon, 2 Mar 2026 21:42:37 +0100
Subject: [PATCH 4/6] fix(lambda.accesswidener): Move canAddPassenger method
accessibility location
---
src/main/resources/lambda.accesswidener | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/main/resources/lambda.accesswidener b/src/main/resources/lambda.accesswidener
index 5413273d7..5f4cf91c8 100644
--- a/src/main/resources/lambda.accesswidener
+++ b/src/main/resources/lambda.accesswidener
@@ -62,6 +62,7 @@ transitive-accessible field net/minecraft/entity/Entity world Lnet/minecraft/wor
transitive-accessible class net/minecraft/screen/slot/ArmorSlot
transitive-accessible field net/minecraft/screen/slot/ArmorSlot equipmentSlot Lnet/minecraft/entity/EquipmentSlot;
transitive-accessible field net/minecraft/entity/Entity FLAGS Lnet/minecraft/entity/data/TrackedData;
+accessible method net/minecraft/entity/Entity canAddPassenger (Lnet/minecraft/entity/Entity;)Z
# Camera
transitive-accessible method net/minecraft/client/render/Camera setPos (DDD)V
@@ -155,6 +156,3 @@ transitive-accessible method net/minecraft/block/AbstractBlock getPickStack (Lne
transitive-accessible field net/minecraft/client/gui/screen/ingame/HandledScreen focusedSlot Lnet/minecraft/screen/slot/Slot;
transitive-accessible field net/minecraft/registry/SimpleRegistry frozen Z
transitive-accessible field net/minecraft/client/gui/screen/ingame/AbstractSignEditScreen messages [Ljava/lang/String;
-
-# AutoMount
-accessible method net/minecraft/entity/Entity canAddPassenger (Lnet/minecraft/entity/Entity;)Z
From d20c1dd17ff7ef5416932fcd6509c68877acd611 Mon Sep 17 00:00:00 2001
From: IceTank <61137113+IceTank@users.noreply.github.com>
Date: Sat, 7 Mar 2026 16:29:21 +0100
Subject: [PATCH 5/6] Add rotation mode to AutoMount
---
.../module/modules/movement/AutoMount.kt | 33 +++++++++++++++----
1 file changed, 27 insertions(+), 6 deletions(-)
diff --git a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
index 9adcb8638..3d41957e0 100644
--- a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
+++ b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
@@ -21,10 +21,14 @@ import com.lambda.config.AutomationConfig.Companion.setDefaultAutomationConfig
import com.lambda.context.SafeContext
import com.lambda.event.events.TickEvent
import com.lambda.event.listener.SafeListener.Companion.listen
+import com.lambda.interaction.managers.rotating.IRotationRequest.Companion.rotationRequest
+import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.findRotation
+import com.lambda.interaction.managers.rotating.visibilty.lookAtEntity
import com.lambda.module.Module
import com.lambda.module.tag.ModuleTag
import com.lambda.threading.runSafeAutomated
+import com.lambda.util.Communication.debug
import com.lambda.util.Communication.info
import com.lambda.util.Timer
import com.lambda.util.world.fastEntitySearch
@@ -32,6 +36,7 @@ import net.minecraft.entity.Entity
import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket
import net.minecraft.registry.Registries
import net.minecraft.util.Hand
+import net.minecraft.util.hit.EntityHitResult
import net.minecraft.util.math.Vec3d
import kotlin.time.Duration.Companion.milliseconds
@@ -46,6 +51,7 @@ class AutoMount : Module(
var interval by setting("Interval", 50, 1..200, 1, unit = "ms", description = "Interact interval")
var range by setting("Range", 4.0, 1.0..20.0, 0.1, description = "Mount range")
+ var rotate by setting("Rotate", false, description = "Rotate to the entity when mounting")
var debug by setting("Debug", false, description = "Print debug messages")
val intervalTimer = Timer()
@@ -77,12 +83,9 @@ class AutoMount : Module(
if (!autoRemount) {
return@listen
}
- if (player.vehicle != null) {
+ if (player.vehicle?.isRemoved == false) {
lastEntity = player.vehicle
}
- if (lastEntity == null) {
- return@listen
- }
lastEntity?.let {
if (it.isRemoved || it.distanceTo(player) > range) {
lastEntity = null
@@ -97,8 +100,26 @@ class AutoMount : Module(
}
private fun SafeContext.interactEntity(entity: Entity) {
- mc.networkHandler?.sendPacket(PlayerInteractEntityC2SPacket.interactAt(entity, false, Hand.MAIN_HAND, Vec3d(0.5, 0.5, 0.5)))
- mc.networkHandler?.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, false, Hand.MAIN_HAND))
+ if (rotate) {
+ runSafeAutomated {
+ var hit: VisibilityChecker.CheckedHit? = null
+ rotationRequest {
+ hit = lookAtEntity(entity)
+ }.submit()
+ hit?.let {
+ val hitResult = it.hit as? EntityHitResult ?: return@let
+ interaction.interactEntityAtLocation(player, entity, hitResult, Hand.MAIN_HAND)
+ return@runSafeAutomated
+ } ?: run {
+ if (debug) debug("Not rotation found to mount entity")
+ return@runSafeAutomated
+ }
+ if (debug) debug("Invalid entity rotation")
+ }
+ } else {
+ connection.sendPacket(PlayerInteractEntityC2SPacket.interactAt(entity, false, Hand.MAIN_HAND, Vec3d(0.5, 0.5, 0.5)))
+ connection.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, false, Hand.MAIN_HAND))
+ }
}
private fun SafeContext.canRide(entity: Entity) = entity.canAddPassenger(player)
From b7c1510d178e4c2e920e105a6f85abc649b03260 Mon Sep 17 00:00:00 2001
From: Ic3Tank <61137113+IceTank@users.noreply.github.com>
Date: Fri, 13 Mar 2026 21:44:04 +0100
Subject: [PATCH 6/6] Fix some code Add setting to send packet sneak false
---
.../module/modules/movement/AutoMount.kt | 51 ++++++++++++-------
src/main/resources/lambda.accesswidener | 2 +-
2 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
index 3d41957e0..7525e5516 100644
--- a/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
+++ b/src/main/kotlin/com/lambda/module/modules/movement/AutoMount.kt
@@ -18,13 +18,15 @@
package com.lambda.module.modules.movement
import com.lambda.config.AutomationConfig.Companion.setDefaultAutomationConfig
+import com.lambda.config.applyEdits
+import com.lambda.context.AutomatedSafeContext
import com.lambda.context.SafeContext
import com.lambda.event.events.TickEvent
import com.lambda.event.listener.SafeListener.Companion.listen
import com.lambda.interaction.managers.rotating.IRotationRequest.Companion.rotationRequest
-import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.findRotation
import com.lambda.interaction.managers.rotating.visibilty.lookAtEntity
+import com.lambda.interaction.managers.rotating.visibilty.lookAtHit
import com.lambda.module.Module
import com.lambda.module.tag.ModuleTag
import com.lambda.threading.runSafeAutomated
@@ -52,13 +54,19 @@ class AutoMount : Module(
var interval by setting("Interval", 50, 1..200, 1, unit = "ms", description = "Interact interval")
var range by setting("Range", 4.0, 1.0..20.0, 0.1, description = "Mount range")
var rotate by setting("Rotate", false, description = "Rotate to the entity when mounting")
+ var packetUnCrouch by setting("Packet Crouch", true, description = "Send the mount packet with the crouch flag false")
var debug by setting("Debug", false, description = "Print debug messages")
val intervalTimer = Timer()
var lastEntity: Entity? = null
init {
- setDefaultAutomationConfig("AutoMount")
+ setDefaultAutomationConfig("AutoMount") {
+ applyEdits {
+ hideAllGroupsExcept(rotationConfig, interactConfig)
+ }
+ }
+
onEnable {
intervalTimer.reset()
lastEntity = null
@@ -74,7 +82,6 @@ class AutoMount : Module(
autoMountEntityList.contains(it.type) && canRide(it) && it.findRotation(range, player.eyePos) != null
}.sortedBy { it.squaredDistanceTo(player.pos) }
entity.firstOrNull()?.let {
- intervalTimer.reset()
interactEntity(it)
if (debug) info("Mounting ${it.name}")
}
@@ -92,30 +99,36 @@ class AutoMount : Module(
return@let
}
if (canRide(it)) {
- intervalTimer.reset()
- interactEntity(it)
+ runSafeAutomated {
+ interactEntity(it)
+ }
}
}
}
}
- private fun SafeContext.interactEntity(entity: Entity) {
+ private fun AutomatedSafeContext.interactEntity(entity: Entity) {
+ intervalTimer.reset()
if (rotate) {
- runSafeAutomated {
- var hit: VisibilityChecker.CheckedHit? = null
- rotationRequest {
- hit = lookAtEntity(entity)
- }.submit()
- hit?.let {
- val hitResult = it.hit as? EntityHitResult ?: return@let
- interaction.interactEntityAtLocation(player, entity, hitResult, Hand.MAIN_HAND)
- return@runSafeAutomated
- } ?: run {
- if (debug) debug("Not rotation found to mount entity")
- return@runSafeAutomated
+ lookAtEntity(entity)?.let {
+ val done = rotationRequest {
+ lookAtHit(it.hit)
+ }.submit().done
+ if (!done) {
+ if (debug) debug("Rotation request failed to submit")
+ return
}
- if (debug) debug("Invalid entity rotation")
+ val hitResult = it.hit as? EntityHitResult ?: return@let
+ // Send packet to manually set sneak state
+ val vec3d = hitResult.getPos().subtract(entity.x, entity.y, entity.z)
+ val crouch = if (packetUnCrouch) false else player.isSneaking
+ connection.sendPacket(PlayerInteractEntityC2SPacket.interactAt(entity, crouch, Hand.MAIN_HAND, vec3d))
+ return
+ } ?: run {
+ if (debug) debug("Not rotation found to mount entity")
+ return
}
+ if (debug) debug("Invalid entity rotation")
} else {
connection.sendPacket(PlayerInteractEntityC2SPacket.interactAt(entity, false, Hand.MAIN_HAND, Vec3d(0.5, 0.5, 0.5)))
connection.sendPacket(PlayerInteractEntityC2SPacket.interact(entity, false, Hand.MAIN_HAND))
diff --git a/src/main/resources/lambda.accesswidener b/src/main/resources/lambda.accesswidener
index 5f4cf91c8..1bea7d297 100644
--- a/src/main/resources/lambda.accesswidener
+++ b/src/main/resources/lambda.accesswidener
@@ -62,7 +62,7 @@ transitive-accessible field net/minecraft/entity/Entity world Lnet/minecraft/wor
transitive-accessible class net/minecraft/screen/slot/ArmorSlot
transitive-accessible field net/minecraft/screen/slot/ArmorSlot equipmentSlot Lnet/minecraft/entity/EquipmentSlot;
transitive-accessible field net/minecraft/entity/Entity FLAGS Lnet/minecraft/entity/data/TrackedData;
-accessible method net/minecraft/entity/Entity canAddPassenger (Lnet/minecraft/entity/Entity;)Z
+transitive-accessible method net/minecraft/entity/Entity canAddPassenger (Lnet/minecraft/entity/Entity;)Z
# Camera
transitive-accessible method net/minecraft/client/render/Camera setPos (DDD)V