
Modrinth · Minecraft mod
Ratatouille
Library for doctor4t's mods and supporter cosmetics
Quick answer
Which Ratatouille release should I use?
Ratatouille 1.4.3-1.21.1 targets 1.21.1 with Fabric, Quilt. Installation on the client is optional. Installation on the dedicated server is optional. All 1 required mods have matching files.
Where it goes
Is Ratatouille required on the client, server, or both?
Installation on the client is optional. Installation on the dedicated server is optional.
The source marks this as usable on both the client and server.
What else does Ratatouille 1.4.3-1.21.1 need?
1.4.3-1.21.1. Change the file and its required mods may change too.
Install Fabric API first. We found matching files for this game-version and loader setup.
We only count dependency files that match this setup. A file for another loader does not fill the gap.
Before you install it
Add Ratatouille without breaking your instance.
Built for Ratatouille 1.4.3-1.21.1. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use 1.4.3-1.21.1. It targets 1.21.1 with Fabric, Quilt; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
Install Fabric API first. We found matching files for this game-version and loader setup.
- 03
Put it on the correct side
Installation on the client is optional. Installation on the dedicated server is optional.
- 04
Pick the file you checked
Use the “Get this file” button beside 1.4.3-1.21.1. It opens that exact file at the source.
About this project
What does Ratatouille add?
Features
Library
- Rendering utils derived from Lodestone (by Sammy; and Lodestar, removed with 1.21.1)
- Cosmetics customization util: Made for my supporter cosmetics but can also be used out of the box for more general cosmetic mods who need simple customization
- Item custom hit sound and particle utils
- First person feature rendering util: Allows adding features that render on the player's hand in first person by implementing the
RendersArmInFirstPersoninterface in your feature renderer. - Custom model armor util: Allows adding armor with custom models with a single method call (and custom model), bypassing the requirements of making a model layer, feature renderer, mixins to inject said feature renderer into player and armor stand rendering, coding display conditions, etc... as well as automatically display said custom armor on a player's hands in first person. A usage guide can be found further down.
Additional Goodies
- RAT Plushies (Rat Maid, Folly and Mauve)
- Can be honked
- Noteblocks can be placed on top to play the plush's honk sound as the instrument
- Mobs can be given items and armor by interacting with them while in creative and sneaking with an item in hand. Hitting them in creative while sneaking with an empty hand will make them drop all their equipped items.
Supporter Cosmetics
- For Ko-Fi or YouTube members
- Icon next to your name as well as colored name
- Head plushies: Sneak-use any plush item while not aiming at a block to open the cosmetics screen
Gallery
Expand gallery


Documentation
Expand documentation
Setup (build.gradle)
Expand Gradle details
repositories {
maven {
name = 'Ladysnake Mods'
url = 'https://maven.ladysnake.org/releases'
}
dependencies {
modImplementation "dev.doctor4t:ratatouille:${project.ratatouille_version}"
}
Custom model armor util
Expand Custom model armor util details
This util allows you to easily register new armor sets that use a custom model with a single method call (and that custom model as the game does need to know what you wish to render).
Step 1: Defining the model
Before we can add our custom armor, we need a model that respects a few rules. You can find an armor template model (Blockbench model file) and texture in the RESOURCES folder of the repository. While you can edit this model and texture freely in order to shape up the armor of your dreams, please note that the existing groups are very important and while you can add new sub-groups to them, you cannot and should not delete any existing group as they allow the library to know what should be displayed when a player (or armor stand or mob) dons armor pieces:
helmetdisplays when the helmet item is equippedbody_chestplate,right_arm_chestplateandleft_arm_chestplatedisplay when the chestplate item is equippedbody_leggings,right_leg_leggingsandleft_leg_leggingsdisplay when the leggings item is equippedright_leg_bootandleft_leg_bootdisplay when the boots item is equipped
Once you have finalized your model, you can export it with Blockbench: File -> Export -> Export Java Entity. Open the generated Java class and copy the lines between ModelPartData modelPartData = modelData.getRoot(); and the line right before the return (included) in getTexturedModelData(). Ratatouille adds a new model class type that simplifies armor model definition called CustomArmorModelDefinition; extend that class and implement the addModelParts method by pasting the snippet you copied from the generated model class. Then implement getTexture(); the simplest way to do so is to have a static Identifier for your armor texture in your Model Definition class and return that, but if you wish to do a special logic that varies the returned texture you can naturally do so as well.
Step 2: Registering the custom armor with Ratatouille
The second - and last - step is to register your custom armor rendering in your client initialization. Call CustomModelArmorUtil.registerCustomArmor and give it the required parameters:
Identifier id: The id of the custom armor. This is used in order to automatically generate and register the model layer of your armor, it should therefore be unique.ArmorDisplayConditions displayConditions: The display conditions that need to be met for your armor parts to render. If you want a simple armor that displays its parts for each item you equip, theItemSetDisplayConditionsallows you to define the helmet, chestplate, leggings and boots items and will automatically check which armor items are equipped and need to be displayed, as well as prevent the rendering of the vanilla armor model with a missing texture. If you wish to have a custom logic for displaying different pieces that is not just checking whether the item is being worn, you can implement theArmorDisplayConditionsand its fourshouldDisplaymethods.CustomArmorModelDefinition armorModelDefinition: The model definition we created in Step 1, simply create a new instance of it.int textureWidth, int textureHeight: The armor's texture width and height.
Registering your armor through this method call will take care of everything for you, like creating the textured model data, model layer and appending the feature to the player / armor stand / mob renderers. If you need to access the model data or model layer of the armor, you can find them in the CustomModelArmorUtil.CUSTOM_ARMOR_MODELS HashMap by using the armor's displayConditions as the key.
Ambience util
Expand Ambience util details
This util allows you to easily register ambient loops as general background audio or block entity dependant audio.Registering background ambience
To register a background ambience, all you need to do is call the AmbienceUtil.registerBackgroundAmbience method in your client initializer class and give it a new BackgroundAmbience object with the required parameters:
SoundEvent soundEvent: The ambient loop sound to play.SoundCategory soundCategory: The audio category to play the sound in.PlayPredicate predicate: The predicate determining whether the sound is allowed to play or not. Takes aClientPlayerEntityand must return a boolean.int fadeIn: The fade-in time of the ambient loop when it starts playing (in ticks).int fadeOut: The fade-out time of the ambient loop when it stops playing (in ticks).
Registering Block entity ambience
To register a block entity ambience, all you need to do is call the AmbienceUtil.registerBlockEntityAmbience method in your client initializer class and give it the BlockEntityType<? extends BlockEntity> that should play said ambience and a new BlockEntityAmbience object with the required parameters:
SoundEvent soundEvent: The ambient loop sound to play.SoundCategory soundCategory: The audio category to play the sound in.PlayPredicate predicate: The predicate determining whether the sound is allowed to play or not. Takes aBlockEntityand must return a boolean.int fadeIn: The fade-in time of the ambient loop when it starts playing (in ticks).int fadeOut: The fade-out time of the ambient loop when it stops playing (in ticks).
Project description from Modrinth.
Pick your setup
Ratatouille by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
1.21.7
2 loader builds1.21.1
2 loader builds1.20.1
2 loader buildsCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
Ratatouille versions and loaders
1.4.3-1.21.1
ratatouille-1.4.3-1.21.1.jar
18 Dec 2025
1.4.2-1.21.1
ratatouille-1.4.2-1.21.1.jar
18 Dec 2025
1.4.1-1.21.1
ratatouille-1.4.1-1.21.1.jar
20 Nov 2025
1.4-1.21.1
ratatouille-1.4-1.21.1.jar
17 Nov 2025
1.3-1.21.1
ratatouille-1.3-1.21.1.jar
10 Aug 2025
1.2.5-1.21.1
ratatouille-1.2.5-1.21.1.jar
9 Aug 2025
1.2.4-1.21.1
ratatouille-1.2.4-1.21.1.jar
6 Aug 2025
1.2.3-1.21.1
ratatouille-1.2.3-1.21.1.jar
6 Aug 2025
1.2.2-1.21.1
ratatouille-1.2.2-1.21.1.jar
19 Jul 2025
1.2.1-1.21.1
ratatouille-1.2.1-1.21.1.jar
17 Jul 2025
1.2.0-1.21.1
ratatouille-1.2.0-1.21.1.jar
17 Jul 2025
1.1.3-1.21.1
ratatouille-1.1.3-1.21.1.jar
14 Jul 2025
Looking for an older file? The official Modrinth project page is in Resources.