From 56d5277988ffc9a85eb04614906c1ced65ce0f92 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Sun, 28 Aug 2022 12:49:33 +0700 Subject: [PATCH] Move registry helper classes to subpackage --- .../ru/dbotthepony/mc/otm/datagen/DataGen.kt | 2 + .../mc/otm/datagen/MatteryLanguageProvider.kt | 2 +- .../dbotthepony/mc/otm/registry/MRegistry.kt | 386 +----------------- .../objects/ColoredDecorativeBlock.kt | 256 ++++++++++++ .../otm/registry/objects/CrateProperties.kt | 18 + .../otm/registry/objects/DecorativeBlock.kt | 145 +++++++ 6 files changed, 425 insertions(+), 384 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/CrateProperties.kt create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt 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 1f2eb7df8..a36bde441 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -37,6 +37,8 @@ import ru.dbotthepony.mc.otm.registry.* import ru.dbotthepony.mc.otm.* import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipe import ru.dbotthepony.mc.otm.datagen.recipes.addCraftingTableRecipes +import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock +import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock @Mod.EventBusSubscriber(modid = DataGen.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) object DataGen { diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatteryLanguageProvider.kt index 0a4228437..33c825359 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/MatteryLanguageProvider.kt @@ -16,7 +16,7 @@ import net.minecraftforge.common.data.LanguageProvider import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.android.AndroidFeatureType import ru.dbotthepony.mc.otm.android.AndroidResearchType -import ru.dbotthepony.mc.otm.registry.ColoredDecorativeBlock +import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock private fun researchString(key: AndroidResearchType<*>): String { val displayName = key.displayName 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 81fedc8b8..13d679838 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -9,10 +9,6 @@ import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.entity.EntityType -import net.minecraft.world.item.BlockItem -import net.minecraft.world.item.CreativeModeTab -import net.minecraft.world.item.DyeColor -import net.minecraft.world.item.Item import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.block.* import net.minecraft.world.level.block.state.BlockBehaviour @@ -20,16 +16,17 @@ import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.material.Material import net.minecraft.world.level.material.MaterialColor import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext -import net.minecraftforge.registries.DeferredRegister import net.minecraftforge.registries.ForgeRegistry import net.minecraftforge.registries.IForgeRegistry import net.minecraftforge.registries.NewRegistryEvent import net.minecraftforge.registries.RegistryBuilder -import net.minecraftforge.registries.RegistryObject import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.android.AndroidFeatureType import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.block.CargoCrateBlock +import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock +import ru.dbotthepony.mc.otm.registry.objects.CrateProperties +import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock import java.util.function.Supplier import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -42,15 +39,6 @@ fun Registry.register(key: ResourceLocation, value: T): Holder { return (this as WritableRegistry).register(ResourceKey.create(key(), key), value, Lifecycle.stable()) } -class CrateProperties(val color: MaterialColor, val name: String) { - fun makeBlock(): Block { - return Block(BlockBehaviour.Properties.of(Material.METAL, color) - .sound(SoundType.METAL) - .requiresCorrectToolForDrops() - .strength(5.0F, 6.0F)) - } -} - private class RegistryDelegate(key: String) { private var value: Supplier?>? = null @@ -91,374 +79,6 @@ class WriteOnce : ReadWriteProperty { } } -/** - * Colored only - */ -@Suppress("PropertyName", "unused") -open class ColoredDecorativeBlock( - val baseName: String, - private val provider: (DyeColor) -> Block, - val itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE -) { - protected var _whiteBlock: RegistryObject by WriteOnce() - private set - protected var _orangeBlock: RegistryObject by WriteOnce() - private set - protected var _magentaBlock: RegistryObject by WriteOnce() - private set - protected var _lightBlueBlock: RegistryObject by WriteOnce() - private set - protected var _yellowBlock: RegistryObject by WriteOnce() - private set - protected var _limeBlock: RegistryObject by WriteOnce() - private set - protected var _pinkBlock: RegistryObject by WriteOnce() - private set - protected var _grayBlock: RegistryObject by WriteOnce() - private set - protected var _lightGrayBlock: RegistryObject by WriteOnce() - private set - protected var _cyanBlock: RegistryObject by WriteOnce() - private set - protected var _purpleBlock: RegistryObject by WriteOnce() - private set - protected var _blueBlock: RegistryObject by WriteOnce() - private set - protected var _brownBlock: RegistryObject by WriteOnce() - private set - protected var _greenBlock: RegistryObject by WriteOnce() - private set - protected var _redBlock: RegistryObject by WriteOnce() - private set - protected var _blackBlock: RegistryObject by WriteOnce() - private set - - val whiteBlock: Block get() = _whiteBlock.get() - val orangeBlock: Block get() = _orangeBlock.get() - val magentaBlock: Block get() = _magentaBlock.get() - val lightBlueBlock: Block get() = _lightBlueBlock.get() - val yellowBlock: Block get() = _yellowBlock.get() - val limeBlock: Block get() = _limeBlock.get() - val pinkBlock: Block get() = _pinkBlock.get() - val grayBlock: Block get() = _grayBlock.get() - val lightGrayBlock: Block get() = _lightGrayBlock.get() - val cyanBlock: Block get() = _cyanBlock.get() - val purpleBlock: Block get() = _purpleBlock.get() - val blueBlock: Block get() = _blueBlock.get() - val brownBlock: Block get() = _brownBlock.get() - val greenBlock: Block get() = _greenBlock.get() - val redBlock: Block get() = _redBlock.get() - val blackBlock: Block get() = _blackBlock.get() - - protected var _whiteItem: RegistryObject by WriteOnce() - private set - protected var _orangeItem: RegistryObject by WriteOnce() - private set - protected var _magentaItem: RegistryObject by WriteOnce() - private set - protected var _lightBlueItem: RegistryObject by WriteOnce() - private set - protected var _yellowItem: RegistryObject by WriteOnce() - private set - protected var _limeItem: RegistryObject by WriteOnce() - private set - protected var _pinkItem: RegistryObject by WriteOnce() - private set - protected var _grayItem: RegistryObject by WriteOnce() - private set - protected var _lightGrayItem: RegistryObject by WriteOnce() - private set - protected var _cyanItem: RegistryObject by WriteOnce() - private set - protected var _purpleItem: RegistryObject by WriteOnce() - private set - protected var _blueItem: RegistryObject by WriteOnce() - private set - protected var _brownItem: RegistryObject by WriteOnce() - private set - protected var _greenItem: RegistryObject by WriteOnce() - private set - protected var _redItem: RegistryObject by WriteOnce() - private set - protected var _blackItem: RegistryObject by WriteOnce() - private set - - val whiteItem: Item get() = _whiteItem.get() - val orangeItem: Item get() = _orangeItem.get() - val magentaItem: Item get() = _magentaItem.get() - val lightBlueItem: Item get() = _lightBlueItem.get() - val yellowItem: Item get() = _yellowItem.get() - val limeItem: Item get() = _limeItem.get() - val pinkItem: Item get() = _pinkItem.get() - val grayItem: Item get() = _grayItem.get() - val lightGrayItem: Item get() = _lightGrayItem.get() - val cyanItem: Item get() = _cyanItem.get() - val purpleItem: Item get() = _purpleItem.get() - val blueItem: Item get() = _blueItem.get() - val brownItem: Item get() = _brownItem.get() - val greenItem: Item get() = _greenItem.get() - val redItem: Item get() = _redItem.get() - val blackItem: Item get() = _blackItem.get() - - val coloredBlocks: List by lazy { - LazyList( - _whiteBlock::get, - _orangeBlock::get, - _magentaBlock::get, - _lightBlueBlock::get, - _yellowBlock::get, - _limeBlock::get, - _pinkBlock::get, - _grayBlock::get, - _lightGrayBlock::get, - _cyanBlock::get, - _purpleBlock::get, - _blueBlock::get, - _brownBlock::get, - _greenBlock::get, - _redBlock::get, - _blackBlock::get, - ) - } - - val mappedColoredBlocks: Map by lazy { - LazyMap( - DyeColor.WHITE to _whiteBlock::get, - DyeColor.ORANGE to _orangeBlock::get, - DyeColor.MAGENTA to _magentaBlock::get, - DyeColor.LIGHT_BLUE to _lightBlueBlock::get, - DyeColor.YELLOW to _yellowBlock::get, - DyeColor.LIME to _limeBlock::get, - DyeColor.PINK to _pinkBlock::get, - DyeColor.GRAY to _grayBlock::get, - DyeColor.LIGHT_GRAY to _lightGrayBlock::get, - DyeColor.CYAN to _cyanBlock::get, - DyeColor.PURPLE to _purpleBlock::get, - DyeColor.BLUE to _blueBlock::get, - DyeColor.BROWN to _brownBlock::get, - DyeColor.GREEN to _greenBlock::get, - DyeColor.RED to _redBlock::get, - DyeColor.BLACK to _blackBlock::get, - ) - } - - val coloredItems: List by lazy { - LazyList( - _whiteItem::get, - _orangeItem::get, - _magentaItem::get, - _lightBlueItem::get, - _yellowItem::get, - _limeItem::get, - _pinkItem::get, - _grayItem::get, - _lightGrayItem::get, - _cyanItem::get, - _purpleItem::get, - _blueItem::get, - _brownItem::get, - _greenItem::get, - _redItem::get, - _blackItem::get, - ) - } - - val mappedColoredItems: Map by lazy { - LazyMap( - DyeColor.WHITE to _whiteItem::get, - DyeColor.ORANGE to _orangeItem::get, - DyeColor.MAGENTA to _magentaItem::get, - DyeColor.LIGHT_BLUE to _lightBlueItem::get, - DyeColor.YELLOW to _yellowItem::get, - DyeColor.LIME to _limeItem::get, - DyeColor.PINK to _pinkItem::get, - DyeColor.GRAY to _grayItem::get, - DyeColor.LIGHT_GRAY to _lightGrayItem::get, - DyeColor.CYAN to _cyanItem::get, - DyeColor.PURPLE to _purpleItem::get, - DyeColor.BLUE to _blueItem::get, - DyeColor.BROWN to _brownItem::get, - DyeColor.GREEN to _greenItem::get, - DyeColor.RED to _redItem::get, - DyeColor.BLACK to _blackItem::get, - ) - } - - open fun registerBlocks(registry: DeferredRegister) { - _whiteBlock = registry.register("${baseName}_white") { provider.invoke(DyeColor.WHITE) } - _orangeBlock = registry.register("${baseName}_orange") { provider.invoke(DyeColor.ORANGE) } - _magentaBlock = registry.register("${baseName}_magenta") { provider.invoke(DyeColor.MAGENTA) } - _lightBlueBlock = registry.register("${baseName}_light_blue") { provider.invoke(DyeColor.LIGHT_BLUE) } - _yellowBlock = registry.register("${baseName}_yellow") { provider.invoke(DyeColor.YELLOW) } - _limeBlock = registry.register("${baseName}_lime") { provider.invoke(DyeColor.LIME) } - _pinkBlock = registry.register("${baseName}_pink") { provider.invoke(DyeColor.PINK) } - _grayBlock = registry.register("${baseName}_gray") { provider.invoke(DyeColor.GRAY) } - _lightGrayBlock = registry.register("${baseName}_light_gray") { provider.invoke(DyeColor.LIGHT_GRAY) } - _cyanBlock = registry.register("${baseName}_cyan") { provider.invoke(DyeColor.CYAN) } - _purpleBlock = registry.register("${baseName}_purple") { provider.invoke(DyeColor.PURPLE) } - _blueBlock = registry.register("${baseName}_blue") { provider.invoke(DyeColor.BLUE) } - _brownBlock = registry.register("${baseName}_brown") { provider.invoke(DyeColor.BROWN) } - _greenBlock = registry.register("${baseName}_green") { provider.invoke(DyeColor.GREEN) } - _redBlock = registry.register("${baseName}_red") { provider.invoke(DyeColor.RED) } - _blackBlock = registry.register("${baseName}_black") { provider.invoke(DyeColor.BLACK) } - } - - private val properties = Item.Properties().tab(itemGroup).stacksTo(64) - - open fun registerItems(registry: DeferredRegister) { - _whiteItem = registry.register("${baseName}_white") { BlockItem(_whiteBlock.get(), properties) } - _orangeItem = registry.register("${baseName}_orange") { BlockItem(_orangeBlock.get(), properties) } - _magentaItem = registry.register("${baseName}_magenta") { BlockItem(_magentaBlock.get(), properties) } - _lightBlueItem = registry.register("${baseName}_light_blue") { BlockItem(_lightBlueBlock.get(), properties) } - _yellowItem = registry.register("${baseName}_yellow") { BlockItem(_yellowBlock.get(), properties) } - _limeItem = registry.register("${baseName}_lime") { BlockItem(_limeBlock.get(), properties) } - _pinkItem = registry.register("${baseName}_pink") { BlockItem(_pinkBlock.get(), properties) } - _grayItem = registry.register("${baseName}_gray") { BlockItem(_grayBlock.get(), properties) } - _lightGrayItem = registry.register("${baseName}_light_gray") { BlockItem(_lightGrayBlock.get(), properties) } - _cyanItem = registry.register("${baseName}_cyan") { BlockItem(_cyanBlock.get(), properties) } - _purpleItem = registry.register("${baseName}_purple") { BlockItem(_purpleBlock.get(), properties) } - _blueItem = registry.register("${baseName}_blue") { BlockItem(_blueBlock.get(), properties) } - _brownItem = registry.register("${baseName}_brown") { BlockItem(_brownBlock.get(), properties) } - _greenItem = registry.register("${baseName}_green") { BlockItem(_greenBlock.get(), properties) } - _redItem = registry.register("${baseName}_red") { BlockItem(_redBlock.get(), properties) } - _blackItem = registry.register("${baseName}_black") { BlockItem(_blackBlock.get(), properties) } - } - - companion object { - fun simple(baseName: String, provider: (DyeColor) -> BlockBehaviour.Properties, itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE): ColoredDecorativeBlock { - return ColoredDecorativeBlock(baseName, { - Block(provider.invoke(it)) - }, itemGroup) - } - } -} - -/** - * Base + Colored - */ -class DecorativeBlock( - baseName: String, - private val provider: (DyeColor?) -> Block, - itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE, - val baseItemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE, -) : ColoredDecorativeBlock(baseName, provider, itemGroup) { - private var _block: RegistryObject by WriteOnce() - private var _item: RegistryObject by WriteOnce() - - val block: Block get() = _block.get() - val item: Item get() = _item.get() - - val mappedColoredBlocksAll: Map by lazy { - LazyMap( - null to _block::get, - DyeColor.WHITE to _whiteBlock::get, - DyeColor.ORANGE to _orangeBlock::get, - DyeColor.MAGENTA to _magentaBlock::get, - DyeColor.LIGHT_BLUE to _lightBlueBlock::get, - DyeColor.YELLOW to _yellowBlock::get, - DyeColor.LIME to _limeBlock::get, - DyeColor.PINK to _pinkBlock::get, - DyeColor.GRAY to _grayBlock::get, - DyeColor.LIGHT_GRAY to _lightGrayBlock::get, - DyeColor.CYAN to _cyanBlock::get, - DyeColor.PURPLE to _purpleBlock::get, - DyeColor.BLUE to _blueBlock::get, - DyeColor.BROWN to _brownBlock::get, - DyeColor.GREEN to _greenBlock::get, - DyeColor.RED to _redBlock::get, - DyeColor.BLACK to _blackBlock::get, - ) - } - - val mappedColoredItemsAll: Map by lazy { - LazyMap( - null to _item::get, - DyeColor.WHITE to _whiteItem::get, - DyeColor.ORANGE to _orangeItem::get, - DyeColor.MAGENTA to _magentaItem::get, - DyeColor.LIGHT_BLUE to _lightBlueItem::get, - DyeColor.YELLOW to _yellowItem::get, - DyeColor.LIME to _limeItem::get, - DyeColor.PINK to _pinkItem::get, - DyeColor.GRAY to _grayItem::get, - DyeColor.LIGHT_GRAY to _lightGrayItem::get, - DyeColor.CYAN to _cyanItem::get, - DyeColor.PURPLE to _purpleItem::get, - DyeColor.BLUE to _blueItem::get, - DyeColor.BROWN to _brownItem::get, - DyeColor.GREEN to _greenItem::get, - DyeColor.RED to _redItem::get, - DyeColor.BLACK to _blackItem::get, - ) - } - - val blocks: List by lazy { - LazyList( - _block::get, - - _whiteBlock::get, - _orangeBlock::get, - _magentaBlock::get, - _lightBlueBlock::get, - _yellowBlock::get, - _limeBlock::get, - _pinkBlock::get, - _grayBlock::get, - _lightGrayBlock::get, - _cyanBlock::get, - _purpleBlock::get, - _blueBlock::get, - _brownBlock::get, - _greenBlock::get, - _redBlock::get, - _blackBlock::get, - ) - } - - val items: List by lazy { - LazyList( - _item::get, - - _whiteItem::get, - _orangeItem::get, - _magentaItem::get, - _lightBlueItem::get, - _yellowItem::get, - _limeItem::get, - _pinkItem::get, - _grayItem::get, - _lightGrayItem::get, - _cyanItem::get, - _purpleItem::get, - _blueItem::get, - _brownItem::get, - _greenItem::get, - _redItem::get, - _blackItem::get, - ) - } - - override fun registerBlocks(registry: DeferredRegister) { - _block = registry.register(baseName) { provider.invoke(DyeColor.WHITE) } - - super.registerBlocks(registry) - } - - override fun registerItems(registry: DeferredRegister) { - _item = registry.register(baseName) { BlockItem(_block.get(), Item.Properties().tab(baseItemGroup).stacksTo(64)) } - - super.registerItems(registry) - } - - companion object { - fun simple(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties, itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE): DecorativeBlock { - return DecorativeBlock(baseName, { - Block(provider.invoke(it)) - }, itemGroup) - } - } -} - object MRegistry { private val features = RegistryDelegate>("android_features") private val research = RegistryDelegate>("android_research") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt new file mode 100644 index 000000000..f11e2ce90 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/ColoredDecorativeBlock.kt @@ -0,0 +1,256 @@ +package ru.dbotthepony.mc.otm.registry.objects + +import net.minecraft.world.item.BlockItem +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockBehaviour +import net.minecraftforge.registries.DeferredRegister +import net.minecraftforge.registries.RegistryObject +import ru.dbotthepony.mc.otm.OverdriveThatMatters +import ru.dbotthepony.mc.otm.registry.LazyList +import ru.dbotthepony.mc.otm.registry.LazyMap +import ru.dbotthepony.mc.otm.registry.WriteOnce + +/** + * Colored only + */ +@Suppress("PropertyName", "unused") +open class ColoredDecorativeBlock( + val baseName: String, + private val provider: (DyeColor) -> Block, + itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE +) { + protected var _whiteBlock: RegistryObject by WriteOnce() + private set + protected var _orangeBlock: RegistryObject by WriteOnce() + private set + protected var _magentaBlock: RegistryObject by WriteOnce() + private set + protected var _lightBlueBlock: RegistryObject by WriteOnce() + private set + protected var _yellowBlock: RegistryObject by WriteOnce() + private set + protected var _limeBlock: RegistryObject by WriteOnce() + private set + protected var _pinkBlock: RegistryObject by WriteOnce() + private set + protected var _grayBlock: RegistryObject by WriteOnce() + private set + protected var _lightGrayBlock: RegistryObject by WriteOnce() + private set + protected var _cyanBlock: RegistryObject by WriteOnce() + private set + protected var _purpleBlock: RegistryObject by WriteOnce() + private set + protected var _blueBlock: RegistryObject by WriteOnce() + private set + protected var _brownBlock: RegistryObject by WriteOnce() + private set + protected var _greenBlock: RegistryObject by WriteOnce() + private set + protected var _redBlock: RegistryObject by WriteOnce() + private set + protected var _blackBlock: RegistryObject by WriteOnce() + private set + + val whiteBlock: Block get() = _whiteBlock.get() + val orangeBlock: Block get() = _orangeBlock.get() + val magentaBlock: Block get() = _magentaBlock.get() + val lightBlueBlock: Block get() = _lightBlueBlock.get() + val yellowBlock: Block get() = _yellowBlock.get() + val limeBlock: Block get() = _limeBlock.get() + val pinkBlock: Block get() = _pinkBlock.get() + val grayBlock: Block get() = _grayBlock.get() + val lightGrayBlock: Block get() = _lightGrayBlock.get() + val cyanBlock: Block get() = _cyanBlock.get() + val purpleBlock: Block get() = _purpleBlock.get() + val blueBlock: Block get() = _blueBlock.get() + val brownBlock: Block get() = _brownBlock.get() + val greenBlock: Block get() = _greenBlock.get() + val redBlock: Block get() = _redBlock.get() + val blackBlock: Block get() = _blackBlock.get() + + protected var _whiteItem: RegistryObject by WriteOnce() + private set + protected var _orangeItem: RegistryObject by WriteOnce() + private set + protected var _magentaItem: RegistryObject by WriteOnce() + private set + protected var _lightBlueItem: RegistryObject by WriteOnce() + private set + protected var _yellowItem: RegistryObject by WriteOnce() + private set + protected var _limeItem: RegistryObject by WriteOnce() + private set + protected var _pinkItem: RegistryObject by WriteOnce() + private set + protected var _grayItem: RegistryObject by WriteOnce() + private set + protected var _lightGrayItem: RegistryObject by WriteOnce() + private set + protected var _cyanItem: RegistryObject by WriteOnce() + private set + protected var _purpleItem: RegistryObject by WriteOnce() + private set + protected var _blueItem: RegistryObject by WriteOnce() + private set + protected var _brownItem: RegistryObject by WriteOnce() + private set + protected var _greenItem: RegistryObject by WriteOnce() + private set + protected var _redItem: RegistryObject by WriteOnce() + private set + protected var _blackItem: RegistryObject by WriteOnce() + private set + + val whiteItem: Item get() = _whiteItem.get() + val orangeItem: Item get() = _orangeItem.get() + val magentaItem: Item get() = _magentaItem.get() + val lightBlueItem: Item get() = _lightBlueItem.get() + val yellowItem: Item get() = _yellowItem.get() + val limeItem: Item get() = _limeItem.get() + val pinkItem: Item get() = _pinkItem.get() + val grayItem: Item get() = _grayItem.get() + val lightGrayItem: Item get() = _lightGrayItem.get() + val cyanItem: Item get() = _cyanItem.get() + val purpleItem: Item get() = _purpleItem.get() + val blueItem: Item get() = _blueItem.get() + val brownItem: Item get() = _brownItem.get() + val greenItem: Item get() = _greenItem.get() + val redItem: Item get() = _redItem.get() + val blackItem: Item get() = _blackItem.get() + + val coloredBlocks: List by lazy { + LazyList( + _whiteBlock::get, + _orangeBlock::get, + _magentaBlock::get, + _lightBlueBlock::get, + _yellowBlock::get, + _limeBlock::get, + _pinkBlock::get, + _grayBlock::get, + _lightGrayBlock::get, + _cyanBlock::get, + _purpleBlock::get, + _blueBlock::get, + _brownBlock::get, + _greenBlock::get, + _redBlock::get, + _blackBlock::get, + ) + } + + val mappedColoredBlocks: Map by lazy { + LazyMap( + DyeColor.WHITE to _whiteBlock::get, + DyeColor.ORANGE to _orangeBlock::get, + DyeColor.MAGENTA to _magentaBlock::get, + DyeColor.LIGHT_BLUE to _lightBlueBlock::get, + DyeColor.YELLOW to _yellowBlock::get, + DyeColor.LIME to _limeBlock::get, + DyeColor.PINK to _pinkBlock::get, + DyeColor.GRAY to _grayBlock::get, + DyeColor.LIGHT_GRAY to _lightGrayBlock::get, + DyeColor.CYAN to _cyanBlock::get, + DyeColor.PURPLE to _purpleBlock::get, + DyeColor.BLUE to _blueBlock::get, + DyeColor.BROWN to _brownBlock::get, + DyeColor.GREEN to _greenBlock::get, + DyeColor.RED to _redBlock::get, + DyeColor.BLACK to _blackBlock::get, + ) + } + + val coloredItems: List by lazy { + LazyList( + _whiteItem::get, + _orangeItem::get, + _magentaItem::get, + _lightBlueItem::get, + _yellowItem::get, + _limeItem::get, + _pinkItem::get, + _grayItem::get, + _lightGrayItem::get, + _cyanItem::get, + _purpleItem::get, + _blueItem::get, + _brownItem::get, + _greenItem::get, + _redItem::get, + _blackItem::get, + ) + } + + val mappedColoredItems: Map by lazy { + LazyMap( + DyeColor.WHITE to _whiteItem::get, + DyeColor.ORANGE to _orangeItem::get, + DyeColor.MAGENTA to _magentaItem::get, + DyeColor.LIGHT_BLUE to _lightBlueItem::get, + DyeColor.YELLOW to _yellowItem::get, + DyeColor.LIME to _limeItem::get, + DyeColor.PINK to _pinkItem::get, + DyeColor.GRAY to _grayItem::get, + DyeColor.LIGHT_GRAY to _lightGrayItem::get, + DyeColor.CYAN to _cyanItem::get, + DyeColor.PURPLE to _purpleItem::get, + DyeColor.BLUE to _blueItem::get, + DyeColor.BROWN to _brownItem::get, + DyeColor.GREEN to _greenItem::get, + DyeColor.RED to _redItem::get, + DyeColor.BLACK to _blackItem::get, + ) + } + + open fun registerBlocks(registry: DeferredRegister) { + _whiteBlock = registry.register("${baseName}_white") { provider.invoke(DyeColor.WHITE) } + _orangeBlock = registry.register("${baseName}_orange") { provider.invoke(DyeColor.ORANGE) } + _magentaBlock = registry.register("${baseName}_magenta") { provider.invoke(DyeColor.MAGENTA) } + _lightBlueBlock = registry.register("${baseName}_light_blue") { provider.invoke(DyeColor.LIGHT_BLUE) } + _yellowBlock = registry.register("${baseName}_yellow") { provider.invoke(DyeColor.YELLOW) } + _limeBlock = registry.register("${baseName}_lime") { provider.invoke(DyeColor.LIME) } + _pinkBlock = registry.register("${baseName}_pink") { provider.invoke(DyeColor.PINK) } + _grayBlock = registry.register("${baseName}_gray") { provider.invoke(DyeColor.GRAY) } + _lightGrayBlock = registry.register("${baseName}_light_gray") { provider.invoke(DyeColor.LIGHT_GRAY) } + _cyanBlock = registry.register("${baseName}_cyan") { provider.invoke(DyeColor.CYAN) } + _purpleBlock = registry.register("${baseName}_purple") { provider.invoke(DyeColor.PURPLE) } + _blueBlock = registry.register("${baseName}_blue") { provider.invoke(DyeColor.BLUE) } + _brownBlock = registry.register("${baseName}_brown") { provider.invoke(DyeColor.BROWN) } + _greenBlock = registry.register("${baseName}_green") { provider.invoke(DyeColor.GREEN) } + _redBlock = registry.register("${baseName}_red") { provider.invoke(DyeColor.RED) } + _blackBlock = registry.register("${baseName}_black") { provider.invoke(DyeColor.BLACK) } + } + + private val properties = Item.Properties().tab(itemGroup).stacksTo(64) + + open fun registerItems(registry: DeferredRegister) { + _whiteItem = registry.register("${baseName}_white") { BlockItem(_whiteBlock.get(), properties) } + _orangeItem = registry.register("${baseName}_orange") { BlockItem(_orangeBlock.get(), properties) } + _magentaItem = registry.register("${baseName}_magenta") { BlockItem(_magentaBlock.get(), properties) } + _lightBlueItem = registry.register("${baseName}_light_blue") { BlockItem(_lightBlueBlock.get(), properties) } + _yellowItem = registry.register("${baseName}_yellow") { BlockItem(_yellowBlock.get(), properties) } + _limeItem = registry.register("${baseName}_lime") { BlockItem(_limeBlock.get(), properties) } + _pinkItem = registry.register("${baseName}_pink") { BlockItem(_pinkBlock.get(), properties) } + _grayItem = registry.register("${baseName}_gray") { BlockItem(_grayBlock.get(), properties) } + _lightGrayItem = registry.register("${baseName}_light_gray") { BlockItem(_lightGrayBlock.get(), properties) } + _cyanItem = registry.register("${baseName}_cyan") { BlockItem(_cyanBlock.get(), properties) } + _purpleItem = registry.register("${baseName}_purple") { BlockItem(_purpleBlock.get(), properties) } + _blueItem = registry.register("${baseName}_blue") { BlockItem(_blueBlock.get(), properties) } + _brownItem = registry.register("${baseName}_brown") { BlockItem(_brownBlock.get(), properties) } + _greenItem = registry.register("${baseName}_green") { BlockItem(_greenBlock.get(), properties) } + _redItem = registry.register("${baseName}_red") { BlockItem(_redBlock.get(), properties) } + _blackItem = registry.register("${baseName}_black") { BlockItem(_blackBlock.get(), properties) } + } + + companion object { + fun simple(baseName: String, provider: (DyeColor) -> BlockBehaviour.Properties, itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE): ColoredDecorativeBlock { + return ColoredDecorativeBlock(baseName, { + Block(provider.invoke(it)) + }, itemGroup) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/CrateProperties.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/CrateProperties.kt new file mode 100644 index 000000000..f909fb76e --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/CrateProperties.kt @@ -0,0 +1,18 @@ +package ru.dbotthepony.mc.otm.registry.objects + +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.SoundType +import net.minecraft.world.level.block.state.BlockBehaviour +import net.minecraft.world.level.material.Material +import net.minecraft.world.level.material.MaterialColor + +class CrateProperties(val color: MaterialColor, val name: String) { + fun makeBlock(): Block { + return Block( + BlockBehaviour.Properties.of(Material.METAL, color) + .sound(SoundType.METAL) + .requiresCorrectToolForDrops() + .strength(5.0F, 6.0F) + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt new file mode 100644 index 000000000..8904090f6 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/objects/DecorativeBlock.kt @@ -0,0 +1,145 @@ +package ru.dbotthepony.mc.otm.registry.objects + +import net.minecraft.world.item.BlockItem +import net.minecraft.world.item.CreativeModeTab +import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockBehaviour +import net.minecraftforge.registries.DeferredRegister +import net.minecraftforge.registries.RegistryObject +import ru.dbotthepony.mc.otm.OverdriveThatMatters +import ru.dbotthepony.mc.otm.registry.LazyList +import ru.dbotthepony.mc.otm.registry.LazyMap +import ru.dbotthepony.mc.otm.registry.WriteOnce + +/** + * Base + Colored + */ +class DecorativeBlock( + baseName: String, + private val provider: (DyeColor?) -> Block, + itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE, + val baseItemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE, +) : ColoredDecorativeBlock(baseName, provider, itemGroup) { + private var _block: RegistryObject by WriteOnce() + private var _item: RegistryObject by WriteOnce() + + val block: Block get() = _block.get() + val item: Item get() = _item.get() + + val mappedColoredBlocksAll: Map by lazy { + LazyMap( + null to _block::get, + DyeColor.WHITE to _whiteBlock::get, + DyeColor.ORANGE to _orangeBlock::get, + DyeColor.MAGENTA to _magentaBlock::get, + DyeColor.LIGHT_BLUE to _lightBlueBlock::get, + DyeColor.YELLOW to _yellowBlock::get, + DyeColor.LIME to _limeBlock::get, + DyeColor.PINK to _pinkBlock::get, + DyeColor.GRAY to _grayBlock::get, + DyeColor.LIGHT_GRAY to _lightGrayBlock::get, + DyeColor.CYAN to _cyanBlock::get, + DyeColor.PURPLE to _purpleBlock::get, + DyeColor.BLUE to _blueBlock::get, + DyeColor.BROWN to _brownBlock::get, + DyeColor.GREEN to _greenBlock::get, + DyeColor.RED to _redBlock::get, + DyeColor.BLACK to _blackBlock::get, + ) + } + + val mappedColoredItemsAll: Map by lazy { + LazyMap( + null to _item::get, + DyeColor.WHITE to _whiteItem::get, + DyeColor.ORANGE to _orangeItem::get, + DyeColor.MAGENTA to _magentaItem::get, + DyeColor.LIGHT_BLUE to _lightBlueItem::get, + DyeColor.YELLOW to _yellowItem::get, + DyeColor.LIME to _limeItem::get, + DyeColor.PINK to _pinkItem::get, + DyeColor.GRAY to _grayItem::get, + DyeColor.LIGHT_GRAY to _lightGrayItem::get, + DyeColor.CYAN to _cyanItem::get, + DyeColor.PURPLE to _purpleItem::get, + DyeColor.BLUE to _blueItem::get, + DyeColor.BROWN to _brownItem::get, + DyeColor.GREEN to _greenItem::get, + DyeColor.RED to _redItem::get, + DyeColor.BLACK to _blackItem::get, + ) + } + + val blocks: List by lazy { + LazyList( + _block::get, + + _whiteBlock::get, + _orangeBlock::get, + _magentaBlock::get, + _lightBlueBlock::get, + _yellowBlock::get, + _limeBlock::get, + _pinkBlock::get, + _grayBlock::get, + _lightGrayBlock::get, + _cyanBlock::get, + _purpleBlock::get, + _blueBlock::get, + _brownBlock::get, + _greenBlock::get, + _redBlock::get, + _blackBlock::get, + ) + } + + val items: List by lazy { + LazyList( + _item::get, + + _whiteItem::get, + _orangeItem::get, + _magentaItem::get, + _lightBlueItem::get, + _yellowItem::get, + _limeItem::get, + _pinkItem::get, + _grayItem::get, + _lightGrayItem::get, + _cyanItem::get, + _purpleItem::get, + _blueItem::get, + _brownItem::get, + _greenItem::get, + _redItem::get, + _blackItem::get, + ) + } + + override fun registerBlocks(registry: DeferredRegister) { + _block = registry.register(baseName) { provider.invoke(DyeColor.WHITE) } + + super.registerBlocks(registry) + } + + override fun registerItems(registry: DeferredRegister) { + _item = registry.register(baseName) { + BlockItem( + _block.get(), + Item.Properties().tab(baseItemGroup).stacksTo(64) + ) + } + + super.registerItems(registry) + } + + companion object { + fun simple(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties, itemGroup: CreativeModeTab = OverdriveThatMatters.INSTANCE.CREATIVE_TAB_DECORATIVE): DecorativeBlock { + return DecorativeBlock(baseName, { + Block(provider.invoke(it)) + }, itemGroup) + } + } +} \ No newline at end of file