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.