Compare commits

...

3 Commits

6 changed files with 30 additions and 31 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

@ -597,7 +597,7 @@ infix fun FluidStack.isNotSameAs(other: FluidStack): Boolean {
data class DoublePair(val first: Double, val second: Double) data class DoublePair(val first: Double, val second: Double)
// normal distribution via Box-Muller // normal distribution via Marsaglia polar method
fun RandomGenerator.nextNormalDoubles(stddev: Double, mean: Double): DoublePair { fun RandomGenerator.nextNormalDoubles(stddev: Double, mean: Double): DoublePair {
var rand1: Double var rand1: Double
var rand2: Double var rand2: Double
@ -607,7 +607,7 @@ fun RandomGenerator.nextNormalDoubles(stddev: Double, mean: Double): DoublePair
rand1 = 2.0 * nextDouble() - 1.0 rand1 = 2.0 * nextDouble() - 1.0
rand2 = 2.0 * nextDouble() - 1.0 rand2 = 2.0 * nextDouble() - 1.0
distSqr = rand1 * rand1 + rand2 * rand2 distSqr = rand1 * rand1 + rand2 * rand2
} while (distSqr >= 1) } while (distSqr >= 1.0 || distSqr == 0.0)
val mapping = sqrt(-2.0 * ln(distSqr) / distSqr) val mapping = sqrt(-2.0 * ln(distSqr) / distSqr)
@ -617,8 +617,7 @@ fun RandomGenerator.nextNormalDoubles(stddev: Double, mean: Double): DoublePair
) )
} }
// All Mojang's random sources use MarsagliaPolarGaussian for generating normal distributed doubles, // All Mojang's random sources use MarsagliaPolarGaussian for generating normal distributed doubles
// which is Box-Muller transform already, so we can use that
fun RandomSource.nextNormalDoubles(stddev: Double, mean: Double): DoublePair { fun RandomSource.nextNormalDoubles(stddev: Double, mean: Double): DoublePair {
return DoublePair( return DoublePair(
nextGaussian() * stddev + mean, nextGaussian() * stddev + mean,

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 {