-
Notifications
You must be signed in to change notification settings - Fork 0
26.3 Rocket Propulsion and Acceleration
This page details the mathematical propulsion algorithms, state transitions, and vector difference convergence powering firework rocket boosting in Max Elytra Fly Speed (MC 26.3).
| Parameter | Technical Details |
|---|---|
| Subsystem Name | Two-Tier Firework Rocket Propulsion & Vector Convergence |
| Java Implementation | net.instantgratification.maxelytraflyspeed.util.RocketBoostHelper |
| Bytecode Mixin | net.instantgratification.maxelytraflyspeed.mixin.FireworkRocketEntityMixin |
| Target Method | FireworkRocketEntity.tick |
| Controlling GameRules |
elytra_initial_boost_speed (Default: 30), elytra_high_speed_acceleration (Default: 15) |
| Algorithmic Complexity |
|
| Convergence Rate |
|
In vanilla Minecraft, firework rockets apply a fixed formula designed solely for low-speed flight:
$$\vec{b}{\text{vanilla}} = \vec{u}{\text{look}} \times 0.1 + \left(\vec{u}_{\text{look}} \times 1.5 - \vec{v}\right) \times 0.5$$
When flying above
Max Elytra Fly Speed introduces a Two-Tier Propulsion Engine:
-
Tier 1 — Snappy Launch Boost (
$v < 30\text{ BPS}$ ): When launching from a standstill or slow glide, the rocket delivers instant, snappy vanilla acceleration ($50%$ convergence per tick) to quickly reach cruising velocity. -
Tier 2 — High-Speed Vector Convergence (
$v \ge 30\text{ BPS}$ ): Above$30\text{ BPS}$ , the rocket transitions to proportional vector difference convergence, pulling the flight vector smoothly towards the camera look angle scaled by the configured maximum speed ceiling. - Continuous Re-Orientation: As the player turns their camera, the high-speed convergence factor continuously aligns their momentum with the new look direction without jarring angular snapping.
When the current velocity magnitude $v_{\text{current}} = |\vec{v}{\text{old}}|$ is below the initial boost threshold ($v{\text{initial_ticks}} = \frac{\text{initialBoostSpeedBps}}{20.0}$):
When
where
The final target movement is combined and clamped to ensure it never exceeds the configured ceiling:
[ PLAYER USES FIREWORK ROCKET ]
|
v
Is Current Velocity < 30 BPS?
/ \
(YES) / \ (NO)
v v
[ TIER 1: SNAPPY BOOST ] [ TIER 2: HIGH-SPEED CONVERGENCE ]
• 50% convergence • 15% proportional convergence
• Quick launch to 30 BPS • Smooth pull toward look vector * maxSpeed
\ /
v v
[ VECTOR SUM & SPEED CLAMP ]
• Add boost to deltaMovement
• Clamp magnitude <= maxSpeedBps / 20.0
Assuming starting speed of
| Max Speed Setting | Acceleration Setting ( |
Ticks to Reach 90% Max Speed | Seconds to Reach 90% Max Speed | Blocks Traveled During Boost |
|---|---|---|---|---|
| 50 BPS |
|
|||
| 100 BPS |
|
|||
| 100 BPS |
|
|||
| 200 BPS |
|
|||
| 200 BPS |
|
|||
| 500 BPS |
|
package net.instantgratification.maxelytraflyspeed.util;
import net.minecraft.world.phys.Vec3;
public final class RocketBoostHelper {
public static Vec3 calculateBoostMovement(
Vec3 oldMovement,
Vec3 lookAngle,
double initialBoostSpeedTicks,
double maxSpeedTicks,
double highAccFactor
) {
if (oldMovement == null) oldMovement = Vec3.ZERO;
if (lookAngle == null) lookAngle = Vec3.ZERO;
double currentSpeed = oldMovement.length();
Vec3 targetBoost;
if (currentSpeed < initialBoostSpeedTicks) {
targetBoost = lookAngle.scale(0.1).add(
lookAngle.scale(initialBoostSpeedTicks).subtract(oldMovement).scale(0.5)
);
} else {
Vec3 targetVelocity = lookAngle.scale(maxSpeedTicks);
targetBoost = lookAngle.scale(0.1).add(
targetVelocity.subtract(oldMovement).scale(highAccFactor)
);
}
Vec3 targetMovement = oldMovement.add(targetBoost);
double targetSpeed = targetMovement.length();
if (targetSpeed > maxSpeedTicks && targetSpeed > 0.0) {
targetMovement = targetMovement.scale(maxSpeedTicks / targetSpeed);
}
return targetMovement;
}
}-
Mixin Target:
FireworkRocketEntity.class -
Injection (
@Redirect): Redirectsentity.setDeltaMovement()insidetick()to applyRocketBoostHelper.calculateBoostMovement().
📌 Repository Source Disclaimer: The documentation in this Wiki reflects the current source code state in the repository, which may include recent unreleased commits or developmental features ahead of public release builds on CurseForge and Modrinth.
Max Elytra Fly Speed is developed and maintained by Dasik (Rifaditya) under the GNU General Public License v3.0 (GPLv3).
- 🇺🇸 English | 🇨🇳 简体中文 | 🇭🇰 繁體中文
- 🇷🇺 Русский | 🇪🇸 Español | 🇩🇪 Deutsch
- 🇫🇷 Français | 🇧🇷 Português | 🇯🇵 日本語
- 🇮🇩 Bahasa Indonesia | 🇰🇷 한국어
🇺🇸 English
- 📖 26.2 Overview
- 🌀 Kinetic Physics & Drag
- 🚀 Rocket Propulsion & Acceleration
- ⚙️ GameRules & Configuration
- 🧩 Architecture & Mixins