diff --git a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/trajectories/TrajectoryData.kt b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/trajectories/TrajectoryData.kt index ca742b70bab..d4b2cbeb2c8 100644 --- a/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/trajectories/TrajectoryData.kt +++ b/src/main/kotlin/net/ccbluex/liquidbounce/features/module/modules/render/trajectories/TrajectoryData.kt @@ -3,6 +3,7 @@ package net.ccbluex.liquidbounce.features.module.modules.render.trajectories import net.ccbluex.liquidbounce.render.engine.Color4b import net.minecraft.entity.Entity import net.minecraft.entity.player.PlayerEntity +import net.minecraft.entity.projectile.AbstractFireballEntity import net.minecraft.entity.projectile.ArrowEntity import net.minecraft.entity.projectile.TridentEntity import net.minecraft.entity.projectile.thrown.EggEntity @@ -11,22 +12,12 @@ import net.minecraft.entity.projectile.thrown.ExperienceBottleEntity import net.minecraft.entity.projectile.thrown.PotionEntity import net.minecraft.entity.projectile.thrown.SnowballEntity import net.minecraft.item.* -import org.joml.Matrix4f object TrajectoryData { fun getRenderedTrajectoryInfo(player: PlayerEntity, item: Item, alwaysShowBow: Boolean): TrajectoryInfo? { return when (item) { is BowItem -> { - // Calculate power of bow - var power = player.itemUseTime / 20f - power = (power * power + power * 2F) / 3F - power = if (alwaysShowBow && power == 0.0F) 1.0F else power - - if (power < 0.1F) { - return null - } - - val v0 = power.coerceAtMost(1.0F) * TrajectoryInfo.BOW_FULL_PULL.initialVelocity + val v0 = calculateInitialVelocityOrArrow(player, alwaysShowBow) ?: return null TrajectoryInfo.BOW_FULL_PULL.copy(initialVelocity = v0) } @@ -39,6 +30,7 @@ object TrajectoryData { is EnderPearlItem -> TrajectoryInfo.GENERIC is EggItem -> TrajectoryInfo.GENERIC is ExperienceBottleItem -> TrajectoryInfo.EXP_BOTTLE + is FireChargeItem -> TrajectoryInfo.FIREBALL else -> null } } @@ -76,11 +68,30 @@ object TrajectoryData { is SnowballEntity -> TrajectoryInfo.GENERIC is ExperienceBottleEntity -> TrajectoryInfo.EXP_BOTTLE is EggEntity -> TrajectoryInfo.GENERIC + is AbstractFireballEntity -> TrajectoryInfo.FIREBALL else -> null } } } +private fun calculateInitialVelocityOrArrow(player: PlayerEntity, alwaysShowBow: Boolean): Double? { + val inUseTime = player.itemUseTime + + if (alwaysShowBow && inUseTime < 1.0F) { + return 1.0 + } + + // Calculate power of bow + var power = player.itemUseTime / 20f + power = (power * power + power * 2F) / 3F + + if (power < 0.1F) { + return null + } + + return power.coerceAtMost(1.0F) * TrajectoryInfo.BOW_FULL_PULL.initialVelocity +} + data class TrajectoryInfo( val gravity: Double, /** @@ -100,5 +111,6 @@ data class TrajectoryInfo( val FISHING_ROD = GENERIC.copy(gravity = 0.04, drag = 0.92) val TRIDENT = PERSISTENT.copy(initialVelocity = 2.5, gravity = 0.05, dragInWater = 0.99) val BOW_FULL_PULL = PERSISTENT.copy(initialVelocity = 3.0) + val FIREBALL = TrajectoryInfo(gravity = 0.0, hitboxRadius = 1.0) } }