Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 128 lines 5.4 kB view raw
1package net.lerariemann.infinity.data; 2 3//? fabric { 4 5import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; 6import net.fabricmc.fabric.api.datagen.v1.provider.FabricAdvancementProvider; 7import net.lerariemann.infinity.InfinityMod; 8import net.lerariemann.infinity.registry.core.ModItems; 9import net.lerariemann.infinity.registry.var.ModCriteria; 10import net.lerariemann.infinity.util.VersionMethods; 11import net.minecraft.advancements.Advancement; 12//? >1.21 { 13import net.minecraft.advancements.AdvancementHolder; 14import static net.minecraft.advancements.AdvancementRequirements.*; 15import static net.minecraft.advancements.AdvancementRequirements.Strategy.OR; 16import static net.minecraft.advancements.AdvancementType.TASK; 17//?} else { 18/*import static net.minecraft.advancements.FrameType.TASK; 19import static net.minecraft.advancements.RequirementsStrategy.OR; 20*///?} 21import net.minecraft.advancements.Criterion; 22import net.minecraft.core.HolderLookup; 23import net.minecraft.network.chat.Component; 24import net.minecraft.world.item.Items; 25 26import java.util.Optional; 27import java.util.concurrent.CompletableFuture; 28import java.util.function.Consumer; 29 30 31 32public class InfinityAdvancementProvider extends FabricAdvancementProvider { 33 34 public InfinityAdvancementProvider(FabricDataOutput dataOutput, CompletableFuture<HolderLookup.Provider> registryLookup) { 35 super(dataOutput 36 //? >1.21 37 , registryLookup 38 ); 39 } 40 41 @Override 42 public void generateAdvancement( 43 //? if >1.21 { 44 HolderLookup.Provider registryLookup, Consumer<AdvancementHolder> consumer 45 //?} else { 46 /*Consumer<Advancement> consumer 47 *///?} 48 ) { 49 var acidTest = Advancement.Builder.advancement() 50 //.parent(iridescence) 51 .display( 52 ModItems.TRANSFINITE_KEY.get(), // The display icon 53 Component.translatable("advancements.infinity.acid_test.title"), // The title 54 Component.literal("advancements.infinity.acid_test.description"), // The description 55 null, // Background image for the tab in the advancements page, if this is a root advancement (has no parent) 56 TASK, // TASK, CHALLENGE, or GOAL 57 true, // Show the toast when completing it 58 true, // Announce it to chat 59 false // Hide it in the advancement tab until it's achieved 60 ) 61 .addCriterion("creeper", mobChangeCriterion("minecraft:creeper")) 62 .addCriterion("skeleton", mobChangeCriterion("minecraft:skeleton")) 63 .addCriterion("slime", mobChangeCriterion("minecraft:slime")) 64 .addCriterion("pawn", mobChangeCriterion("infinity:chaos_pawn")) 65 .requirements(OR) 66 // Give the advancement an id 67 .save(consumer, InfinityMod.MOD_ID + ":acid_test"); 68 // FIXME - generating advancements with parents appears to be broken on 1.20? 69 //? if >1.21 { 70 var multiverseRoot = Advancement.Builder.advancement() 71 .parent(VersionMethods.id("minecraft", "story/enter_the_nether")) 72 .display( 73 Items.WRITABLE_BOOK, // The display icon 74 Component.translatable("advancements.infinity.multiverse_start.title"), // The title 75 Component.literal("advancements.infinity.multiverse_start.description"), // The description 76 null, // Background image for the tab in the advancements page, if this is a root advancement (has no parent) 77 TASK, // TASK, CHALLENGE, or GOAL 78 true, // Show the toast when completing it 79 true, // Announce it to chat 80 false // Hide it in the advancement tab until it's achieved 81 ) 82 .addCriterion("infinity_dims_open", dimsOpenCriterion(1)) 83 // Give the advancement an id 84 .save(consumer, InfinityMod.MOD_ID + ":multiverse_root"); 85 86 var allTime = Advancement.Builder.advancement() 87 .parent(multiverseRoot) 88 .display( 89 Items.CLOCK, // The display icon 90 Component.translatable("advancements.infinity.all_time.title"), // The title 91 Component.literal("advancements.infinity.all_time.description"), // The description 92 null, // Background image for the tab in the advancements page, if this is a root advancement (has no parent) 93 TASK, // TASK, CHALLENGE, or GOAL 94 true, // Show the toast when completing it 95 true, // Announce it to chat 96 false // Hide it in the advancement tab until it's achieved 97 ) 98 .addCriterion("infinity_dims_closed", dimsClosedCriterion(1)) 99 // Give the advancement an id 100 .save(consumer, InfinityMod.MOD_ID + ":all_time"); 101 //?} 102 } 103 104 public Criterion mobChangeCriterion(String data) { 105 //? if >1.21 { 106 return ModCriteria.CONVERT_MOB.get().createCriterion(new ModCriteria.DataConditions(Optional.empty(), data)); 107 //?} else { 108 /*return new Criterion(ModCriteria.DataConditions.create(data, ModCriteria.CONVERT_MOB.get().getId())); 109 *///?} 110 } 111 112 public Criterion dimsOpenCriterion(int data) { 113 //? if >1.21 { 114 return ModCriteria.DIMS_OPENED.get().createCriterion(new ModCriteria.ScoredConditions(Optional.empty(), data)); 115 //?} else { 116 /*return new Criterion(ModCriteria.ScoredConditions.create(data, ModCriteria.DIMS_OPENED.get().getId())); 117 *///?} 118 } 119 120 public Criterion dimsClosedCriterion(int data) { 121 //? if >1.21 { 122 return ModCriteria.DIMS_CLOSED.get().createCriterion(new ModCriteria.ScoredConditions(Optional.empty(), data)); 123 //?} else { 124 /*return new Criterion(ModCriteria.ScoredConditions.create(data, ModCriteria.DIMS_CLOSED.get().getId())); 125 *///?} 126 } 127} 128//?}