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
{
"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:
{
"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
- Add the species file under your own namespace, for example
data/mypack/ddv_fishing/species/glowfin.json. - Put its item in one or more loot tables, or it can never be caught.
- 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.