Adding a new species

Structure

Let's start off with where to put these files If you haven't read the folder format please do that first.

So inside the [addon-names]'s addon-data folder we'll be making a new folder named "animals".

So your folder structure should look like this now:

[addon_name]/
addon_data/
animals/
data/
data/
[addon_name]/
pack.mcmeta
resources/
assets/
[addon_name]/
pack.mcmeta

If that's done let's move onto the next part.


JSON File

Inside the animals folder create a new JSON file with the name of your desired animal.

[addon_name]/
addon_data/
animals/
[animal_name].json
data/
resources/

Let's start setting up the animal attributes!

Open the [animal_name].json Let's start by giving the animal an identifier!

{
"id": "[addon_name]:[animal_name]"
}

This is how the game will recognize it, it will also be summoned that way!

Let's also pick an animation style. At this point in time only "simple" exists.

{
"animation_style": "simple"
}

Let's start implementing each module individually.


Modules

Sounds Module

The sounds module lets you assign sounds to various animal actions.

FieldRequiredDescription
attackOptionalSound that plays on attack
ambientOptionalSound that plays randomly in ambient state
deathOptionalSound that plays on death
hurtOptionalSound that plays on hurt
{
"sounds": {
"attack": "[addon_name]:[animal_name]_attack",
"ambient": "[addon_name]:[animal_name]_ambient",
"death": "[addon_name]:[animal_name]_death",
"hurt": "[addon_name]:[animal_name]_hurt"
}
}

Genetics

This module has some fields that are mandatory, and some that are optional.

Fields

FieldTypeRequiredDefaultDescription
growthStageScalingfloatRequired-Scale multiplier of the animal during the baby growth stage
growthStageSize[float, float]Required-Baby hitbox size as [width, height]
growthNextStageScalingfloatRequired-Scale multiplier when transitioning to the next growth stage
growthStageMaxGrowthDaysfloatRequired-Max days the baby growth stage lasts
growthProgressCapDaysfloatRequired-Max days before growth progress is capped
supportedGenesstring[]Required-List of gene resource keys supported by this animal
defaultGenesstring[]Optional[]List of gene resource keys the animal spawns with by default
growthProgressCapintOptional72000Override growth progress cap in ticks
eggRenderScaledoubleOptional1.0Scale of the egg when rendered in the world
eggHatchTicksintOptional1200Number of ticks before the egg hatches
"genetics": {
"growthStageScaling": [Float],
"growthStageSize": [[Float], [Float]],
"growthNextStageScaling": [Float],
"growthStageMaxGrowthDays": [Int],
"growthProgressCapDays": [Int],
"supportedGenes": [],
"defaultGenes": [],
"growthProgressCap": [Int],
"eggRenderScale": [Float],
"eggHatchTicks": [Int]
}

Metabolism

This module has some fields that are mandatory, and some that are optional.

Fields

FieldTypeRequiredDefaultDescription
dietstringRequired-Diet type of the animal (e.g. CARNIVORE, HERBIVORE)
maxWaterDaysfloatRequired-Max days the animal can go without water
maxFoodDaysfloatRequired-Max days the animal can go without food
stalkingSpeedMultiplierfloatOptional1.0Speed multiplier when stalking prey
accelerationSpeedMultiplierfloatOptional1.0Speed multiplier when accelerating
breedCooldownintOptional24000Cooldown in ticks between breeding
gestationTicksintOptional6000Gestation period in ticks
maxStaminaintOptional1000Maximum stamina of the animal
canSleepbooleanOptionaltrueWhether the animal can sleep
canBreedbooleanOptionaltrueWhether the animal can breed
hungerEnabledbooleanOptionaltrueWhether the animal has a hunger mechanic
thirstEnabledbooleanOptionaltrueWhether the animal has a thirst mechanic
hasLiveBirthbooleanOptionalfalseWhether the animal gives live birth instead of laying eggs

Diet Types

ValueDescription
CARNIVOREMeat eater
HERBIVOREPlant eater
OMNIVOREEats both
PISCIVOREFish eater
INSECTOVOREInsect eater
OVIVOREEgg eater
NONENo diet
"metabolism": {
"diet": [String],
"maxWaterDays": [Float],
"maxFoodDays": [Float],
"stalkingSpeedMultiplier": [Float],
"breedCooldown": [Int],
"gestationTicks": [Int],
"accelerationSpeedMultiplier": [Float],
"canSleep": [Boolean],
"canBreed": [Boolean],
"hungerEnabled": [Boolean],
"thirstEnabled": [Boolean],
"hasLiveBirth": [Boolean],
"maxStamina": [Int]
}

Misc

This module has some fields that are mandatory, and some that are optional.

Fields

FieldTypeRequiredDefaultDescription
erastringRequired-Era the animal lived in (e.g. JURASSIC, CRETACEOUS)
maxHeadRotation[float, float]Required-Max head X and Y rotation
babyAnimationsbooleanOptionalfalseWhether the animal has baby animations
genderedVariantsbooleanOptionalfalseWhether the animal has gendered variants
mammalbooleanOptionalfalseWhether the animal is a mammal
requiresGlowbooleanOptionalfalseWhether the animal requires glow
leashablebooleanOptionalfalseWhether the animal can be leashed
guidebookPosebooleanOptionalfalseWhether the animal has a guidebook pose
attacksCarbooleanOptionalfalseWhether the animal attacks cars
isNewbooleanOptionalfalseWhether the animal is newly added
disableCorpseDropsbooleanOptionalfalseWhether the animal's corpse drops items
extinctbooleanOptionalfalseWhether the animal is extinct
hasEyeLidbooleanOptionaltrueWhether the animal has eyelids
babyGuidebookbooleanOptionaltrueWhether the animal has a baby guidebook entry
showInGuidebookbooleanOptionalfalseWhether the animal appears in the guidebook
machineScalefloatOptional1.0Scale of the animal in machines
corpseDropTimesintOptional2How many times the corpse can be looted
corpseMeatDropRange[int, int]Optional[1, 4]Min and max meat drops from corpse
corpseBoneDropRange[int, int]Optional[1, 4]Min and max bone drops from corpse
guidebookScaling[float, float]Optional[1.0, 1.0]Baby and adult scale in the guidebook
guidebookOffsetobjectOptional[0,0]Baby and adult position offset in the guidebook
signColorstringOptional-Color override for the paddock sign
versionstringOptional1.0Version the animal was added

Eras

EraDescription
NONENo era assigned
CAMBRIANCambrian period
ORDOVICIANOrdovician period
SILURIANSilurian period
DEVONIANDevonian period
CARBONIFEROUSCarboniferous period
PERMIANPermian period
TRIASSICTriassic period
JURASSICJurassic period
CRETACEOUSCretaceous period
PALEOGENEPaleogene period
NEOGENENeogene period
QUATERNARYQuaternary period

Sign Colors

Color
BLUE
GREEN
PURPLE
RED
WHITE
YELLOW
FACILITY
"misc": {
"era": [String],
"maxHeadRotation": [[Float], [Float]],
"babyAnimations": [Boolean],
"genderedVariants": [Boolean],
"mammal": [Boolean],
"requiresGlow": [Boolean],
"leashable": [Boolean],
"guidebookPose": [Boolean],
"attacksCar": [Boolean],
"isNew": [Boolean],
"disableCorpseDrops": [Boolean],
"extinct": [Boolean],
"hasEyeLid": [Boolean],
"babyGuidebook": [Boolean],
"showInGuidebook": [Boolean],
"machineScale": [Float],
"corpseDropTimes": [Int],
"corpseMeatDropRange": [[Int], [Int]],
"corpseBoneDropRange": [[Int], [Int]],
"guidebookScaling": [[Float], [Float]],
"guidebookOffset": {
"baby": [[Float], [Float]],
"adult": [[Float], [Float]]
},
"signColor": [String],
"version": [String]
}

Social

Fields

FieldTypeRequiredDefaultDescription
huntTargetsstring[]Required[]List of fully qualified class names the animal will hunt
scaredOfstring[]Required[]List of fully qualified class names the animal is scared of
herdTargetsstring[]Required[]List of fully qualified class names the animal will herd with
maxDistanceToLeaderfloatRequired500.0Max distance the animal can be from the pack leader
minDistanceToLeaderfloatRequired100.0Min distance the animal keeps from the pack leader
maxHerdSizeintRequired1Maximum number of animals in a herd
naturalAggressionfloatRequired0.0Natural aggression level, clamped between 0 and 5
herd_with_selfbooleanOptionalfalseWhether the animal will herd with its own kind
usesNestbooleanOptionalfalseWhether the animal uses a nest
"social": {
"huntTargets": [String[]],
"scaredOf": [String[]],
"herdTargets": [String[]],
"maxDistanceToLeader": [Float],
"minDistanceToLeader": [Float],
"maxHerdSize": [Int],
"naturalAggression": [Float],
"herd_with_self": [Boolean],
"usesNest": [Boolean]
}

Items

Fields

FieldTypeRequiredDefaultDescription
eggTypestringRequiredCHICKENThe type of egg the animal lays
spawnEggColors[int, int]Required-Primary and secondary color of the spawn egg
spawnEggColorsMale[int, int]Optional-Primary and secondary color of the male spawn egg
sampleColourstringOptionalREDColor of the sample item
hasCoinbooleanOptionalfalseWhether the animal drops a coin
hasMeatbooleanOptionaltrueWhether the animal drops meat
hasDropsbooleanOptionaltrueWhether the animal has any drops
hasFossilbooleanOptionaltrueWhether the animal has a fossil item
hasPlushiebooleanOptionalfalseWhether the animal has a plushie item
hasEggbooleanOptionaltrueWhether the animal has an egg item
bucketablebooleanOptionalfalseWhether the animal can be bucketed

Sample Colours

ValueDescription
EMPTYEmpty sample
DIRTYDirty sample
REDRed sample
BLUEBlue sample
INSECTInsect sample
PLANTPlant sample

Egg Types

ValueDescription
FROGFrog egg
CHICKENChicken egg
OSTRICHOstrich egg
ALLIGATORAlligator egg
SPIDERSpider egg sac
FISHFish egg
BASILISKBasilisk egg
"items": {
"eggType": [String],
"spawnEggColors": [[Int], [Int]],
"spawnEggColorsMale": [[Int], [Int]],
"sampleColour": [String],
"hasCoin": [Boolean],
"hasMeat": [Boolean],
"hasDrops": [Boolean],
"hasFossil": [Boolean],
"hasPlushie": [Boolean],
"hasEgg": [Boolean],
"bucketable": [Boolean]
}

Base

Fields

FieldTypeRequiredDefaultDescription
animalTypestringRequired-The type of animal (e.g. REPTILE, MAMMAL)
fovintRequired-Field of view of the animal in degrees
maxTurnRatefloatRequired-Maximum turn rate of the animal
turnSmoothRatefloatRequired-How smoothly the animal turns
renderScalefloatRequired-Scale of the animal when rendered
locatorstringRequired-The locator bone used for attachments
sizeDimorphismfloatOptional0Size difference in percent between male and female
adult_onlybooleanOptionalfalseWhether the animal only spawns as an adult
has_gendersbooleanOptionalfalseWhether the animal has genders
entity_propertiesobjectOptional-Controller task configuration for the animal

Animal Types

ValueDescription
MAMMALWarm-blooded vertebrates e.g. wolf, human
AQUATIC_MAMMALWater-dwelling mammals e.g. dolphin, seal
SYNAPSIDMammal-like reptiles e.g. dimetrodon
REPTILEScaled vertebrates e.g. snake, lizard
AQUATIC_REPTILEWater-dwelling reptiles e.g. crocodile, sea turtle
AMPHIBIANCold-blooded vertebrates e.g. frog, salamander
FISHRay-finned fish e.g. cod, trout
CARTILAGINOUS_FISHCartilage-skeleton fish e.g. shark, ray
BIRDAvians e.g. eagle, penguin
ARTHROPODExoskeleton invertebrates e.g. crab, centipede
INSECTSix-legged arthropods e.g. ant, beetle
ARACHNIDEight-legged arthropods e.g. spider, scorpion
CRUSTACEANHard-shelled arthropods e.g. lobster, shrimp
MOLLUSKSoft-bodied invertebrates e.g. snail, octopus
CEPHALOPODHead-footed mollusks e.g. squid, cuttlefish

See Jurassic Saga Task Sheet for all the tasks and information about them.

"base": {
"animalType": [String],
"fov": [Int],
"maxTurnRate": [Float],
"sizeDimorphism": [Float],
"turnSmoothRate": [Float],
"renderScale": [Float],
"locator": [String],
"adult_only": [Boolean],
"has_genders": [Boolean],
"entity_properties": {
"main_controller": [String | Object],
"targeting_controller": [String | Object]
}
}

Attributes

Fields

FieldTypeRequiredDefaultDescription
maxHealthdoubleRequired-Maximum health of the animal
dimensions[float, float]Required-Hitbox size as [width, height]
movementSpeedKmhfloatRequired-Movement speed of the animal in km/h
attackDamagefloatRequired-Base attack damage of the animal
animal_typestringRequiredlandEntity type, one of land, aquatic, avian
eyeHeightfloatOptional0.9Eye height of the animal
categorystringOptionalCREATUREMob category (e.g. CREATURE, MONSTER)
trackingRangeintOptional32Range in blocks at which the animal is tracked
waterEfficiencyfloatOptional-How efficiently the animal moves in water
runningSpeedMultiplierfloatOptional-Speed multiplier when running
flyingSpeedfloatOptional-Flying speed, only used when animal_type is avian
attackSpeedfloatOptional-Attack speed of the animal
attackKnockbackfloatOptional-Knockback applied on attack
followRangefloatOptional32Range at which the animal follows its target

Mob Categories

ValueDescription
MONSTERHostile mobs e.g. zombies, skeletons
CREATUREPassive or neutral mobs e.g. animals
AMBIENTAmbient mobs e.g. bats
AXOLOTLSAxolotl-type aquatic mobs
UNDERGROUND_WATER_CREATUREWater creatures found underground
WATER_CREATURESurface water creatures e.g. squid
WATER_AMBIENTAmbient water mobs e.g. fish
MISCMiscellaneous mobs, no spawn cap
"attributes": {
"maxHealth": [Double],
"dimensions": [[Float], [Float]],
"movementSpeedKmh": [Float],
"attackDamage": [Float],
"animal_type": [String],
"eyeHeight": [Float],
"category": [String],
"trackingRange": [Int],
"waterEfficiency": [Float],
"runningSpeedMultiplier": [Float],
"flyingSpeed": [Float],
"attackSpeed": [Float],
"attackKnockback": [Float],
"followRange": [Float]
}

Client Animator

Fields

FieldTypeRequiredDefaultDescription
neck_piecesstring[]Optional[]List of bone names that make up the neck chain
neck_rotation_divisorfloatOptional1.0Divides the neck rotation amount, higher = less rotation
tail_piecesstring[]Optional[]List of bone names that make up the tail chain
max_tail_anglefloatOptional180.0Maximum angle the tail can swing
tail_buffer_timeintOptional4How many ticks the tail swing is buffered
tail_angle_decrementfloatOptional0.5How fast the tail angle decreases per tick
tail_divisorfloatOptional0.75Divides the tail swing amount, higher = less swing
"client_anim": {
"neck_pieces": [String],
"neck_rotation_divisor": [Float],
"tail_pieces": [String],
"max_tail_angle": [Float],
"tail_buffer_time": [Int],
"tail_angle_decrement": [Float],
"tail_divisor": [Float]
}

And that's it! That should be everything you need to register an animal.

Resources

Now that the animal is registered, lets get into the asset distribution.

Reminder of the folder structure:

[addon_name]/
addon_data/
animals/
[animal_name].json
data/
resources/

Models

Animal Model Files

Let's start by adding the model files, but before we do that we have to find out a few things first.

What version did we use? (You can find this in "misc" under "version" in the JSON file, if it's not there use 1.0)

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/

Let's now add the geo and animal folder, and add our animal data in there.

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]
geo/
animal/
[version]/
[animal_name]/

Drop your geo files in there, with the following format.

Baby -> [animal_name]_baby.geo.json

Adult -> [animal_name]_adult.geo.json

So it'd look like this:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]
geo/
animal/
[version]/
[animal_name]/
[animal_name]_baby.geo.json [*]
[animal_name]_adult.geo.json

That's the animal model added.

Item Model Files

Let's start of figuring out where we will put our files!

Let's start by making a "models" folder, and an item folder in the same directory.

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]
geo/
models/
item/

So for the items it's pretty simple, but first we'll have to figure some things out. All these questions can be answered with the item module in the JSON file:

  1. Do we have a coin enabled? (or is the animal extinct? because extinct animals always have a coin)
  2. Do we have meat enabled?
  3. Do we have drops enabled?
  4. Do we have fossil enabled?
  5. Is the animal bucket-able?

Let's create files based of the questionnaire.

If you've answered yes to 3. you can skip this part of the guide.

...
models/
item/
[animal_name]_coin.json [1.]
[animal_name]_cooked.json [2.]
[animal_name]_raw.json [2.]
[animal_name]_hatch_egg.json
[animal_name]_spawn_egg.json
[animal_name]_fossil_remains.json [4.]
[animal_name]_bucket.json [5.]

For the examples there are two last questions,

  1. What eggType did we set?
    • You can find eggType in the JSON file under the module items.
  2. What kind of coin do we want?
    • There are a few options:
FileTypeUsed When
coin_amphibianAnimal TypeAnimal type is AMPHIBIAN
coin_birdAnimal TypeAnimal type is BIRD
coin_fishAnimal TypeAnimal type is FISH
coin_insectAnimal TypeAnimal type is INSECT
coin_carnivoreDiet TypeDiet is CARNIVORE
coin_herbivoreDiet TypeDiet is HERBIVORE
coin_insectovoreDiet TypeDiet is INSECTOVORE
coin_noneDiet TypeDiet is NONE
coin_omnivoreDiet TypeDiet is OMNIVORE
coin_piscivoreDiet TypeDiet is PISCIVORE

We'll reference the eggType as [egg_type] and the coin as [coin]. Make sure the types are always used in lowercase, so OSTRICH becomes ostrich!

Examples for the [animal_name].json files, reminder that these names aren't representative.

Use the format above for the actual file names.

{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "jurassicsaga:item/natural/entity/default_coins/coin_[coin]",
"layer1": "[addon_name]:item/natural/entity/animal/[version]/extinct/[animal_name]/[animal_name]_coin"
}
}

That should be all the animal item models!

Paddock Sign Model File

Let's add the paddock sign model now,

Let's start by making a "signs" folder inside the models folder, in their lets also add a "paddock" folder.

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]
geo/
models/
item/
signs/
paddock/

In that folder we'll add a new file with our animal name:

[addon_name]/
...
models/
item/
signs/
paddock/
[animal_name].json

Inside that file add the following:

{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "[addon_name]:block/manmade/other/paddock_sign/[animal_name]"
}
}

Animations

Now let's continue with the animation files

Let's add an animations folder above the geo folder, and we'll follow the same structure as before, the animation files should be named appropriately:

Baby -> [animal_name]_baby.animation.json

Adult -> [animal_name].animation.json

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
models/
animations/
animal/
[version]/
[animal_name]/
[animal_name]_baby.animation.json [*]
[animal_name].animation.json
geo/

That's the animations added!

Textures


Animal Textures

Now let's add the animal base textures

Let's start off by creating a new folder named textures:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
models/
geo/
textures/

Add a few more folders like we've done previous, by starting of with a geo folder inside the textures folder and then an animal folder:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
models/
geo/
textures/
geo/
animal/
[version]/
[animal_name]/

Then inside the [animal_name] folder we'll add the textures needed for this animal

Naming scheme:

Adults:

  • Female -> [animal_name]_adult_female.png
  • Male -> [animal_name]_adult_male.png

Baby -> [animal_name]_baby.png

So it'd look like this:

...
animal/
[version]/
[animal_name]/
[animal_name]_adult_female.png
[animal_name]_adult_male.png
[animal_name]_baby.png [*]

If you want to add variants that's done like this:

...
animal/
[version]/
[animal_name]/
variants/
[animal_name]_adult_chaos_effect.png
[animal_name]_adult_female.png
[animal_name]_adult_male.png
[animal_name]_baby.png

Item Textures

Now let's add the item textures

Let's first of all figure out if the animal is extinct or extant, you can find this in "misc" under "extinct"

Since some things like paddock signs use this for locating, this has to be very specific.

[addon_name]/
...
textures/
item/
natural/
entity/
animal/
[version]/
[extinct_or_extant]/
[animal_name]/
geo/

Now that you have that structure implemented let's add the files necessary, but to do this we'll have to figure some things out first.

All these questions can be answered with the item module in the JSON file:

  1. Do we have a coin enabled? (or is the animal extinct? because extinct animals always have a coin)
  2. Do we have meat enabled?
  3. Do we have drops enabled?
  4. Do we have fossil enabled?
  5. Is the animal bucket-able?

If you've answered no to 3, skip the following step.

...
[extinct_or_extant]/
[animal_name]/
[animal_name]_coin.png [1.]
[animal_name]_cooked.png [2.]
[animal_name]_raw.png [2.]
[animal_name]_fossil_remains.png [4.]
[animal_name]_bucket.png [5.]

Paddock Sign Texture

Let's add the paddock sign, this step should be fairly simple.

You'll have to start with the block folder, because the paddock sign is on the block atlas:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
models/
geo/
textures/
block/

Let's now let's add the paddock sign to the designated folder:

...
textures/
block/
manmade/
other/
paddock_sign/
[animal_name].png

As you can see this is very specific again, and this is because the paddock sign renderer references it.

That's all from the texture side!

Sounds

Sounds JSON

Inside the assets folder's [addon_name] we'll add a new file called sounds.json

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
geo/
models/
textures/
sounds.json

The sounds.json file is where you register all the sounds for your animal. Each sound event follows the pattern [animal_name]_[event], and contains a list of sound file references in the format [addon_name]:animal/[animal_name]/[sound_file].

The four sound events you'll need are:

  • [animal_name]_death - played when the animal dies
  • [animal_name]_hurt - played when the animal is hurt, you can add multiple for variety
  • [animal_name]_ambient - played during idle/ambient behavior, you can add as many as you like
  • [animal_name]_attack - played when the animal attacks
{
"[animal_name]_death": {
"sounds": [
"[addon_name]:animal/[animal_name]/[sound_file]"
]
},
"[animal_name]_hurt": {
"sounds": [
"[addon_name]:animal/[animal_name]/[sound_file]",
"[addon_name]:animal/[animal_name]/[sound_file]"
]
},
"[animal_name]_ambient": {
"sounds": [
"[addon_name]:animal/[animal_name]/[sound_file]",
"[addon_name]:animal/[animal_name]/[sound_file]"
]
},
"[animal_name]_attack": {
"sounds": [
"[addon_name]:animal/[animal_name]/[sound_file]",
"[addon_name]:animal/[animal_name]/[sound_file]"
]
}
}

Sound Files

Now let's add the actual sound files, these go inside a sounds folder in your assets:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
geo/
models/
textures/
sounds/
animal/
[animal_name]/
[sound_file].ogg
sounds.json

Repeat this process for every file you've referenced.

Language file

The language file is where you define all the display names for your animal. It goes here:

[addon_name]/
addon_data/
data/
resources/
assets/
[addon_name]/
animations/
geo/
models/
textures/
sounds/
lang/
en_us.json
sounds.json

Inside en_us.json you'll want to add the following entries, replacing the values with your own:

{
"entity.[addon_name].[animal_name]": "Display Name",
"guidebook.[addon_name].[animal_name].description": "Guidebook description",
"guidebook.[addon_name].[animal_name].scientific_name": "Scientific Name",
"guidebook.[addon_name].[animal_name].source": "Region or source",
"item.[addon_name].[animal_name]_coin": "[Animal Name] DNA",
"item.[addon_name].[animal_name]_cooked": "[Animal Name] Cooked Meat",
"item.[addon_name].[animal_name]_fossil_remains": "[Animal Name] Remains",
"item.[addon_name].[animal_name]_hatch_egg": "[Animal Name] Hatched Egg",
"item.[addon_name].[animal_name]_raw": "[Animal Name] Raw Meat",
"item.[addon_name].[animal_name]_spawn_egg": "[Animal Name] Spawn Egg",
"advancements.[addon_name].[animal_name].desc": "Advancement description",
"advancements.[addon_name].[animal_name].title": "Advancement title"
}

That should be everything from the resources!

Data

You are nearly there, it's just a few simple things now!

Let's start with the advancements for the cooking recipes. You can skip this if you don't have meats.

These go here:

[addon_name]/
addon_data/
data/
data/
[addon_name]/
advancement/
recipes/
[animal_name]_cooked_campfire.json
[animal_name]_cooked_smelt.json
[animal_name]_cooked_smoke.json
resources/

You'll need one advancement file per cooking method — campfire, smelting, and smoking:

{
"parent": "minecraft:recipes/root",
"criteria": {
"has_[animal_name]_cooked": {
"conditions": {
"items": [{ "items": "[addon_name]:[animal_name]_cooked" }]
},
"trigger": "minecraft:inventory_changed"
},
"has_[animal_name]_raw": {
"conditions": {
"items": [{ "items": "[addon_name]:[animal_name]_raw" }]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "[addon_name]:[animal_name]_cooked_campfire"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [["has_the_recipe", "has_[animal_name]_raw", "has_[animal_name]_cooked"]],
"rewards": {
"recipes": ["[addon_name]:[animal_name]_cooked_campfire"]
}
}

Now let's add the actual recipes, these go here:

[addon_name]/
data/
data/
[addon_name]/
advancement/
recipes/
[animal_name]_cooked_campfire.json
[animal_name]_cooked_smelt.json
[animal_name]_cooked_smoke.json
recipe/
[animal_name]_cooked_campfire.json
[animal_name]_cooked_smelt.json
[animal_name]_cooked_smoke.json

{
"type": "minecraft:campfire_cooking",
"category": "food",
"cookingtime": 600,
"experience": 0.5,
"ingredient": {
"item": "[addon_name]:[animal_name]_raw"
},
"result": {
"count": 1,
"id": "[addon_name]:[animal_name]_cooked"
}
}

Next we'll register our items into the relevant tags, these go here:

[addon_name]/
data/
data/
[addon_name]/
advancement/
recipe/
jurassicsaga/
tags/
item/
carnivore_edible.json
fertilized_eggs.json
fossil.json
dna.json

{
"replace": false,
"values": [
"[addon_name]:[animal_name]_raw",
"[addon_name]:[animal_name]_cooked"
]
}

That's it, the whole guide!