Fast Happy Ghasts

Every happy ghast flies at least twice as fast as vanilla, and the harness colour is a throttle. A 26.2 data pack, and the most interesting of these packs to read: its throttle is a data file rather than code, and it does almost nothing on a tick loop.

📌 Where to get it

Source and releases are on GitHub (GPL‑3.0); issues go to the tracker. It is also published on Modrinth as Elkonia: Fast Happy Ghasts — latest 26.2.2.0.2, 10 KB.

The speed model

Every layer is an add_multiplied_base attribute modifier on both minecraft:flying_speed and minecraft:movement_speed. That choice matters: because they are add_multiplied_base, the layers sum against the base rather than compounding with each other, so the result stays predictable however many are active at once.

speed = 0.05 × (1 + boost + throttle + sprint + burst + riders + tow)
LayerTriggerValue
boostalways, permanent+1.0
throttleharness colour−0.4 … +2.0
sprintSpeed I / Speed II+ on the ghast+0.5 / +1.0
burstsnowball, 60 s each+1.0
riders2 / 3 / 4 passengers−0.1 / −0.2 / −0.3
towleashing anything−0.2
💡 The floor is an invariant, not a hope

The worst legal combination — black harness, four riders, towing a boat — still comes to 1.0 − 0.4 − 0.3 − 0.2 = +0.1, i.e. 0.055 against vanilla's 0.05. So a loaded ghast is slower than an empty one and never slower than vanilla. The ceiling is a red harness with Swiftness II and a fresh snowball, flown solo: +5.0, or 6×.

Designing the penalty layers so that their worst case still clears the vanilla baseline is what stops "cargo slows you down" from turning into "the pack made my ghast worse than not installing it".

Throttle tiers

TierHarness coloursThrottleTotal, unladen
Racered, orange+2.04×
Fastyellow, pink, magenta+1.03×
Cruiselime, green, purple+0.52.5×
Stockwhite, brown, light blue, cyan0.02×
Lowblue, light gray−0.21.8×
Brakeblack, gray−0.41.6×

Three techniques worth reading the source for

The throttle is data, not code

item_modifier/throttle.json writes a minecraft:attribute_modifiers component onto the harness item itself. The game then applies it while the harness is worn and removes it the moment the stack leaves the slot — so recolouring or shearing takes effect instantly, and the throttle keeps working even with the pack's own loop disabled.

The constraint behind the design is one worth knowing generally: a data pack cannot change an item's default components. So the stack is stamped at the moment it is equipped instead. See data components and item modifiers.

Nothing polls every tick

Adoption, the throttle stamp and the snowball burst all hang off vanilla advancement triggers — player_interacted_with_entity, started_riding, player_sheared_equipment. A ghast only enters the 20 tick loop when someone is actually using it, and leaves once it has no passengers and no burst remaining. A parked ghast costs zero commands per second. That is the difference between a pack that scales on a busy server and one that does not — see ticking & performance.

Four states have no event, and that is the only reason a loop exists

Checked against all 58 triggers in 26.2, four things simply cannot be observed by an advancement:

UnobservableWhy
A potion landing on a ghasteffects_changed reports the player's effects and has no mob equivalent.
Dismountingstarted_riding has no counterpart trigger.
Leashing / unleashingNo trigger exists for either.
A timer expiringNothing fires when a duration runs out.

Those four are polled, for in-play ghasts only, and a 600 tick sweep exists solely because no trigger fires when a mob spawns. This is a good worked example of a general rule: reach for a loop only where the event you need does not exist, and be able to say which event that is.

Compatibility

Minecraft26.2
LoaderData pack — no mod loader
LicenceGPL-3.0
CoexistenceChanges mob attributes only — no worldgen, so it is safe alongside Elkonian Wilderness, Deep Coral Ocean and Phantom Keep.
Existing worldsYes — it adds no terrain, so it can be added to a save at any time.

Because it works by attribute modifiers rather than by replacing the entity, it does not conflict with packs that retexture or rename happy ghasts, but it will stack unpredictably with another pack that also modifies flying_speed.

Sources