NeoForge icon indicating copy to clipboard operation
NeoForge copied to clipboard

Datagen advancement using mod's biome or structure doesn't work

Open NewJumper opened this issue 1 year ago • 0 comments

Minecraft Version: 1.21

NeoForge Version: 21.0.78

Steps to Reproduce:

  1. implement net.neoforged.neoforge.common.data.AdvancementProvider.AdvancementGenerator
  2. in generate, lookup registries for biomes and structures
  3. create an advancement based on player's location inside a biome or structure
  4. 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

NewJumper avatar Jul 11 '24 22:07 NewJumper