NeoForge
NeoForge copied to clipboard
Datagen advancement using mod's biome or structure doesn't work
Minecraft Version: 1.21
NeoForge Version: 21.0.78
Steps to Reproduce:
- implement
net.neoforged.neoforge.common.data.AdvancementProvider.AdvancementGenerator - in
generate, lookup registries for biomes and structures - create an advancement based on player's location inside a biome or structure
- run runData.. error!
Description of issue: Trying to use datagen to generate advancements. The advancements producing the error are those that want to access a mod's biome or structure. The advancements I tried to generate:
HolderGetter<Biome> biomes = registries.lookupOrThrow(Registries.BIOME);
HolderGetter<Structure> structures = registries.lookupOrThrow(Registries.STRUCTURE);
AdvancementHolder findAncientTemple = Advancement.Builder.advancement().parent(enterOtherside)
.display(DDBlocks.CUT_SCULK_STONE.get(), Component.translatable(id + "find_ancient_temple.title"), Component.translatable(id + "find_ancient_temple.description"), null, AdvancementType.GOAL, true, true, false)
.addCriterion("ancient_temple", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inStructure(structures.getOrThrow(DDStructures.ANCIENT_TEMPLE))))
.rewards(AdvancementRewards.Builder.experience(50))
.save(saver, path("find_ancient_temple"), existingFileHelper);
Advancement.Builder.advancement().parent(enterOtherside)
.display(DDItems.WARDEN_BOOTS.get(), Component.translatable(id + "explore_otherside.title"), Component.translatable(id + "explore_otherside.description"), null, AdvancementType.CHALLENGE, true, true, false)
.addCriterion("deeplands", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(biomes.getOrThrow(OthersideBiomes.DEEPLANDS))))
.addCriterion("echoing_forest", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(biomes.getOrThrow(OthersideBiomes.ECHOING_FOREST))))
.addCriterion("blooming_caverns", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(biomes.getOrThrow(OthersideBiomes.BLOOMING_CAVERNS))))
.addCriterion("overcast_columns", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(biomes.getOrThrow(OthersideBiomes.OVERCAST_COLUMNS))))
.requirements(AdvancementRequirements.Strategy.AND).rewards(AdvancementRewards.Builder.experience(300))
.save(saver, path("explore_otherside"), existingFileHelper);
runData fails with the following message (referencing the findAncientTemple advancement):
Caused by: java.util.concurrent.CompletionException: java.lang.IllegalStateException: Missing element ResourceKey[minecraft:worldgen/structure / deeperdarker:ancient_temple]
Seems like its trying to search for the structure in the minecraft folder even though the structure is located in the deeperdarker folder