Move registry helper classes to subpackage

This commit is contained in:
DBotThePony 2022-08-28 12:49:33 +07:00
parent c0d71a49fc
commit 56d5277988
Signed by: DBot
GPG Key ID: DCC23B5715498507
6 changed files with 425 additions and 384 deletions

View File

@ -37,6 +37,8 @@ import ru.dbotthepony.mc.otm.registry.*
import ru.dbotthepony.mc.otm.* import ru.dbotthepony.mc.otm.*
import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipe import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipe
import ru.dbotthepony.mc.otm.datagen.recipes.addCraftingTableRecipes 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) @Mod.EventBusSubscriber(modid = DataGen.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
object DataGen { object DataGen {

View File

@ -16,7 +16,7 @@ import net.minecraftforge.common.data.LanguageProvider
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.android.AndroidFeatureType import ru.dbotthepony.mc.otm.android.AndroidFeatureType
import ru.dbotthepony.mc.otm.android.AndroidResearchType 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 { private fun researchString(key: AndroidResearchType<*>): String {
val displayName = key.displayName val displayName = key.displayName

View File

@ -9,10 +9,6 @@ import net.minecraft.resources.ResourceKey
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.entity.EntityType 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.BlockGetter
import net.minecraft.world.level.block.* import net.minecraft.world.level.block.*
import net.minecraft.world.level.block.state.BlockBehaviour 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.Material
import net.minecraft.world.level.material.MaterialColor import net.minecraft.world.level.material.MaterialColor
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistry import net.minecraftforge.registries.ForgeRegistry
import net.minecraftforge.registries.IForgeRegistry import net.minecraftforge.registries.IForgeRegistry
import net.minecraftforge.registries.NewRegistryEvent import net.minecraftforge.registries.NewRegistryEvent
import net.minecraftforge.registries.RegistryBuilder import net.minecraftforge.registries.RegistryBuilder
import net.minecraftforge.registries.RegistryObject
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.android.AndroidFeatureType import ru.dbotthepony.mc.otm.android.AndroidFeatureType
import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.android.AndroidResearchType
import ru.dbotthepony.mc.otm.block.CargoCrateBlock 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 java.util.function.Supplier
import kotlin.properties.ReadWriteProperty import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@ -42,15 +39,6 @@ fun <T> Registry<T>.register(key: ResourceLocation, value: T): Holder<T> {
return (this as WritableRegistry<T>).register(ResourceKey.create(key(), key), value, Lifecycle.stable()) return (this as WritableRegistry<T>).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<T>(key: String) { private class RegistryDelegate<T>(key: String) {
private var value: Supplier<IForgeRegistry<T>?>? = null private var value: Supplier<IForgeRegistry<T>?>? = null
@ -91,374 +79,6 @@ class WriteOnce<V> : ReadWriteProperty<Any, V> {
} }
} }
/**
* 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<Block> by WriteOnce()
private set
protected var _orangeBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _magentaBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _lightBlueBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _yellowBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _limeBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _pinkBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _grayBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _lightGrayBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _cyanBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _purpleBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _blueBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _brownBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _greenBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _redBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _blackBlock: RegistryObject<Block> 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<Item> by WriteOnce()
private set
protected var _orangeItem: RegistryObject<Item> by WriteOnce()
private set
protected var _magentaItem: RegistryObject<Item> by WriteOnce()
private set
protected var _lightBlueItem: RegistryObject<Item> by WriteOnce()
private set
protected var _yellowItem: RegistryObject<Item> by WriteOnce()
private set
protected var _limeItem: RegistryObject<Item> by WriteOnce()
private set
protected var _pinkItem: RegistryObject<Item> by WriteOnce()
private set
protected var _grayItem: RegistryObject<Item> by WriteOnce()
private set
protected var _lightGrayItem: RegistryObject<Item> by WriteOnce()
private set
protected var _cyanItem: RegistryObject<Item> by WriteOnce()
private set
protected var _purpleItem: RegistryObject<Item> by WriteOnce()
private set
protected var _blueItem: RegistryObject<Item> by WriteOnce()
private set
protected var _brownItem: RegistryObject<Item> by WriteOnce()
private set
protected var _greenItem: RegistryObject<Item> by WriteOnce()
private set
protected var _redItem: RegistryObject<Item> by WriteOnce()
private set
protected var _blackItem: RegistryObject<Item> 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<Block> 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<DyeColor, Block> 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<Item> 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<DyeColor, Item> 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<Block>) {
_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<Item>) {
_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<Block> by WriteOnce()
private var _item: RegistryObject<Item> by WriteOnce()
val block: Block get() = _block.get()
val item: Item get() = _item.get()
val mappedColoredBlocksAll: Map<DyeColor?, Block> 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<DyeColor?, Item> 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<Block> 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<Item> 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>) {
_block = registry.register(baseName) { provider.invoke(DyeColor.WHITE) }
super.registerBlocks(registry)
}
override fun registerItems(registry: DeferredRegister<Item>) {
_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 { object MRegistry {
private val features = RegistryDelegate<AndroidFeatureType<*>>("android_features") private val features = RegistryDelegate<AndroidFeatureType<*>>("android_features")
private val research = RegistryDelegate<AndroidResearchType<*>>("android_research") private val research = RegistryDelegate<AndroidResearchType<*>>("android_research")

View File

@ -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<Block> by WriteOnce()
private set
protected var _orangeBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _magentaBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _lightBlueBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _yellowBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _limeBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _pinkBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _grayBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _lightGrayBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _cyanBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _purpleBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _blueBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _brownBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _greenBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _redBlock: RegistryObject<Block> by WriteOnce()
private set
protected var _blackBlock: RegistryObject<Block> 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<Item> by WriteOnce()
private set
protected var _orangeItem: RegistryObject<Item> by WriteOnce()
private set
protected var _magentaItem: RegistryObject<Item> by WriteOnce()
private set
protected var _lightBlueItem: RegistryObject<Item> by WriteOnce()
private set
protected var _yellowItem: RegistryObject<Item> by WriteOnce()
private set
protected var _limeItem: RegistryObject<Item> by WriteOnce()
private set
protected var _pinkItem: RegistryObject<Item> by WriteOnce()
private set
protected var _grayItem: RegistryObject<Item> by WriteOnce()
private set
protected var _lightGrayItem: RegistryObject<Item> by WriteOnce()
private set
protected var _cyanItem: RegistryObject<Item> by WriteOnce()
private set
protected var _purpleItem: RegistryObject<Item> by WriteOnce()
private set
protected var _blueItem: RegistryObject<Item> by WriteOnce()
private set
protected var _brownItem: RegistryObject<Item> by WriteOnce()
private set
protected var _greenItem: RegistryObject<Item> by WriteOnce()
private set
protected var _redItem: RegistryObject<Item> by WriteOnce()
private set
protected var _blackItem: RegistryObject<Item> 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<Block> 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<DyeColor, Block> 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<Item> 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<DyeColor, Item> 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<Block>) {
_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<Item>) {
_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)
}
}
}

View File

@ -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)
)
}
}

View File

@ -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<Block> by WriteOnce()
private var _item: RegistryObject<Item> by WriteOnce()
val block: Block get() = _block.get()
val item: Item get() = _item.get()
val mappedColoredBlocksAll: Map<DyeColor?, Block> 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<DyeColor?, Item> 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<Block> 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<Item> 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>) {
_block = registry.register(baseName) { provider.invoke(DyeColor.WHITE) }
super.registerBlocks(registry)
}
override fun registerItems(registry: DeferredRegister<Item>) {
_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)
}
}
}