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 49e087b3f..f0182dba7 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -521,12 +521,6 @@ object DataGen { event.generator.addProvider(event.includeServer(), advancementProvider) event.generator.addProvider(event.includeServer(), matterData) - val registrySetBuilder = RegistrySetBuilder() - .add(Registry.CONFIGURED_FEATURE_REGISTRY, ::registerConfiguredFeatures) - .add(Registry.PLACED_FEATURE_REGISTRY, ::registerPlacedFeatures) - - event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator, registrySetBuilder, setOf(MOD_ID))) - AddEnglishLanguage(languageProvider) AddRussianLanguage(languageProvider) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt deleted file mode 100644 index 2e7de16ef..000000000 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt +++ /dev/null @@ -1,58 +0,0 @@ -package ru.dbotthepony.mc.otm.datagen - -import net.minecraft.core.RegistrySetBuilder -import net.minecraft.core.registries.Registries -import net.minecraft.data.worldgen.BootstapContext -import net.minecraft.resources.ResourceKey -import net.minecraft.tags.BlockTags -import net.minecraft.world.level.levelgen.VerticalAnchor -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature -import net.minecraft.world.level.levelgen.feature.Feature -import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration -import net.minecraft.world.level.levelgen.placement.CountPlacement -import net.minecraft.world.level.levelgen.placement.HeightRangePlacement -import net.minecraft.world.level.levelgen.placement.InSquarePlacement -import net.minecraft.world.level.levelgen.placement.PlacedFeature -import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest -import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider -import net.minecraftforge.data.event.GatherDataEvent -import ru.dbotthepony.mc.otm.registry.MBlocks - -private val oreKey by lazy { ResourceKey.create(Registries.CONFIGURED_FEATURE, modLocation("tritanium_ore")) } - -fun registerConfiguredFeatures(context: BootstapContext>) { - val stone = TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES) - val deepslate = TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES) - - val target = listOf( - OreConfiguration.target(stone, MBlocks.TRITANIUM_ORE.defaultBlockState()), - OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_TRITANIUM_ORE.defaultBlockState()), - ) - - context.register(oreKey, ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9))) -} - -fun registerPlacedFeatures(context: BootstapContext) { - fun location(name: String) = ResourceKey.create(Registries.PLACED_FEATURE, modLocation(name)) - - val configured = context.lookup(Registries.CONFIGURED_FEATURE) - val ore = configured.getOrThrow(oreKey) - - context.register(location("normal_tritanium"), PlacedFeature( - ore, - listOf( - CountPlacement.of(8), - InSquarePlacement.spread(), - HeightRangePlacement.triangle(VerticalAnchor.absolute(0), VerticalAnchor.absolute(50)) - ) - )) - - context.register(location("deep_tritanium"), PlacedFeature( - ore, - listOf( - CountPlacement.of(10), - InSquarePlacement.spread(), - HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(8), VerticalAnchor.absolute(0)) - ) - )) -} 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 dd30ee7be..136fddbe7 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 @@ -3,12 +3,12 @@ package ru.dbotthepony.mc.otm.datagen.loot +import com.mojang.datafixers.util.Pair import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction import net.minecraft.advancements.critereon.StatePropertiesPredicate import net.minecraft.data.DataGenerator import net.minecraft.data.loot.LootTableProvider -import net.minecraft.data.loot.LootTableSubProvider import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block @@ -25,10 +25,11 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition import net.minecraft.world.level.storage.loot.providers.number.ConstantValue -import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity -import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity import ru.dbotthepony.mc.otm.core.stream import ru.dbotthepony.mc.otm.data.loot.CopyTileNbtFunction +import java.util.function.BiConsumer +import java.util.function.Consumer +import java.util.function.Supplier data class NbtCopy(val source: String, val destination: String, val strategy: CopyNbtFunction.MergeStrategy = CopyNbtFunction.MergeStrategy.REPLACE) @@ -51,10 +52,10 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator) { .put(id, provider) == null) { "Duplicate loot pool entry for $id" } } - override fun getTables(): List { + override fun getTables(): List>>, LootContextParamSet>> { return providersTable.entries.stream().map { entry -> - SubProviderEntry({ - LootTableSubProvider { + Pair.of(Supplier>> { + Consumer { for ((id, callback) in entry.value) { it.accept(id, callback.invoke()) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt index 0a15d6bd5..b4d79735e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MRegistry.kt @@ -293,6 +293,7 @@ object MRegistry { MRecipes.register(bus) StorageStack.register(bus) MatteryChestMenu.register(bus) + ДатьЛещаСломатьКолени.register(bus) if (FMLEnvironment.dist == Dist.CLIENT) { MBlockColors.register(bus) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/ДатьЛещаСломатьКолени.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/ДатьЛещаСломатьКолени.kt new file mode 100644 index 000000000..2cf1448f4 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/ДатьЛещаСломатьКолени.kt @@ -0,0 +1,59 @@ +package ru.dbotthepony.mc.otm.registry + +import net.minecraft.data.BuiltinRegistries +import net.minecraft.tags.BlockTags +import net.minecraft.world.level.levelgen.VerticalAnchor +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature +import net.minecraft.world.level.levelgen.feature.Feature +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration +import net.minecraft.world.level.levelgen.placement.CountPlacement +import net.minecraft.world.level.levelgen.placement.HeightRangePlacement +import net.minecraft.world.level.levelgen.placement.InSquarePlacement +import net.minecraft.world.level.levelgen.placement.PlacedFeature +import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest +import net.minecraftforge.eventbus.api.IEventBus +import net.minecraftforge.registries.DeferredRegister +import net.minecraftforge.registries.RegistryObject +import ru.dbotthepony.mc.otm.OverdriveThatMatters + +private val stone = TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES) +private val deepslate = TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES) + +private val target = listOf( + OreConfiguration.target(stone, MBlocks.TRITANIUM_ORE.defaultBlockState()), + OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_TRITANIUM_ORE.defaultBlockState()), +) + +object ДатьЛещаСломатьКолени { + private val configuredFeatures = DeferredRegister.create(BuiltinRegistries.CONFIGURED_FEATURE.key(), OverdriveThatMatters.MOD_ID) + private val placementConfigs = DeferredRegister.create(BuiltinRegistries.PLACED_FEATURE.key(), OverdriveThatMatters.MOD_ID) + + val tritaniumConfig: RegistryObject> = configuredFeatures.register("tritanium_ore") { ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9)) } + + val tritaniumPlacementNormal: RegistryObject = placementConfigs.register("normal_tritanium") { + PlacedFeature( + tritaniumConfig.holder.get(), + listOf( + CountPlacement.of(8), + InSquarePlacement.spread(), + HeightRangePlacement.triangle(VerticalAnchor.absolute(0), VerticalAnchor.absolute(50)) + ) + ) + } + + val tritaniumPlacementDeepslate: RegistryObject = placementConfigs.register("deep_tritanium") { + PlacedFeature( + tritaniumConfig.holder.get(), + listOf( + CountPlacement.of(10), + InSquarePlacement.spread(), + HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(8), VerticalAnchor.absolute(0)) + ) + ) + } + + internal fun register(bus: IEventBus) { + configuredFeatures.register(bus) + placementConfigs.register(bus) + } +}