diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/BlockStateProvider.java b/src/main/datagen/org/dimdev/dimdoors/datagen/BlockStateProvider.java index b702e0ec..b532a931 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/BlockStateProvider.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/BlockStateProvider.java @@ -1,13 +1,12 @@ package org.dimdev.dimdoors.datagen; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.data.client.BlockStateModelGenerator; -import net.minecraft.data.client.ItemModelGenerator; -import net.minecraft.data.client.Models; -import net.minecraft.data.client.TextureMap; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.models.BlockModelGenerators; +import net.minecraft.data.models.ItemModelGenerators; +import net.minecraft.data.models.model.ModelTemplates; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; @@ -22,31 +21,31 @@ public class BlockStateProvider extends FabricModelProvider { } @Override - public void generateBlockStateModels(BlockStateModelGenerator generator) { - generator.registerDoor(ModBlocks.GOLD_DOOR); - generator.registerDoor(ModBlocks.STONE_DOOR); - generator.registerDoor(ModBlocks.QUARTZ_DOOR); - registerDoor(generator, Registries.BLOCK.get(DimensionalDoors.id("iron_dimensional_door")), Blocks.IRON_DOOR); - registerDoor(generator, Registries.BLOCK.get(DimensionalDoors.id("gold_dimensional_door")), ModBlocks.GOLD_DOOR); - registerDoor(generator, Registries.BLOCK.get(DimensionalDoors.id("quartz_dimensional_door")), ModBlocks.QUARTZ_DOOR); - registerDoor(generator, Registries.BLOCK.get(DimensionalDoors.id("oak_dimensional_door")), Blocks.OAK_DOOR); -// registerDoor(generator, Registry.BLOCK.get(Util.id("dungeon_door")), ModBlocks.STONE_DOOR); + public void generateBlockStateModels(BlockModelGenerators generator) { + generator.createDoor(ModBlocks.GOLD_DOOR); + generator.createDoor(ModBlocks.STONE_DOOR); + generator.createDoor(ModBlocks.QUARTZ_DOOR); + createDoor(generator, BuiltInRegistries.BLOCK.get(DimensionalDoors.id("iron_dimensional_door")), Blocks.IRON_DOOR); + createDoor(generator, BuiltInRegistries.BLOCK.get(DimensionalDoors.id("gold_dimensional_door")), ModBlocks.GOLD_DOOR); + createDoor(generator, BuiltInRegistries.BLOCK.get(DimensionalDoors.id("quartz_dimensional_door")), ModBlocks.QUARTZ_DOOR); + createDoor(generator, BuiltInRegistries.BLOCK.get(DimensionalDoors.id("oak_dimensional_door")), Blocks.OAK_DOOR); +// createDoor(generator, Registry.BLOCK.get(Util.id("dungeon_door")), ModBlocks.STONE_DOOR); - generator.registerLog(ModBlocks.DRIFTWOOD_LOG).log(ModBlocks.DRIFTWOOD_LOG).wood(ModBlocks.DRIFTWOOD_WOOD); - generator.registerCubeAllModelTexturePool(ModBlocks.DRIFTWOOD_PLANKS) + generator.woodProvider(ModBlocks.DRIFTWOOD_LOG).log(ModBlocks.DRIFTWOOD_LOG).wood(ModBlocks.DRIFTWOOD_WOOD); + generator.createTrivialCube(ModBlocks.DRIFTWOOD_PLANKS) .fence(ModBlocks.DRIFTWOOD_FENCE) .fenceGate(ModBlocks.DRIFTWOOD_GATE) .button(ModBlocks.DRIFTWOOD_BUTTON) .slab(ModBlocks.DRIFTWOOD_SLAB) .stairs(ModBlocks.DRIFTWOOD_STAIRS); - generator.registerDoor(ModBlocks.DRIFTWOOD_DOOR); + generator.createDoor(ModBlocks.DRIFTWOOD_DOOR); generator.registerTrapdoor(ModBlocks.DRIFTWOOD_TRAPDOOR); generator.registerCubeAllModelTexturePool(ModBlocks.AMALGAM_BLOCK) .slab(ModBlocks.AMALGAM_SLAB) .stairs(ModBlocks.AMALGAM_STAIRS); - generator.registerDoor(ModBlocks.AMALGAM_DOOR); + generator.createDoor(ModBlocks.AMALGAM_DOOR); generator.registerTrapdoor(ModBlocks.AMALGAM_TRAPDOOR); generator.registerSimpleCubeAll(ModBlocks.AMALGAM_ORE); generator.registerSimpleCubeAll(ModBlocks.RUST); @@ -96,30 +95,30 @@ public class BlockStateProvider extends FabricModelProvider { } - public void registerDoor(BlockStateModelGenerator generator, Block doorBlock, Block textureSource) { + public void createDoor(BlockModelGenerators generator, Block doorBlock, Block textureSource) { TextureMap textureMap = TextureMap.topBottom(textureSource); - Identifier identifier = Models.DOOR_BOTTOM_LEFT.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier2 = Models.DOOR_BOTTOM_LEFT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier3 = Models.DOOR_BOTTOM_RIGHT.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier4 = Models.DOOR_BOTTOM_RIGHT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier5 = Models.DOOR_TOP_LEFT.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier6 = Models.DOOR_TOP_LEFT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier7 = Models.DOOR_TOP_RIGHT.upload(doorBlock, textureMap, generator.modelCollector); - Identifier identifier8 = Models.DOOR_TOP_RIGHT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier = Models.DOOR_BOTTOM_LEFT.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier2 = Models.DOOR_BOTTOM_LEFT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier3 = Models.DOOR_BOTTOM_RIGHT.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier4 = Models.DOOR_BOTTOM_RIGHT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier5 = Models.DOOR_TOP_LEFT.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier6 = Models.DOOR_TOP_LEFT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier7 = Models.DOOR_TOP_RIGHT.upload(doorBlock, textureMap, generator.modelCollector); + ResourceLocation identifier8 = Models.DOOR_TOP_RIGHT_OPEN.upload(doorBlock, textureMap, generator.modelCollector); generator.registerItemModel(doorBlock.asItem()); generator.blockStateCollector.accept(BlockStateModelGenerator.createDoorBlockState(doorBlock, identifier, identifier2, identifier3, identifier4, identifier5, identifier6, identifier7, identifier8)); } @Override - public void generateItemModels(ItemModelGenerator itemModelGenerator) { - itemModelGenerator.register(ModItems.FUZZY_FIREBALL, Models.GENERATED); - itemModelGenerator.register(ModItems.FABRIC_OF_FINALITY, Models.GENERATED); - itemModelGenerator.register(ModItems.GARMENT_OF_REALITY, Models.GENERATED); - itemModelGenerator.register(ModItems.LIMINAL_LINT, Models.GENERATED); - itemModelGenerator.register(ModItems.ENDURING_FIBERS, Models.GENERATED); - itemModelGenerator.register(ModItems.RIFT_PEARL, Models.GENERATED); - itemModelGenerator.register(ModItems.AMALGAM_LUMP, Models.GENERATED); - itemModelGenerator.register(ModItems.CLOD, Models.GENERATED); + public void generateItemModels(ItemModelGenerators itemModelGenerator) { + itemModelGenerator.generateFlatItem(ModItems.FUZZY_FIREBALL, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.FABRIC_OF_FINALITY, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.GARMENT_OF_REALITY, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.LIMINAL_LINT, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.ENDURING_FIBERS, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.RIFT_PEARL, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.AMALGAM_LUMP, ModelTemplates.FLAT_ITEM); + itemModelGenerator.generateFlatItem(ModItems.CLOD, ModelTemplates.FLAT_ITEM); } } diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java b/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java index 8011243c..1325807a 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/BlockTagProvider.java @@ -2,9 +2,9 @@ package org.dimdev.dimdoors.datagen; import java.util.concurrent.CompletableFuture; -import net.minecraft.block.Blocks; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.registry.tag.BlockTags; +import net.minecraft.core.HolderLookup; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.block.Blocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; @@ -13,105 +13,105 @@ import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.tag.ModBlockTags; public class BlockTagProvider extends FabricTagProvider.BlockTagProvider { - public BlockTagProvider(FabricDataOutput output, CompletableFuture registriesFuture) { + public BlockTagProvider(FabricDataOutput output, CompletableFuture registriesFuture) { super(output, registriesFuture); } @Override - protected void configure(RegistryWrapper.WrapperLookup arg) { - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_AIR).add( - Blocks.COBWEB, - ModBlocks.DRIFTWOOD_LEAVES, - ModBlocks.DRIFTWOOD_SAPLING, - Blocks.GLASS_PANE, - Blocks.MOSS_CARPET, - ModBlocks.DRIFTWOOD_TRAPDOOR, - Blocks.RAIL, - ModBlocks.RUST, - ModBlocks.UNRAVELED_SPIKE); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_RAIL).add( - Blocks.ACTIVATOR_RAIL, - Blocks.DETECTOR_RAIL, - Blocks.POWERED_RAIL); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_GRITTY_STONE).add( - Blocks.INFESTED_STONE, - Blocks.INFESTED_COBBLESTONE, - Blocks.INFESTED_STONE_BRICKS, - Blocks.INFESTED_MOSSY_STONE_BRICKS, - Blocks.INFESTED_CRACKED_STONE_BRICKS, - Blocks.INFESTED_CHISELED_STONE_BRICKS); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_SOLID_STATIC).add( - Blocks.BEDROCK, - Blocks.END_PORTAL_FRAME, - Blocks.COMMAND_BLOCK, - Blocks.CHAIN_COMMAND_BLOCK, - Blocks.REPEATING_COMMAND_BLOCK + protected void addTags(HolderLookup.Provider arg) { + tag(ModBlockTags.DECAY_TO_AIR).add( + reverseLookup(Blocks.COBWEB), + reverseLookup(ModBlocks.DRIFTWOOD_LEAVES), + reverseLookup(ModBlocks.DRIFTWOOD_SAPLING), + reverseLookup(Blocks.GLASS_PANE), + reverseLookup(Blocks.MOSS_CARPET), + reverseLookup(ModBlocks.DRIFTWOOD_TRAPDOOR), + reverseLookup(Blocks.RAIL), + reverseLookup(ModBlocks.RUST), + reverseLookup(ModBlocks.UNRAVELED_SPIKE)); + tag(ModBlockTags.DECAY_TO_RAIL).add( + reverseLookup(Blocks.ACTIVATOR_RAIL), + reverseLookup(Blocks.DETECTOR_RAIL), + reverseLookup(Blocks.POWERED_RAIL)); + tag(ModBlockTags.DECAY_TO_GRITTY_STONE).add( + reverseLookup(Blocks.INFESTED_STONE), + reverseLookup(Blocks.INFESTED_COBBLESTONE), + reverseLookup(Blocks.INFESTED_STONE_BRICKS), + reverseLookup(Blocks.INFESTED_MOSSY_STONE_BRICKS), + reverseLookup(Blocks.INFESTED_CRACKED_STONE_BRICKS), + reverseLookup(Blocks.INFESTED_CHISELED_STONE_BRICKS)); + tag(ModBlockTags.DECAY_TO_SOLID_STATIC).add( + reverseLookup(Blocks.BEDROCK), + reverseLookup(Blocks.END_PORTAL_FRAME), + reverseLookup(Blocks.COMMAND_BLOCK), + reverseLookup(Blocks.CHAIN_COMMAND_BLOCK), + reverseLookup(Blocks.REPEATING_COMMAND_BLOCK) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_UNRAVELED_FENCE).add( - ModBlocks.CLAY_FENCE, - ModBlocks.DARK_SAND_FENCE + tag(ModBlockTags.DECAY_UNRAVELED_FENCE).add( + reverseLookup(ModBlocks.CLAY_FENCE), + reverseLookup(ModBlocks.DARK_SAND_FENCE) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_UNRAVELED_GATE).add( - ModBlocks.CLAY_GATE, - ModBlocks.DARK_SAND_GATE + tag(ModBlockTags.DECAY_UNRAVELED_GATE).add( + reverseLookup(ModBlocks.CLAY_GATE), + reverseLookup(ModBlocks.DARK_SAND_GATE) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_UNRAVELED_BUTTON).add( - ModBlocks.CLAY_BUTTON, - ModBlocks.DARK_SAND_BUTTON + tag(ModBlockTags.DECAY_UNRAVELED_BUTTON).add( + reverseLookup(ModBlocks.CLAY_BUTTON), + reverseLookup(ModBlocks.DARK_SAND_BUTTON) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_UNRAVELED_SLAB).add( - ModBlocks.CLAY_SLAB, - ModBlocks.DARK_SAND_SLAB + tag(ModBlockTags.DECAY_UNRAVELED_SLAB).add( + reverseLookup(ModBlocks.CLAY_SLAB), + reverseLookup(ModBlocks.DARK_SAND_SLAB) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_UNRAVELED_STAIRS).add( - ModBlocks.CLAY_STAIRS, - ModBlocks.DARK_SAND_STAIRS + tag(ModBlockTags.DECAY_UNRAVELED_STAIRS).add( + reverseLookup(ModBlocks.CLAY_STAIRS), + reverseLookup(ModBlocks.DARK_SAND_STAIRS) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_GLASS_PANE).add( - Blocks.GRAY_STAINED_GLASS_PANE, - Blocks.BLACK_STAINED_GLASS_PANE, - Blocks.ORANGE_STAINED_GLASS_PANE, - Blocks.BLUE_STAINED_GLASS_PANE, - Blocks.BROWN_STAINED_GLASS_PANE, - Blocks.CYAN_STAINED_GLASS_PANE, - Blocks.GREEN_STAINED_GLASS_PANE, - Blocks.LIGHT_BLUE_STAINED_GLASS_PANE, - Blocks.LIGHT_GRAY_STAINED_GLASS_PANE, - Blocks.LIME_STAINED_GLASS_PANE, - Blocks.MAGENTA_STAINED_GLASS_PANE, - Blocks.PINK_STAINED_GLASS_PANE, - Blocks.PURPLE_STAINED_GLASS_PANE, - Blocks.RED_STAINED_GLASS_PANE, - Blocks.WHITE_STAINED_GLASS_PANE, - Blocks.YELLOW_STAINED_GLASS_PANE + tag(ModBlockTags.DECAY_TO_GLASS_PANE).add( + reverseLookup(Blocks.GRAY_STAINED_GLASS_PANE), + reverseLookup(Blocks.BLACK_STAINED_GLASS_PANE), + reverseLookup(Blocks.ORANGE_STAINED_GLASS_PANE), + reverseLookup(Blocks.BLUE_STAINED_GLASS_PANE), + reverseLookup(Blocks.BROWN_STAINED_GLASS_PANE), + reverseLookup(Blocks.CYAN_STAINED_GLASS_PANE), + reverseLookup(Blocks.GREEN_STAINED_GLASS_PANE), + reverseLookup(Blocks.LIGHT_BLUE_STAINED_GLASS_PANE), + reverseLookup(Blocks.LIGHT_GRAY_STAINED_GLASS_PANE), + reverseLookup(Blocks.LIME_STAINED_GLASS_PANE), + reverseLookup(Blocks.MAGENTA_STAINED_GLASS_PANE), + reverseLookup(Blocks.PINK_STAINED_GLASS_PANE), + reverseLookup(Blocks.PURPLE_STAINED_GLASS_PANE), + reverseLookup(Blocks.RED_STAINED_GLASS_PANE), + reverseLookup(Blocks.WHITE_STAINED_GLASS_PANE), + reverseLookup(Blocks.YELLOW_STAINED_GLASS_PANE) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_RUST).add( + tag(ModBlockTags.DECAY_TO_RUST).add( //REDSTONE VARIANTS - Blocks.LIGHTNING_ROD, - Blocks.LANTERN, - Blocks.IRON_BARS, - Blocks.HOPPER, - Blocks.CHAIN, - Blocks.CAULDRON + reverseLookup(Blocks.LIGHTNING_ROD), + reverseLookup(Blocks.LANTERN), + reverseLookup(Blocks.IRON_BARS), + reverseLookup(Blocks.HOPPER), + reverseLookup(Blocks.CHAIN), + reverseLookup(Blocks.CAULDRON) ); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_UNRAVELED_SPIKE).add( - Blocks.END_ROD, - Blocks.POINTED_DRIPSTONE - ).forceAddTag(BlockTags.FLOWER_POTS).addOptionalTag(BlockTags.CANDLES); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_WITHER_ROSE).addOptionalTag(BlockTags.SMALL_FLOWERS).addOptionalTag(BlockTags.TALL_FLOWERS); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_CLAY); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_CLAY); - getOrCreateTagBuilder(ModBlockTags.DECAY_CLAY_FENCE); - getOrCreateTagBuilder(ModBlockTags.DECAY_CLAY_GATE); - getOrCreateTagBuilder(ModBlockTags.DECAY_CLAY_BUTTON); - getOrCreateTagBuilder(ModBlockTags.DECAY_CLAY_SLAB); - getOrCreateTagBuilder(ModBlockTags.DECAY_CLAY_STAIRS); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_DARK_SAND); - getOrCreateTagBuilder(ModBlockTags.DECAY_DARK_SAND_FENCE); - getOrCreateTagBuilder(ModBlockTags.DECAY_DARK_SAND_GATE); - getOrCreateTagBuilder(ModBlockTags.DECAY_DARK_SAND_BUTTON); - getOrCreateTagBuilder(ModBlockTags.DECAY_DARK_SAND_SLAB); - getOrCreateTagBuilder(ModBlockTags.DECAY_DARK_SAND_STAIRS); - getOrCreateTagBuilder(ModBlockTags.DECAY_TO_AMALGAM); + tag(ModBlockTags.DECAY_TO_UNRAVELED_SPIKE).add( + reverseLookup(Blocks.END_ROD), + reverseLookup(Blocks.POINTED_DRIPSTONE) + ).addTag(BlockTags.FLOWER_POTS).addTag(BlockTags.CANDLES); + tag(ModBlockTags.DECAY_TO_WITHER_ROSE).addTag(BlockTags.SMALL_FLOWERS).addTag(BlockTags.TALL_FLOWERS); + tag(ModBlockTags.DECAY_TO_CLAY); + tag(ModBlockTags.DECAY_TO_CLAY); + tag(ModBlockTags.DECAY_CLAY_FENCE); + tag(ModBlockTags.DECAY_CLAY_GATE); + tag(ModBlockTags.DECAY_CLAY_BUTTON); + tag(ModBlockTags.DECAY_CLAY_SLAB); + tag(ModBlockTags.DECAY_CLAY_STAIRS); + tag(ModBlockTags.DECAY_TO_DARK_SAND); + tag(ModBlockTags.DECAY_DARK_SAND_FENCE); + tag(ModBlockTags.DECAY_DARK_SAND_GATE); + tag(ModBlockTags.DECAY_DARK_SAND_BUTTON); + tag(ModBlockTags.DECAY_DARK_SAND_SLAB); + tag(ModBlockTags.DECAY_DARK_SAND_STAIRS); + tag(ModBlockTags.DECAY_TO_AMALGAM); } } diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/DimdoorsRecipeProvider.java b/src/main/datagen/org/dimdev/dimdoors/datagen/DimdoorsRecipeProvider.java index e55052ee..e6c399e6 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/DimdoorsRecipeProvider.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/DimdoorsRecipeProvider.java @@ -1,50 +1,47 @@ package org.dimdev.dimdoors.datagen; import java.util.function.Consumer; - -import net.minecraft.advancement.criterion.InventoryChangedCriterion; -import net.minecraft.block.Blocks; -import net.minecraft.data.server.recipe.RecipeJsonProvider; -import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder; -import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder; -import net.minecraft.item.Item; -import net.minecraft.item.Items; -import net.minecraft.recipe.book.RecipeCategory; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; - import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; - +import net.minecraft.advancements.critereon.InventoryChangeTrigger; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Blocks; import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.item.ModItems; import static org.dimdev.dimdoors.DimensionalDoors.id; public class DimdoorsRecipeProvider extends FabricRecipeProvider { - private static final TagKey GOLD_INGOTS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "gold_ingots")); - private static final TagKey IRON_INGOTS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "iron_ingots")); - private static final TagKey DIAMONDS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "diamond")); + private static final TagKey GOLD_INGOTS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "gold_ingots")); + private static final TagKey IRON_INGOTS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "iron_ingots")); + private static final TagKey DIAMONDS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "diamond")); public DimdoorsRecipeProvider(FabricDataOutput dataGenerator) { super(dataGenerator); } @Override - public void generate(Consumer exporter) { + public void buildRecipes(Consumer exporter) { //TODO: Find out proper RecipeCategory for these? I just random added this to make it work. - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModBlocks.STONE_DOOR).pattern("XX").pattern("XX").pattern("XX").input('X', Blocks.STONE).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Blocks.STONE)).offerTo(exporter, id("stone_door")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModBlocks.GOLD_DOOR, 3).pattern("XX").pattern("XX").pattern("XX").input('X', GOLD_INGOTS).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Items.GOLD_INGOT)).offerTo(exporter, id("gold_door")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModBlocks.QUARTZ_DOOR).pattern("XX").pattern("XX").pattern("XX").input('X', Items.QUARTZ).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Items.QUARTZ)).offerTo(exporter, id("quartz_door")); - ShapelessRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_BLADE).input(Items.IRON_SWORD).input(Items.ENDER_PEARL, 2).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Items.IRON_SWORD)).offerTo(exporter, id("rift_blade")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_REMOVER).pattern(" # ").pattern("#X#").pattern(" # ").input('#', GOLD_INGOTS).input('X', Items.ENDER_PEARL).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.RIFT_BLADE)).offerTo(exporter, id("rift_remover")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_REMOVER).pattern("###").pattern("#X#").pattern("###").input('#', GOLD_INGOTS).input('X', ModItems.STABLE_FABRIC).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.STABLE_FABRIC)).offerTo(exporter, id("rift_remover_stable_fabric")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_SIGNATURE).pattern(" # ").pattern("#X#").pattern(" # ").input('#', IRON_INGOTS).input('X', Items.ENDER_PEARL).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.RIFT_BLADE)).offerTo(exporter, id("rift_signature")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_SIGNATURE).pattern("###").pattern("#X#").pattern("###").input('#', IRON_INGOTS).input('X', ModItems.STABLE_FABRIC).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.STABLE_FABRIC)).offerTo(exporter, id("rift_signature_stable_fabric")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_STABILIZER).pattern(" # ").pattern("#X#").pattern(" # ").input('#', DIAMONDS).input('X', Items.ENDER_PEARL).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.RIFT_BLADE)).offerTo(exporter, id("rift_stabilizer")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.RIFT_STABILIZER).pattern("###").pattern("#X#").pattern("###").input('#', DIAMONDS).input('X', ModItems.STABLE_FABRIC).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.STABLE_FABRIC)).offerTo(exporter, id("rift_stabilizer_stable_fabric")); - ShapedRecipeJsonBuilder.create(RecipeCategory.MISC, ModItems.STABILIZED_RIFT_SIGNATURE).pattern("# #").pattern(" X ").pattern("# #").input('#', Items.ENDER_PEARL).input('X', ModItems.RIFT_SIGNATURE).criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.RIFT_SIGNATURE)).offerTo(exporter, id("stabilized_rift_signature")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.STONE_DOOR).pattern("XX").pattern("XX").pattern("XX").define('X', Blocks.STONE).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.STONE)).save(exporter, id("stone_door")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.GOLD_DOOR, 3).pattern("XX").pattern("XX").pattern("XX").define('X', GOLD_INGOTS).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(Items.GOLD_INGOT)).save(exporter, id("gold_door")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModBlocks.QUARTZ_DOOR).pattern("XX").pattern("XX").pattern("XX").define('X', Items.QUARTZ).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(Items.QUARTZ)).save(exporter, id("quartz_door")); + ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.RIFT_BLADE).requires(Items.IRON_SWORD).requires(Items.ENDER_PEARL, 2).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_SWORD)).save(exporter, id("rift_blade")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_REMOVER).pattern(" # ").pattern("#X#").pattern(" # ").define('#', GOLD_INGOTS).define('X', Items.ENDER_PEARL).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.RIFT_BLADE)).save(exporter, id("rift_remover")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_REMOVER).pattern("###").pattern("#X#").pattern("###").define('#', GOLD_INGOTS).define('X', ModItems.STABLE_FABRIC).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.STABLE_FABRIC)).save(exporter, id("rift_remover_stable_fabric")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_SIGNATURE).pattern(" # ").pattern("#X#").pattern(" # ").define('#', IRON_INGOTS).define('X', Items.ENDER_PEARL).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.RIFT_BLADE)).save(exporter, id("rift_signature")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_SIGNATURE).pattern("###").pattern("#X#").pattern("###").define('#', IRON_INGOTS).define('X', ModItems.STABLE_FABRIC).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.STABLE_FABRIC)).save(exporter, id("rift_signature_stable_fabric")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_STABILIZER).pattern(" # ").pattern("#X#").pattern(" # ").define('#', DIAMONDS).define('X', Items.ENDER_PEARL).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.RIFT_BLADE)).save(exporter, id("rift_stabilizer")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.RIFT_STABILIZER).pattern("###").pattern("#X#").pattern("###").define('#', DIAMONDS).define('X', ModItems.STABLE_FABRIC).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.STABLE_FABRIC)).save(exporter, id("rift_stabilizer_stable_fabric")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.STABILIZED_RIFT_SIGNATURE).pattern("# #").pattern(" X ").pattern("# #").define('#', Items.ENDER_PEARL).define('X', ModItems.RIFT_SIGNATURE).unlockedBy("inventory_changed", InventoryChangeTrigger.TriggerInstance.hasItems(ModItems.RIFT_SIGNATURE)).save(exporter, id("stabilized_rift_signature")); ColoredFabricRecipeProvider.generate(exporter); TesselatingRecipeProvider.generate(exporter); diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java b/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java index f129e0c3..278b4f4c 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/LootTableProvider.java @@ -1,13 +1,14 @@ package org.dimdev.dimdoors.datagen; -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.loot.condition.TableBonusLootCondition; -import net.minecraft.loot.entry.ItemEntry; +import java.util.function.BiConsumer; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootTable; + import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.item.ModItems; @@ -20,24 +21,31 @@ public class LootTableProvider extends FabricBlockLootTableProvider { @Override public void generate() { for (Block block : ModBlocks.FABRIC_BLOCKS.values()) { - this.addDropWithSilkTouch(block); + this.dropWhenSilkTouch(block); } - this.addDropWithSilkTouch(ModBlocks.GOLD_DOOR); - this.addDropWithSilkTouch(ModBlocks.QUARTZ_DOOR); + this.dropWhenSilkTouch(ModBlocks.GOLD_DOOR); + this.dropWhenSilkTouch(ModBlocks.QUARTZ_DOOR); // this.addDropWithSilkTouch(ModBlocks.OAK_DIMENSIONAL_DOOR); // this.addDropWithSilkTouch(ModBlocks.IRON_DIMENSIONAL_DOOR); // this.addDropWithSilkTouch(ModBlocks.GOLD_DIMENSIONAL_DOOR); // this.addDropWithSilkTouch(ModBlocks.QUARTZ_DIMENSIONAL_DOOR); - this.addDropWithSilkTouch(ModBlocks.OAK_DIMENSIONAL_TRAPDOOR); - this.addDropWithSilkTouch(ModBlocks.MARKING_PLATE); + this.dropWhenSilkTouch(ModBlocks.OAK_DIMENSIONAL_TRAPDOOR); + this.dropWhenSilkTouch(ModBlocks.MARKING_PLATE); - this.addDrop(ModBlocks.SOLID_STATIC, (blockx) -> oreDrops(blockx, ModItems.INFRANGIBLE_FIBER)); + this.add(ModBlocks.SOLID_STATIC, (blockx) -> createOreDrop(blockx, ModItems.INFRANGIBLE_FIBER)); - this.addDrop(ModBlocks.UNRAVELLED_FABRIC, (blockx) -> dropsWithSilkTouch(blockx, addSurvivesExplosionCondition(blockx, ItemEntry.builder(ModItems.FRAYED_FILAMENTS).conditionally(TableBonusLootCondition.builder(Enchantments.FORTUNE, 0.1F, 0.14285715F, 0.25F, 1.0F)).alternatively(ItemEntry.builder(blockx))))); + this.add(ModBlocks.UNRAVELLED_FABRIC, (blockx) -> createSilkTouchDispatchTable(blockx, + applyExplosionCondition(blockx, ItemEntry.builder(ModItems.FRAYED_FILAMENTS).conditionally( + TableBonusLootCondition.builder(Enchantments.FORTUNE, 0.1F, 0.14285715F, 0.25F, 1.0F)).alternatively(ItemEntry.builder(blockx))))); } @Override public String getName() { return "Dimdoors Loot Tables"; } + + @Override + public void accept(BiConsumer resourceLocationBuilderBiConsumer) { + + } } diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeJsonBuilder.java b/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeJsonBuilder.java index 6222d956..60c51384 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeJsonBuilder.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeJsonBuilder.java @@ -4,39 +4,36 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Consumer; - +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.CriterionTriggerInstance; +import net.minecraft.advancements.RequirementsStrategy; +import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.ItemLike; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import org.jetbrains.annotations.Nullable; - -import net.minecraft.advancement.Advancement; -import net.minecraft.advancement.AdvancementRewards; -import net.minecraft.advancement.CriterionMerger; -import net.minecraft.advancement.criterion.CriterionConditions; -import net.minecraft.advancement.criterion.RecipeUnlockedCriterion; -import net.minecraft.data.server.recipe.CraftingRecipeJsonBuilder; -import net.minecraft.data.server.recipe.RecipeJsonProvider; -import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.book.RecipeCategory; -import net.minecraft.registry.Registries; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; - import org.dimdev.dimdoors.recipe.ModRecipeSerializers; -public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { +public class TesselatingRecipeJsonBuilder implements RecipeBuilder { private final RecipeCategory category; private final Item output; private final int outputCount; private final List pattern = Lists.newArrayList(); private final Map inputs = Maps.newLinkedHashMap(); - private final Advancement.Builder advancementBuilder = Advancement.Builder.create(); + private final Advancement.Builder advancementBuilder = Advancement.Builder.advancement(); @Nullable private String group; @@ -44,26 +41,26 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { private float experience = 1.0f; private int weavingTime = 200; - public TesselatingRecipeJsonBuilder(ItemConvertible output, int outputCount) { + public TesselatingRecipeJsonBuilder(ItemLike output, int outputCount) { this.category = RecipeCategory.MISC; //TODO: FIND out if need to be different this.output = output.asItem(); this.outputCount = outputCount; } - public static TesselatingRecipeJsonBuilder create(ItemConvertible output) { + public static TesselatingRecipeJsonBuilder create(ItemLike output) { return create(output, 1); } - public static TesselatingRecipeJsonBuilder create(ItemConvertible output, int outputCount) { + public static TesselatingRecipeJsonBuilder create(ItemLike output, int outputCount) { return new TesselatingRecipeJsonBuilder(output, outputCount); } public TesselatingRecipeJsonBuilder input(Character c, TagKey tag) { - return this.input(c, Ingredient.fromTag(tag)); + return this.input(c, Ingredient.of(tag)); } - public TesselatingRecipeJsonBuilder input(Character c, ItemConvertible itemProvider) { - return this.input(c, Ingredient.ofItems(itemProvider)); + public TesselatingRecipeJsonBuilder input(Character c, ItemLike itemProvider) { + return this.input(c, Ingredient.of(itemProvider)); } public TesselatingRecipeJsonBuilder input(Character c, Ingredient ingredient) { @@ -86,8 +83,8 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { } } - public TesselatingRecipeJsonBuilder criterion(String string, CriterionConditions criterionConditions) { - this.advancementBuilder.criterion(string, criterionConditions); + public TesselatingRecipeJsonBuilder unlockedBy(String string, CriterionTriggerInstance criterionConditions) { + this.advancementBuilder.addCriterion(string, criterionConditions); return this; } @@ -106,18 +103,18 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { return this; } - public Item getOutputItem() { + public Item getResult() { return this.output; } - public void offerTo(Consumer exporter, Identifier recipeId) { + public void save(Consumer exporter, ResourceLocation recipeId) { this.validate(recipeId); - this.advancementBuilder.parent(ROOT).criterion("has_the_recipe", RecipeUnlockedCriterion.create(recipeId)).rewards(AdvancementRewards.Builder.recipe(recipeId)).criteriaMerger(CriterionMerger.OR); + this.advancementBuilder.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(recipeId)).rewards(AdvancementRewards.Builder.recipe(recipeId)).requirements(RequirementsStrategy.OR); - exporter.accept(new TesselatingRecipeJsonProvider(recipeId, this.output, this.outputCount, this.group == null ? "" : this.group, this.pattern, this.inputs, this.advancementBuilder, recipeId.withPrefixedPath("recipes/tesselating/"), experience, weavingTime)); + exporter.accept(new TesselatingRecipeJsonProvider(recipeId, this.output, this.outputCount, this.group == null ? "" : this.group, this.pattern, this.inputs, this.advancementBuilder, recipeId.withPrefix("recipes/tesselating/"), experience, weavingTime)); } - private void validate(Identifier recipeId) { + private void validate(ResourceLocation recipeId) { if (this.pattern.isEmpty()) { throw new IllegalStateException("No pattern is defined for shaped recipe " + recipeId + "!"); } else { @@ -145,19 +142,19 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { } } - static class TesselatingRecipeJsonProvider implements RecipeJsonProvider { - private final Identifier recipeId; + static class TesselatingRecipeJsonProvider implements FinishedRecipe { + private final ResourceLocation recipeId; private final Item output; private final int resultCount; private final String group; private final List pattern; private final Map inputs; private final Advancement.Builder advancementBuilder; - private final Identifier advancementId; + private final ResourceLocation advancementId; private final float experience; private final int weavingTime; - public TesselatingRecipeJsonProvider(Identifier recipeId, Item output, int resultCount, String group, List pattern, Map inputs, Advancement.Builder advancementBuilder, Identifier advancementId, float experience, int weavingTime) { + public TesselatingRecipeJsonProvider(ResourceLocation recipeId, Item output, int resultCount, String group, List pattern, Map inputs, Advancement.Builder advancementBuilder, ResourceLocation advancementId, float experience, int weavingTime) { this.recipeId = recipeId; this.output = output; this.resultCount = resultCount; @@ -170,7 +167,7 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { this.weavingTime = weavingTime; } - public void serialize(JsonObject json) { + public void serializeRecipeData(JsonObject json) { if (!this.group.isEmpty()) { json.addProperty("group", this.group); } @@ -190,7 +187,7 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { json.add("key", jsonObject); JsonObject jsonObject2 = new JsonObject(); - jsonObject2.addProperty("item", Registries.ITEM.getId(this.output).toString()); + jsonObject2.addProperty("item", BuiltInRegistries.ITEM.getKey(this.output).toString()); if (this.resultCount > 1) { jsonObject2.addProperty("count", this.resultCount); } @@ -200,21 +197,21 @@ public class TesselatingRecipeJsonBuilder implements CraftingRecipeJsonBuilder { json.addProperty("weavingtime", weavingTime); } - public RecipeSerializer getSerializer() { + public RecipeSerializer getType() { return ModRecipeSerializers.TESSELATING; } - public Identifier getRecipeId() { + public ResourceLocation getId() { return this.recipeId; } @Nullable - public JsonObject toAdvancementJson() { - return this.advancementBuilder.toJson(); + public JsonObject serializeAdvancement() { + return this.advancementBuilder.serializeToJson(); } @Nullable - public Identifier getAdvancementId() { + public ResourceLocation getAdvancementId() { return this.advancementId; } } diff --git a/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeProvider.java b/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeProvider.java index d92366fd..9687caff 100644 --- a/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeProvider.java +++ b/src/main/datagen/org/dimdev/dimdoors/datagen/TesselatingRecipeProvider.java @@ -1,29 +1,27 @@ package org.dimdev.dimdoors.datagen; import java.util.function.Consumer; - -import net.minecraft.data.server.recipe.RecipeJsonProvider; -import net.minecraft.item.Items; -import net.minecraft.recipe.Ingredient; - +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; import org.dimdev.dimdoors.item.ModItems; -import static net.minecraft.advancement.criterion.InventoryChangedCriterion.Conditions.items; +import static net.minecraft.advancements.critereon.InventoryChangeTrigger.TriggerInstance.hasItems; public class TesselatingRecipeProvider { - public static void generate(Consumer exporter) { - TesselatingRecipeJsonBuilder.create(ModItems.STABLE_FABRIC).pattern("XX").pattern("XX").input('X', ModItems.WORLD_THREAD).criterion("world_thread", items(ModItems.WORLD_THREAD)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.LIMINAL_LINT).pattern("XX").pattern("XX").input('X', ModItems.FRAYED_FILAMENTS).criterion("frayed_filaments", items(ModItems.FRAYED_FILAMENTS)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.ENDURING_FIBERS).pattern("XX").pattern("XX").input('X', ModItems.INFRANGIBLE_FIBER).criterion("infrangible_fiber", items(ModItems.INFRANGIBLE_FIBER)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.RIFT_PEARL).pattern("XO").input('X', Ingredient.ofItems(ModItems.STABLE_FABRIC)).input('O', Items.ENDER_PEARL).criterion("stable_fabric", items(ModItems.STABLE_FABRIC)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.FABRIC_OF_REALITY).pattern("XX").pattern("XO").input('O', ModItems.STABLE_FABRIC).input('X', ModItems.WORLD_THREAD).criterion("stable_fabric", items(ModItems.STABLE_FABRIC)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.FUZZY_FIREBALL).pattern("XOX").input('X', ModItems.LIMINAL_LINT).input('O', Items.FIRE_CHARGE).criterion("liminal_lint", items(ModItems.LIMINAL_LINT)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.GARMENT_OF_REALITY).pattern("XXX").pattern("XOX").pattern("XXX").input('X', ModItems.STABLE_FABRIC).input('O', ModItems.INFRANGIBLE_FIBER).criterion("stable_fabric", items(ModItems.STABLE_FABRIC)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.FABRIC_OF_FINALITY).pattern("XOX").input('X', ModItems.ENDURING_FIBERS).input('O', Items.DRAGON_BREATH).criterion("enduring_fabric", items(ModItems.ENDURING_FIBERS)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.REALITY_SPONGE).pattern("XOX").pattern("OXO").pattern("XOX").input('X', ModItems.STABLE_FABRIC).input('O', ModItems.INFRANGIBLE_FIBER).criterion("liminal_lint", items(ModItems.LIMINAL_LINT)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_HELMET).pattern("XXX").pattern("X X").input('X', ModItems.WORLD_THREAD).criterion("world_thread", items(ModItems.WORLD_THREAD)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_CHESTPLATE).pattern("X X").pattern("XXX").pattern("XXX").input('X', ModItems.WORLD_THREAD).criterion("world_thread", items(ModItems.WORLD_THREAD)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_LEGGINGS).pattern("XXX").pattern("X X").pattern("X X").input('X', ModItems.WORLD_THREAD).criterion("world_thread", items(ModItems.WORLD_THREAD)).offerTo(exporter); - TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_BOOTS).pattern("X X").pattern("X X").input('X', ModItems.WORLD_THREAD).criterion("world_thread", items(ModItems.WORLD_THREAD)).offerTo(exporter); + public static void generate(Consumer exporter) { + TesselatingRecipeJsonBuilder.create(ModItems.STABLE_FABRIC).pattern("XX").pattern("XX").input('X', ModItems.WORLD_THREAD).unlockedBy("world_thread", hasItems(ModItems.WORLD_THREAD)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.LIMINAL_LINT).pattern("XX").pattern("XX").input('X', ModItems.FRAYED_FILAMENTS).unlockedBy("frayed_filaments", hasItems(ModItems.FRAYED_FILAMENTS)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.ENDURING_FIBERS).pattern("XX").pattern("XX").input('X', ModItems.INFRANGIBLE_FIBER).unlockedBy("infrangible_fiber", hasItems(ModItems.INFRANGIBLE_FIBER)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.RIFT_PEARL).pattern("XO").input('X', Ingredient.of(ModItems.STABLE_FABRIC)).input('O', Items.ENDER_PEARL).unlockedBy("stable_fabric", hasItems(ModItems.STABLE_FABRIC)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.FABRIC_OF_REALITY).pattern("XX").pattern("XO").input('O', ModItems.STABLE_FABRIC).input('X', ModItems.WORLD_THREAD).unlockedBy("stable_fabric", hasItems(ModItems.STABLE_FABRIC)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.FUZZY_FIREBALL).pattern("XOX").input('X', ModItems.LIMINAL_LINT).input('O', Items.FIRE_CHARGE).unlockedBy("liminal_lint", hasItems(ModItems.LIMINAL_LINT)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.GARMENT_OF_REALITY).pattern("XXX").pattern("XOX").pattern("XXX").input('X', ModItems.STABLE_FABRIC).input('O', ModItems.INFRANGIBLE_FIBER).unlockedBy("stable_fabric", hasItems(ModItems.STABLE_FABRIC)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.FABRIC_OF_FINALITY).pattern("XOX").input('X', ModItems.ENDURING_FIBERS).input('O', Items.DRAGON_BREATH).unlockedBy("enduring_fabric", hasItems(ModItems.ENDURING_FIBERS)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.REALITY_SPONGE).pattern("XOX").pattern("OXO").pattern("XOX").input('X', ModItems.STABLE_FABRIC).input('O', ModItems.INFRANGIBLE_FIBER).unlockedBy("liminal_lint", hasItems(ModItems.LIMINAL_LINT)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_HELMET).pattern("XXX").pattern("X X").input('X', ModItems.WORLD_THREAD).unlockedBy("world_thread", hasItems(ModItems.WORLD_THREAD)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_CHESTPLATE).pattern("X X").pattern("XXX").pattern("XXX").input('X', ModItems.WORLD_THREAD).unlockedBy("world_thread", hasItems(ModItems.WORLD_THREAD)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_LEGGINGS).pattern("XXX").pattern("X X").pattern("X X").input('X', ModItems.WORLD_THREAD).unlockedBy("world_thread", hasItems(ModItems.WORLD_THREAD)).save(exporter); + TesselatingRecipeJsonBuilder.create(ModItems.WORLD_THREAD_BOOTS).pattern("X X").pattern("X X").input('X', ModItems.WORLD_THREAD).unlockedBy("world_thread", hasItems(ModItems.WORLD_THREAD)).save(exporter); } }