Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.data.recipe;
2
3//? fabric {
4
5import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
6import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
7import net.lerariemann.infinity.item.function.CollisionCraftingRecipe;
8import net.lerariemann.infinity.registry.core.ModItems;
9import net.lerariemann.infinity.registry.var.ModTags;
10import net.minecraft.core.HolderLookup;
11import net.minecraft.core.registries.BuiltInRegistries;
12import net.minecraft.data.recipes.*;
13import net.minecraft.tags.ItemTags;
14import net.minecraft.tags.TagKey;
15import net.minecraft.world.item.Item;
16import net.minecraft.world.item.ItemStack;
17import net.minecraft.world.item.crafting.Ingredient;
18import net.minecraft.world.level.ItemLike;
19import java.util.Locale;
20import java.util.concurrent.CompletableFuture;
21import java.util.function.Consumer;
22import java.util.function.Supplier;
23
24import static net.lerariemann.infinity.registry.core.ModItems.*;
25import static net.minecraft.data.recipes.RecipeCategory.BUILDING_BLOCKS;
26import static net.minecraft.data.recipes.RecipeCategory.MISC;
27import static net.minecraft.world.item.Items.*;
28
29public class InfinityRecipeProvider extends FabricRecipeProvider {
30 public InfinityRecipeProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registriesFuture) {
31 super(output
32 //? if >1.21 {
33 , registriesFuture
34 //?}
35 );
36 }
37
38
39 //? if >1.21.6 {
40 @Override
41 protected RecipeProvider createRecipeProvider(HolderLookup.Provider registryLookup, RecipeOutput exporter) {
42 return new RecipeProvider(registryLookup, exporter) {
43
44 @Override
45 public void buildRecipes() {
46
47 //?} else if >1.21 {
48
49 /*@Override
50 public void buildRecipes(RecipeOutput output) {
51
52 *///?} else {
53 /*@Override
54 public void buildRecipes(Consumer<net.minecraft.data.recipes.FinishedRecipe> output) {
55 *///?}
56
57
58 // start recipes
59
60 shaped(RecipeCategory.REDSTONE, ALTAR_ITEM.get())
61 .pattern("SSS")
62 .pattern(" B ")
63 .pattern(" S ")
64 .define('S', STONE_SLAB)
65 .define('B', BOOK_BOX_ITEM.get())
66 // Create an advancement that gives you the recipe
67 .unlockedBy(getHasName(BOOK_BOX_ITEM.get()), has(BOOK_BOX_ITEM.get()))
68 .save(output);
69
70 shaped(BUILDING_BLOCKS, ANT_ITEM.get())
71 .pattern("WBW")
72 .pattern("BMB")
73 .pattern("WBW")
74 .define('M', STAR_OF_LANG.get())
75 .define('W', WHITE_CONCRETE)
76 .define('B', BLACK_CONCRETE)
77 // Create an advancement that gives you the recipe
78 .unlockedBy(getHasName(STAR_OF_LANG.get()), has(STAR_OF_LANG.get()))
79 .save(output);
80
81 shaped(BUILDING_BLOCKS, ANT_ITEM.get())
82 .pattern("WBW")
83 .pattern("B B")
84 .pattern("WBW")
85 .define('W', WHITE_MATTER.get())
86 .define('B', BLACK_MATTER.get())
87 .unlockedBy(getHasName(WHITE_MATTER.get()), has(WHITE_MATTER.get()))
88 .save(output, "infinity:ant1");
89
90 shaped(MISC, COSMIC_ALTAR_ITEM.get())
91 .pattern("LAL")
92 .pattern("ASA")
93 .pattern("LAL")
94 .define('L', LODESTONE)
95 .define('A', ALTAR_ITEM.get())
96 .define('S', IRIDESCENT_STAR.get())
97 // Create an advancement that gives you the recipe
98 .unlockedBy(getHasName(IRIDESCENT_STAR.get()), has(IRIDESCENT_STAR.get()))
99 .save(output);
100
101 shaped(BUILDING_BLOCKS, CURSOR_ITEM.get(), 8)
102 .pattern("BLB")
103 .pattern("LSL")
104 .pattern("BLB")
105 .define('S', STAR_OF_LANG.get())
106 .define('L', LIME_CONCRETE)
107 .define('B', BLACK_CONCRETE)
108 // Create an advancement that gives you the recipe
109 .unlockedBy(getHasName(STAR_OF_LANG.get()), has(STAR_OF_LANG.get()))
110 .save(output);
111
112 shaped(MISC, F4.get())
113 .pattern("OOO")
114 .pattern("OSO")
115 .pattern("OOO")
116 .define('O', OBSIDIAN)
117 .define('S', IRIDESCENT_STAR.get())
118 // Create an advancement that gives you the recipe
119 .unlockedBy(getHasName(IRIDESCENT_STAR.get()), has(IRIDESCENT_STAR.get()))
120 .save(output);
121
122 shaped(MISC, FOOTPRINT.get(), 8)
123 .pattern("PPP")
124 .pattern("P P")
125 .pattern("PPP")
126 .define('P', LIGHT_GRAY_STAINED_GLASS_PANE)
127 // Create an advancement that gives you the recipe
128 .unlockedBy(getHasName(LIGHT_GRAY_STAINED_GLASS_PANE), has(LIGHT_GRAY_STAINED_GLASS_PANE))
129 .save(output);
130
131
132 shaped(MISC, HOME_ITEM.get())
133 .pattern("GGG")
134 .pattern("GSG")
135 .pattern("GGG")
136 .define('S', STAR_OF_LANG.get())
137 .define('G', GRASS_BLOCK)
138 // Create an advancement that gives you the recipe
139 .unlockedBy(getHasName(STAR_OF_LANG.get()), has(STAR_OF_LANG.get()))
140 .save(output);
141
142 shaped(BUILDING_BLOCKS, NETHERITE_SLAB_ITEM.get(), 6)
143 .pattern("###")
144 .define('#', NETHERITE_BLOCK)
145 // Create an advancement that gives you the recipe
146 .unlockedBy(getHasName(NETHERITE_BLOCK), has(NETHERITE_BLOCK))
147 .save(output);
148
149 shaped(BUILDING_BLOCKS, NETHERITE_STAIRS_ITEM.get(), 4)
150 .pattern("# ")
151 .pattern("## ")
152 .pattern("###")
153 .define('#', NETHERITE_BLOCK)
154 // Create an advancement that gives you the recipe
155 .unlockedBy(getHasName(NETHERITE_BLOCK), has(NETHERITE_BLOCK))
156 .save(output);
157
158 stonecutterResultFromBase(output, BUILDING_BLOCKS, NETHERITE_BLOCK, NETHERITE_STAIRS_ITEM.get());
159 stonecutterResultFromBase(output, BUILDING_BLOCKS, NETHERITE_BLOCK, NETHERITE_SLAB_ITEM.get(), 2);
160
161
162 shaped(MISC, BLACK_MATTER.get())
163 .pattern("BBB")
164 .pattern("B B")
165 .pattern("BBB")
166 .define('B', BLACK_CONCRETE)
167 // Create an advancement that gives you the recipe
168 .unlockedBy(getHasName(BLACK_CONCRETE), has(BLACK_CONCRETE))
169 .save(output);
170
171 shaped(MISC, WHITE_MATTER.get())
172 .pattern("BBB")
173 .pattern("B B")
174 .pattern("BBB")
175 .define('B', WHITE_CONCRETE)
176 // Create an advancement that gives you the recipe
177 .unlockedBy(getHasName(WHITE_CONCRETE), has(WHITE_CONCRETE))
178 .save(output);
179
180 shaped(BUILDING_BLOCKS, IRIDESCENT_CARPET.get(), 3)
181 .pattern("BB")
182 .define('B', IRIDESCENT_WOOL.get())
183 // Create an advancement that gives you the recipe
184 .unlockedBy(getHasName(IRIDESCENT_WOOL.get()), has(IRIDESCENT_WOOL.get()))
185 .save(output, "infinity:iridescent_carpet_from_wool");
186
187 portal(LECTERN, ALTAR_ITEM.get()).save(output);
188 portal(GLASS_BOTTLE, BIOME_BOTTLE_ITEM.get()).save(output);
189 portal(BOOKSHELF, BOOK_BOX_ITEM.get()).save(output);
190 portal(ItemTags.WOOL, CHROMATIC_WOOL).save(output, "infinity:chromatic_wool");
191 portal(F4, F4, "recipe_info.portal.infinity.attuned").save(output);
192 portal(CHROMATIC_POTION, IRIDESCENT_POTION, "").save(output, "infinity:iridescence_bottle_from_portal");
193 iridescence(CHROMATIC_WOOL, IRIDESCENT_WOOL).save(output, "infinity:iridescent_wool");
194 iridescence(CHROMATIC_CARPET, IRIDESCENT_CARPET).save(output, "infinity:iridescent_carpet");
195 iridescence(STAR_OF_LANG, IRIDESCENT_STAR).save(output, "infinity:iridescent_star");
196 portal(ItemTags.WOOL_CARPETS, CHROMATIC_CARPET, "recipe_info.portal.infinity.color").save(output);
197 portal(ModTags.MATTER, CHROMATIC_MATTER).save(output, "infinity:chromatic_matter");
198 iridescence(CHROMATIC_MATTER, CHROMATIC_MATTER, "recipe_info.iridescence.infinity.chromatic_matter").save(output);
199 portal(AMETHYST_SHARD, TRANSFINITE_KEY.get(), "recipe_info.portal.infinity.attuned").save(output, "infinity:key_from_portal");
200 iridescence(TRANSFINITE_KEY, TRANSFINITE_KEY, "recipe_info.iridescence.infinity.key").save(output, "infinity:key_from_iridescence");
201 portal(TNT, TIME_BOMB_ITEM.get()).save(output, "infinity:timebomb_from_portal");
202 color(ItemTags.WOOL, CHROMATIC_WOOL).save(output, "infinity:chromatic_coloring_wool");
203 color(ItemTags.WOOL_CARPETS, CHROMATIC_CARPET).save(output, "infinity:chromatic_coloring_carpet");
204 new BiomeBottleCombiningRecipeBuilder().save(output, "infinity:biome_bottle_combining");
205 new ChromaCarpetRecipeBuilder().save(output, "infinity:chromatic_carpet_from_wool");
206 new F4RechargingRecipeBuilder().save(output, "infinity:f4_recharging");
207
208 // end recipes
209 }
210
211 private RecipeBuilder color(TagKey<Item> input, Supplier<? extends Item> output) {
212
213 //? if >1.21.2 {
214 return new ChromaticColoringRecipeBuilder(tag(input), output.get());
215 //?} else {
216 /*return new ChromaticColoringRecipeBuilder(Ingredient.of(input), output.get());
217 *///?}
218 }
219 private RecipeBuilder portal(TagKey<Item> input, Supplier<? extends Item> output) {
220 //? if >1.21.2 {
221 return portal(tag(input), output.get());
222 //?} else {
223 /*return portal(Ingredient.of(input), output.get());
224 *///?}
225 }
226
227 private RecipeBuilder portal(TagKey<Item> input, Supplier<? extends Item> output, String lore) {
228 //? if >1.21.2 {
229 return collision(CollisionCraftingRecipe.Type.PORTAL, tag(input), output.get(), lore);
230 //?} else {
231 /*return collision(CollisionCraftingRecipe.Type.PORTAL, Ingredient.of(input), output.get(), lore);
232 *///?}
233 }
234
235
236 private CollisionRecipeBuilder collision(CollisionCraftingRecipe.Type type, Ingredient input, ItemLike output, String lore) {
237 return new CollisionRecipeBuilder(type, input, output, lore);
238 }
239 private CollisionRecipeBuilder collision(CollisionCraftingRecipe.Type type, ItemLike input, ItemLike output, String lore) {
240 return collision(type, Ingredient.of(input), output, lore);
241 }
242
243 private CollisionRecipeBuilder collision(CollisionCraftingRecipe.Type type, ItemLike input, ItemLike output) {
244 return collision(type, input, output, "");
245 }
246
247 private CollisionRecipeBuilder portal(ItemLike input, ItemLike output) {
248 return collision(CollisionCraftingRecipe.Type.PORTAL, input, output);
249 }
250 private CollisionRecipeBuilder portal(Ingredient input, ItemLike output) {
251 return collision(CollisionCraftingRecipe.Type.PORTAL, input, output, "");
252 }
253
254 private CollisionRecipeBuilder portal(ItemLike input, ItemLike output, String lore) {
255 return collision(CollisionCraftingRecipe.Type.PORTAL, input, output, lore);
256 }
257
258 private RecipeBuilder portal(Ingredient input, Item output, String lore) {
259 return collision(CollisionCraftingRecipe.Type.PORTAL, input, output, lore);
260 }
261
262 private CollisionRecipeBuilder iridescence(ItemLike input, ItemLike output) {
263 return collision(CollisionCraftingRecipe.Type.IRIDESCENCE, input, output);
264 }
265
266 private CollisionRecipeBuilder iridescence(ItemLike input, ItemLike output, String lore) {
267 return collision(CollisionCraftingRecipe.Type.IRIDESCENCE, input, output, lore);
268 }
269
270 private RecipeBuilder portal(Supplier<? extends Item> input, Supplier<? extends Item> output, String lore) {
271 return portal(input.get(), output.get(), lore);
272 }
273
274 private CollisionRecipeBuilder iridescence(Supplier<? extends Item> input, Supplier<? extends Item> output, String lore) {
275 return iridescence(input.get(), output.get(), lore);
276 }
277
278 private CollisionRecipeBuilder iridescence(Supplier<? extends Item> input, Supplier<? extends Item> output) {
279 return iridescence(input.get(), output.get());
280 }
281
282 //? if <1.21.6 {
283 /*private ShapedRecipeBuilder shaped(RecipeCategory recipeCategory, Item item) {
284 return ShapedRecipeBuilder.shaped(recipeCategory, item);
285 }
286 private ShapedRecipeBuilder shaped(RecipeCategory recipeCategory, Item item, int i) {
287 return ShapedRecipeBuilder.shaped(recipeCategory, item, i);
288 }
289 *///?} else {
290 private void stonecutterResultFromBase(RecipeOutput output, RecipeCategory recipeCategory, Item item1, Item item) {
291 stonecutterResultFromBase(recipeCategory, item1, item);
292 }
293 private void stonecutterResultFromBase(RecipeOutput output, RecipeCategory recipeCategory, Item item1, Item item, int i) {
294 stonecutterResultFromBase(recipeCategory, item1, item, i);
295 }
296 };
297 }
298 //?}
299
300 @Override
301 public String getName() {
302 return "infinity";
303 }
304}
305//?}