From 2b50109fd5d982869059b97162503cdca84274ce Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Thu, 27 Oct 2022 16:13:57 +0700 Subject: [PATCH] Check for "survives explosion" Fixes #161 --- .../mc/otm/datagen/loot/LootTables.kt | 27 ++++++-- .../mc/otm/datagen/loot/LootTablesData.kt | 67 ++++++++++--------- 2 files changed, 56 insertions(+), 38 deletions(-) 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 a88abc8cb..6aa71da6f 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 @@ -18,6 +18,7 @@ import net.minecraft.world.level.storage.loot.LootPool import net.minecraft.world.level.storage.loot.LootTable import net.minecraft.world.level.storage.loot.ValidationContext import net.minecraft.world.level.storage.loot.entries.LootItem +import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet @@ -93,7 +94,7 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { override fun validate(map: MutableMap, validationtracker: ValidationContext) {} - fun createSlabItemTable(block: Block) { + fun createSlabItemTable(block: Block, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) { builder(LootContextParamSets.BLOCK, block.lootTable) { withPool( LootPool.lootPool().setRolls(ConstantValue.exactly(1.0f)).add( @@ -106,14 +107,16 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { .hasProperty(SlabBlock.TYPE, SlabType.DOUBLE) ) ) - ) + ).also(configurator) ) ) } } - fun createSlabItemTable(block: Collection) { - block.forEach(this::createSlabItemTable) + fun createSlabItemTable(blocks: Collection, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) { + for (block in blocks) { + createSlabItemTable(block, configurator) + } } fun blockProvider(block: Block, provider: () -> LootTable.Builder) { @@ -141,13 +144,23 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { fun dropsSelf(vararg blocks: Block) { for (block in blocks) { singleLootPool(LootContextParamSets.BLOCK, block.lootTable) { - add(LootItem.lootTableItem(block)) + item(block) {} } } } - fun dropsSelf(blocks: Collection) { - blocks.forEach(this::dropsSelf) + fun dropsSelf(block: Block, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) { + singleLootPool(LootContextParamSets.BLOCK, block.lootTable) { + item(block, configurator) + } + } + + fun dropsSelf(blocks: Collection, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) { + for (block in blocks) { + singleLootPool(LootContextParamSets.BLOCK, block.lootTable) { + item(block, configurator) + } + } } fun tile(block: Block, f: (CopyNbtFunction.Builder) -> Unit = {}) { 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 index 651c175d4..2a921f87b 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/loot/LootTablesData.kt @@ -7,6 +7,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties import net.minecraft.world.level.block.state.properties.DoubleBlockHalf import net.minecraft.world.level.storage.loot.entries.LootItem import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets +import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition import ru.dbotthepony.mc.otm.block.entity.ChemicalGeneratorBlockEntity import ru.dbotthepony.mc.otm.block.entity.EnergyCounterBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity.Companion.ENERGY_KEY @@ -22,45 +23,45 @@ import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MRegistry fun addLootTables(lootTables: LootTables) { - lootTables.dropsSelf(MRegistry.DECORATIVE_CRATE.allBlocks.values) + lootTables.dropsSelf(MRegistry.DECORATIVE_CRATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } - lootTables.dropsSelf(MRegistry.CARGO_CRATES.allBlocks.values) - lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) - lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values) - lootTables.dropsSelf(MRegistry.TRITANIUM_BLOCK.allBlocks.values) - lootTables.dropsSelf(MRegistry.TRITANIUM_WALL.allBlocks.values) - lootTables.dropsSelf(MRegistry.TRITANIUM_STAIRS.allBlocks.values) + lootTables.dropsSelf(MRegistry.CARGO_CRATES.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_BLOCK.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_WALL.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_STAIRS.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } lootTables.createSlabItemTable(MRegistry.TRITANIUM_SLAB.allBlocks.values) - lootTables.dropsSelf(MRegistry.VENT.allBlocks.values) - lootTables.dropsSelf(MRegistry.VENT_ALTERNATIVE.allBlocks.values) - lootTables.dropsSelf(MRegistry.FLOOR_TILES.blocks.values) - lootTables.dropsSelf(MRegistry.UNREFINED_FLOOR_TILES.blocks.values) - lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks) - lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks) - lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks) - lootTables.createSlabItemTable(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks) + lootTables.dropsSelf(MRegistry.VENT.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.VENT_ALTERNATIVE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.UNREFINED_FLOOR_TILES.blocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_BLOCK.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.createSlabItemTable(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks) { condition(ExplosionCondition.survivesExplosion()) } - lootTables.dropsSelf(MRegistry.FLOOR_TILES_STAIRS.blocks.values) - lootTables.createSlabItemTable(MRegistry.FLOOR_TILES_SLAB.blocks.values) + lootTables.dropsSelf(MRegistry.FLOOR_TILES_STAIRS.blocks.values) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.createSlabItemTable(MRegistry.FLOOR_TILES_SLAB.blocks.values) { condition(ExplosionCondition.survivesExplosion()) } - lootTables.dropsSelf(MBlocks.CARBON_FIBRE_BLOCK) - lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) - lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK) - lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_WALL) - lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_STAIRS) - lootTables.createSlabItemTable(MBlocks.TRITANIUM_STRIPED_SLAB) - lootTables.dropsSelf(MBlocks.MATTER_CABLE) + lootTables.dropsSelf(MBlocks.CARBON_FIBRE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.TRITANIUM_RAW_BLOCK) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_BLOCK) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_WALL) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.TRITANIUM_STRIPED_STAIRS) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.createSlabItemTable(MBlocks.TRITANIUM_STRIPED_SLAB) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.MATTER_CABLE) { condition(ExplosionCondition.survivesExplosion()) } lootTables.dropsSelf(MBlocks.GRAVITATION_STABILIZER) lootTables.dropsOther(MBlocks.GRAVITATION_STABILIZER_LENS, MBlocks.GRAVITATION_STABILIZER) - lootTables.dropsSelf(MBlocks.LABORATORY_LAMP) - lootTables.dropsSelf(MBlocks.LABORATORY_LAMP_INVERTED) - lootTables.dropsSelf(MBlocks.DANGER_STRIPE_BLOCK) - lootTables.dropsSelf(MBlocks.METAL_BEAM) - lootTables.dropsSelf(MBlocks.TRITANIUM_INGOT_BLOCK) + lootTables.dropsSelf(MBlocks.LABORATORY_LAMP) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.LABORATORY_LAMP_INVERTED) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.DANGER_STRIPE_BLOCK) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.METAL_BEAM) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MBlocks.TRITANIUM_INGOT_BLOCK) { condition(ExplosionCondition.survivesExplosion()) } - lootTables.dropsSelf(MBlocks.TRITANIUM_TRAPDOOR) - lootTables.dropsSelf(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values) + lootTables.dropsSelf(MBlocks.TRITANIUM_TRAPDOOR) { condition(ExplosionCondition.survivesExplosion()) } + lootTables.dropsSelf(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values) { condition(ExplosionCondition.survivesExplosion()) } lootTables.block(MBlocks.PHANTOM_ATTRACTOR) { item(MBlocks.PHANTOM_ATTRACTOR) { @@ -68,6 +69,8 @@ fun addLootTables(lootTables: LootTables) { this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER } } + + condition(ExplosionCondition.survivesExplosion()) } lootTables.block(MBlocks.TRITANIUM_DOOR) { @@ -76,6 +79,8 @@ fun addLootTables(lootTables: LootTables) { this[BlockStateProperties.DOUBLE_BLOCK_HALF] = DoubleBlockHalf.LOWER } } + + condition(ExplosionCondition.survivesExplosion()) } lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("research_all_android")) {