YARRP - Yet Another Runtime Resource Pack
Вам когда-нибудь мешало то, что большая часть настроек блоков, предметов, рецептов и даже зачарований задается в нетипизированных JSON-файлах? Если это ваш случай, и при этом вам необходимо изменять данные динамически или делать некоторые аспекты настраиваемыми, то этот мод может стать идеальным решением. YARRP создает ресурсные сборки (включая как датапаки, так и сборки ресурсов) прямо во время выполнения игры, что избавляет от необходимости заранее подготавливать JSON-файлы для всех возможных вариантов.
Применение
Для подключения YARRP в качестве зависимости добавьте следующий код в ваш файл build.gradle.kts:
репозитории {
// можно использовать любой из вариантов
maven("https://jitpack.io")
maven("https://api.modrinth.com/maven")
}
зависимости {
// замените версию и загрузчик по необходимости, где загрузчик может быть fabric или neoforge
modImplementation("com.github.RubixDev.YARRP:yarrp-mc1.21.1-fabric:v0.2.0") // при использовании jitpack
modImplementation("maven.modrinth:yarrp:0.2.0+1.21.1-fabric") // при использовании modrinth maven
}
Также не забудьте указать YARRP как зависимость в файлах fabric.mod.json и neoforge.mods.toml.
Далее вы можете использовать YARRP путем создания сборки и ее добавления в один из регистрационных методов колбэков. Пример реализации:
объект МоиРесурсыМода {
// вызывайте этот метод в инициализаторе мода
fun инициализация() {
YarrpКолбэки.регистрация(PackPosition.AFTER_VANILLA, ResourceType.SERVER_DATA) {
добавить(СБОРКА)
}
}
@JvmField
val СБОРКА = RuntimeResourcePack(
RuntimeResourcePack.информация(
Identifier.of("ид_мода", "моя_динамическая_сборка"),
Text.of("Название сборки"),
"версия_сборки", // рекомендуется указать версию мода
),
RuntimeResourcePack.метаданные(Text.of("описание сборки")),
)
val МОЁ_ЗАЧАРОВАНИЕ: RegistryKey<Enchantment> = СБОРКА.добавитьЗачарование(
Identifier.of("ид_мода", "моё_зачарование"),
Enchantment.определение(
DummyHolderSet(ItemTags.LEG_ARMOR_ENCHANTABLE),
5,
3,
Enchantment.leveledCost(5, 8),
Enchantment.leveledCost(55, 8),
2,
AttributeModifierSlot.LEGS,
),
)
init {
if (НастройкиГлавногоМода.зачарованиеСокровищ) {
СБОРКА.добавитьТег(EnchantmentTags.TREASURE) { add(МОЁ_ЗАЧАРОВАНИЕ) }
} else {
СБОРКА.добавитьТег(EnchantmentTags.NON_TREASURE) { add(МОЁ_ЗАЧАРОВАНИЕ) }
}
if (НастройкиГлавногоМода.включениеРецепта) {
СБОРКА.добавитьРецептИДостижение(
Identifier.of("ид_мода", "мой_рецепт"),
ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, Items.DIAMOND, 64)
.criterion("tick", TickCriterion.Conditions.createTick())
.pattern("//")
.pattern("//")
.input('/', Items.STICK),
)
}
}
}
Полная документация по API доступна на официальном сайте проекта.