Multiplayer Servers
Dreamlight Fishing runs on dedicated Fabric servers. The same jar goes on the server and on every client, along with Fabric API and GeckoLib.
What runs where
| Server | Client |
|---|---|
| Ripple spawning and tier rolls | The minigame HUD and input |
| Ring speed (config, rain) | Thunder hit window, sounds |
| Checking every hit and the reeling time | Ring and rod animations |
| Loot, XP, durability, Perfect Catch verdict | The journal screen |
| Journal, milestones, advancements |
The server's config/dreamlight_fishing.json is the one that matters. Clients' copies don't affect
play on a server.
Results are checked on the server
The client never tells the server "I won" and gets believed:
- Each hit is sent with the ring time it was made at. The server rejects hits that claim more time than has actually passed, or that miss the hit window.
- Perfect is the server's verdict, built from the hits it accepted.
- A win that arrives sooner than the reeling phase can possibly be finished, or before the timing phase is complete, is turned into an escape.
- Each minigame pays out once; a repeated result packet gets nothing.
Normal network lag is allowed for, so ordinary players aren't affected.
Per-player data
Each player has their own:
- journal,
- milestone rewards received,
- Seasoned Angler ripple bonus,
- pending Lucky Bait.
All of it is saved with that player's data on the server and survives relogs and restarts. Nothing is shared between players, and the Legendary tier unlocks per player.
Load
Ripples are lightweight entities that aren't saved to disk and expire after 30–60 seconds. The
spawner makes at most one attempt per player per second, each a short search for valid water. On a
busy server, ripple_spawn_chance and search_radius are the two settings that control how much
work that is.
What's not built
There are no commands, permission nodes, leaderboards or economy hooks yet. Every player gets the same features.