From fe91b184a67e5f9095009deff82c719560c675cc Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 13 Jan 2023 22:33:57 +0700 Subject: [PATCH] Proper ore json datagen --- .../ru/dbotthepony/mc/otm/datagen/OreGen.kt | 83 +++++++------------ 1 file changed, 28 insertions(+), 55 deletions(-) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt index 6eade58f3..a52d3dbb6 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/OreGen.kt @@ -1,13 +1,9 @@ package ru.dbotthepony.mc.otm.datagen -import com.mojang.serialization.JsonOps -import net.minecraft.core.Holder -import net.minecraft.core.HolderOwner +import net.minecraft.core.RegistrySetBuilder import net.minecraft.core.registries.Registries -import net.minecraft.resources.RegistryOps +import net.minecraft.data.worldgen.BootstapContext import net.minecraft.resources.ResourceKey -import net.minecraft.resources.ResourceLocation -import net.minecraft.server.packs.PackType import net.minecraft.tags.BlockTags import net.minecraft.world.level.levelgen.VerticalAnchor import net.minecraft.world.level.levelgen.feature.ConfiguredFeature @@ -18,56 +14,32 @@ 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.JsonCodecProvider +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider import net.minecraftforge.data.event.GatherDataEvent import ru.dbotthepony.mc.otm.registry.MBlocks -private object Owner : HolderOwner { - override fun canSerializeIn(p_255875_: HolderOwner): Boolean { - return true // because we can always reference things, even if they are not "registered" at this moment - } -} +private val oreKey by lazy { ResourceKey.create(Registries.CONFIGURED_FEATURE, modLocation("tritanium_ore")) } -private data class Both(val key: Holder, val value: Holder) - -private fun createHolders(key: ResourceKey, value: T): Both { - val keyOnly = Holder.Reference.createStandAlone(Owner as HolderOwner, key) - val valueOnly = Holder.direct(value) - return Both(keyOnly, valueOnly) -} - -private fun remap(vararg input: Both): Map> { - val result = LinkedHashMap>() - - for (value in input) { - result[value.key.unwrapKey().get().location()] = value.value - } - - return result -} - -fun registerOreGen(event: GatherDataEvent) { +private fun configuredFeatures(context: BootstapContext>) { val stone = TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES) val deepslate = TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES) - val target by lazy { - listOf( - OreConfiguration.target(stone, MBlocks.TRITANIUM_ORE.defaultBlockState()), - OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_TRITANIUM_ORE.defaultBlockState()), - ) - } + val target = listOf( + OreConfiguration.target(stone, MBlocks.TRITANIUM_ORE.defaultBlockState()), + OreConfiguration.target(deepslate, MBlocks.DEEPSLATE_TRITANIUM_ORE.defaultBlockState()), + ) - val ops = RegistryOps.create(JsonOps.INSTANCE, event.lookupProvider.join()) - val tritanium = createHolders(ResourceKey.create(Registries.CONFIGURED_FEATURE, modLocation("ore_tritanium")), ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9))) - val configuredFeatures = remap(tritanium) + context.register(oreKey, ConfiguredFeature(Feature.ORE, OreConfiguration(target, 9))) +} - event.generator.addProvider(event.includeServer(), JsonCodecProvider( - event.generator.packOutput, event.existingFileHelper, DataGen.MOD_ID, ops, - PackType.SERVER_DATA, "worldgen/configured_feature", ConfiguredFeature.CODEC, configuredFeatures - )) +private fun placedFeatures(context: BootstapContext) { + fun location(name: String) = ResourceKey.create(Registries.PLACED_FEATURE, modLocation(name)) - val placedTritanium = createHolders(ResourceKey.create(Registries.PLACED_FEATURE, modLocation("normal_tritanium")), PlacedFeature( - tritanium.key, + 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(), @@ -75,19 +47,20 @@ fun registerOreGen(event: GatherDataEvent) { ) )) - val placedTritaniumDeep = createHolders(ResourceKey.create(Registries.PLACED_FEATURE, modLocation("deep_tritanium")), PlacedFeature( - tritanium.key, + context.register(location("deep_tritanium"), PlacedFeature( + ore, listOf( CountPlacement.of(10), InSquarePlacement.spread(), HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(8), VerticalAnchor.absolute(0)) ) )) - - val placedFeatures = remap(placedTritanium, placedTritaniumDeep) - - event.generator.addProvider(event.includeServer(), JsonCodecProvider( - event.generator.packOutput, event.existingFileHelper, DataGen.MOD_ID, ops, - PackType.SERVER_DATA, "worldgen/placed_feature", PlacedFeature.CODEC, placedFeatures - )) +} + +fun registerOreGen(event: GatherDataEvent) { + val set = RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, ::configuredFeatures) + .add(Registries.PLACED_FEATURE, ::placedFeatures) + + event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, set, setOf(DataGen.MOD_ID))) }