parchment > loom

This commit is contained in:
TheComputerizer 2023-03-11 04:29:04 -06:00
parent e602ca1fdc
commit 48a7b47a1b
6 changed files with 232 additions and 233 deletions

View file

@ -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);
}
}

View file

@ -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<RegistryWrapper.WrapperLookup> registriesFuture) {
public BlockTagProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> 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);
}
}

View file

@ -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<Item> GOLD_INGOTS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "gold_ingots"));
private static final TagKey<Item> IRON_INGOTS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "iron_ingots"));
private static final TagKey<Item> DIAMONDS = TagKey.of(RegistryKeys.ITEM, new Identifier("c", "diamond"));
private static final TagKey<Item> GOLD_INGOTS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "gold_ingots"));
private static final TagKey<Item> IRON_INGOTS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "iron_ingots"));
private static final TagKey<Item> DIAMONDS = TagKey.create(Registries.ITEM, new ResourceLocation("c", "diamond"));
public DimdoorsRecipeProvider(FabricDataOutput dataGenerator) {
super(dataGenerator);
}
@Override
public void generate(Consumer<RecipeJsonProvider> exporter) {
public void buildRecipes(Consumer<FinishedRecipe> 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);

View file

@ -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<ResourceLocation, LootTable.Builder> resourceLocationBuilderBiConsumer) {
}
}

View file

@ -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<String> pattern = Lists.newArrayList();
private final Map<Character, Ingredient> 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<Item> 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<RecipeJsonProvider> exporter, Identifier recipeId) {
public void save(Consumer<FinishedRecipe> 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<String> pattern;
private final Map<Character, Ingredient> 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<String> pattern, Map<Character, Ingredient> inputs, Advancement.Builder advancementBuilder, Identifier advancementId, float experience, int weavingTime) {
public TesselatingRecipeJsonProvider(ResourceLocation recipeId, Item output, int resultCount, String group, List<String> pattern, Map<Character, Ingredient> 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;
}
}

View file

@ -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<RecipeJsonProvider> 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<FinishedRecipe> 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);
}
}