From 69c93d4b1609e7ad28af2f0935d02adebd987214 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sat, 22 Feb 2025 17:13:02 +0700 Subject: [PATCH] Painted tritanium anvil --- color datagen/base_with_mask.js | 4 ++ color datagen/tritanium_anvil.sh | 4 ++ .../mc/otm/datagen/DecorativeData.kt | 34 ++++++++++++--- .../dbotthepony/mc/otm/datagen/MatterData.kt | 6 ++- .../mc/otm/datagen/items/ItemModels.kt | 6 +-- .../mc/otm/datagen/lang/English.kt | 11 ++++- .../datagen/lang/MatteryLanguageProvider.kt | 4 +- .../mc/otm/datagen/lang/Russian.kt | 10 +++-- .../mc/otm/datagen/loot/DecorativeLoot.kt | 3 +- .../otm/datagen/recipes/DecorativesRecipes.kt | 2 +- .../mc/otm/datagen/recipes/PainterRecipes.kt | 5 +++ .../mc/otm/datagen/tags/MineableTags.kt | 2 +- .../dbotthepony/mc/otm/datagen/tags/Tags.kt | 5 ++- .../mc/otm/datagen/tags/TagsProvider.kt | 15 +++++++ .../mc/otm/mixin/MixinAnvilBlock.java | 18 ++++---- .../CondensedCreativeCompat.kt | 3 +- .../mc/otm/registry/game/MBlocks.kt | 40 ++++++++++++------ .../mc/otm/registry/game/MCreativeTabs.kt | 6 +-- .../mc/otm/registry/game/MItems.kt | 24 ++++++++--- .../textures/block/tritanium_anvil/black.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/blue.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/brown.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/cyan.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/gray.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/green.png | Bin 0 -> 754 bytes .../block/tritanium_anvil/light_blue.png | Bin 0 -> 754 bytes .../block/tritanium_anvil/light_gray.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/lime.png | Bin 0 -> 754 bytes .../block/tritanium_anvil/magenta.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/orange.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/pink.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/purple.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/red.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil/white.png | Bin 0 -> 778 bytes .../textures/block/tritanium_anvil/yellow.png | Bin 0 -> 754 bytes .../textures/block/tritanium_anvil_mask.png | Bin 0 -> 1349 bytes .../block/tritanium_anvil_top/black.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/blue.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/brown.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/cyan.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/gray.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/green.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/light_blue.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/light_gray.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/lime.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/magenta.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/orange.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/pink.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/purple.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/red.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top/white.png | Bin 0 -> 708 bytes .../block/tritanium_anvil_top/yellow.png | Bin 0 -> 631 bytes .../block/tritanium_anvil_top_mask.png | Bin 0 -> 1251 bytes 53 files changed, 143 insertions(+), 59 deletions(-) create mode 100644 color datagen/tritanium_anvil.sh create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_mask.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/black.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/brown.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/cyan.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/green.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/light_blue.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/light_gray.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/lime.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/magenta.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/orange.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/pink.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/purple.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/red.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/white.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/yellow.png create mode 100644 src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top_mask.png diff --git a/color datagen/base_with_mask.js b/color datagen/base_with_mask.js index e3be0dc5b..657b550cb 100644 --- a/color datagen/base_with_mask.js +++ b/color datagen/base_with_mask.js @@ -34,6 +34,10 @@ const child_process = require('child_process'); const bSize = (await getSize(fBase))[2] const mSize = (await getSize(fMask))[2] + if (subfolder !== '') { + fs.mkdirSync(`${fullBaseFolder}/${subfolder}`, {recursive: true}) + } + if (bSize != mSize) { process.stderr.write(`${fBase} has size of ${bSize}, ${fMask} has size of ${mSize}!\n`) process.exit(3) diff --git a/color datagen/tritanium_anvil.sh b/color datagen/tritanium_anvil.sh new file mode 100644 index 000000000..7316147d1 --- /dev/null +++ b/color datagen/tritanium_anvil.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +node ./base_with_mask.js block/tritanium_anvil block/tritanium_anvil_mask tritanium_anvil +node ./base_with_mask.js block/tritanium_anvil_top block/tritanium_anvil_top_mask tritanium_anvil_top diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt index f0bee8fc8..886c9ce79 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DecorativeData.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.datagen +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.block.AnvilBlock import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.StairBlock @@ -37,13 +38,32 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr DataGen.decoratives(MRegistry.TRITANIUM_BLOCK) - for (anvil in MBlocks.TRITANIUM_ANVIL) { - blockStateProvider.exec { - blockStateProvider.getVariantBuilder(anvil).forAllStates { - ConfiguredModel.builder() - .modelFile(blockStateProvider.models().getExistingFile(modLocation("block/${anvil.registryName!!.path}"))) - .rotationY(it[AnvilBlock.FACING].yRotationBlockstateNorth()) - .build() + for (color in DyeColor.entries) { + blockModelProvider.exec { + blockModelProvider.withExistingParent("block/tritanium_anvil0_${color.name.lowercase()}", "${DataGen.MOD_ID}:block/tritanium_anvil0") + .texture("3", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) + .texture("particle", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) + } + + for (i in 1 until MBlocks.TRITANIUM_ANVIL_VARIANTS) { + blockModelProvider.exec { + blockModelProvider.withExistingParent("block/tritanium_anvil${i}_${color.name.lowercase()}", "${DataGen.MOD_ID}:block/tritanium_anvil$i") + .texture("2", modLocation("block/tritanium_anvil_top/${color.name.lowercase()}")) + .texture("3", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) + .texture("particle", modLocation("block/tritanium_anvil/${color.name.lowercase()}")) + } + } + } + + for (anvils in MBlocks.TRITANIUM_ANVIL.values) { + for (anvil in anvils) { + blockStateProvider.exec { + blockStateProvider.getVariantBuilder(anvil).forAllStates { + ConfiguredModel.builder() + .modelFile(blockStateProvider.models().getExistingFile(modLocation("block/${anvil.registryName!!.path}"))) + .rotationY(it[AnvilBlock.FACING].yRotationBlockstateNorth()) + .build() + } } } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt index a53bfed95..d288f3e34 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatterData.kt @@ -16,8 +16,10 @@ fun addMatterData(provider: MatterDataProvider) { provider.inherit(Items.CHIPPED_ANVIL, Items.ANVIL, 0.75) provider.inherit(Items.DAMAGED_ANVIL, Items.ANVIL, 0.5) - for (i in 1 until MItems.TRITANIUM_ANVIL.size) { - provider.inherit(MItems.TRITANIUM_ANVIL[i], MItems.TRITANIUM_ANVIL[i - 1], 0.85) + for (anvils in MItems.TRITANIUM_ANVIL.values) { + for (i in 1 until anvils.size) { + provider.inherit(anvils[i], anvils[i - 1], 0.85) + } } provider.inherit(Items.WATER_BUCKET, Items.BUCKET) { 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 1dd0bfcc9..35e0d619b 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 @@ -247,11 +247,7 @@ fun addItemModels(provider: MatteryItemModelProvider) { provider.block(MItems.MATTER_INPUT_HATCH) provider.block(MItems.MATTER_OUTPUT_HATCH) - - - for (item in MItems.TRITANIUM_ANVIL) { - provider.block(item) - } + MItems.TRITANIUM_ANVIL.values.forEach { provider.blocks(it) } for ((color, item) in MItems.CARGO_CRATE_MINECARTS) { provider.generated(item) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 9b210051b..316efeb0e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -683,8 +683,15 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.TRITANIUM_BARS, "Tritanium Bars") add(MBlocks.METAL_RAILING, "Metal Railing") - for (block in MBlocks.TRITANIUM_ANVIL) - add(block, "Tritanium Anvil") + for ((color, blocks) in MBlocks.TRITANIUM_ANVIL.entries) { + if (color == null) { + for (block in blocks) + add(block, "Tritanium Anvil") + } else { + for (block in blocks) + add(block, "${provider.englishColors.mapped[color]} Tritanium Anvil") + } + } } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt index 3bb71b5b4..87faba8da 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt @@ -173,13 +173,13 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { } } - fun add(map: Map, toFormat: String) { + fun add(map: Map, toFormat: String) { for ((color, block) in map) { slave.add(block, toFormat.format(mapped[color]!!)) } } - fun addIntermediate(map: Map, toFormat: String) { + fun addIntermediate(map: Map, toFormat: String) { for ((color, block) in map) { slave.add(block, toFormat.format(if (lowercaseIntermediate) mapped[color]!!.lowercase() else mapped[color]!!)) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 1e2375d4a..4da51e7bd 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -14,12 +14,19 @@ private const val FEELING_SAFE_NOW = "...ощущаете ли вы себя т private fun decoratives(provider: MatteryLanguageProvider) { with (provider.russian) { + for (block in MBlocks.TRITANIUM_ANVIL[null]!!) + add(block, "Тритановая наковальня") + for ((color, name) in provider.russianColors.mapped) { val nameF = name.replace("ый", "ая").replace("ой", "ая").replace("ий", "яя") add(MRegistry.VENT.getBlock(color), "$nameF вентиляция") add(MRegistry.VENT_ALTERNATIVE.getBlock(color), "$nameF альтернативная вентиляция") + for (block in MBlocks.TRITANIUM_ANVIL[color]!!) { + add(block, "$nameF тритановая наковальня") + } + val nameMul = name.replace("ый", "ые").replace("ой", "ые").replace("ий", "ие") add(MRegistry.TRITANIUM_BLOCK.getBlock(color), "$name тритановый блок") add(MRegistry.COMPUTER_TERMINAL.getBlock(color), "$name компьютерный терминал") @@ -678,9 +685,6 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.TRITANIUM_BARS, "Тритановая решётка") add(MBlocks.METAL_RAILING, "Металлические перила") - - for (block in MBlocks.TRITANIUM_ANVIL) - add(block, "Тритановая наковальня") } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt index 936449861..53b969cc1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/DecorativeLoot.kt @@ -58,8 +58,7 @@ fun addDecorativeLoot(lootTables: LootTables) { lootTables.dropsSelf(MBlocks.REINFORCED_REDSTONE_LAMP) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MBlocks.REINFORCED_REDSTONE_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) } - for (block in MBlocks.TRITANIUM_ANVIL) - lootTables.dropsSelf(block) { condition(ExplosionCondition.survivesExplosion()) } + MBlocks.TRITANIUM_ANVIL.values.forEach { it.forEach { lootTables.dropsSelf(it) { condition(ExplosionCondition.survivesExplosion()) } } } for (door in MBlocks.TRITANIUM_TRAPDOOR.values) lootTables.dropsSelf(door) { condition(ExplosionCondition.survivesExplosion()) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt index ebedd418c..9d2799116 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/DecorativesRecipes.kt @@ -419,7 +419,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) .build(consumer, modLocation("decorative/tritanium_bars")) - MatteryRecipe(MItems.TRITANIUM_ANVIL[0], category = RecipeCategory.DECORATIONS) + MatteryRecipe(MItems.TRITANIUM_ANVIL[null]!![0], category = RecipeCategory.DECORATIONS) .row(MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE, MItemTags.TRITANIUM_INGOTS_STORAGE) .rowB(MItemTags.TRITANIUM_INGOTS) .row(MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS, MItemTags.TRITANIUM_INGOTS) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt index 456306ba4..62d0063f1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/recipes/PainterRecipes.kt @@ -19,6 +19,7 @@ import ru.dbotthepony.mc.otm.recipe.PainterArmorDyeRecipe import ru.dbotthepony.mc.otm.recipe.PainterRecipe import ru.dbotthepony.mc.otm.registry.game.MItems import ru.dbotthepony.mc.otm.registry.MRegistry +import ru.dbotthepony.mc.otm.registry.game.MBlocks private val Item.recipeName get() = registryName!!.namespace + "/" + registryName!!.path @@ -356,6 +357,10 @@ fun addPainterRecipes(consumer: RecipeOutput) { generate(consumer, list[null]!!,list) } + for (i in 0 until MBlocks.TRITANIUM_ANVIL_VARIANTS) { + generate(consumer, MItems.TRITANIUM_ANVIL[null]!![i], DyeColor.entries.associateWith { MItems.TRITANIUM_ANVIL[it]!![i] }) + } + generate(consumer, MRegistry.COMPUTER_TERMINAL.item, MRegistry.COMPUTER_TERMINAL.items) generate(consumer, MRegistry.STAR_CHAIR.item, MRegistry.STAR_CHAIR.items) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt index 158121a1e..48cd4aada 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/MineableTags.kt @@ -96,7 +96,7 @@ fun addMineableTags(tagsProvider: TagsProvider) { MBlocks.GRAVITATION_STABILIZER_LENS, ), Tiers.DIAMOND) - tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ANVIL, Tiers.IRON) + tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }, Tiers.IRON) tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ORE, Tiers.IRON) tagsProvider.requiresPickaxe(MBlocks.DEEPSLATE_TRITANIUM_ORE, Tiers.IRON) 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 882206eb9..0d70d1a62 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 @@ -5,6 +5,7 @@ import net.minecraft.tags.ItemTags import net.minecraft.world.effect.MobEffects import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags +import ru.dbotthepony.kommons.collect.flatMap import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.registry.MBlockTags import ru.dbotthepony.mc.otm.registry.game.MBlocks @@ -35,8 +36,8 @@ fun addTags(tagsProvider: TagsProvider) { tagsProvider.items.Appender(MItemTags.MINECART_CARGO_CRATES).add(MItems.CARGO_CRATE_MINECARTS.values) - tagsProvider.blocks.Appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL) - tagsProvider.items.Appender(ItemTags.ANVIL).add(MItems.TRITANIUM_ANVIL) + tagsProvider.blocks.Appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }) + tagsProvider.items.Appender(ItemTags.ANVIL).add(MItems.TRITANIUM_ANVIL.values.stream().flatMap { it.stream() }) tagsProvider.items.Appender(MItemTags.UPGRADES) .add(MItems.MachineUpgrades.Basic.LIST) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt index 69f1b591a..6b5050bc0 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt @@ -115,6 +115,11 @@ class TagsProvider(private val event: GatherDataEvent) { return this } + fun add(values: Iterator): Appender { + values.forEach { add(it) } + return this + } + fun leaf(name: String) = Appender(TagKey.create(tag.registry, ResourceLocation(tag.location.namespace, tag.location.path + "/$name"))) fun add(leaf: String, value: T) = also { leaf(leaf).add(value) } @@ -327,6 +332,16 @@ class TagsProvider(private val event: GatherDataEvent) { return this } + fun requiresPickaxe(blocks: Stream, tier: Tier? = null): TagsProvider { + for (block in blocks) requiresPickaxe(block, tier) + return this + } + + fun requiresPickaxe(blocks: Iterator, tier: Tier? = null): TagsProvider { + for (block in blocks) requiresPickaxe(block, tier) + return this + } + fun requiresPickaxe(vararg blocks: Block, tier: Tier? = null): TagsProvider { for (block in blocks) requiresPickaxe(block, tier) return this diff --git a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinAnvilBlock.java b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinAnvilBlock.java index 24ef7f8a5..4d10a0f31 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinAnvilBlock.java +++ b/src/main/java/ru/dbotthepony/mc/otm/mixin/MixinAnvilBlock.java @@ -17,17 +17,17 @@ public class MixinAnvilBlock { remap = false, cancellable = true) private static void damage(BlockState pState, CallbackInfoReturnable info) { - var list = MBlocks.INSTANCE.getTRITANIUM_ANVIL(); + for (var list : MBlocks.INSTANCE.getTRITANIUM_ANVIL().values()) { + for (int i = 0; i < list.size(); i++) { + if (pState.is(list.get(i))) { + if (i == list.size() - 1) { + info.setReturnValue(null); + } else { + info.setReturnValue(list.get(i + 1).defaultBlockState().setValue(AnvilBlock.FACING, pState.getValue(AnvilBlock.FACING))); + } - for (int i = 0; i < list.size(); i++) { - if (pState.is(list.get(i))) { - if (i == list.size() - 1) { - info.setReturnValue(null); - } else { - info.setReturnValue(list.get(i + 1).defaultBlockState().setValue(AnvilBlock.FACING, pState.getValue(AnvilBlock.FACING))); + return; } - - return; } } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/condensed_creative/CondensedCreativeCompat.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/condensed_creative/CondensedCreativeCompat.kt index b86aa2957..a7950944d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/condensed_creative/CondensedCreativeCompat.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/condensed_creative/CondensedCreativeCompat.kt @@ -66,7 +66,8 @@ class CondensedCreativeCompat : CondensedCreativeInitializer { addByBase(MRegistry.CARGO_CRATES.allItems, MCreativeTabs.DECORATIVE) addByBase(MItems.CARGO_CRATE_MINECARTS, MCreativeTabs.DECORATIVE) - addByFirst(MItems.TRITANIUM_ANVIL, MCreativeTabs.DECORATIVE) + for (anvils in MItems.TRITANIUM_ANVIL.values) + addByFirst(anvils, MCreativeTabs.DECORATIVE) addByBase(MRegistry.COMPUTER_TERMINAL.allItems, MCreativeTabs.DECORATIVE) addByBase(MRegistry.STAR_CHAIR.allItems, MCreativeTabs.DECORATIVE) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt index 5f5493ada..1fd3cd3fd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MBlocks.kt @@ -4,6 +4,7 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import net.minecraft.core.Direction import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.util.valueproviders.UniformInt +import net.minecraft.world.item.DyeColor import net.minecraft.world.level.block.AnvilBlock import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Blocks @@ -94,6 +95,10 @@ import ru.dbotthepony.mc.otm.core.get import ru.dbotthepony.mc.otm.registry.MDeferredRegister import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MRegistry +import java.util.Collections +import java.util.EnumMap +import java.util.HashMap +import java.util.LinkedHashMap import java.util.function.Supplier object MBlocks { @@ -339,24 +344,35 @@ object MBlocks { const val TRITANIUM_ANVIL_VARIANTS = 7 - val TRITANIUM_ANVIL: List + val TRITANIUM_ANVIL: Map> init { - val anvils = ArrayList>() + val map = LinkedHashMap>() - for (i in 0 until TRITANIUM_ANVIL_VARIANTS) { - val props = BlockBehaviour.Properties.of() - .mapColor(MapColor.COLOR_LIGHT_BLUE) - .sound(SoundType.ANVIL) - .destroyTime(2.5f - i * 0.15f) - .explosionResistance(1200f - i * 80f) - .pushReaction(PushReaction.BLOCK) - .requiresCorrectToolForDrops() + for (color in DyeColor.entries.toMutableList().also { it.add(0, null) }) { + val anvils = ArrayList>() - anvils.add(registry.register(MNames.TRITANIUM_ANVIL + i) { AnvilBlock(props) }::get) + for (i in 0 until TRITANIUM_ANVIL_VARIANTS) { + val props = BlockBehaviour.Properties.of() + .mapColor(color?.mapColor ?: MapColor.COLOR_LIGHT_BLUE) + .sound(SoundType.ANVIL) + .destroyTime(2.5f - i * 0.15f) + .explosionResistance(1200f - i * 80f) + .pushReaction(PushReaction.BLOCK) + .requiresCorrectToolForDrops() + + var name = MNames.TRITANIUM_ANVIL + i + + if (color != null) + name += "_${color.name.lowercase()}" + + anvils.add(registry.register(name) { AnvilBlock(props) }) + } + + map[color] = SupplierList(anvils) } - TRITANIUM_ANVIL = SupplierList(anvils) + TRITANIUM_ANVIL = Collections.unmodifiableMap(map) } val TRITANIUM_DOOR = registry.coloredWithBase(MNames.TRITANIUM_DOOR, ::TritaniumDoorBlock) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt index 1a90da578..5e979ea79 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MCreativeTabs.kt @@ -213,7 +213,7 @@ private fun addMainCreativeTabItems(consumer: CreativeModeTab.Output) { base(MItems.TRITANIUM_DOOR) base(MItems.TRITANIUM_TRAPDOOR) accept(MRegistry.TRITANIUM_PRESSURE_PLATE.item) - accept(MItems.TRITANIUM_ANVIL[0]) + accept(MItems.TRITANIUM_ANVIL[null]!![0]) accept(MItems.GRILL.values) @@ -323,9 +323,7 @@ private fun addDecorativeTabItems(consumer: CreativeModeTab.Output) { colored(MItems.TRITANIUM_TRAPDOOR) accept(MRegistry.TRITANIUM_PRESSURE_PLATE.items.values) - for (i in 0 until MItems.TRITANIUM_ANVIL.size) - accept(MItems.TRITANIUM_ANVIL[i]) - + accept(MItems.TRITANIUM_ANVIL[null]!!) colored(MRegistry.CARGO_CRATES.items) colored(MItems.CARGO_CRATE_MINECARTS) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt index c599c02e5..4719fdd34 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MItems.kt @@ -78,6 +78,8 @@ import ru.dbotthepony.mc.otm.registry.MDeferredRegister import ru.dbotthepony.mc.otm.registry.MItemTags import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MRegistry +import java.util.Collections +import java.util.LinkedHashMap import java.util.function.Supplier object MItems { @@ -170,17 +172,27 @@ object MItems { val ENERGY_OUTPUT_INTERFACE by registry.register(MNames.ENERGY_OUTPUT_INTERFACE) { BlockItem(MBlocks.ENERGY_OUTPUT_INTERFACE, DEFAULT_PROPERTIES) } val MULTIBLOCK_TEST by registry.register("multiblock_test") { BlockItem(MBlocks.MULTIBLOCK_TEST, Properties().stacksTo(64)) } - - val TRITANIUM_ANVIL: List + val TRITANIUM_ANVIL: Map> init { - val props = ArrayList>() + val map = LinkedHashMap>() - for (i in MBlocks.TRITANIUM_ANVIL.indices) { - props.add(registry.register(MNames.TRITANIUM_ANVIL + i) { BlockItem(MBlocks.TRITANIUM_ANVIL[i], DEFAULT_PROPERTIES) }::get) + for ((color, anvils) in MBlocks.TRITANIUM_ANVIL) { + val props = ArrayList>() + + for (i in anvils.indices) { + var name = MNames.TRITANIUM_ANVIL + i + + if (color != null) + name += "_${color.name.lowercase()}" + + props.add(registry.register(name) { BlockItem(anvils[i], DEFAULT_PROPERTIES) }) + } + + map[color] = SupplierList(props) } - TRITANIUM_ANVIL = SupplierList(props) + TRITANIUM_ANVIL = Collections.unmodifiableMap(map) } object MachineUpgrades { diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/black.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dd1f1da1371403a13663f2ebce625bea93fa85 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ~OM8rfzCB(!e#l@vWM8t)KMdjq=goH%2wYC5M|6j3)>k&``V@Z%-FoVOh8)+a; zlDE4HU;bVLe;|jmz$3Dlfr0N32s4Umcr^e8*-JcqUD;nUiE*(hKJDxTI-4=a)5S4F z&^oy-pyEka^sz32a z%vW`E-FTAu&2Ed?s-3|y+vSb#|6yKpaF*_`FN_hJ?Ym#eK%Virbd~!@ujJ9*?pJu z>aOtQd(!c9$;~#+RUr=3mHoHKnMr-{%(k=)m=e{}C*FR_Vf&L%r%MKhf@Lmy95r0c zq@bB=`E%yfNYmNu4mXb%oY;JS)syoqhjb<1Oj!JAb2-x;$vVE(pEGl9?6nwHC^xNO zSn%TZ(YbpVj)~nf=GeOY=?k$}c2|VnJYKPbZ9ijl&};1vJz7l~u`B`0>sN&pxCR(& z&dU6?fsOr8#MBjz5;0B5syb1ocNj!E#M)O2UUPKK|IHr}bmK{;?%l1|BB$F3bsWrE zX`GQ0;k{G5bU)`e_E*hozP*2QbP6ykR7+eVN>UO_QmvAUQh^kMk%5tku7R1Zk!6U1 zsgmdKI;Vst0B=17DF6Tf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..fad142c26f99b1f22030129eb5e0a4a7b8af694d GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ}zl~R>ea#Ymv)znLrlrt0*6Xk$FK3ZE_`~Uy{43X}VKn;u~L4Lsu4$p3+fjCLt z?k;@!dky@79L@rd$YKTtzC$3)D5~Mr02E{|@$_|Nf5{}q#ilT+Z)YG-PmZUHV~ECi z-~NqW%#H$W&qcR&m@V@RxM-xgc-hB=eiy7PD15gJrhM8{hxKyyoC6-CtiABR1bn3Yff@so3W2cLmoHHom}TyCyI* z1-GwQF!{-*9p}&Ai+ji{YF?lckgc2l>+d~t)07LoN5cDVwm3|UGH>HcQ{}SzF6Y%< z;mP-;9HuM#Z;>;T`rw&uX&Epjs-;i7{glJ@C!tQ43=Rd$T=qC>xSB~p zGuQIx%&C#4v)LVP9xpht`TnXW=UEQvO1_z}_|fKaraO{#e5*fa=Gxe6F|1H-TEVd3 z#qFbW_b?n2yJyU?b@|g5Vz2D32)%i{Vh7uP#^|8e+8=tfnlxfr0+!dW3M+68FxH%v z`D+6k`=N-bD;y5@j8glbfGSez?YtYDvy$aNz0k@$fGdH!kBr&%Dq{md(z)07~ fD8vwGwwaZ&5yX=7B{u(odKf%i{an^LB{Ts5h~Nj) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..20cb5f0a6c51425cd597f3a2b62b9fec663b11c2 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0x^rZX^rGt!RLQQ3T^rhT&B<1AfoVCQYwYC5M|3C4<>`0&n#*!evUYzWlug{y+|Afk$L90|Vb75M~tB@M-`GvX^-Jy0X7y660c1eA?LwbT(s-r;B5V z#(CfVjb6--0&UMlw{@5;^9;CXq}X&&$u-U)h5y|K!^HGRYtg*m=oeeHc5l$+Re$1< zn6K*Sy746Qo81<(RXc-aw#yse|HHiI;4Ix=Ul=1c-%SdbyqKxj=IwU{*Ah0qz-PNA zFf#?WuUIho$)+9W&) zNkKE$^5@K{k*2fR9c~^kII;Quswd}J4(Uq1nXvfL=5nSxl68EmKWFCJ*lRJYP;Oem zu;9h*qjUE#922`|%&~R((-&f|?5+sCdAwo=+kVFApx4?TdbFA}Vp#%~*RKjIa1Ail zoR#@&0~`CHh^Z?aC1RSARdu3F?=XmTh_$a4yyobd|C>J|=*E*w-Md?_MNYR7>NuFS z(l{e0!h5H9>3+^{?5~>Fe0%@q=oDa7sFt`!l%yn~>+Bg+s2 zQ!7(rD^pW#0|P4qgGj@tnJ5}^^HVa@DsgMj$ceoQ)Sv;kp(HamwYVfPw*aKaRM)^r h*T^Wu5NNiUm9Y`TlJg}t|ABfKJYD@<);T3K0RRd$31R>M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/cyan.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..85e64952e29b018da84d3bd4826a0a74454d2809 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR1Y!sGa3Q~47z1X6PNq7r#SqU7Y{c>P1QwYC5M|8Mzr=0BhY#*!evUYzWlug{y+|Afk$L90|Vb75M~tB@M-`GvX^-Jy0X7y660c1nAEp35U3}|)5S4F z&^oy-pyEka^sz32a z%vW`E-FTAu&2Ed?s-3|y+vSb#|6yKpaF*_`FN_hJ?Ym#eK%Virbd~!@ujJ9*?pJu z>aOtQd(!c9$;~#+RUr=3mHoHKnMr-{%(k=)m=e{}C*FR_Vf&L%r%MKhf@Lmy95r0c zq@bB=`E%yfNYmNu4mXb%oY;JS)syoqhjb<1Oj!JAb2-x;$vVE(pEGl9?6nwHC^xNO zSn%TZ(YbpVj)~nf=GeOY=?k$}c2|VnJYKPbZ9ijl&};1vJz7l~u`B`0>sN&pxCR(& z&dU6?fsOr8#MBjz5;0B5syb1ocNj!E#M)O2UUPKK|IHr}bmK{;?%l1|BB$F3bsWrE zX`GQ0;k{G5bU)`e_E*hozP*2QbP6ykR7+eVN>UO_QmvAUQh^kMk%5tku7R1Zk!6U1 zsgzopr053!en*aa+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..581eec2ebc50e39d8154a14bf514629974d15d9e GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ~8v~{)h40QC3^bAcjb@bIVwdLgGRMa)KwYC5M|F8UT(qo_o#*!evUYzWlug{y+|Afk$L90|Vb75M~tB@M-`GvX^-Jy0X7y660c1nAEp35U3}|)5S4F z&^oy-pyEka^sz32a z%vW`E-FTAu&2Ed?s-3|y+vSb#|6yKpaF*_`FN_hJ?Ym#eK%Virbd~!@ujJ9*?pJu z>aOtQd(!c9$;~#+RUr=3mHoHKnMr-{%(k=)m=e{}C*FR_Vf&L%r%MKhf@Lmy95r0c zq@bB=`E%yfNYmNu4mXb%oY;JS)syoqhjb<1Oj!JAb2-x;$vVE(pEGl9?6nwHC^xNO zSn%TZ(YbpVj)~nf=GeOY=?k$}c2|VnJYKPbZ9ijl&};1vJz7l~u`B`0>sN&pxCR(& z&dU6?fsOr8#MBjz5;0B5syb1ocNj!E#M)O2UUPKK|IHr}bmK{;?%l1|BB$F3bsWrE zX`GQ0;k{G5bU)`e_E*hozP*2QbP6ykR7+eVN>UO_QmvAUQh^kMk%5tku7R1Zk!6U1 zsgzopr0P1!KasU7T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/green.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/green.png new file mode 100644 index 0000000000000000000000000000000000000000..d15dfc3e3ea8ba273f1206a18208ce4330e6ebc0 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0>-G!`tgl+sp>;gqBJcUeL1m)!93>^ftwYC5M|L?NMQuIw+F#JJcLpLTWvoz0lz>Ealo zao)FoqZhNIK-+WCZ5?LIJOeHoDK;Hca*cCH;eWTmFfl#SS~M>>`o&hQ-5WG{)t`7I z=BqloZam5SX1B#`)y`myXdHY?#wSDD>(PHeuv>dASQL%Nc0CMGI=-fRF$HeX#b8KDy^o7_fyDLI(9WADIt3UNswJ)wB`Jv|saDBFsX&Us$iT=%*T78I$TGyh z)XLP@%G6Zbz`)ADAky$@CW?mK{FKbJO57SWa$>InHE6(XD9OxCEiOsSEdc2;)ip5E gH8Kh@1e$GTWo!(wB$L_P8>olD)78&qol`;+03)ylqyPW_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/light_blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..491a69c82f16ea6477dd4552f012a39439891eb7 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)PSJ0U$b_GR^vRKwk7J7lT`~k<>cg)vKqCuwg3PBAGLFPIZy**NswPKgTu2MX&_FL zx4R2p{$2xrAcwQSBeIx*f$tCqGm2_>H2?+KOFVsD*f0Fz)RW`s;uxZF z-nW0F7qg>4+jG%v9cIfs11=gVHXT%QjdMuhf49LfF+I{+G%q;%#a6A|8#H;#lL96$W-7LM`(44cgpDuo*{%u9 zOu_9d7EFG!X~+5V_u?Khi<%dx1Z3;x|N48++%)Ba?~(Ann=KAgqs-g*(p0(ZzRP)a zS9tP0>G-+iW}D`!5Qpi?{#)eCq&|3NTUrK8iE8N+Z$IU*{Yj|PC4)o3GM7D$8m?wi z(9E^`Idf{H>1=j~o5u@IY`(wh$$6GTx{_}uEPk}Poav5a9pCEDnYlLhS_~_cn^rI^ zcyasa+&v7(#O@h$Y+e5Jh1e^*D?)D`uh_x1pD{YIz4Rn5JY^ohZ{g3?dz3?W+Z^IlAWm=8p)v@g!6C?$&FO(`|%04rZ-1 z&d7=I-YH(XpYt30tL8P|-oH6I1sD~oC9V-ADTyViR>?)FK#IZ0z{o_`z)aW3GQ_~t z%GB7()KuHRz{K+H89dO fG72#Snr&ufYy`37e2L9}pdJQKS3j3^P6NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0XqeBxDqf=AkGBT3l;v&MsgXHAof`WXtwYC5M|G%a4+aaI^#*!evUYzWlug{y+|Afk$L90|OsW72hF7Q4OyKpdfpRr>`sfOC~WcHib!jI|G4way(re zLp09&_HXoJb`)rPF1oG5Y?)`kMI*(ggG#P(4k`TaHW((RM_P;K1xLTwstyyn~cH%F%cqe8XBHKHUXu_V85l$wKFvhYkei>9nO2EggGNs5RiFk9xD6$lxv9k^iMa(JJ*K(_ iM!H5uA%;M+&8&=#AeNjjvH1_w!{F)a=d#Wzp$P!6NetQm literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..442c3e811d4f741328eb372cda2510d64a5c7def GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ~Gs`!1I1OnOwgL?$M>I7U%`Q_x~9P{|JwYC5M|G#|Ql^mc3#*!evUYzWlug{y+|Afk$L90|Vb75M~tB@M-`GvX^-Jy0X7y660c1nAEp35U3}|)5S4F z&^oy-pyEka^sz32a z%vW`E-FTAu&2Ed?s-3|y+vSb#|6yKpaF*_`FN_hJ?Ym#eK%Virbd~!@ujJ9*?pJu z>aOtQd(!c9$;~#+RUr=3mHoHKnMr-{%(k=)m=e{}C*FR_Vf&L%r%MKhf@Lmy95r0c zq@bB=`E%yfNYmNu4mXb%oY;JS)syoqhjb<1Oj!JAb2-x;$vVE(pEGl9?6nwHC^xNO zSn%TZ(YbpVj)~nf=GeOY=?k$}c2|VnJYKPbZ9ijl&};1vJz7l~u`B`0>sN&pxCR(& z&dU6?fsOr8#MBjz5;0B5syb1ocNj!E#M)O2UUPKK|IHr}bmK{;?%l1|BB$F3bsWrE zX`GQ0;k{G5bU)`e_E*hozP*2QbP6ykR7+eVN>UO_QmvAUQh^kMk%5tku7R1Zk!6U1 zsgzopr0L@hj*Z=?k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/magenta.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..e74fcf6958822e691902cde404f002ccfa08aa9b GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ}}HH#XxtJ-wyy7ilDwaQA=bLHgZ@>J8cwYC5M|G#~T`+T4V#*!evUYzWlug{y+|Afk$L90|Vb75M~tB@M-`GvX^-Jy0X7y660c1nAEp35U3}|)5S4F z&^oy-pyEka^sz32a z%vW`E-FTAu&2Ed?s-3|y+vSb#|6yKpaF*_`FN_hJ?Ym#eK%Virbd~!@ujJ9*?pJu z>aOtQd(!c9$;~#+RUr=3mHoHKnMr-{%(k=)m=e{}C*FR_Vf&L%r%MKhf@Lmy95r0c zq@bB=`E%yfNYmNu4mXb%oY;JS)syoqhjb<1Oj!JAb2-x;$vVE(pEGl9?6nwHC^xNO zSn%TZ(YbpVj)~nf=GeOY=?k$}c2|VnJYKPbZ9ijl&};1vJz7l~u`B`0>sN&pxCR(& z&dU6?fsOr8#MBjz5;0B5syb1ocNj!E#M)O2UUPKK|IHr}bmK{;?%l1|BB$F3bsWrE zX`GQ0;k{G5bU)`e_E*hozP*2QbP6ykR7+eVN>UO_QmvAUQh^kMk%5tku7R1Zk!6U1 zsgzopr0DWr=RsaA1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/orange.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5a126a7b71b2210db7a737639b842647bbbc1e GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YQ}#cyp}|;NB3-y*-S3sUO!&4=y=5xrr{E+S=Ox|Nl=_+*AkDz*rLG7tG-B>_!@h zljQC0!k53-z#qurEbxddW?8eR=RLG}_)Usv{*Ok!MY3X}SF1_Jfuc)B=- zXq@-$-{{5cDA4v?bX$knGS7gEMv6@bm0aT-QuyC(FicF3v=+?^j()LKYxf3CUiBv) ziTSFIt{YD>zu9duTeUM-X1l!c{XfiW4$jj3^@TBF^WCI?$%~naZQg!Ya4liu3w*X~ z0y9%^`-%mVpKRK3{`|eThs>hp1u6mAy7|BU-ZM8%x!`*wyzgdU7EAP_WEpkE4dG znG`g0Eq~6O8fiM4-Qni(f)ktXuX=Kx<&duAn+b~_Z7yfJBU#6{`g3NkjlCAb3gxC1 z3=3Y|K00>~!!faY#vEIhKYbzg%I=ELo5w45uQ6i=(Syd;>^bUhahgkb+!E27L`M>!if^Iy?)V;g)TI6&ap^k%D zD~&U9BD{Bsm+t5M#{Q~#&A0b&j!pqag=&dwL`h0wNvc(HQ7VvPFfuSQ(KRsBHL?sb zFtsu@wlX!BQ;SOya|=LvOmz*6 hbd8Kc41s2wSs5EaEID6d^B<^(!PC{xWt~$(696~D3i|*6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/pink.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..2229c74594be99e10cc780409ddb267fbd14dfe0 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR1GN9V6hEL)#awJoE5act3y@GLnwx&ELOZEfxU|Nk3UU#J0UU@Qsp3ubV5b|VeM zN%D4g;mhA^;1A?*7I;J!GcfQS0%1l`4X*~EAbW|YuPggYCNVBHg-Lxo1A%&SJY5_^ zG|v0>Z}ehz6li-cx~;=(nP--gmRbVQQ3l8(*3#m)&9JW6Rb-HA5C|KsQ$5F%8 zObVL0mOp1sjWnIj?r`&X!HLcHS3Nn;a!6P5&4k5|HkUKqk*woe{W&w&#$JnIg>ush zh6OKfADz30;h5MxV~(xMpS}=#Wp_pB&Epk2*!D9<2ffz*(4*C)5z7*=ynafYUYEpobzP{+Zn zmBtx45#Bq+OZRhrV}I4W=G*%>N2dUzLbb#-q9i4;B-JXpC>2OC7#SFu=o*;m8d-)I zm|B?{TbY__8yHv_7(^OA%|y|Vo1c=IR*74KMo#Qipau=N4JDbmsl_FUxdk9Srn&}3 hx<*DJhCs8;tc;BymYgrK`47~?;OXk;vd$@?2>>QQ4mbb+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/purple.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4560c56e35aa936c22771eb1cf7aab25557a62 GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0xCGrBKN`s{5gO_-|EkqxifZuL3n_z-=hW%uOvWNz5$(=`qzcFw!+L e3NZwlZDwU`1hM3NiOqkY9tKZWKbLh*2~7YXvI-;s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/red.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/red.png new file mode 100644 index 0000000000000000000000000000000000000000..80018cdd477edfe144182bb03d52ac311b7657ed GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0{B*bzg#S5e)N~9$-CBzcNMdjq=Vnju>wYC5M|G$U7!4jx}u_VYZn8D%MjWiG^ z$=lt9FMqFrKaj&&;1OBOz`%D1gc(IOyc&Rl>?NMQuIw+F#JJcLpLTWvoz0lz>Ealo zao)FoqZhNIK-+WCZ5?LIJOeHoDK;Hca*cCH;eWTmFfl#SS~M>>`o&hQ-5WG{)t`7I z=BqloZam5SX1B#`)y`myXdHY?#wSDD>(PHeuv>dASQL%Nc0CMGI=-fRF$HeX#b8KDy^o7_fyDLI(9WADIt3UNswJ)wB`Jv|saDBFsX&Us$iT=%*T78I$TGyh z)XLP@%G6Zbz`)ADAky$@CW?mK{FKbJO57SWa$>InHE6(XD9OxCEiOsSEdc2;)ip5E gH8Kh@1e$GTWo!(wB$L_P8>olD)78&qol`;+02{Oi3jhEB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil/white.png new file mode 100644 index 0000000000000000000000000000000000000000..ff03be6a2799cac83b64d478ef2d303f865f96ed GIT binary patch literal 778 zcmeAS@N?(olHy`uVBq!ia0vp^3Lwk@BpAX3RW*PVOS+@4BLl<6e(pbstRTr`k04(L zhAK4%hK3dfhF?ITh8GMBr3MTPuM!v-tY$DUh!@P+6=(yLU@8gn3ua&_n|#&+#7pva zcVYP7-hXC4kjGiz5n0T@z;_6Q8AUa`8i0cAC7!;n>@S(bxY!h*c6J_TU|`(s>Eak- zaXR;sVV{gU59@{P&1&ferUp;AcNjA^B^}+@>c7E#1OK8EC+8gqFVx| zO+xIp%G+C116s8{U009%!!O^X_V}ocr0>3pW9*MvKc{@SacE*>$u#wQcAq6W7s(&H z^!xN_nZi9CW=u=F&h$K-l}NT}*KRTCR#lci6rLE;f2MiU0VStDXKc=| z>E!8V?Avd^Owb>ui^05B>f!A3k0!&j0@W z{W;e^?`yC8WZw3EhWz60kiAj-^@kGW<&|CaC1?8f6-7XJ6|f3Dy2E$~0%sqM$O z1GIuwfibIE;u=wsl30>zm0Xkxq!^40j7)S5%yf+`LkvuNSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp&Q^6;tHfqO-(~WLJ|@Z z)YR0LHi@tAlHA%axo4`>$~K94HDYpda#Kr1wY9bX|NsB5z-JOr17k^$UoeBivm0q3 zPLj8~3t#?T1Aicgv%n*=n1O-s5C}7hYIrpO1=&kHeO=jKGKq1qDNO3y83@#q*oLZd(Yf7<$~{#@V=WZ4pXDd+xXH{x$M5n zd39HK@;&MJx#VV>=Bf~f>B|0FV11wfs4AYNY9Gc88nC3r=jlzv{_(mP5LdZze2$w7Hz=j$|F*>d%?EHuhQ!E0mj7 zFf4d+`{>*~49CRo8FOr1{`7^|E4wQ~ZyvAM!M2| zHD_i1+Q7zsC}QdgM~RrGWL2Fg(>n|z9b)aP1+O`}=Kto82)gkkQ}^!HYmw7!ggOpp ztu)TaiSXVjUb>(28~dx~HQ(O9IXVRx6{;n!5hW>!C8<`)MX5lF!N|bKMAyJf*T^!& zz|_jr*viyY+rYrez#!7_X(oz>-29Zxv`X9>G;(6E0ySvBZ79jiO)V}-%q;-vG1WCN h(ls&)F$9`zW@T&yvE+P-&3~XC22WQ%mvv4FO#qci4VVA` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_mask.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef546148ece2f3297df238badc61757a485b5c GIT binary patch literal 1349 zcmV-L1-kl)P)EX>4Tx04R}tkv&MmKpe$iQ^is$4i*t{$WWc^qD34_6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|E;uQ=NQwVT3N2zhIPS;0dyl(!fY7Qj)$EG{s%9CP zWJ1grR>gr=2pB;CF$5)M>Z$Bv4xZ!d9zMR_MR}I@xj)CCQZyOh6N%$YH!R`};@M40 z=e$oGW)(>xJ|~_s=z_$LT$f#b<6L%F;F)0~mzgIH6N}{@mV20043#)W98pw_@`b$1 z3g<1(YOTRK_v9}O6}6Qt*J+L;i6x|vh6ouAR8fP4D6JYPCNi|2@bHg0{xrE{a#g{| zv4A>MNRA);4}N!RmS(2iq)-Crf3fY431DCsXg6*9``EVICxHJMxYD}*dJCBQB)!?y zB1gc`HgIv>)#N?kat9cF(j`N3BtK1|R07`5=$i__@GTHrb9?LTK0aa?2IR&Vc<)hF)d+wWvjZXm z5#ew+gm=am>~=e(%zF=|RPf3F!~x|+QGkeGtp&3nf0Ar?@56U%EsCPRFbv56oO2)| zR8=+F5U*EC{W1U`EV9;y#T=>kKFNyK8vFeoN-4-R$a;|9*e7pb7zTLne*Ktv%B$*xlBzW`!z?>)-0MAvmA3Yj4y!uR(#%Cf}W z-Q5WI^Yb&@Gq}wAqz0t(s;a^z)4?Wdgj4hU{5)zi89)rq)bo2H!b0Xb1~_!`$xYo}F{QDd@T`%d%{8?8@Vq z``Z|UEXzh}m|}uY%8SSGYPCAa+}CwIDafKIP}en_b9j4u%cQduz%7gB@8VjK z;WgaPvhw9_WxjbNlj=A*4bLgvTpqXEZ8j%Fso_=%QEdMJh=yA6aK__z00000NkvXX Hu0mjfh=Y6; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/black.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/black.png new file mode 100644 index 0000000000000000000000000000000000000000..e13043426b36b55f536347b731874adb1739bf5d GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%UN|;tHfqO-(~WLJ|@Z zL`1|yM8ri!C4_}Vg@i=J#ihi=B>(^a|C{mTbD%oLk|4ie28U-i(m@;+4I<;{sl+R0z*Ny z#5JNMC9x#cD!C{XNHG{07@6oAnCTi>h8UPynHpP}nra&uSQ!{Z8a~ZL(U6;;l9^VC zTZ2YU>{Xx!4Y&;@nYpROC5gEOAU&qK21dF@Mj?hkv(2oGjUkp~GMjq?^)Pt4`njxg HN@xNAyCc+O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/blue.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..83a63f9bee84e1186694cf582197a5bf8018a03a GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%UN|;tHfqO-(~WLJ|@Z z6qQnylrxl7augI3<>aH))Js&<^8f$;|M24_exN$Wk|4ie28U-i(m@;+4I<;{sl+R0z*Ny z#5JNMC9x#cD!C{XNHG{07@6oAnCTi>h8UPynHpP}nra&uSQ!{Z8a~ZL(U6;;l9^VC zTZ2YU>{Xx!4Y&;@nYpROC5gEOAU&qK21dF@Mj?hkv(2oGjUkp~GMjq?^)Pt4`njxg HN@xNAwoun- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/brown.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0d644c7411ff2bec1cfb866e01c0caf772c914 GIT binary patch literal 631 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 HDWM4f0QlMr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/light_gray.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..c29cee492d50f2c1d6306bc473e7683c8412f316 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fgp%UN|;tHfqO-(~WLJ|@Z zqN79O;vy0gqr=04f`WWAGLlkL@;+4I<;{sl+R0z*Ny z#5JNMC9x#cD!C{XNHG{07@6oAnCTi>h8UPynHpP}nra&uSQ!{Z8a~ZL(U6;;l9^VC zTZ2YU>{Xx!4Y&;@nYpROC5gEOAU&qK21dF@Mj?hkv(2oGjUkp~GMjq?^)Pt4`njxg HN@xNAHzwM$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/lime.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..cec05566d9c0681f6e2a8eb9f049142faec5f731 GIT binary patch literal 631 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 HN@xNAp<&im literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/white.png b/src/main/resources/assets/overdrive_that_matters/textures/block/tritanium_anvil_top/white.png new file mode 100644 index 0000000000000000000000000000000000000000..505468cc3e75bc026136798941edce50394a1fc6 GIT binary patch literal 708 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 N002ovPDHLkV1nk2MT7tV literal 0 HcmV?d00001