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