diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/event/EventListener.kt b/src/main/kotlin/net/ccbluex/liquidbounce/event/EventListener.kt index bfbbf8d4257..99e4ac3e530 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/event/EventListener.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/event/EventListener.kt @@ -101,11 +101,25 @@ inline fun EventListener.until( inline fun EventListener.once( priority: Short = 0, crossinline handler: (T) -> Unit -): EventHook = until(priority) { event -> +): EventHook = until(priority) { event -> // Don't use `repeated` 'cause for no overhead handler(event) true // This will unregister the handler after the first call } +inline fun EventListener.repeated( + times: Int = 1, + priority: Short = 1, + crossinline handler: (T) -> Unit +): EventHook { + require(times > 0) { "times must be > 0" } + + var called = 0 + return until(priority) { event -> + handler(event) + ++called >= times + } +} + /** * Returns computed [ReadWriteProperty] based on the [accumulator] of specific event. * diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/nofall/modes/NoFallMLG.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/nofall/modes/NoFallMLG.kt index 3f06f0a793e..78bf17e08e6 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/nofall/modes/NoFallMLG.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/player/nofall/modes/NoFallMLG.kt @@ -20,8 +20,10 @@ package net.ccbluex.liquidbounce.features.module.modules.player.nofall.modes import net.ccbluex.liquidbounce.config.types.nesting.ToggleableConfigurable import net.ccbluex.liquidbounce.event.events.GameTickEvent +import net.ccbluex.liquidbounce.event.events.MovementInputEvent import net.ccbluex.liquidbounce.event.events.RotationUpdateEvent import net.ccbluex.liquidbounce.event.handler +import net.ccbluex.liquidbounce.event.repeated import net.ccbluex.liquidbounce.features.module.modules.movement.ModuleFreeze import net.ccbluex.liquidbounce.features.module.modules.player.nofall.ModuleNoFall import net.ccbluex.liquidbounce.utils.aiming.RotationManager @@ -45,10 +47,10 @@ import net.ccbluex.liquidbounce.utils.inventory.Slots import net.ccbluex.liquidbounce.utils.inventory.findClosestSlot import net.ccbluex.liquidbounce.utils.kotlin.Priority import net.ccbluex.liquidbounce.utils.world.waterEvaporates -import net.minecraft.world.level.block.Blocks -import net.minecraft.world.item.Items import net.minecraft.core.BlockPos import net.minecraft.core.Vec3i +import net.minecraft.world.item.Items +import net.minecraft.world.level.block.Blocks internal object NoFallMLG : NoFallMode("MLG") { private val minFallDist by float("MinFallDistance", 5f, 2f..50f) @@ -68,6 +70,7 @@ internal object NoFallMLG : NoFallMode("MLG") { private val netherItems = setOf( // overworld + Items.SCAFFOLDING, Items.COBWEB, Items.POWDER_SNOW_BUCKET, Items.HAY_BLOCK, @@ -122,6 +125,12 @@ internal object NoFallMLG : NoFallMode("MLG") { val onSuccess: () -> Boolean = { lastPlacements.add(target.targetPos to Chronometer(System.currentTimeMillis())) + if (target.hotbarItemSlot.itemStack.item == Items.SCAFFOLDING) { + repeated(3) { + it.sneak = true + } + } + true } diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/FallingPlayer.kt b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/FallingPlayer.kt index 3bdc72c3992..15b16526477 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/FallingPlayer.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/utils/entity/FallingPlayer.kt @@ -20,13 +20,13 @@ package net.ccbluex.liquidbounce.utils.entity import net.ccbluex.liquidbounce.utils.client.world import net.minecraft.client.player.LocalPlayer -import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.Pose -import net.minecraft.world.effect.MobEffect -import net.minecraft.world.effect.MobEffects -import net.minecraft.core.Holder import net.minecraft.core.BlockPos +import net.minecraft.core.Holder import net.minecraft.util.Mth +import net.minecraft.world.effect.MobEffect +import net.minecraft.world.effect.MobEffects +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.Pose import net.minecraft.world.phys.Vec3 import kotlin.jvm.optionals.getOrNull import kotlin.math.sqrt @@ -67,7 +67,6 @@ class FallingPlayer( d = 0.01 } - val j: Double = this.player.xRot.toDouble() * Mth.DEG_TO_RAD val k = sqrt(rotationVec.x * rotationVec.x + rotationVec.z * rotationVec.z)