@@ -25,9 +25,11 @@ import com.lambda.module.tag.ModuleTag
2525import com.lambda.threading.runSafe
2626import com.lambda.util.NamedEnum
2727import com.lambda.util.SpeedUnit
28+ import com.lambda.util.Timer
2829import net.minecraft.client.network.ClientPlayerEntity
2930import net.minecraft.entity.EntityType
3031import net.minecraft.util.math.Vec3d
32+ import kotlin.time.Duration.Companion.seconds
3133
3234object ElytraAttitudeControl : Module(
3335 name = " ElytraAttitudeControl" ,
@@ -51,15 +53,17 @@ object ElytraAttitudeControl : Module(
5153 val speedControllerD by setting(" Speed Control D" , 4.5 , 0.0 .. 5.0 , 0.05 ).group(Group .SpeedControl )
5254 val speedControllerI by setting(" Speed Control I" , 0.3 , 0.0 .. 1.0 , 0.05 ).group(Group .SpeedControl )
5355
54- val useFirework by setting(" Use Firework" , false , " Automatically use fireworks to maintain speed or height" )
55- val minHeight by setting(" Min Height" , 50 , 0 .. 256 , 10 , unit = " blocks" , description = " Minimum height to use fireworks" ) { useFirework }
56- val minSpeed by setting(" Min Speed" , 15.0 , 0.1 .. 50.0 , 0.1 , unit = " m/s" , description = " Minimum speed to use fireworks" ) { useFirework }
56+ val useFireworkOnHeight by setting(" Use Firework On Height" , false , " Use fireworks when below a certain height" )
57+ val minHeight by setting(" Min Height" , 50 , 0 .. 256 , 10 , unit = " blocks" , description = " Minimum height to use firework" ) { useFireworkOnHeight }
58+
59+ val useFireworkOnSpeed by setting(" Use Firework On Speed" , false , " Use fireworks based on speed" )
60+ val minSpeed by setting(" Min Speed" , 20.0 , 0.1 .. 50.0 , 0.1 , unit = " m/s" , description = " Minimum speed to use fireworks" ) { useFireworkOnSpeed }
5761
5862 var lastPos : Vec3d = Vec3d .ZERO
5963 val speedController: PIController = PIController ({ speedControllerP }, { speedControllerD }, { speedControllerI }, { 0.0 })
6064 val altitudeController: PIController = PIController ({ altitudeControllerP }, { altitudeControllerD }, { altitudeControllerI }, { altitudeControllerConst })
6165
62- var lastUsedFirework = 0L
66+ val usageDelay = Timer ()
6367
6468 init {
6569 listen<TickEvent .Pre > {
@@ -86,18 +90,15 @@ object ElytraAttitudeControl : Module(
8690
8791 lastPos = player.pos
8892
89- if (useFirework) {
90- val currentTime = System .currentTimeMillis()
91- if (lastUsedFirework + 2000 > currentTime) {
92- return @listen
93- }
94-
95- if (player.hasFirework) {
96- return @listen
93+ if (usageDelay.timePassed(2 .seconds) && ! player.hasFirework) {
94+ if (useFireworkOnHeight && minHeight > player.y) {
95+ usageDelay.reset()
96+ runSafe {
97+ startFirework(true )
98+ }
9799 }
98-
99- if (minHeight >= player.y || SpeedUnit .MetersPerSecond .convertFromMinecraft(player.velocity.length()) < minSpeed) {
100- lastUsedFirework = currentTime
100+ if (useFireworkOnSpeed && minSpeed > SpeedUnit .MetersPerSecond .convertFromMinecraft(player.velocity.length())) {
101+ usageDelay.reset()
101102 runSafe {
102103 startFirework(true )
103104 }
0 commit comments