diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt index 59a70b3fa..8de978077 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/ItemModels.kt @@ -88,7 +88,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.handheld(MItems.TRITANIUM_TOOLS) provider.generated(MItems.TRITANIUM_ARMOR) - provider.generated(MItems.SIMPLE_TRITANIUM_ARMOR) + provider.armorWithTrims(MItems.SIMPLE_TRITANIUM_ARMOR) provider.generatedTiered(MItems.BATTERIES, "battery_tier") provider.generated(MItems.BATTERY_CREATIVE) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt index 643c6e77b..915de8993 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt @@ -1,12 +1,15 @@ package ru.dbotthepony.mc.otm.datagen.items +import net.minecraft.data.models.ItemModelGenerators import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.ArmorItem import net.minecraft.world.item.Item import net.minecraftforge.client.model.generators.ItemModelProvider +import net.minecraftforge.client.model.generators.ModelBuilder import net.minecraftforge.data.event.GatherDataEvent import org.apache.logging.log4j.LogManager -import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.core.registryName +import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.modLocation import java.util.LinkedList @@ -78,7 +81,39 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event } } + fun armorWithTrims(item: Item, texture: ResourceLocation) = exec { + val mainModel = withExistingParent(item.registryName!!.path, GENERATED).texture("layer0", texture) + + if (item is ArmorItem) { + for (i in 0 until ARMOR_TRIM_MATERIALS.size) { + val material = ARMOR_TRIM_MATERIALS[i] + + val overrideModel = withExistingParent("${item.registryName!!.path}_${material}_trim", GENERATED) + .texture("layer0", texture) +// .texture("layer1", mcLoc("trims/items/${item.type.getName()}_trim_${material}")) + + // спасибо за проверку наличия файлов КОТОРЫЕ ГЕНЕРИРУЮТСЯ В РАНТАЙМЕ И В ДАТАГЕНЕ НЕ СУЩЕСТВУЮТ + val texturesField = ModelBuilder::class.java.getDeclaredField("textures") + texturesField.trySetAccessible() + + // произошёл троллинг + val textures = texturesField.get(overrideModel) as LinkedHashMap + textures["layer1"] = "minecraft:trims/items/${item.type.getName()}_trim_${material}" + + mainModel.override() + .predicate(ItemModelGenerators.TRIM_TYPE_PREDICATE_ID, (i + 1).toFloat() / ARMOR_TRIM_MATERIALS.size.toFloat()) + .model(overrideModel) + .end() + } + } + + } + + fun armorWithTrims(vararg items: Item) = items.forEach { armorWithTrims(it, modLocation("item/${it.registryName!!.path}")) } + fun armorWithTrims(items: Collection) = items.forEach { armorWithTrims(it, modLocation("item/${it.registryName!!.path}")) } + companion object { + val ARMOR_TRIM_MATERIALS = listOf("quartz", "iron", "netherite", "redstone", "copper", "gold", "emerald", "diamond", "lapis", "amethyst") val GENERATED = ResourceLocation("minecraft", "item/generated") val HANDHELD = ResourceLocation("minecraft", "item/handheld") private val LOGGER = LogManager.getLogger() diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index 1563e0e75..a75c50d42 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -105,6 +105,8 @@ fun addTags(tagsProvider: TagsProvider) { .add("leggings", MItems.SIMPLE_TRITANIUM_PANTS) .add("boots", MItems.SIMPLE_TRITANIUM_BOOTS) + tagsProvider.items.minecraft("trimmable_armor").add(MItems.SIMPLE_TRITANIUM_ARMOR) + tagsProvider.items.minecraft("swords").add(MItems.TRITANIUM_SWORD) tagsProvider.items.minecraft("axes").add(MItems.TRITANIUM_AXE) tagsProvider.items.minecraft("pickaxes").add(MItems.TRITANIUM_PICKAXE)