Custom Fish Species

The fish the journal tracks are data, not code. A data pack can retune the built-in species, add new ones or file them under a different tab, and the changes apply on /reload.

Where species live

data//ddv_fishing/species/.json

The file's location is the species' id: data/mypack/ddv_fishing/species/glowfin.json is the species mypack:glowfin. The mod's own 11 ship under data/ddv_fishing/ddv_fishing/species/.

Format

json
{
  "item": "ddv_fishing:catfish",
  "biome": "swamp",
  "min_size": 30.0,
  "max_size": 110.0,
  "counts_toward_completion": true
}
Field Required Meaning
item yes The item that counts as this species when caught. Can't be air.
biome yes The journal tab it's filed under: ocean, swamp, jungle, other (shown as General) or legendary.
min_size yes Smallest size in cm. Must be above 0.
max_size yes Largest size in cm. Must be at least min_size.
counts_toward_completion no, default false Whether it's part of the journal completion count.

A file that fails to parse (a wrong field, an unknown item, bad sizes) is logged and skipped. The rest still load.

biome

biome only decides which tab the species is listed under and which biome advancement it counts toward. It doesn't decide where the fish can be caught; the loot tables do that. The built-ins use a biome tab only for fish that appear exclusively in that biome's tables, and other for the rest. Keep yours consistent with the tables you put the item in.

counts_toward_completion

The 10 starting species have it set to true. The Starfin Leviathan doesn't, because it can only be caught after 100%.

It defaults to false on purpose. Adding a counted species to a live server changes the denominator for everyone:

  • Players who already finished the journal lose Legendary ripples until they catch the new species, since the Legendary check is made live.
  • Milestone rewards already given are kept, and nobody gets a milestone twice.
  • The 25/50/75% thresholds shift to new catch counts.

Leave it false for extra collectibles. Set it true only when you mean to raise the bar.

Built-in species

Id Item Tab Size (cm) Counts
ddv_fishing:cod minecraft:cod General 25–80 yes
ddv_fishing:salmon minecraft:salmon General 30–90 yes
ddv_fishing:tropical_fish minecraft:tropical_fish General 5–15 yes
ddv_fishing:pufferfish minecraft:pufferfish General 8–25 yes
ddv_fishing:ocean_pearl ddv_fishing:ocean_pearl Ocean 1–6 yes
ddv_fishing:large_fish ddv_fishing:large_fish Ocean 60–150 yes
ddv_fishing:algae ddv_fishing:algae Swamp 10–40 yes
ddv_fishing:catfish ddv_fishing:catfish Swamp 30–110 yes
ddv_fishing:exotic_fish ddv_fishing:exotic_fish Jungle 8–20 yes
ddv_fishing:river_piranha ddv_fishing:river_piranha Jungle 15–35 yes
ddv_fishing:starfin_leviathan ddv_fishing:starfin_leviathan Legendary 100–220 no

Retuning a built-in

Put a file at the same path in your data pack, for example data/ddv_fishing/ddv_fishing/species/cod.json, and it replaces the built-in:

json
{
  "item": "minecraft:cod",
  "biome": "other",
  "min_size": 40.0,
  "max_size": 120.0,
  "counts_toward_completion": true
}

Never change a species' id (its file path) once players have caught it. The journal is saved by id, so a renamed species starts from an empty row.

Adding a new species

  1. Add the species file under your own namespace, for example data/mypack/ddv_fishing/species/glowfin.json.
  2. Put its item in one or more loot tables, or it can never be caught.
  3. Run /reload. Online players' journals refresh straight away.

New species are listed after the built-ins, sorted by id.

Rules

  • One item, one species. If two species use the same item, catches of that item count as the one listed first in the journal, and a warning is logged. A built-in always wins over an addon.
  • Removed species keep their rows. Players' progress on a species whose data pack is removed is kept in their save and comes back with the species.
  • Data packs win over code. A species file overrides an addon mod's species with the same id. See Developer API.