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 c4dc04568..754a3e21e 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 @@ -126,6 +126,7 @@ fun addTags(tagsProvider: TagsProvider) { .add(MItems.TRITANIUM_PANTS, MItems.SIMPLE_TRITANIUM_PANTS) .add(MItems.TRITANIUM_BOOTS, MItems.SIMPLE_TRITANIUM_BOOTS) + tagsProvider.items.Appender(ItemTags.DYEABLE).add(MItems.TRITANIUM_ARMOR) tagsProvider.items.Appender(ItemTags.TRIMMABLE_ARMOR).add(MItems.SIMPLE_TRITANIUM_ARMOR) tagsProvider.items.Appender(ItemTags.FREEZE_IMMUNE_WEARABLES).add(MItems.TRITANIUM_ARMOR) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/SimpleTritaniumArmorItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/SimpleTritaniumArmorItem.kt index 3ed2400e7..b75c4d13a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/SimpleTritaniumArmorItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/SimpleTritaniumArmorItem.kt @@ -1,34 +1,7 @@ package ru.dbotthepony.mc.otm.item.armor -import net.minecraft.resources.ResourceLocation -import net.minecraft.sounds.SoundEvent -import net.minecraft.sounds.SoundEvents -import net.minecraft.world.entity.Entity -import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.item.ArmorItem -import net.minecraft.world.item.ArmorMaterial -import net.minecraft.world.item.ItemStack -import net.minecraft.world.item.crafting.Ingredient -import ru.dbotthepony.mc.otm.OverdriveThatMatters -import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.registry.MArmorMaterials -import ru.dbotthepony.mc.otm.registry.MItemTags class SimpleTritaniumArmorItem(slot: Type) : ArmorItem(MArmorMaterials.SIMPLE_TRITANIUM, slot, Properties().stacksTo(1)) { - override fun getArmorTexture( - stack: ItemStack, - entity: Entity, - slot: EquipmentSlot, - layer: ArmorMaterial.Layer, - innerModel: Boolean - ): ResourceLocation? { - if (!innerModel || slot == EquipmentSlot.FEET) - return when (slot) { - EquipmentSlot.LEGS -> ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/tritanium_simple_layer_2.png") - EquipmentSlot.FEET, EquipmentSlot.CHEST, EquipmentSlot.HEAD -> ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/tritanium_simple_layer_1.png") - else -> throw IllegalArgumentException("Invalid slot $slot") - } - - return null - } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/TritaniumArmorItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/TritaniumArmorItem.kt index 9efa14e31..0ee46f6f8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/TritaniumArmorItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/armor/TritaniumArmorItem.kt @@ -1,14 +1,19 @@ package ru.dbotthepony.mc.otm.item.armor import net.minecraft.client.model.HumanoidModel +import net.minecraft.resources.ResourceLocation import net.minecraft.world.damagesource.DamageTypes +import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.entity.LivingEntity import net.minecraft.world.item.* import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions +import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent import ru.dbotthepony.kommons.math.RGBAColor +import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc import ru.dbotthepony.mc.otm.client.model.TritaniumArmorModel +import ru.dbotthepony.mc.otm.registry.ClientExtensionsListener import ru.dbotthepony.mc.otm.registry.MArmorMaterials import ru.dbotthepony.mc.otm.registry.MItems import java.util.function.Consumer @@ -28,14 +33,26 @@ private object TritaniumArmorRenderProperties : IClientItemExtensions { } } -class TritaniumArmorItem(slot: Type) : ArmorItem(MArmorMaterials.TRITANIUM, slot, Properties().stacksTo(1).rarity(Rarity.RARE)) { - override fun initializeClient(consumer: Consumer) { - super.initializeClient(consumer) - consumer.accept(TritaniumArmorRenderProperties) +class TritaniumArmorItem(slot: Type) : ArmorItem(MArmorMaterials.TRITANIUM, slot, Properties().stacksTo(1).rarity(Rarity.RARE)), + ClientExtensionsListener { + override fun registerClientExtensions(event: RegisterClientExtensionsEvent) { + event.registerItem(TritaniumArmorRenderProperties, this) + } + + override fun getArmorTexture( + stack: ItemStack, + entity: Entity, + slot: EquipmentSlot, + layer: ArmorMaterial.Layer, + innerModel: Boolean + ): ResourceLocation { + return if (layer.dyeable()) TEXTURE_LOCATION_BASE else TEXTURE_LOCATION_OVERLAY } companion object { val TRITANIUM_COLOR = RGBAColor(157, 187, 204).toBGRA() + val TEXTURE_LOCATION_BASE = loc("textures/models/armor/tritanium_armor_base.png") + val TEXTURE_LOCATION_OVERLAY = loc("textures/models/armor/tritanium_armor_overlay.png") fun onHurt(event: LivingIncomingDamageEvent) { if (event.source.typeHolder().`is`(DamageTypes.SWEET_BERRY_BUSH) || event.source.msgId == "sweetBerryBush") { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MArmorMaterials.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MArmorMaterials.kt index dd4459de6..a083de903 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MArmorMaterials.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MArmorMaterials.kt @@ -29,9 +29,9 @@ object MArmorMaterials { SoundEvents.ARMOR_EQUIP_IRON, { Ingredient.of(MItemTags.REINFORCED_TRITANIUM_PLATES) }, listOf( - ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/tritanium_armor_base.png")), - ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/models/armor/tritanium_armor_overlay.png"), "", true), - ), + ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "tritanium"), "", true), + ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "tritanium"), "", false), + ), // ignored 1f, 0.08f ) @@ -48,10 +48,7 @@ object MArmorMaterials { 9, SoundEvents.ARMOR_EQUIP_IRON, { Ingredient.of(MItemTags.TRITANIUM_INGOTS) }, - listOf( - ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "tritanium_simple"), "", true), - ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "tritanium_simple"), "_overlay", false), - ), + listOf(ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "tritanium_simple"))), 0.3f, 0f ) @@ -65,7 +62,7 @@ object MArmorMaterials { 9, SoundEvents.ARMOR_EQUIP_GENERIC, { Ingredient.EMPTY }, - listOf(), // custom model + listOf(ArmorMaterial.Layer(ResourceLocation(OverdriveThatMatters.MOD_ID, "gravitation_stabilizer"), "", false)), // custom model 0f, 0f ) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 6bd13991c..6ee2f74d8 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -1,21 +1,12 @@ package ru.dbotthepony.mc.otm.registry import com.google.common.collect.ImmutableList -import com.google.common.collect.ImmutableSet -import com.google.common.collect.Streams -import net.minecraft.advancements.CriteriaTriggers import net.minecraft.client.renderer.item.ItemProperties import net.minecraft.core.BlockPos -import net.minecraft.core.Registry import net.minecraft.core.cauldron.CauldronInteraction import net.minecraft.core.component.DataComponents import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.core.registries.Registries -import net.minecraft.nbt.CompoundTag import net.minecraft.world.entity.EntityType -import net.minecraft.world.entity.ai.village.poi.PoiType -import net.minecraft.world.entity.ai.village.poi.PoiTypes -import net.minecraft.world.item.BlockItem import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Item import net.minecraft.world.item.ShieldItem @@ -33,7 +24,7 @@ import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent import net.neoforged.neoforge.client.event.RegisterItemDecorationsEvent import net.neoforged.neoforge.client.model.DynamicFluidContainerModel -import net.neoforged.neoforge.registries.NewRegistryEvent +import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import net.neoforged.neoforge.registries.RegisterEvent import ru.dbotthepony.kommons.math.RGBAColor import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -48,34 +39,13 @@ import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.isClient +import ru.dbotthepony.mc.otm.item.armor.TritaniumArmorItem import ru.dbotthepony.mc.otm.item.weapon.EnergySwordItem import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.IBlockItemRegistryAcceptor import ru.dbotthepony.mc.otm.registry.objects.StripedColoredDecorativeBlock import ru.dbotthepony.mc.otm.shapes.BlockShapes -import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger -import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger -import ru.dbotthepony.mc.otm.triggers.AndroidTravelUnderwater -import ru.dbotthepony.mc.otm.triggers.BecomeAndroidDeathTrigger -import ru.dbotthepony.mc.otm.triggers.BecomeAndroidSleepTrigger -import ru.dbotthepony.mc.otm.triggers.BecomeAndroidTrigger -import ru.dbotthepony.mc.otm.triggers.BecomeHumaneTrigger -import ru.dbotthepony.mc.otm.triggers.BlackHoleTrigger -import ru.dbotthepony.mc.otm.triggers.EnderTeleporterFallDeathTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackGainedCraftingTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackGainedEnderAccessTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackGainedSmeltingTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackObtainedTrigger -import ru.dbotthepony.mc.otm.triggers.ExopackSlotsExpandedTrigger -import ru.dbotthepony.mc.otm.triggers.FallDampenersSaveTrigger -import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger -import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger -import ru.dbotthepony.mc.otm.triggers.NanobotsArmorTrigger -import ru.dbotthepony.mc.otm.triggers.ShockwaveDamageMobTrigger -import ru.dbotthepony.mc.otm.triggers.ShockwaveTrigger -import ru.dbotthepony.mc.otm.triggers.TakeItemOutOfReplicatorTrigger object MRegistry : IBlockItemRegistryAcceptor { private val features = RegistryDelegate>("android_features") { sync(true) } @@ -288,6 +258,7 @@ object MRegistry : IBlockItemRegistryAcceptor { bus.addListener(this::registerEvent) if (isClient) bus.addListener(this::registerItemColorHandlers) if (isClient) bus.addListener(this::registerItemDecorators) + bus.addListener(this::registerDefaultComponents) // call static constructors NanobotsArmorFeature.Companion @@ -349,7 +320,7 @@ object MRegistry : IBlockItemRegistryAcceptor { private fun registerItemColorHandlers(event: RegisterColorHandlersEvent.Item) { event.register(DynamicFluidContainerModel.Colors(), MItems.FLUID_CAPSULE) - event.register({ stack, layer -> if (layer == 0) DyedItemColor.getOrDefault(stack, -1) else -1 }, + event.register({ stack, layer -> if (layer == 0) DyedItemColor.getOrDefault(stack, TritaniumArmorItem.TRITANIUM_COLOR) else -1 }, *MItems.TRITANIUM_ARMOR.toTypedArray() ) @@ -364,4 +335,12 @@ object MRegistry : IBlockItemRegistryAcceptor { } } } + + private fun registerDefaultComponents(event: ModifyDefaultComponentsEvent) { + MItems.TRITANIUM_ARMOR.forEach { + event.modify(it) { + it.set(DataComponents.DYED_COLOR, DyedItemColor(TritaniumArmorItem.TRITANIUM_COLOR, false)) + } + } + } }