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