diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index 370f4a17c..76b433271 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -1,9 +1,13 @@ package ru.dbotthepony.mc.otm.datagen +import net.minecraft.core.Direction import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.DoorBlock import net.minecraft.world.level.block.IronBarsBlock import net.minecraft.world.level.block.state.properties.BlockStateProperties +import net.minecraft.world.level.block.state.properties.DoorHingeSide +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf import net.minecraftforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ModelFile import net.minecraftforge.eventbus.api.SubscribeEvent @@ -31,6 +35,7 @@ import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider import ru.dbotthepony.mc.otm.datagen.loot.addLootModifiers import ru.dbotthepony.mc.otm.datagen.loot.addLootTables import ru.dbotthepony.mc.otm.datagen.models.MatteryModelBuilder +import ru.dbotthepony.mc.otm.datagen.models.addBlockModels import ru.dbotthepony.mc.otm.datagen.recipes.addBlastingRecipes import ru.dbotthepony.mc.otm.datagen.recipes.addCraftingTableRecipes import ru.dbotthepony.mc.otm.datagen.recipes.addDecorativesRecipes @@ -118,19 +123,106 @@ object DataGen { } } + @Suppress("name_shadowing") blockStateProvider.exec { - check(mdl_post != null) { "DataGen execution order is screwed lmaooooooo" } + val mdl_post = checkNotNull(mdl_post) { "mdl_post is null" } + val mdl_side = checkNotNull(mdl_side) { "mdl_side is null" } + val mdl_side_alt = checkNotNull(mdl_side_alt) { "mdl_side_alt is null" } + val mdl_noside = checkNotNull(mdl_noside) { "mdl_noside is null" } + val mdl_noside_alt = checkNotNull(mdl_noside_alt) { "mdl_noside_alt is null" } with(blockStateProvider.getMultipartBuilder(block)) { - part().modelFile(mdl_post!!).addModel() - part().modelFile(mdl_side!!).addModel().condition(IronBarsBlock.NORTH, true) - part().modelFile(mdl_side!!).rotationY(90).addModel().condition(IronBarsBlock.EAST, true) - part().modelFile(mdl_side_alt!!).addModel().condition(IronBarsBlock.SOUTH, true) - part().modelFile(mdl_side_alt!!).rotationY(90).addModel().condition(IronBarsBlock.WEST, true) - part().modelFile(mdl_noside!!).addModel().condition(IronBarsBlock.NORTH, false) - part().modelFile(mdl_noside!!).rotationY(270).addModel().condition(IronBarsBlock.WEST, false) - part().modelFile(mdl_noside_alt!!).addModel().condition(IronBarsBlock.EAST, false) - part().modelFile(mdl_noside_alt!!).rotationY(90).addModel().condition(IronBarsBlock.SOUTH, false) + part().modelFile(mdl_post).addModel() + part().modelFile(mdl_side).addModel().condition(IronBarsBlock.NORTH, true) + part().modelFile(mdl_side).rotationY(90).addModel().condition(IronBarsBlock.EAST, true) + part().modelFile(mdl_side_alt).addModel().condition(IronBarsBlock.SOUTH, true) + part().modelFile(mdl_side_alt).rotationY(90).addModel().condition(IronBarsBlock.WEST, true) + part().modelFile(mdl_noside).addModel().condition(IronBarsBlock.NORTH, false) + part().modelFile(mdl_noside).rotationY(270).addModel().condition(IronBarsBlock.WEST, false) + part().modelFile(mdl_noside_alt).addModel().condition(IronBarsBlock.EAST, false) + part().modelFile(mdl_noside_alt).rotationY(90).addModel().condition(IronBarsBlock.SOUTH, false) + } + } + } + + fun door(block: Block, textureTop: ResourceLocation, textureBottom: ResourceLocation) { + var doorBottomLeft: ModelFile? = null + var doorBottomLeftOpen: ModelFile? = null + var doorBottomRight: ModelFile? = null + var doorBottomRightOpen: ModelFile? = null + var doorTopLeft: ModelFile? = null + var doorTopLeftOpen: ModelFile? = null + var doorTopRight: ModelFile? = null + var doorTopRightOpen: ModelFile? = null + + val doorBottomLeftName = "${block.registryName!!.path}_bl" + val doorBottomLeftOpenName = "${block.registryName!!.path}_blo" + val doorBottomRightName = "${block.registryName!!.path}_br" + val doorBottomRightOpenName = "${block.registryName!!.path}_bro" + val doorTopLeftName = "${block.registryName!!.path}_tl" + val doorTopLeftOpenName = "${block.registryName!!.path}_tlo" + val doorTopRightName = "${block.registryName!!.path}_tr" + val doorTopRightOpenName = "${block.registryName!!.path}_tro" + + blockModelProvider.exec { + doorBottomLeft = it.doorBottomLeft(doorBottomLeftName, textureBottom, textureTop).renderType("cutout") + doorBottomLeftOpen = it.doorBottomLeftOpen(doorBottomLeftOpenName, textureBottom, textureTop).renderType("cutout") + doorBottomRight = it.doorBottomRight(doorBottomRightName, textureBottom, textureTop).renderType("cutout") + doorBottomRightOpen = it.doorBottomRightOpen(doorBottomRightOpenName, textureBottom, textureTop).renderType("cutout") + doorTopLeft = it.doorTopLeft(doorTopLeftName, textureBottom, textureTop).renderType("cutout") + doorTopLeftOpen = it.doorTopLeftOpen(doorTopLeftOpenName, textureBottom, textureTop).renderType("cutout") + doorTopRight = it.doorTopRight(doorTopRightName, textureBottom, textureTop).renderType("cutout") + doorTopRightOpen = it.doorTopRightOpen(doorTopRightOpenName, textureBottom, textureTop).renderType("cutout") + } + + @Suppress("name_shadowing") + blockStateProvider.exec { + val doorBottomLeft = checkNotNull(doorBottomLeft) { "doorBottomLeft is null" } + val doorBottomLeftOpen = checkNotNull(doorBottomLeftOpen) { "doorBottomLeftOpen is null" } + val doorBottomRight = checkNotNull(doorBottomRight) { "doorBottomRight is null" } + val doorBottomRightOpen = checkNotNull(doorBottomRightOpen) { "doorBottomRightOpen is null" } + val doorTopLeft = checkNotNull(doorTopLeft) { "doorTopLeft is null" } + val doorTopLeftOpen = checkNotNull(doorTopLeftOpen) { "doorTopLeftOpen is null" } + val doorTopRight = checkNotNull(doorTopRight) { "doorTopRight is null" } + val doorTopRightOpen = checkNotNull(doorTopRightOpen) { "doorTopRightOpen is null" } + + with(blockStateProvider.getMultipartBuilder(block)) { + for (facing in DoorBlock.FACING.possibleValues) { + for (hinge in DoorBlock.HINGE.possibleValues) { + for (open in listOf(false, true)) { + for (half in DoorBlock.HALF.possibleValues) { + part().modelFile( + when (half!!) { + DoubleBlockHalf.UPPER -> { + when (hinge!!) { + DoorHingeSide.LEFT -> if (open) doorTopLeftOpen else doorTopLeft + DoorHingeSide.RIGHT -> if (open) doorTopRightOpen else doorTopRight + } + } + + DoubleBlockHalf.LOWER -> { + when (hinge!!) { + DoorHingeSide.LEFT -> if (open) doorBottomLeftOpen else doorBottomLeft + DoorHingeSide.RIGHT -> if (open) doorBottomRightOpen else doorBottomRight + } + } + } + ).rotationY( + facing.toYRotBlockstate() - 90 + + (if (open) when (hinge) { + DoorHingeSide.LEFT -> 90 + DoorHingeSide.RIGHT -> -90 + } else 0) + ).addModel() + .condition(DoorBlock.FACING, facing) + .condition(DoorBlock.HINGE, hinge) + .condition(DoorBlock.OPEN, open) + .condition(DoorBlock.HALF, half) + .end() + } + } + } + } } } } @@ -232,36 +324,8 @@ object DataGen { AddEnglishLanguage(languageProvider) - blockModelProvider.resourceCubeAll(MBlocks.TRITANIUM_ORE) - blockModelProvider.resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK) - blockModelProvider.resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) - - with(blockModelProvider) { - exec { - copy("block/battery/battery1", "block/battery/battery0").also { it.offset(-4f, 0f, 0f) } - copy("block/battery/battery2", "block/battery/battery0").also { it.offset(-8f, 0f, 0f) } - - copy("block/battery/battery3", "block/battery/battery0").also { it.offset(0f, 6f, 0f) } - copy("block/battery/battery4", "block/battery/battery0").also { it.offset(-4f, 6f, 0f) } - copy("block/battery/battery5", "block/battery/battery0").also { it.offset(-8f, 6f, 0f) } - - copy("block/battery/battery7", "block/battery/battery6").also { it.offset(4f, 0f, 0f) } - copy("block/battery/battery8", "block/battery/battery6").also { it.offset(8f, 0f, 0f) } - - copy("block/battery/battery9", "block/battery/battery6").also { it.offset(0f, 6f, 0f) } - copy("block/battery/battery10", "block/battery/battery6").also { it.offset(4f, 6f, 0f) } - copy("block/battery/battery11", "block/battery/battery6").also { it.offset(8f, 6f, 0f) } - - for (i in 0 .. 11) { - withExistingParent("block/battery/matter_capacitor$i", ResourceLocation(MOD_ID, "block/battery/battery$i")) - .texture("1", "block/matterybank_core") - } - - for (i in 1 .. 7) { - copy("block/pattern/model$i", "block/pattern/model0").also { it.offset(-2f * i, 0f, 0f) } - } - } - } + door(MBlocks.TRITANIUM_DOOR, modLocation("block/decorative/tritanium_door_top"), modLocation("block/decorative/tritanium_door_bottom")) + addBlockModels(blockModelProvider) addDecorativeData(blockStateProvider, itemModelProvider, blockModelProvider) 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 9545ab511..89045d88e 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 @@ -351,6 +351,10 @@ private fun blocks(provider: MatteryLanguageProvider) { add(MBlocks.LABORATORY_LAMP_INVERTED, "Laboratory Lamp (Inverted Signal)") add(MBlocks.DANGER_STRIPE_BLOCK, "Danger Stripes") add(MBlocks.METAL_BEAM, "Metal Beam") + + add(MBlocks.TRITANIUM_DOOR, "Tritanium Door") + add(MBlocks.TRITANIUM_DOOR, "description0", "High blast resistance door with redstone latch...") + add(MBlocks.TRITANIUM_DOOR, "description1", "...feeling safe now?") } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt index 187b2c139..274d027b0 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTables.kt @@ -17,14 +17,15 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets import net.minecraft.world.level.storage.loot.providers.nbt.ContextNbtProvider import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity +import java.util.LinkedList import java.util.function.BiConsumer import java.util.function.Consumer import java.util.function.Supplier -private typealias LootBuilderCallback = BiConsumer -private typealias LootBuilderWorker = Consumer -private typealias LootBuilderWorkerSupplier = Supplier -private typealias LootTuple = Pair +private typealias LootTableSaver = BiConsumer +private typealias LootTableCallback = Consumer +private typealias LootTableCallbackProvider = Supplier +private typealias LootTuple = Pair fun singleLootPool(f: (LootPool.Builder) -> Unit): LootTable.Builder { return LootTable.lootTable().withPool(LootPool.lootPool().also(f)) @@ -59,7 +60,7 @@ private val poweredMatterWorker = arrayOf( ) class LootTables(generator: DataGenerator) : LootTableProvider(generator) { - private val providers = ArrayList() + private val providers = LinkedList() override fun getTables(): List { return providers @@ -67,8 +68,12 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { override fun validate(map: MutableMap, validationtracker: ValidationContext) {} - fun block(provider: LootBuilderWorker) { - providers.add(Pair(Supplier {provider}, LootContextParamSets.BLOCK)) + fun block(provider: LootTableCallback) { + providers.add(Pair(Supplier { provider }, LootContextParamSets.BLOCK)) + } + + fun provider(provider: LootTableCallback, context: LootContextParamSet) { + providers.add(Pair(Supplier { provider }, context)) } private val seenStuff = ObjectArraySet() diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt index a491de9f3..454948fe1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.datagen.loot +import net.minecraft.data.loot.BlockLoot import ru.dbotthepony.mc.otm.block.entity.ChemicalGeneratorBlockEntity import ru.dbotthepony.mc.otm.block.entity.EnergyCounterBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity.Companion.ENERGY_KEY @@ -75,4 +76,8 @@ fun addLootTables(lootTables: LootTables) { lootTables.basicTile(MBlocks.MATTER_CAPACITOR_BANK) lootTables.poweredTile(MBlocks.MATTER_BOTTLER, TileNbtCopy(MATTER_STORAGE_KEY), TileNbtCopy(MatterBottlerBlockEntity.IS_BOTTLING_KEY)) + + lootTables.block { + it.accept(MBlocks.TRITANIUM_DOOR.lootTable, BlockLoot.createDoorTable(MBlocks.TRITANIUM_DOOR)) + } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt new file mode 100644 index 000000000..09d230dfc --- /dev/null +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/BlockModels.kt @@ -0,0 +1,37 @@ +package ru.dbotthepony.mc.otm.datagen.models + +import net.minecraft.resources.ResourceLocation +import ru.dbotthepony.mc.otm.registry.MBlocks + +fun addBlockModels(provider: MatteryBlockModelProvider) { + with(provider) { + resourceCubeAll(MBlocks.TRITANIUM_ORE) + resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK) + resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) + + exec { + copy("block/battery/battery1", "block/battery/battery0").also { it.offset(-4f, 0f, 0f) } + copy("block/battery/battery2", "block/battery/battery0").also { it.offset(-8f, 0f, 0f) } + + copy("block/battery/battery3", "block/battery/battery0").also { it.offset(0f, 6f, 0f) } + copy("block/battery/battery4", "block/battery/battery0").also { it.offset(-4f, 6f, 0f) } + copy("block/battery/battery5", "block/battery/battery0").also { it.offset(-8f, 6f, 0f) } + + copy("block/battery/battery7", "block/battery/battery6").also { it.offset(4f, 0f, 0f) } + copy("block/battery/battery8", "block/battery/battery6").also { it.offset(8f, 0f, 0f) } + + copy("block/battery/battery9", "block/battery/battery6").also { it.offset(0f, 6f, 0f) } + copy("block/battery/battery10", "block/battery/battery6").also { it.offset(4f, 6f, 0f) } + copy("block/battery/battery11", "block/battery/battery6").also { it.offset(8f, 6f, 0f) } + + for (i in 0 .. 11) { + withExistingParent("block/battery/matter_capacitor$i", ResourceLocation(ru.dbotthepony.mc.otm.datagen.DataGen.MOD_ID, "block/battery/battery$i")) + .texture("1", "block/matterybank_core") + } + + for (i in 1 .. 7) { + copy("block/pattern/model$i", "block/pattern/model0").also { it.offset(-2f * i, 0f, 0f) } + } + } + } +} diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index dfd6d8c65..dd0d3d415 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -5,6 +5,7 @@ import com.google.gson.JsonParser import net.minecraft.resources.ResourceLocation import net.minecraft.server.packs.PackType import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.DoorBlock import net.minecraftforge.client.model.generators.ModelProvider import net.minecraftforge.data.event.GatherDataEvent import ru.dbotthepony.mc.otm.datagen.DataGen 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 0c02975ec..714b33f39 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 @@ -1,5 +1,7 @@ package ru.dbotthepony.mc.otm.datagen.tags +import net.minecraft.tags.BlockTags +import net.minecraft.tags.ItemTags import net.minecraft.world.effect.MobEffects import net.minecraft.world.item.DyeColor import net.minecraft.world.item.Items @@ -62,6 +64,9 @@ fun addTags(tagsProvider: TagsProvider) { tagsProvider.blocks.appender(MBlockTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) tagsProvider.blocks.appender(MBlockTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allBlocks.values) + tagsProvider.items.appender(ItemTags.DOORS).add(MItems.TRITANIUM_DOOR) + tagsProvider.blocks.appender(BlockTags.DOORS).add(MBlocks.TRITANIUM_DOOR) + tagsProvider.requiresPickaxe(listOf( MBlocks.ANDROID_STATION, MBlocks.BATTERY_BANK, @@ -88,6 +93,8 @@ fun addTags(tagsProvider: TagsProvider) { MBlocks.PHANTOM_ATTRACTOR, MBlocks.ENERGY_SERVO, + + MBlocks.TRITANIUM_DOOR, ), Tiers.IRON) tagsProvider.requiresPickaxe(MBlocks.TRITANIUM_ORE, Tiers.IRON) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index aff5452e4..a19c0ae14 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -1,8 +1,14 @@ package ru.dbotthepony.mc.otm.registry +import net.minecraft.ChatFormatting +import net.minecraft.network.chat.Component import net.minecraft.util.valueproviders.UniformInt import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.TooltipFlag +import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.DoorBlock import net.minecraft.world.level.block.DropExperienceBlock import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockBehaviour @@ -15,6 +21,7 @@ import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.block.* import ru.dbotthepony.mc.otm.block.matter.* import ru.dbotthepony.mc.otm.block.storage.* +import ru.dbotthepony.mc.otm.core.TranslatableComponent object MBlocks { @@ -85,6 +92,20 @@ object MBlocks { val DANGER_STRIPE_BLOCK: Block by registry.register(MNames.DANGER_STRIPE_BLOCK) { Block(BlockBehaviour.Properties.of(Material.METAL, DyeColor.GRAY).explosionResistance(6f).destroyTime(1.5f).requiresCorrectToolForDrops()) } val METAL_BEAM: Block by registry.register(MNames.METAL_BEAM) { Block(BlockBehaviour.Properties.of(Material.METAL, DyeColor.GRAY).explosionResistance(14f).destroyTime(2.5f).requiresCorrectToolForDrops()) } + val TRITANIUM_DOOR: Block by registry.register(MNames.TRITANIUM_DOOR) { + object : DoorBlock(Properties.of(Material.METAL, DyeColor.LIGHT_BLUE).explosionResistance(80f).noOcclusion().destroyTime(3f).requiresCorrectToolForDrops()) { + override fun appendHoverText( + p_49816_: ItemStack, + p_49817_: BlockGetter?, + p_49818_: MutableList, + p_49819_: TooltipFlag + ) { + super.appendHoverText(p_49816_, p_49817_, p_49818_, p_49819_) + p_49818_.add(TranslatableComponent("$descriptionId.description0").withStyle(ChatFormatting.DARK_GRAY)) + p_49818_.add(TranslatableComponent("$descriptionId.description1").withStyle(ChatFormatting.DARK_GRAY)) + } + } } + init { MRegistry.CARGO_CRATES.registerBlocks(registry) MRegistry.TRITANIUM_BLOCK.registerBlocks(registry) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt index 568b96be5..9fff3358d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MItems.kt @@ -224,6 +224,8 @@ object MItems { val DANGER_STRIPE_BLOCK: Item by registry.register(MNames.DANGER_STRIPE_BLOCK) { BlockItem(MBlocks.DANGER_STRIPE_BLOCK, DEFAULT_PROPERTIES_DECORATIVE) } val METAL_BEAM: Item by registry.register(MNames.METAL_BEAM) { BlockItem(MBlocks.METAL_BEAM, DEFAULT_PROPERTIES_DECORATIVE) } + val TRITANIUM_DOOR: Item by registry.register(MNames.TRITANIUM_DOOR) { DoubleHighBlockItem(MBlocks.TRITANIUM_DOOR, DEFAULT_PROPERTIES_DECORATIVE) } + // components val MATTER_IO_PORT: Item by registry.register(MNames.MATTER_IO_PORT) { Item(DEFAULT_PROPERTIES) } val MATTER_TRANSFORM_MATRIX: Item by registry.register(MNames.MATTER_TRANSFORM_MATRIX) { Item(DEFAULT_PROPERTIES) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt index 98b98f348..0e8841c32 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MNames.kt @@ -225,6 +225,8 @@ object MNames { const val PHANTOM_ATTRACTOR = "phantom_attractor" const val JUMP_BOOST = "jump_boost" + + const val TRITANIUM_DOOR = "tritanium_door" } object StatNames {