Add generics to ColoredDecorativeBlock so manual casts are no longer required

This commit is contained in:
DBotThePony 2025-01-22 22:11:42 +07:00
parent b4c8676daa
commit b01dba2a21
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 27 additions and 27 deletions

View File

@ -427,7 +427,7 @@ object DataGen {
} }
} }
fun decoratives(list: ColoredDecorativeBlock) { fun decoratives(list: ColoredDecorativeBlock<*>) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(block) decorativeCubeAll(block)
} }
@ -437,7 +437,7 @@ object DataGen {
} }
} }
fun decoratives(list: DecorativeBlock) { fun decoratives(list: DecorativeBlock<*>) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(block) decorativeCubeAll(block)
} }
@ -447,7 +447,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, list: ColoredDecorativeBlock) { fun decoratives(subdir: String, list: ColoredDecorativeBlock<*>) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(subdir, block) decorativeCubeAll(subdir, block)
} }
@ -457,7 +457,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, list: DecorativeBlock) { fun decoratives(subdir: String, list: DecorativeBlock<*>) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(subdir, block) decorativeCubeAll(subdir, block)
} }
@ -467,7 +467,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, suffix: String, list: ColoredDecorativeBlock) { fun decoratives(subdir: String, suffix: String, list: ColoredDecorativeBlock<*>) {
for (block in list.blocks.values) { for (block in list.blocks.values) {
decorativeCubeAll(subdir, suffix, block) decorativeCubeAll(subdir, suffix, block)
} }
@ -477,7 +477,7 @@ object DataGen {
} }
} }
fun decoratives(subdir: String, suffix: String, list: DecorativeBlock) { fun decoratives(subdir: String, suffix: String, list: DecorativeBlock<*>) {
for (block in list.allBlocks.values) { for (block in list.allBlocks.values) {
decorativeCubeAll(subdir, suffix, block) decorativeCubeAll(subdir, suffix, block)
} }

View File

@ -49,7 +49,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
} }
for ((color, block) in MRegistry.TRITANIUM_STAIRS.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_STAIRS.allBlocks) {
DataGen.decorativeStairs(block as StairBlock, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path) DataGen.decorativeStairs(block, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path)
} }
for ((color, block) in MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks) {
@ -77,7 +77,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.TRITANIUM_SLAB.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_SLAB.allBlocks) {
blockStateProvider.exec { blockStateProvider.exec {
blockStateProvider.slabBlock( blockStateProvider.slabBlock(
block as SlabBlock, block,
MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!, MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!,
modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path}") modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path}")
) )
@ -87,7 +87,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.FLOOR_TILES_SLAB.blocks) { for ((color, block) in MRegistry.FLOOR_TILES_SLAB.blocks) {
blockStateProvider.exec { blockStateProvider.exec {
blockStateProvider.slabBlock( blockStateProvider.slabBlock(
block as SlabBlock, block,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!, MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!,
modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path}") modLocation("${DataGen.DECORATIVE_BLOCK_LOCATION}/${MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path}")
) )
@ -96,7 +96,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.FLOOR_TILES_STAIRS.blocks) { for ((color, block) in MRegistry.FLOOR_TILES_STAIRS.blocks) {
DataGen.decorativeStairs( DataGen.decorativeStairs(
block as StairBlock, block,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path, MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path,
MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path MRegistry.FLOOR_TILES.blocks[color]!!.registryName!!.path
) )
@ -104,7 +104,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
for ((color, block) in MRegistry.TRITANIUM_WALL.allBlocks) { for ((color, block) in MRegistry.TRITANIUM_WALL.allBlocks) {
DataGen.decorativeWall( DataGen.decorativeWall(
block as WallBlock, block,
sideTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path, sideTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path,
topTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path topTexture = MRegistry.TRITANIUM_BLOCK.allBlocks[color]!!.registryName!!.path
) )

View File

@ -161,7 +161,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
.put(DyeColor.BLACK, black) .put(DyeColor.BLACK, black)
.build() .build()
fun add(list: ColoredDecorativeBlock, toFormat: String) { fun add(list: ColoredDecorativeBlock<*>, toFormat: String) {
for ((color, target) in mapped) { for ((color, target) in mapped) {
slave.add(list.blocks[color]!!, toFormat.format(target)) slave.add(list.blocks[color]!!, toFormat.format(target))
} }

View File

@ -15,9 +15,9 @@ import java.util.function.Supplier
* Colored only * Colored only
*/ */
@Suppress("unused") @Suppress("unused")
open class ColoredDecorativeBlock( open class ColoredDecorativeBlock<B : Block>(
val baseName: String, val baseName: String,
private val provider: (DyeColor) -> Block, private val provider: (DyeColor) -> B,
) : IBlockItemRegistryAcceptor { ) : IBlockItemRegistryAcceptor {
var registeredItems = false var registeredItems = false
private set private set
@ -26,7 +26,7 @@ open class ColoredDecorativeBlock(
private set private set
protected val itemMap = EnumMap<DyeColor, Supplier<Item>>(DyeColor::class.java) protected val itemMap = EnumMap<DyeColor, Supplier<Item>>(DyeColor::class.java)
protected val blockMap = EnumMap<DyeColor, Supplier<Block>>(DyeColor::class.java) protected val blockMap = EnumMap<DyeColor, Supplier<B>>(DyeColor::class.java)
fun forEachItem(consumer: (String, DyeColor, Item) -> Unit) { fun forEachItem(consumer: (String, DyeColor, Item) -> Unit) {
MRegistry.DYE_ORDER.forEach { MRegistry.DYE_ORDER.forEach {
@ -34,7 +34,7 @@ open class ColoredDecorativeBlock(
} }
} }
fun forEachBlock(consumer: (String, DyeColor, Block) -> Unit) { fun forEachBlock(consumer: (String, DyeColor, B) -> Unit) {
MRegistry.DYE_ORDER.forEach { MRegistry.DYE_ORDER.forEach {
consumer.invoke(it.name.lowercase(), it, getBlock(it)) consumer.invoke(it.name.lowercase(), it, getBlock(it))
} }
@ -45,12 +45,12 @@ open class ColoredDecorativeBlock(
return itemMap[dyeColor]!!.get() return itemMap[dyeColor]!!.get()
} }
fun getBlock(dyeColor: DyeColor): Block { fun getBlock(dyeColor: DyeColor): B {
check(registeredBlocks) { "Didn't register items yet" } check(registeredBlocks) { "Didn't register items yet" }
return blockMap[dyeColor]!!.get() return blockMap[dyeColor]!!.get()
} }
val blocks: Map<DyeColor, Block> by lazy { val blocks: Map<DyeColor, B> by lazy {
check(registeredBlocks) { "Didn't register blocks yet" } check(registeredBlocks) { "Didn't register blocks yet" }
SupplierMap(MRegistry.DYE_ORDER.map { it to blockMap[it]!! }) SupplierMap(MRegistry.DYE_ORDER.map { it to blockMap[it]!! })
} }
@ -84,7 +84,7 @@ open class ColoredDecorativeBlock(
} }
companion object { companion object {
fun simple(baseName: String, provider: (DyeColor) -> BlockBehaviour.Properties): ColoredDecorativeBlock { fun simple(baseName: String, provider: (DyeColor) -> BlockBehaviour.Properties): ColoredDecorativeBlock<Block> {
return ColoredDecorativeBlock(baseName) { return ColoredDecorativeBlock(baseName) {
Block(provider.invoke(it)) Block(provider.invoke(it))
} }

View File

@ -26,17 +26,17 @@ import java.util.stream.Stream
/** /**
* Base + Colored * Base + Colored
*/ */
class DecorativeBlock( class DecorativeBlock<B : Block>(
baseName: String, baseName: String,
private val provider: (DyeColor?) -> Block, private val provider: (DyeColor?) -> B,
) : ColoredDecorativeBlock(baseName, provider) { ) : ColoredDecorativeBlock<B>(baseName, provider) {
private var _block: Supplier<Block> by WriteOnce() private var _block: Supplier<B> by WriteOnce()
private var _item: Supplier<Item> by WriteOnce() private var _item: Supplier<Item> by WriteOnce()
val block: Block get() = _block.get() val block: Block get() = _block.get()
val item: Item get() = _item.get() val item: Item get() = _item.get()
val allBlocks: Map<DyeColor?, Block> by lazy { val allBlocks: Map<DyeColor?, B> by lazy {
check(registeredBlocks) { "Didn't register items yet" } check(registeredBlocks) { "Didn't register items yet" }
SupplierMap(Streams.concat(MRegistry.DYE_ORDER.stream().map { it to blockMap[it]!! }, Stream.of(null to _block))) SupplierMap(Streams.concat(MRegistry.DYE_ORDER.stream().map { it to blockMap[it]!! }, Stream.of(null to _block)))
} }
@ -57,19 +57,19 @@ class DecorativeBlock(
} }
companion object { companion object {
fun simple(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock { fun simple(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock<Block> {
return DecorativeBlock(baseName) { return DecorativeBlock(baseName) {
Block(provider.invoke(it)) Block(provider.invoke(it))
} }
} }
fun rotatable(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock { fun rotatable(baseName: String, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock<Block> {
return DecorativeBlock(baseName) { return DecorativeBlock(baseName) {
RotatableMatteryBlock(provider.invoke(it)) RotatableMatteryBlock(provider.invoke(it))
} }
} }
fun rotatable(baseName: String, shape: BlockShape, rotationFreedom: BlockRotationFreedom, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock { fun rotatable(baseName: String, shape: BlockShape, rotationFreedom: BlockRotationFreedom, provider: (DyeColor?) -> BlockBehaviour.Properties): DecorativeBlock<RotatableMatteryBlock> {
return DecorativeBlock(baseName) { return DecorativeBlock(baseName) {
object : RotatableMatteryBlock(provider.invoke(it)) { object : RotatableMatteryBlock(provider.invoke(it)) {
override fun rotationFreedom(): BlockRotationFreedom { override fun rotationFreedom(): BlockRotationFreedom {