Skip to content

Commit

Permalink
feat: Add trajectory for fireballs (#3144)
Browse files Browse the repository at this point in the history
* Added fireball trajectory type

* Improved function.
  • Loading branch information
superblaubeere27 authored May 27, 2024
1 parent 84e403f commit 05696e8
Showing 1 changed file with 23 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
Expand All @@ -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
}
}
Expand Down Expand Up @@ -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,
/**
Expand All @@ -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)
}
}

0 comments on commit 05696e8

Please sign in to comment.