Switched to using JSON recipes

This commit is contained in:
Adubbz 2017-06-20 22:31:57 +10:00
parent 962f1d0db5
commit 93475aafd6
206 changed files with 3935 additions and 204 deletions

View File

@ -33,204 +33,9 @@ public class ModCrafting
public static void init()
{
addOreRegistration();
addCraftingRecipies();
addSmeltingRecipes();
}
private static void addCraftingRecipies()
{
/*** Dyes ***/
// Flower1
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.SILVER.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.CLOVER));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.CYAN.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.SWAMPFLOWER));
addShapelessRecipe(new ItemStack(BOPItems.black_dye, 2), BlockBOPFlower.paging.getVariantItem(BOPFlowers.DEATHBLOOM));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.CYAN.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.GLOWFLOWER));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.LIGHT_BLUE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.BLUE_HYDRANGEA));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.ORANGE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.ORANGE_COSMOS));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.PINK.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.PINK_DAFFODIL));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.MAGENTA.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.WILDFLOWER));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.PURPLE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.VIOLET));
addShapelessRecipe(new ItemStack(BOPItems.white_dye, 2), BlockBOPFlower.paging.getVariantItem(BOPFlowers.WHITE_ANEMONE));
addShapelessRecipe(new ItemStack(BOPItems.black_dye, 2), BlockBOPFlower.paging.getVariantItem(BOPFlowers.ENDERLOTUS));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.RED.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.BROMELIAD));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.GRAY.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.WILTED_LILY));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.PINK.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.PINK_HIBISCUS));
addShapelessRecipe(new ItemStack(BOPItems.white_dye, 2), BlockBOPFlower.paging.getVariantItem(BOPFlowers.LILY_OF_THE_VALLEY));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.ORANGE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.BURNING_BLOSSOM));
// Flower 2
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.PURPLE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.LAVENDER));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.YELLOW.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.GOLDENROD));
addShapelessRecipe(new ItemStack(BOPItems.blue_dye, 2), BlockBOPFlower.paging.getVariantItem(BOPFlowers.BLUEBELLS));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.PINK.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.MINERS_DELIGHT));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.LIGHT_BLUE.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.ICY_IRIS));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.RED.getDyeDamage()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.ROSE));
// Others
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.GRAY.getDyeDamage()), new ItemStack(BOPItems.ash));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.LIME.getDyeDamage()), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.GLOWSHROOM.ordinal()));
addShapelessRecipe(new ItemStack(BOPItems.brown_dye, 2), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.FLAT_MUSHROOM.ordinal()));
addShapelessRecipe(new ItemStack(BOPItems.blue_dye, 2), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.BLUE_MILK_CAP.ordinal()));
addShapelessRecipe(new ItemStack(BOPItems.brown_dye, 2), BlockBOPPlant.paging.getVariantItem(BOPPlants.CATTAIL));
addShapelessRecipe(new ItemStack(BOPItems.brown_dye, 2), ((BlockBOPDoublePlant)BOPBlocks.double_plant).getVariantItem(BlockBOPDoublePlant.DoublePlantType.TALL_CATTAIL));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.LIGHT_BLUE.getDyeDamage()), ((BlockBOPDoublePlant)BOPBlocks.double_plant).getVariantItem(BlockBOPDoublePlant.DoublePlantType.FLAX));
addShapelessRecipe(new ItemStack(Items.DYE, 2, EnumDyeColor.RED.getDyeDamage()), BlockBOPPlant.paging.getVariantItem(BOPPlants.RAFFLESIA));
addShapelessRecipe(new ItemStack(BOPItems.brown_dye, 2), new ItemStack(BOPItems.pinecone));
/*** BOP brick and stone stairs and slabs ***/
for (BlockBOPHalfOtherSlab.SlabType slabType : BlockBOPHalfOtherSlab.SlabType.values())
{
BlockBOPHalfOtherSlab otherSlab = (BlockBOPHalfOtherSlab)BOPBlocks.other_slab;
addShapedRecipe(otherSlab.getVariantItem(slabType, 6), "RRR", 'R', otherSlab.getFullBlockVariantItem(slabType));
}
addShapedRecipe(new ItemStack(BOPBlocks.mud_brick_stairs, 4), " R", " RR", "RRR", 'R', BOPBlocks.mud_brick_block);
addShapedRecipe(new ItemStack(BOPBlocks.mud_brick_stairs, 4), "R ", "RR ", "RRR", 'R', BOPBlocks.mud_brick_block);
addShapedRecipe(new ItemStack(Blocks.TNT, 1), "GSG", "SGS", "GSG", 'S', BOPBlocks.white_sand, 'G', Items.GUNPOWDER);
// White Sandstone
addShapedRecipe(new ItemStack(BOPBlocks.white_sandstone_stairs, 4), " R", " RR", "RRR", 'R', BOPBlocks.white_sandstone);
addShapedRecipe(new ItemStack(BOPBlocks.white_sandstone_stairs, 4), "R ", "RR ", "RRR", 'R', BOPBlocks.white_sandstone);
addShapedRecipe(new ItemStack(BOPBlocks.white_sandstone, 1), "RR", "RR", 'R', BOPBlocks.white_sand);
addShapedRecipe(new ItemStack(BOPBlocks.white_sandstone, 4, BlockBOPWhiteSandstone.StoneType.SMOOTH.ordinal()), "RR", "RR", 'R', BOPBlocks.white_sandstone);
addShapedRecipe(new ItemStack(BOPBlocks.white_sandstone, 1, BlockBOPWhiteSandstone.StoneType.CHISELED.ordinal()), "R", "R", 'R', new ItemStack(BOPBlocks.other_slab, 1, BlockBOPHalfOtherSlab.SlabType.WHITE_SANDSTONE.ordinal()));
/*** Wood stairs and slabs ***/
// Make sticks from any BOP plank
addShapedRecipe(new ItemStack(Items.STICK, 4), "#", "#", '#', BOPBlocks.planks_0);
// Note you can't make planks (and therefore doors, fences etc) from GIANT_FLOWER and DEAD logs
for (BOPWoods wood : BOPWoods.values())
{
if (!wood.hasPlanks()) {continue;}
addShapelessRecipe(BlockBOPPlanks.paging.getVariantItem(wood, 4), BlockBOPLog.paging.getVariantItem(wood));
addShapedRecipe(BlockBOPHalfWoodSlab.paging.getVariantItem(wood, 6), "###", '#', BlockBOPPlanks.paging.getVariantItem(wood));
addShapedRecipe(new ItemStack(BlockBOPWoodStairs.getBlock(wood), 4), "# ", "## ", "###", '#', BlockBOPPlanks.paging.getVariantItem(wood));
addShapedRecipe(new ItemStack(BlockBOPDoor.getBlock(wood).getDoorItem(), 3), "##", "##", "##", '#', BlockBOPPlanks.paging.getVariantItem(wood));
addShapedRecipe(new ItemStack(BlockBOPFence.getBlock(wood), 3), "W#W", "W#W", '#', Items.STICK, 'W', BlockBOPPlanks.paging.getVariantItem(wood));
addShapedRecipe(new ItemStack(BlockBOPFenceGate.getBlock(wood), 1), "#W#", "#W#", '#', Items.STICK, 'W', BlockBOPPlanks.paging.getVariantItem(wood));
}
/*** Gems and Gem Blocks ***/
for (BOPGems gem : BOPGems.values())
{
addShapelessRecipe(new ItemStack(BOPItems.gem, 9, gem.ordinal()), new ItemStack(BOPBlocks.gem_block, 1, gem.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.gem_block, 1, gem.ordinal()), "AAA", "AAA", "AAA", 'A', new ItemStack(BOPItems.gem, 1, gem.ordinal()));
}
/*** Tools, weapons, armor ***/
/*** Biome Finder ***/
addShapedRecipe(new ItemStack(BOPItems.biome_finder), " A ", "AOA", " A ", 'A', new ItemStack(BOPItems.gem, 1, BOPGems.AMETHYST.ordinal()), 'O', new ItemStack(BOPItems.terrestrial_artifact));
addRecipe("biome_essence", new BiomeEssenceRecipe());
/*** Flower Basket ***/
addShapedRecipe(new ItemStack(BOPItems.flower_basket), " S ", "S S", "SSS", 'S', "stickWood");
/*** Misc Others ***/
// Overgrown Netherrack
addShapedRecipe(new ItemStack(BOPBlocks.grass, 1, BlockBOPGrass.BOPGrassType.OVERGROWN_NETHERRACK.ordinal()), "SSS", "SNS", "SSS", 'S', Items.WHEAT_SEEDS, 'N', Blocks.NETHERRACK);
// Cattail Wool
addShapedRecipe(new ItemStack(Blocks.WOOL), "CCC", "CCC", "CCC", 'C', "plantCattail");
// Ash Coal
addShapedRecipe(new ItemStack(Items.COAL), "AAA", "AAA", "AAA", 'A', new ItemStack(BOPItems.ash));
// Ash Block
addShapedRecipe(new ItemStack(BOPBlocks.ash_block), "AA", "AA", 'A', new ItemStack(BOPItems.ash));
// Mud Block
addShapedRecipe(new ItemStack(BOPBlocks.mud, 1), "MM", "MM", 'M', "ballMud");
addShapelessRecipe(new ItemStack(BOPBlocks.mud), "dirt", new ItemStack(Items.WATER_BUCKET));
// Mud Brick Blcok
addShapedRecipe(new ItemStack(BOPBlocks.mud_brick_block), "MM", "MM", 'M', new ItemStack(BOPItems.mud_brick));
// Celestial Crystal Block
addShapedRecipe(new ItemStack(BOPBlocks.crystal), "CC", "CC", 'C', new ItemStack(BOPItems.crystal_shard));
//Coarse Dirts
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.LOAMY).withProperty(BlockBOPDirt.COARSE, true))), "GD", "DG", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.LOAMY.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.LOAMY).withProperty(BlockBOPDirt.COARSE, true))), "DG", "GD", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.LOAMY.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.SANDY).withProperty(BlockBOPDirt.COARSE, true))), "GD", "DG", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.SANDY.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.SANDY).withProperty(BlockBOPDirt.COARSE, true))), "DG", "GD", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.SANDY.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.SILTY).withProperty(BlockBOPDirt.COARSE, true))), "GD", "DG", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.SILTY.ordinal()));
addShapedRecipe(new ItemStack(BOPBlocks.dirt, 4, BOPBlocks.dirt.getMetaFromState(BOPBlocks.dirt.getDefaultState().withProperty(BlockBOPDirt.VARIANT, BlockBOPDirt.BOPDirtType.SILTY).withProperty(BlockBOPDirt.COARSE, true))), "DG", "GD", 'G', Blocks.GRAVEL, 'D', new ItemStack(BOPBlocks.dirt, 4, BlockBOPDirt.BOPDirtType.SILTY.ordinal()));
// Records
addShapedRecipe(new ItemStack(BOPItems.record_wanderer), "TTT", "TRT", "TTT", 'T', BOPItems.terrestrial_artifact, 'R', "record");
// Bamboo Thatching
addShapedRecipe(new ItemStack(BOPBlocks.bamboo_thatching), "##", "##", '#', BOPBlocks.bamboo);
// Bamboo
addShapedRecipe(new ItemStack(BOPBlocks.bamboo, 8), " #", "# ", '#', new ItemStack(BOPBlocks.bamboo_thatching));
addShapedRecipe(new ItemStack(BOPBlocks.bamboo, 8), "# ", " #", '#', new ItemStack(BOPBlocks.bamboo_thatching));
// Empty Jar
addShapedRecipe(new ItemStack(BOPItems.jar_empty, 3, 0), "# #", "# #", "###", '#', Blocks.GLASS);
// Ambrosia
addShapelessRecipe(new ItemStack(BOPItems.ambrosia), new ItemStack(BOPItems.pixie_dust), new ItemStack(Items.POTIONITEM, 1, 0), new ItemStack(BOPItems.ichor), new ItemStack(BOPBlocks.seaweed, 1, BlockBOPSeaweed.SeaweedType.KELP.ordinal()), BlockBOPPlant.paging.getVariantItem(BOPPlants.ROOT), new ItemStack(BOPItems.crystal_shard), new ItemStack(BOPItems.jar_filled, 1, ItemJarFilled.JarContents.HONEY.ordinal()), new ItemStack(BOPItems.berries), Items.SUGAR);
// Oranmental Artifact
addShapelessRecipe(new ItemStack(BOPItems.terrestrial_artifact), new ItemStack(BOPItems.gem, 1, BOPGems.RUBY.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.TOPAZ.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.AMBER.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.PERIDOT.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.MALACHITE.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.SAPPHIRE.ordinal()), new ItemStack(BOPItems.gem, 1, BOPGems.TANZANITE.ordinal()), Items.EMERALD);
// Flesh Block
addShapedRecipe(new ItemStack(BOPBlocks.flesh), "##", "##", '#', new ItemStack(BOPItems.fleshchunk));
// Honeycombs
addShapedRecipe(new ItemStack(BOPBlocks.hive, 1, BlockBOPHive.HiveType.HONEYCOMB.ordinal()), "##", "##", '#', new ItemStack(BOPItems.honeycomb));
addShapedRecipe(new ItemStack(BOPBlocks.hive, 1, BlockBOPHive.HiveType.FILLED_HONEYCOMB.ordinal()), "##", "##", '#', new ItemStack(BOPItems.filled_honeycomb));
// Food
addShapelessRecipe(new ItemStack(BOPItems.shroompowder), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.TOADSTOOL.ordinal()));
addShapelessRecipe(new ItemStack(BOPItems.ricebowl), Items.BOWL, BlockBOPPlant.paging.getVariantItem(BOPPlants.WILDRICE));
addShapelessRecipe(new ItemStack(BOPItems.saladfruit), Items.BOWL, BOPItems.peach, Items.APPLE, BOPItems.pear);
addShapelessRecipe(new ItemStack(BOPItems.saladveggie), Items.BOWL, BOPItems.turnip, Items.CARROT, Items.POTATO);
addShapelessRecipe(new ItemStack(BOPItems.saladshroom), Items.BOWL, new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.TOADSTOOL.ordinal()), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.PORTOBELLO.ordinal()), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.BLUE_MILK_CAP.ordinal()));
// Terrariums
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.FERN.ordinal()), "grass", new ItemStack(Blocks.TALLGRASS, 1, 2), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.MUSHROOM.ordinal()), "grass", new ItemStack(Blocks.RED_MUSHROOM), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.CACTUS.ordinal()), "grass", BlockBOPPlant.paging.getVariantItem(BOPPlants.TINYCACTUS), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.FLAX.ordinal()), "grass", ((BlockBOPDoublePlant)BOPBlocks.double_plant).getVariantItem(BlockBOPDoublePlant.DoublePlantType.FLAX), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.SAPLING.ordinal()), "grass", "treeSapling", new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.KORU.ordinal()), "grass", BlockBOPPlant.paging.getVariantItem(BOPPlants.KORU), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.FLOWER.ordinal()), "grass", new ItemStack(Blocks.RED_FLOWER), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.FLOWER.ordinal()), "grass", new ItemStack(Blocks.YELLOW_FLOWER), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.BAMBOO.ordinal()), new ItemStack(Blocks.DIRT, 1, 2), new ItemStack(BOPBlocks.bamboo), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.DEAD.ordinal()), "grass", new ItemStack(Blocks.DEADBUSH), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.GLOWSHROOM.ordinal()), new ItemStack(BOPBlocks.grass, 1, BlockBOPGrass.BOPGrassType.OVERGROWN_STONE.ordinal()), new ItemStack(BOPBlocks.mushroom, 1, BlockBOPMushroom.MushroomType.GLOWSHROOM.ordinal()), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.MYSTIC.ordinal()), "grass", BlockBOPFlower.paging.getVariantItem(BOPFlowers.GLOWFLOWER), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.OMINOUS.ordinal()), "grass", BlockBOPFlower.paging.getVariantItem(BOPFlowers.DEATHBLOOM), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.ORIGIN.ordinal()), new ItemStack(BOPBlocks.grass, 1, BlockBOPGrass.BOPGrassType.ORIGIN.ordinal()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.ROSE), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.WASTELAND.ordinal()), new ItemStack(BOPBlocks.dried_sand), BlockBOPFlower.paging.getVariantItem(BOPFlowers.WILTED_LILY), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.NETHER.ordinal()), new ItemStack(BOPBlocks.grass, 1, BlockBOPGrass.BOPGrassType.OVERGROWN_NETHERRACK.ordinal()), BlockBOPFlower.paging.getVariantItem(BOPFlowers.BURNING_BLOSSOM), new ItemStack(BOPItems.jar_empty));
addShapelessRecipe(new ItemStack(BOPBlocks.terrarium, 1, BlockBOPTerrarium.TerrariumType.ENDER.ordinal()), new ItemStack(BOPBlocks.grass, 1, BlockBOPGrass.BOPGrassType.SPECTRAL_MOSS.ordinal()), BlockBOPPlant.paging.getVariantItem(BOPPlants.SPECTRALFERN), new ItemStack(BOPItems.jar_empty));
// Vanilla convenience recipes
addShapelessRecipe(new ItemStack(Blocks.SAND), new ItemStack(BOPBlocks.dried_sand), new ItemStack(Items.WATER_BUCKET));
addShapelessRecipe(new ItemStack(BOPBlocks.plant_0, 1, BOPPlants.LEAFPILE.ordinal()), "treeLeaves");
}
private static void addSmeltingRecipes()
{

View File

@ -8,25 +8,49 @@
package biomesoplenty.common.util.inventory;
import biomesoplenty.core.BiomesOPlenty;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import com.google.common.base.Charsets;
import com.google.common.collect.*;
import com.google.gson.*;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.*;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.fml.common.registry.GameData;
import net.minecraftforge.oredict.OreIngredient;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.*;
/**
* Utilities for adding recipes and generating
* json files programmatically in 1.12+.
*/
public class CraftingUtil
{
private static final Gson SERIALIZER = new GsonBuilder().setPrettyPrinting().create();
public static final File RECIPES_DIR = new File(BiomesOPlenty.configDirectory, "recipes");;
// We should no longer need this now we've switched over to JSON, however
// it might be handy to keep around for future reference
public static boolean doRegistration = false;
public static boolean generateJson = false;
private static Map<OreIngredient, String> ingredientOreMap = Maps.newHashMap();
static
{
// remove any existing auto-generated recipe files
try
{
FileUtils.deleteDirectory(RECIPES_DIR);
RECIPES_DIR.mkdir();
}
catch (Exception e)
{
BiomesOPlenty.logger.error("Could not delete default biome config directory!");
}
}
public static void addShapelessRecipe(ItemStack output, Object... inputs)
{
@ -34,7 +58,14 @@ public class CraftingUtil
for (Object input : inputs)
{
ingredients.add(CraftingHelper.getIngredient(input));
Ingredient ingredient = CraftingHelper.getIngredient(input);
// keep track of the origin of ore ingredients since they don't do so themselves
if (ingredient instanceof OreIngredient)
{
ingredientOreMap.put((OreIngredient)ingredient, (String)input);
}
ingredients.add(ingredient);
}
if (ingredients.isEmpty())
@ -72,6 +103,26 @@ public class CraftingUtil
private static void registerRecipe(ResourceLocation location, IRecipe recipe)
{
// only generate json if enabled and it isn't a custom recipe implementation
if (generateJson && (recipe instanceof ShapedRecipes || recipe instanceof ShapelessRecipes))
{
String json = createJsonRecipe(recipe);
File recipeFile = new File(RECIPES_DIR, location.getResourcePath() + ".json");
try
{
FileUtils.writeStringToFile(recipeFile, json, Charsets.US_ASCII);
}
catch (Exception e)
{
BiomesOPlenty.logger.error("Could not write recipe to file " + recipeFile.getName());
}
}
// don't register if it has been disabled
// mainly for debugging whilst switching to json files
if (!doRegistration) return;
if (CraftingManager.REGISTRY.containsKey(location))
{
throw new IllegalStateException("Duplicate recipe ignored with ID " + location);
@ -110,7 +161,14 @@ public class CraftingUtil
}
else if (obj instanceof Character)
{
key.put(((Character)obj).toString(), CraftingHelper.getIngredient(itr.next()));
Object next = itr.next();
Ingredient ingredient = CraftingHelper.getIngredient(next);
// keep track of the origin of ore ingredients since they don't do so themselves
if (ingredient instanceof OreIngredient)
{
ingredientOreMap.put((OreIngredient)ingredient, (String)next);
}
key.put(((Character)obj).toString(), ingredient);
}
else
{
@ -124,6 +182,8 @@ public class CraftingUtil
private static ResourceLocation unusedLocForOutput(ItemStack output)
{
ResourceLocation baseLoc = new ResourceLocation(BiomesOPlenty.MOD_ID, output.getItem().getRegistryName().getResourcePath());
// purely for generating some nicer names for json files
//ResourceLocation baseLoc = new ResourceLocation(BiomesOPlenty.MOD_ID, output.getDisplayName().toLowerCase().replace(" ", "_"));
ResourceLocation recipeLoc = baseLoc;
int index = 0;
@ -136,4 +196,220 @@ public class CraftingUtil
return recipeLoc;
}
private static String createJsonRecipe(IRecipe recipe)
{
JsonObject root = new JsonObject();
if (!recipe.getGroup().isEmpty())
root.add("group", new JsonPrimitive(recipe.getGroup()));
if (recipe instanceof ShapedRecipes)
{
ShapedRecipes shapedRecipe = (ShapedRecipes)recipe;
BiMap<String, Ingredient> keyMap = createShapedRecipeKey(recipe.getIngredients());
String[] pattern = createShapedPattern(shapedRecipe, keyMap);
String type = "minecraft:crafting_shaped";
// create the pattern and add it to the generated json
JsonArray patternJsonArray = new JsonArray();
for (String row : pattern)
{
patternJsonArray.add(row);
}
// create the key and add it to the generated json
JsonObject keyObj = new JsonObject();
for (String key : keyMap.keySet())
{
// get the ingredient for the corresponding key
Ingredient ingredient = keyMap.get(key);
if (ingredient instanceof OreIngredient)
{
type = "forge:ore_shaped";
}
// add the ingredient to the key map
keyObj.add(key, createJsonIngredient(ingredient));
}
// add in this order to look nice
root.add("type", new JsonPrimitive(type));
root.add("pattern", patternJsonArray);
root.add("key", keyObj);
}
else if (recipe instanceof ShapelessRecipes)
{
String type = "minecraft:crafting_shapeless";
JsonArray ingredientsArray = new JsonArray();
for (Ingredient ingredient : recipe.getIngredients())
{
// validate the ingredient - we only cover json generation for the cases we use
if (ingredient.getMatchingStacks().length > 1 && !(ingredient instanceof OreIngredient))
{
throw new IllegalArgumentException("Cannot create key for ingredient matching multiple stacks!");
}
else if (ingredient.getMatchingStacks().length == 0)
{
// skip ingredients which are 'empty'
continue;
}
if (ingredient instanceof OreIngredient)
{
type = "forge:ore_shapeless";
}
ingredientsArray.add(createJsonIngredient(ingredient));
}
root.add("type", new JsonPrimitive(type));
root.add("ingredients", ingredientsArray);
}
root.add("result", createJsonItemStack(recipe.getRecipeOutput()));
return SERIALIZER.toJson(root);
}
private static JsonObject createJsonIngredient(Ingredient ingredient)
{
JsonObject ret;
if (ingredient instanceof OreIngredient)
{
ret = new JsonObject();
ret.add("type", new JsonPrimitive("forge:ore_dict"));
ret.add("ore", new JsonPrimitive(ingredientOreMap.get(ingredient)));
}
else
{
ret = createJsonItemStack(ingredient.getMatchingStacks()[0]);
}
return ret;
}
private static JsonObject createJsonItemStack(ItemStack stack)
{
JsonObject ret = new JsonObject();
ret.add("item", new JsonPrimitive(stack.getItem().getRegistryName().toString()));
if (stack.getCount() != 1) ret.add("count", new JsonPrimitive(stack.getCount()));
if (stack.getMetadata() != 0 || stack.getHasSubtypes()) ret.add("data", new JsonPrimitive(stack.getMetadata()));
return ret;
}
private static String[] createShapedPattern(ShapedRecipes recipe, BiMap<String, Ingredient> keyMap)
{
String[] pattern = new String[recipe.recipeHeight];
// initialize the pattern rows
for (int i = 0; i < pattern.length; i++)
{
pattern[i] = "";
}
// don't bother with ore dict recipes yet
if (keyMap.isEmpty())
{
return pattern;
}
// iterate over the recipe ingredients
for (int i = 0; i < recipe.getIngredients().size(); i++)
{
Ingredient ingredient = recipe.getIngredients().get(i);
String key = " ";
if (ingredient.getMatchingStacks().length > 1 && !(ingredient instanceof OreIngredient))
{
throw new IllegalArgumentException("Cannot generate json for a recipe matching multiple stacks!");
}
else if (ingredient.getMatchingStacks().length != 0) // blank spaces just use the default key value
{
key = keyMap.inverse().get(ingredient);
}
int row = i / recipe.recipeWidth;
pattern[row] += key;
}
return pattern;
}
private static BiMap<String, Ingredient> createShapedRecipeKey(NonNullList<Ingredient> ingredients)
{
Set<Ingredient> ingredientsSet = Sets.newHashSet(ingredients);
BiMap<String, Ingredient> key = HashBiMap.create();
int fallbackCount = 0;
for (Ingredient ingredient : ingredientsSet)
{
// validate the ingredient - we only cover json generation for the cases we use
if (ingredient.getMatchingStacks().length > 1 && !(ingredient instanceof OreIngredient))
{
throw new IllegalArgumentException("Cannot create key for ingredient matching multiple stacks!");
}
else if (ingredient.getMatchingStacks().length == 0)
{
// skip ingredients which are 'empty'
continue;
}
// default to using # (completely arbitrary)
if (fallbackCount == 0)
{
key.put(getFallbackRecipeKey(fallbackCount), ingredient);
fallbackCount++;
continue;
}
String letterKey = ingredient.getMatchingStacks()[0].getItem().getRegistryName().getResourcePath().substring(0, 1).toUpperCase();
if (!key.containsKey(letterKey))
{
key.put(letterKey, ingredient);
}
else
{
String fallbackKey = getFallbackRecipeKey(fallbackCount);
// this should never happen
if (key.containsKey(fallbackKey))
{
throw new RuntimeException("Fallback key " + fallbackKey + " is already present!");
}
key.put(fallbackKey, ingredient);
fallbackCount++;
}
}
return key;
}
private static String getFallbackRecipeKey(int index)
{
switch (index)
{
case 1:
return "*";
case 2:
return "@";
case 3:
return "%";
case 4:
return "+";
case 5:
return "-";
case 6:
return "~";
case 7:
return "=";
case 8:
return "?";
default:
return "#";
}
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:gem_block",
"data": 7
}
],
"result": {
"item": "biomesoplenty:gem",
"count": 9,
"data": 7
}
}

View File

@ -0,0 +1,36 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:pixie_dust"
},
{
"item": "minecraft:potion"
},
{
"item": "biomesoplenty:seaweed",
"data": 0
},
{
"item": "biomesoplenty:plant_1",
"data": 9
},
{
"item": "biomesoplenty:crystal_shard"
},
{
"item": "biomesoplenty:jar_filled",
"data": 0
},
{
"item": "biomesoplenty:berries"
},
{
"item": "minecraft:sugar",
"data": 32767
}
],
"result": {
"item": "biomesoplenty:ambrosia"
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:ash"
}
},
"result": {
"item": "biomesoplenty:ash_block",
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" #",
"# "
],
"key": {
"#": {
"item": "biomesoplenty:bamboo_thatching",
"data": 0
}
},
"result": {
"item": "biomesoplenty:bamboo",
"count": 8,
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
" #"
],
"key": {
"#": {
"item": "biomesoplenty:bamboo_thatching",
"data": 0
}
},
"result": {
"item": "biomesoplenty:bamboo",
"count": 8,
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:dirt",
"data": 2
},
{
"item": "biomesoplenty:bamboo",
"data": 0
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 6
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:bamboo",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:bamboo_thatching",
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" # ",
"#T#",
" # "
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 0
},
"T": {
"item": "biomesoplenty:terrestrial_artifact"
}
},
"result": {
"item": "biomesoplenty:biome_finder"
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_0",
"data": 2
}
],
"result": {
"item": "biomesoplenty:black_dye",
"count": 2
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_0",
"data": 10
}
],
"result": {
"item": "biomesoplenty:black_dye",
"count": 2
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 7
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 7
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 0
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 5
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 5
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 2
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 2
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 1
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 1
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 6
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 6
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 4
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 4
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:gem",
"data": 3
}
},
"result": {
"item": "biomesoplenty:gem_block",
"data": 3
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_1",
"data": 2
}
],
"result": {
"item": "biomesoplenty:blue_dye",
"count": 2
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:mushroom",
"data": 2
}
],
"result": {
"item": "biomesoplenty:blue_dye",
"count": 2
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:bowl",
"data": 32767
},
{
"item": "biomesoplenty:plant_1",
"data": 3
}
],
"result": {
"item": "biomesoplenty:ricebowl"
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:mushroom",
"data": 4
}
],
"result": {
"item": "biomesoplenty:brown_dye",
"count": 2
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:plant_1",
"data": 4
}
],
"result": {
"item": "biomesoplenty:brown_dye",
"count": 2
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:double_plant",
"data": 1
}
],
"result": {
"item": "biomesoplenty:brown_dye",
"count": 2
}
}

View File

@ -0,0 +1,12 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:pinecone"
}
],
"result": {
"item": "biomesoplenty:brown_dye",
"count": 2
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "biomesoplenty:plant_1",
"data": 6
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 2
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:crystal_shard"
}
},
"result": {
"item": "biomesoplenty:crystal",
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 1
}
},
"result": {
"item": "biomesoplenty:cherry_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#S#",
"#S#"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 1
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:cherry_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"S#S",
"S#S"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 1
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:cherry_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_0",
"data": 5
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 1
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 1
}
},
"result": {
"item": "biomesoplenty:wood_slab_0",
"count": 6,
"data": 1
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 1
}
},
"result": {
"item": "biomesoplenty:cherry_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#",
"#"
],
"key": {
"#": {
"item": "biomesoplenty:other_slab",
"data": 1
}
},
"result": {
"item": "biomesoplenty:white_sandstone",
"data": 1
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:ash"
}
},
"result": {
"item": "minecraft:coal",
"data": 0
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#D",
"D#"
],
"key": {
"#": {
"item": "minecraft:gravel",
"data": 32767
},
"D": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 0
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 8
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#G",
"G#"
],
"key": {
"#": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 0
},
"G": {
"item": "minecraft:gravel",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 8
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#D",
"D#"
],
"key": {
"#": {
"item": "minecraft:gravel",
"data": 32767
},
"D": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 1
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 9
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#G",
"G#"
],
"key": {
"#": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 1
},
"G": {
"item": "minecraft:gravel",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 9
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#D",
"D#"
],
"key": {
"#": {
"item": "minecraft:gravel",
"data": 32767
},
"D": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 2
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 10
}
}

View File

@ -0,0 +1,23 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"D#",
"#D"
],
"key": {
"#": {
"item": "minecraft:gravel",
"data": 32767
},
"D": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 2
}
},
"result": {
"item": "biomesoplenty:dirt",
"count": 4,
"data": 10
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_0",
"data": 1
}
],
"result": {
"item": "minecraft:dye",
"count": 2,
"data": 6
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_0",
"data": 3
}
],
"result": {
"item": "minecraft:dye",
"count": 2,
"data": 6
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_1",
"data": 1
}
],
"result": {
"item": "minecraft:dye",
"count": 2,
"data": 11
}
}

View File

@ -0,0 +1,19 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "minecraft:deadbush"
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 9
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 14
}
},
"result": {
"item": "biomesoplenty:ebony_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#S#",
"#S#"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 14
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:ebony_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#P#",
"#P#"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 14
}
},
"result": {
"item": "biomesoplenty:ebony_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_3",
"data": 6
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 14
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 14
}
},
"result": {
"item": "biomesoplenty:wood_slab_1",
"count": 6,
"data": 6
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 14
}
},
"result": {
"item": "biomesoplenty:ebony_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# #",
"# #",
"###"
],
"key": {
"#": {
"item": "minecraft:glass",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:jar_empty",
"count": 3
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:gem_block",
"data": 0
}
],
"result": {
"item": "biomesoplenty:gem",
"count": 9,
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:grass",
"data": 0
},
{
"item": "biomesoplenty:plant_1",
"data": 1
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 15
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 4
}
},
"result": {
"item": "biomesoplenty:ethereal_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"P#P",
"P#P"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 4
}
},
"result": {
"item": "biomesoplenty:ethereal_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#P#",
"#P#"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 4
}
},
"result": {
"item": "biomesoplenty:ethereal_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_1",
"data": 4
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 4
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 4
}
},
"result": {
"item": "biomesoplenty:wood_slab_0",
"count": 6,
"data": 4
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 4
}
},
"result": {
"item": "biomesoplenty:ethereal_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 15
}
},
"result": {
"item": "biomesoplenty:eucalyptus_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#S#",
"#S#"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 15
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:eucalyptus_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#P#",
"#P#"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 15
}
},
"result": {
"item": "biomesoplenty:eucalyptus_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_3",
"data": 7
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 15
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 15
}
},
"result": {
"item": "biomesoplenty:wood_slab_1",
"count": 6,
"data": 7
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 15
}
},
"result": {
"item": "biomesoplenty:eucalyptus_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "minecraft:tallgrass",
"data": 2
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 0
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:filled_honeycomb"
}
},
"result": {
"item": "biomesoplenty:hive",
"data": 3
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 3
}
},
"result": {
"item": "biomesoplenty:fir_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"P#P",
"P#P"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 3
}
},
"result": {
"item": "biomesoplenty:fir_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#P#",
"#P#"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 3
}
},
"result": {
"item": "biomesoplenty:fir_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_0",
"data": 7
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 3
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 3
}
},
"result": {
"item": "biomesoplenty:wood_slab_0",
"count": 6,
"data": 3
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 3
}
},
"result": {
"item": "biomesoplenty:fir_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "biomesoplenty:double_plant",
"data": 0
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 3
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:fleshchunk"
}
},
"result": {
"item": "biomesoplenty:flesh",
"data": 0
}
}

View File

@ -0,0 +1,17 @@
{
"type": "forge:ore_shaped",
"pattern": [
" # ",
"# #",
"###"
],
"key": {
"#": {
"type": "forge:ore_dict",
"ore": "stickWood"
}
},
"result": {
"item": "biomesoplenty:flower_basket"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "minecraft:red_flower",
"data": 0
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 4
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "minecraft:yellow_flower",
"data": 0
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 4
}
}

View File

@ -0,0 +1,24 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:bowl",
"data": 32767
},
{
"item": "biomesoplenty:peach",
"data": 32767
},
{
"item": "minecraft:apple",
"data": 32767
},
{
"item": "biomesoplenty:pear",
"data": 32767
}
],
"result": {
"item": "biomesoplenty:saladfruit"
}
}

View File

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:grass",
"data": 1
},
{
"item": "biomesoplenty:mushroom",
"data": 3
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 8
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:flower_0",
"data": 12
}
],
"result": {
"item": "minecraft:dye",
"count": 2,
"data": 8
}
}

View File

@ -0,0 +1,13 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:ash"
}
],
"result": {
"item": "minecraft:dye",
"count": 2,
"data": 8
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 11
}
},
"result": {
"item": "biomesoplenty:hellbark_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#S#",
"#S#"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 11
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:hellbark_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#P#",
"#P#"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 11
}
},
"result": {
"item": "biomesoplenty:hellbark_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_2",
"data": 7
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 11
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 11
}
},
"result": {
"item": "biomesoplenty:wood_slab_1",
"count": 6,
"data": 3
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 11
}
},
"result": {
"item": "biomesoplenty:hellbark_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:honeycomb"
}
},
"result": {
"item": "biomesoplenty:hive",
"data": 1
}
}

View File

@ -0,0 +1,18 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##",
"##"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 12
}
},
"result": {
"item": "biomesoplenty:jacaranda_door",
"count": 3
}
}

View File

@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"P#P",
"P#P"
],
"key": {
"#": {
"item": "minecraft:stick",
"data": 32767
},
"P": {
"item": "biomesoplenty:planks_0",
"data": 12
}
},
"result": {
"item": "biomesoplenty:jacaranda_fence",
"count": 3,
"data": 0
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"S#S",
"S#S"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 12
},
"S": {
"item": "minecraft:stick",
"data": 32767
}
},
"result": {
"item": "biomesoplenty:jacaranda_fence_gate",
"data": 0
}
}

View File

@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "biomesoplenty:log_3",
"data": 4
}
],
"result": {
"item": "biomesoplenty:planks_0",
"count": 4,
"data": 12
}
}

View File

@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 12
}
},
"result": {
"item": "biomesoplenty:wood_slab_1",
"count": 6,
"data": 4
}
}

View File

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# ",
"## ",
"###"
],
"key": {
"#": {
"item": "biomesoplenty:planks_0",
"data": 12
}
},
"result": {
"item": "biomesoplenty:jacaranda_stairs",
"count": 4,
"data": 0
}
}

View File

@ -0,0 +1,20 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "grass"
},
{
"item": "biomesoplenty:plant_0",
"data": 9
},
{
"item": "biomesoplenty:jar_empty"
}
],
"result": {
"item": "biomesoplenty:terrarium",
"data": 5
}
}

View File

@ -0,0 +1,13 @@
{
"type": "forge:ore_shapeless",
"ingredients": [
{
"type": "forge:ore_dict",
"ore": "treeLeaves"
}
],
"result": {
"item": "biomesoplenty:plant_0",
"data": 11
}
}

Some files were not shown because too many files have changed in this diff Show More