The file#

The first time the game starts, Enthalpy writes config/enthalpy-fish.json if it is missing. The template holds an empty list and a short explanation, and an example entry that is ignored. Add your fish to the fish list:

{
  "fish": [
    {"id": "glimmer_guppy", "name": "Glimmer Guppy", "shape": "tropical_fish", "colour": "#7FD8FF"}
  ]
}
FieldRequiredWhat it is
idYesThe fish's ID. Lowercase letters, digits and underscores only. The raw fish becomes enthalpy:<id> and the cooked one enthalpy:cooked_<id>. If Enthalpy already has an item of either name, the game stops at start-up with an error that names the file.
nameYesIts English name. The cooked fish is named "Cooked" followed by the same name. A lang file in a resource pack can override both.
shapeNoWhich vanilla fish the item is drawn from: cod (the default), salmon, pufferfish or tropical_fish. The cooked fish looks like cooked salmon for salmon and cooked cod for the other three.
colourYesThe tint, as #RRGGBB (the # is optional). It tints the item, as it does Enthalpy's own bred fish, and the fish carry the same shimmer.

What the mod generates#

For each fish, Enthalpy builds a small built-in pack in memory and puts it at the bottom of the pack order. Because it is at the bottom, any datapack or resource pack of yours can replace any of these files by using the same path. The pack holds:

  • Two items, the raw and the cooked fish. Both are food, and the creative tab and JEI list them with Enthalpy's other bred fish.
  • Tags. The raw fish joins c:foods/raw_fish, the cooked fish joins c:foods/cooked_fish, and both join minecraft:fishes. The first tag is what lets it go into an Ecotone or Spawning Basin, be pressed for fish oil and be loaded as ammo; see Tags.
  • Three cooking recipes from raw to cooked: furnace, smoker and campfire, each with a recipe-book unlock when the player holds the fish. The files are cooking/cooked_<id>_smelting, _smoking and _campfire_cooking under data/enthalpy/recipe.
  • A Triturator recipe at enthalpy:triturator/fish/&lt;id&gt; that grinds the raw fish into Fish Meal. The default is two. Put a recipe at the same path to change the output.
  • Item models at assets/enthalpy/models/item/<id>.json and cooked_<id>.json: the tinted vanilla fish, with the shimmer on the raw one. A resource pack can give the fish its own model at the same path.

Because the raw fish is in c:foods/raw_fish, it also presses into fish oil in the Vortex Separator like any other raw fish. Add it to enthalpy:oily_fish to make it press as much as salmon does.

Not generated: a Mekanism crushing recipe, a cooked-fish effect, a Spawning Basin mutation, a yield, or Howitzer ammo values. Those are all data, below.

Giving it a mutation#

A custom fish does not turn up on its own. Make it with a mutation recipe: a Spawning Basin turns a pair into a new species when a catalyst is present. The file goes in a datapack at data/<your namespace>/recipe/fish_mutation/glimmer_guppy.json:

{
  "type": "enthalpy:fish_mutation",
  "parent": {"item": "minecraft:tropical_fish"},
  "partner": {"item": "minecraft:tropical_fish"},
  "catalyst": {"tag": "c:dusts/glowstone"},
  "result": {"id": "enthalpy:glimmer_guppy", "count": 1},
  "chance": 0.1
}

parent and partner are the pair, in either order; catalyst is the item that sits in the Basin's catalyst slot and is used up when a mutation comes up; chance is the chance each breeding makes the new fish. All three can be items or tags.

The optional tier makes a mutation need a better Spawning Basin. It takes tempered, fortified, luminous or harmonic, and the mutation only rolls in a Basin of that tier or above. Leave it out and any Basin can make the fish.

{
  "type": "enthalpy:fish_mutation",
  "parent": {"item": "enthalpy:glimmer_guppy"},
  "partner": {"item": "minecraft:cod"},
  "catalyst": {"item": "minecraft:emerald"},
  "result": {"id": "enthalpy:diamond_ray", "count": 1},
  "chance": 0.5,
  "tier": "fortified"
}

That one uses the custom fish as a parent for an existing species. Tags and mod conditions work as they do for any recipe; see the mutation format.

Giving it a yield#

A fish with no yield breeds copies of itself, like a vanilla fish. A resource fish instead turns into a resource when an Ecotone breeds it. Make yours one with an entry in the enthalpy:fish_yields data map, in a datapack at data/enthalpy/data_maps/item/fish_yields.json:

{
  "values": {
    "enthalpy:glimmer_guppy": {
      "item": {"id": "minecraft:glowstone_dust", "count": 1},
      "chance": 0.5,
      "fish_chance": 0.1111
    }
  }
}

item is what each yield gives, as an item or a tag (a tag gives the item your preferred mods choose). chance is the chance a breeding gives it. fish_chance is how often a pair breeds another of itself instead; keep it low, as Enthalpy's own fish do, so a pair cannot be copied without limit. Leave it out and the fish never copies itself. Data map entries from different datapacks merge, so you add yours without touching Enthalpy's own.

To make the fish do something as ammo, add an entry to enthalpy:fish_ammo in the same way. The Howitzer ammo format lists the fields.

Checklist#

  1. Add the fish to config/enthalpy-fish.json and restart.
  2. Check the raw and cooked fish in the creative tab, and that they cook.
  3. Add a mutation recipe so the fish can be bred, and a yield if it is a resource fish.
  4. Give a resource pack a name and a model if the tinted vanilla look is not enough.
  5. Copy the config file to the server and every client.