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 4535289d3..27956101e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -25,7 +25,6 @@ import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider import ru.dbotthepony.mc.otm.datagen.lang.AddEnglishLanguage import ru.dbotthepony.mc.otm.datagen.loot.LootTables -import ru.dbotthepony.mc.otm.datagen.loot.TileNbtCopy import ru.dbotthepony.mc.otm.datagen.models.BlockMatteryModelProvider import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipeProvider import ru.dbotthepony.mc.otm.datagen.recipes.has @@ -33,6 +32,7 @@ import ru.dbotthepony.mc.otm.registry.* import ru.dbotthepony.mc.otm.core.registryName 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.recipes.addCraftingTableRecipes import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock @@ -119,7 +119,7 @@ object DataGen { private fun decoratives(list: ColoredDecorativeBlock) { for (block in list.coloredBlocks) { decorativeCubeAll(block) - lootTableProvider.simpleBlock(block) + lootTableProvider.dropsSelf(block) } for (item in list.coloredItems) { @@ -130,7 +130,7 @@ object DataGen { private fun decoratives(list: DecorativeBlock) { for (block in list.blocks) { decorativeCubeAll(block) - lootTableProvider.simpleBlock(block) + lootTableProvider.dropsSelf(block) } for (item in list.items) { @@ -535,48 +535,7 @@ object DataGen { } } - val workerTags = arrayOf( - TileNbtCopy("work_ticks"), - TileNbtCopy("current_job"), - TileNbtCopy("battery_container"), - TileNbtCopy("energy"), - ) - - with(lootTableProvider) { - simpleBlocks(MBlocks.CRATE_LIST) - - MRegistry.CARGO_CRATES.blocks.forEach(this::simpleBlock) - MRegistry.INDUSTRIAL_GLASS.blocks.forEach(this::simpleBlock) - MRegistry.INDUSTRIAL_GLASS_PANE.blocks.forEach(this::simpleBlock) - - simpleBlock(MBlocks.CARBON_FIBRE_BLOCK) - simpleBlock(MBlocks.TRITANIUM_RAW_BLOCK) - simpleBlock(MBlocks.TRITANIUM_STRIPED_BLOCK) - simpleBlock(MBlocks.MATTER_CABLE) - simpleBlock(MBlocks.GRAVITATION_STABILIZER) - - tile(MBlocks.ENERGY_COUNTER, TileNbtCopy("passed"), TileNbtCopy("history"), TileNbtCopy("history_tick")) - tile(MBlocks.CHEMICAL_GENERATOR, TileNbtCopy("energy"), TileNbtCopy("container"), TileNbtCopy("working_ticks"), TileNbtCopy("working_ticks_total")) - - tile(MBlocks.ANDROID_STATION, TileNbtCopy("energy"), TileNbtCopy("battery_container")) - tile(MBlocks.BATTERY_BANK, TileNbtCopy("container")) - tile(MBlocks.DRIVE_VIEWER, TileNbtCopy("energy"), TileNbtCopy("container"), TileNbtCopy("battery_container")) - - tile(MBlocks.STORAGE_BUS, TileNbtCopy("energy"), TileNbtCopy("battery_container")) - tile(MBlocks.STORAGE_IMPORTER, TileNbtCopy("energy"), TileNbtCopy("battery_container")) - tile(MBlocks.STORAGE_POWER_SUPPLIER, TileNbtCopy("energy"), TileNbtCopy("battery_container"), TileNbtCopy("power_supplied")) - - tile(MBlocks.MATTER_DECOMPOSER, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) - tile(MBlocks.MATTER_REPLICATOR, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) - tile(MBlocks.MATTER_RECYCLER, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) - tile(MBlocks.MATTER_SCANNER, TileNbtCopy("container"), *workerTags) - tile(MBlocks.PLATE_PRESS, TileNbtCopy("container"), *workerTags) - - tile(MBlocks.MATTER_PANEL, TileNbtCopy("tasks")) - tile(MBlocks.PATTERN_STORAGE, TileNbtCopy("patterns")) - tile(MBlocks.MATTER_CAPACITOR_BANK, TileNbtCopy("container")) - tile(MBlocks.MATTER_BOTTLER, TileNbtCopy("energy"), TileNbtCopy("battery_container"), TileNbtCopy("work_slots"), TileNbtCopy("work_flow"), TileNbtCopy("matter")) - } + addLootTables(lootTableProvider) recipeProvider.lambda { _, consumer -> addCraftingTableRecipes(consumer) } 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 860e90d36..c63037808 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,10 +17,10 @@ import java.util.function.BiConsumer import java.util.function.Consumer import java.util.function.Supplier -typealias LootBuilderCallback = BiConsumer -typealias LootBuilderWorker = Consumer -typealias LootBuilderWorkerSupplier = Supplier -typealias LootTuple = Pair +private typealias LootBuilderCallback = BiConsumer +private typealias LootBuilderWorker = Consumer +private typealias LootBuilderWorkerSupplier = Supplier +private typealias LootTuple = Pair fun singleLootPool(f: (LootPool.Builder) -> Unit): LootTable.Builder { return LootTable.lootTable().withPool(LootPool.lootPool().also(f)) @@ -42,7 +42,7 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { providers.add(Pair(Supplier {provider}, LootContextParamSets.BLOCK)) } - fun simpleBlock(block: Block) { + fun dropsSelf(block: Block) { block { it.accept(block.lootTable, singleLootPool { it.add(LootItem.lootTableItem(block)) @@ -50,12 +50,12 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { } } - fun simpleBlocks(vararg blocks: Block) { - blocks.forEach(this::simpleBlock) + fun dropsSelf(vararg blocks: Block) { + blocks.forEach(this::dropsSelf) } - fun simpleBlocks(blocks: List) { - blocks.forEach(this::simpleBlock) + fun dropsSelf(blocks: List) { + blocks.forEach(this::dropsSelf) } fun tile(block: Block, f: (CopyNbtFunction.Builder) -> Unit = {}) { @@ -80,10 +80,6 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { } fun tile(block: Block, vararg tags: TileNbtCopy) { - tile(block) { - for ((source, strategy) in tags) { - it.copy(source, "BlockEntityTag.$source", strategy) - } - } + tile(block, *tags.map { NbtCopy(it.source, "BlockEntityTag.${it.source}", it.strategy) }.toTypedArray()) } } 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 new file mode 100644 index 000000000..127c78a18 --- /dev/null +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -0,0 +1,53 @@ +package ru.dbotthepony.mc.otm.datagen.loot + +import ru.dbotthepony.mc.otm.registry.MBlocks +import ru.dbotthepony.mc.otm.registry.MRegistry + +private val workerTags = arrayOf( + TileNbtCopy("work_ticks"), + TileNbtCopy("current_job"), + TileNbtCopy("battery_container"), + TileNbtCopy("energy"), +) + +fun addLootTables(lootTables: LootTables) { + lootTables.dropsSelf(MBlocks.CRATE_LIST) + + lootTables.dropsSelf(MRegistry.CARGO_CRATES.blocks) + lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.blocks) + lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.blocks) + lootTables.dropsSelf(MRegistry.TRITANIUM_BLOCK.blocks) + lootTables.dropsSelf(MRegistry.VENT.blocks) + lootTables.dropsSelf(MRegistry.VENT_ALTERNATIVE.blocks) + lootTables.dropsSelf(MRegistry.FLOOR_TILES.coloredBlocks) + lootTables.dropsSelf(MRegistry.UNREFINED_FLOOR_TILES.coloredBlocks) + lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_BLOCK.blocks) + + lootTables.dropsSelf(MBlocks.CARBON_FIBRE_BLOCK) + lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) + lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK) + lootTables.dropsSelf(MBlocks.MATTER_CABLE) + lootTables.dropsSelf(MBlocks.GRAVITATION_STABILIZER) + + lootTables.tile(MBlocks.ENERGY_COUNTER, TileNbtCopy("passed"), TileNbtCopy("history"), TileNbtCopy("history_tick")) + lootTables.tile(MBlocks.CHEMICAL_GENERATOR, TileNbtCopy("energy"), TileNbtCopy("container"), TileNbtCopy("working_ticks"), TileNbtCopy("working_ticks_total")) + + lootTables.tile(MBlocks.ANDROID_STATION, TileNbtCopy("energy"), TileNbtCopy("battery_container")) + lootTables.tile(MBlocks.BATTERY_BANK, TileNbtCopy("container")) + lootTables.tile(MBlocks.DRIVE_VIEWER, TileNbtCopy("energy"), TileNbtCopy("container"), TileNbtCopy("battery_container")) + + lootTables.tile(MBlocks.STORAGE_BUS, TileNbtCopy("energy"), TileNbtCopy("battery_container")) + lootTables.tile(MBlocks.STORAGE_IMPORTER, TileNbtCopy("energy"), TileNbtCopy("battery_container")) + lootTables.tile(MBlocks.STORAGE_POWER_SUPPLIER, TileNbtCopy("energy"), TileNbtCopy("battery_container"), TileNbtCopy("power_supplied")) + + lootTables.tile(MBlocks.MATTER_DECOMPOSER, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) + lootTables.tile(MBlocks.MATTER_REPLICATOR, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) + lootTables.tile(MBlocks.MATTER_RECYCLER, TileNbtCopy("container"), TileNbtCopy("matter"), *workerTags) + lootTables.tile(MBlocks.MATTER_SCANNER, TileNbtCopy("container"), *workerTags) + lootTables.tile(MBlocks.PLATE_PRESS, TileNbtCopy("container"), *workerTags) + + lootTables.tile(MBlocks.MATTER_PANEL, TileNbtCopy("tasks")) + lootTables.tile(MBlocks.PATTERN_STORAGE, TileNbtCopy("patterns")) + lootTables.tile(MBlocks.MATTER_CAPACITOR_BANK, TileNbtCopy("container")) + lootTables.tile(MBlocks.MATTER_BOTTLER, TileNbtCopy("energy"), TileNbtCopy("battery_container"), TileNbtCopy("work_slots"), TileNbtCopy("work_flow"), TileNbtCopy("matter")) +}