Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
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//?}