Distant Horizons Integration - AntonIT99/Flans-Mod-Ultimate-2.0 GitHub Wiki
Distant Horizons Integration
Distant Horizons draws simplified terrain far beyond the vanilla render distance. Flan's Mod Ultimate works without it, but when it is installed on the client the mod uses it to show and measure what lies out there:
- Far-terrain rangefinding: vehicle rangefinders keep measuring past the loaded chunks, on Distant Horizons' terrain.
- Distant driveables: planes, vehicles and mechas too far away to be drawn as entities are drawn as simplified shapes on the far terrain, including those beyond the server's entity tracking range.
- Distant explosions: large explosions beyond the particle range appear as a flash, a fireball and a rising smoke column.
- Driveables drawn to the chunk edge: driveables stay drawn as entities up to the edge of the vanilla chunks, where their far-terrain shapes take over, instead of disappearing at the vanilla entity distance.
Distant Horizons is optional and client-side for Flan's Mod. Nothing changes for players without it, and servers do not need it installed.
Requirements
- Distant Horizons for your Flan's Mod Ultimate version (Forge 1.20.1 or NeoForge 1.21.1) providing API 5.1 or newer. Every 3.x release does. An older one is detected and logged, and the integration stays off.
- For distant shapes: Distant Horizons rendering enabled, with its Generic Rendering option on (the default). Distant shapes are drawn through Distant Horizons' generic object renderer, the same one that draws its distant clouds and beacon beams.
- For distant driveables and explosions from beyond the tracking range: a server
running Flan's Mod Ultimate with
distantContactsEnabledanddistantExplosionRangeallowing them (both are on by default).
Far-Terrain Rangefinding
The vehicle optics
range readout measures loaded terrain and entities exactly, as before. When that
measurement finds nothing before the first unloaded chunk, the ray carries on over
Distant Horizons' terrain, up to the HUD's HUDMaxRange.
- Such a range is approximate: Distant Horizons stores terrain in columns that grow
coarser with distance, so the reading can be off by a few blocks far away. It is
shown with a leading
~, for example~2310. - The measurement runs on a background thread and takes a moment. With
HUDRequireRangeKey truethe readout shows----until it arrives; with a live readout the previous far reading stays on screen until the new one replaces it. - Entities beyond the loaded chunks are not measured, since the client does not have them. A ray that crosses terrain Distant Horizons has not generated yet finds nothing.
- Nothing is loaded or generated in the vanilla world to make the measurement.
Distant Driveables
A driveable is drawn as a shape built from its damageable part boxes, the same boxes projectile tracing uses. Each part is cut into a few axis-aligned pieces along its length, so a turned fuselage stays slim rather than filling its whole diagonal. Shapes take the average colour of the driveable's skin, including its paintjob, and drop destroyed parts. Turrets of driveables the client tracks are drawn turned; those only the server reports are drawn facing forwards.
Two kinds of driveables are shown this way:
- Driveables the client tracks but no longer draws as entities because of their distance.
- Driveables beyond the entity tracking range, which the client knows nothing about
by itself. A client with the integration enabled asks the server for them; the
server then sends their type, paintjob, position, velocity and orientation every
distantContactUpdateIntervalticks, and the client extrapolates their movement in between. Driveables only exist in loaded chunks, so in practice these are the vehicles of other players and those in force-loaded areas.
Where a shape is drawn depends on its distance:
- Within the vanilla chunks, it is drawn by the mod itself, depth tested against the vanilla terrain like an entity. Distant Horizons draws before the vanilla terrain, which covers anything it drew there.
- Beyond them, it is drawn by Distant Horizons, hidden by its terrain and fogged with it like the terrain itself.
In a FLIR thermal sight, distant driveables are drawn white-hot.
The positions the server sends could be read by a modified client as a radar. Servers
where that matters can turn distantContactsEnabled off or lower distantContactRange.
Distant Explosions
Explosions send their particles to players within 256 blocks, or within their blast
radius when larger. A player with the integration enabled who is farther away, but
within distantExplosionRange, is sent the explosion instead, if its radius is at least
distantExplosionMinRadius. The client shows:
- a short white flash;
- a fireball that cools from yellow to dark red, lasting longer for incendiary explosions;
- a column of smoke puffs that rise, spread and fade, lingering longer after larger explosions. Incendiary explosions leave darker smoke.
At most 24 distant explosions are shown at once; the oldest makes way for a new one.
Driveables Drawn to the Chunk Edge
Driveables use the configured size-based entity render cutoff. Beyond that cutoff, contact shapes are drawn by Flan's Mod inside the vanilla chunks and by Distant Horizons on the far terrain. This preserves coverage when the render multiplier is reduced, provided contact rendering is enabled.
distantHorizonsDriveableRendering is an explicit optional extension: when on, full
entities stay drawn to at least 16 blocks short of the effective chunk render
distance (with a minimum of 64 blocks), even if their configured cutoff is shorter.
It applies only while Distant Horizons is drawing shapes. New configurations default
this option to off, so the render multiplier remains effective. Existing saved
values remain in force. Server tracking and loaded chunks still limit full entities.
The Flan NPC distance controls work normally with Distant Horizons installed, but NPCs currently have no distant-contact proxy rendering.
Settings
Client settings, in the Distant Horizons section of the quick options screen (shown
only while Distant Horizons is installed) and in flansmodultimate-client.toml:
| Setting | Default | Purpose |
|---|---|---|
distantHorizonsIntegration |
true |
Turns the whole integration on or off. |
distantHorizonsRangefinder |
true |
Far-terrain rangefinding. |
distantHorizonsContacts |
true |
Distant driveables. |
distantHorizonsExplosions |
true |
Distant explosions. |
distantHorizonsDriveableRendering |
false |
Explicitly extends the configured cutoff to the chunk edge; existing saved values are preserved. |
Server settings, in the Distant Horizons Settings section of
flansmodultimate-common.toml:
| Setting | Default | Purpose |
|---|---|---|
distantContactsEnabled |
true |
Sends players who ask for them the driveables beyond their tracking range. |
distantContactRange |
3072 |
Farthest such a driveable is sent, in blocks. |
distantContactUpdateInterval |
5 |
Ticks between two updates. |
distantContactMaxCount |
48 |
Most driveables sent to one player; the nearest are kept. |
distantExplosionRange |
4096 |
Farthest a distant explosion is sent, in blocks. 0 disables them. |
distantExplosionMinRadius |
1.5 |
Smallest explosion radius sent, in blocks. |
See Mod Config for the full descriptions.
Notes
- Only clients that ask for distant data receive it, so players without Distant Horizons cost the server nothing. The data is for display only and changes no gameplay.
- Distant Horizons' own settings decide how far its terrain reaches; driveables and explosions beyond it are not drawn.
- Running a development client with Distant Horizons:
gradlew runClient -PwithDistantHorizons.