YARRP
Modby RubixDev
Yet Another Runtime Resource Pack
Type
Mod
CurseForge Downloads
21,710
CurseForge ID
1385339
Modrinth Downloads
31,676
Modrinth ID
Z2RtCqwR
Last Updated
Jul 29, 2026
Description
YARRP - Yet Another Runtime Resource Pack
Has it ever bothered you that so much configuration of blocks, items, recipes, and now even enchantments is defined in untyped JSON files? Well then you should probably just use data generation which is much more battle tested and even used by Mojang for the Vanilla data. But, if you also want to be able to adjust the data dynamically or want some things to be configurable, then this might just be the thing for you. YARRP is inspired by ARRP and BRRP but written from the ground up with an easy to use Kotlin API. It allows you to create resource packs (i.e. both data packs and asset packs) at runtime, so you don't need to have JSON files ready for all possible options.
Usage
To add YARRP as a dependency, add the following to your build.gradle.kts:
repositories { // you can use either one maven("https://jitpack.io") maven("https://api.modrinth.com/maven") } dependencies { // replace the versions and loader as needed. the loader is one of `fabric` or `neoforge` modImplementation("com.github.RubixDev.YARRP:yarrp-mc1.21.1-fabric:v0.2.0") // when using jitpack modImplementation("maven.modrinth:yarrp:0.2.0+1.21.1-fabric") // when using modrinth maven }Don't forget to also list YARRP as a dependency in your fabric.mod.json and neoforge.mods.toml files.
You can then use YARRP by creating a pack and adding it to one of the register callbacks. Here's an example:
object MyModResources { // call this in your mod initializer fun register() { YarrpCallbacks.register(PackPosition.AFTER_VANILLA, ResourceType.SERVER_DATA) { add(PACK) } } @JvmField val PACK = RuntimeResourcePack( RuntimeResourcePack.createInfo( Identifier.of("modid", "my_runtime_pack"), Text.of("Pack Title"), "pack version", // should probably be set to the version of your mod ), RuntimeResourcePack.createMetadata(Text.of("pack description")), ) val MY_ENCHANTMENT: RegistryKey<Enchantment> = PACK.addEnchantment( Identifier.of("modid", "my_enchantment"), Enchantment.definition( // this dummy type can be used to create a RegistryEntryList from a given TagKey // but should only be used for adding resources to a runtime pack DummyHolderSet(ItemTags.LEG_ARMOR_ENCHANTABLE), 5, 3, Enchantment.leveledCost(5, 8), Enchantment.leveledCost(55, 8), 2, AttributeModifierSlot.LEGS, ), ) init { if (MyModSettings.myEnchantmentIsTreasure) { PACK.addTag(EnchantmentTags.TREASURE) { add(MY_ENCHANTMENT) } } else { PACK.addTag(EnchantmentTags.NON_TREASURE) { add(MY_ENCHANTMENT) } } if (MyModSettings.enableRecipe) { PACK.addRecipeAndAdvancement( Identifier.of("modid", "my_recipe"), ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, Items.DIAMOND, 64) .criterion("tick", TickCriterion.Conditions.createTick()) .pattern("//") .pattern("//") .input('/', Items.STICK), ) } } }Full API documentation can be found at yarrp.rubixdev.de.
Recommended Gear
AffiliateHardware and extras that pair well with this mod.
As an Amazon Associate I earn from qualifying purchases.
Similar Mods
Bards [More Magic Series]
Defeat your enemies and buffs your allies with the power of music!
Sword Craft Online
It is a mod inspired by the Anime "Sword Art Online", which re-creates some weapons of the Anime.
Integrated Derivative
Smash the stupid out of Integrated Dynamics and its addons
Snow Pig [Fabric]
Ever wanted a pig in snowy biomes? No? Well here you go anyway!
Portable Jukebox
Adds a Portable Jukebox and Note Block.
Peeping Creepers
As if normal creepers weren't scary enough...