Search in sources :

Example 26 with PotionChemical

use of minechem.potion.PotionChemical in project Minechem by iopleke.

the class MinechemRecipes method registerVanillaChemicalRecipes.

public void registerVanillaChemicalRecipes() {
    // Molecules
    Molecule moleculeSiliconDioxide = this.molecule(MoleculeEnum.siliconDioxide, 4);
    Molecule moleculeCellulose = this.molecule(MoleculeEnum.cellulose, 1);
    Molecule moleculePolyvinylChloride = this.molecule(MoleculeEnum.polyvinylChloride);
    Molecule moleculeLazurite = this.molecule(MoleculeEnum.lazurite, 9);
    // Elements
    Element elementHydrogen = this.element(ElementEnum.H, 64);
    Element elementHelium = this.element(ElementEnum.He, 64);
    Element elementCarbon = this.element(ElementEnum.C, 64);
    // Section 1 - Blocks
    // Stone
    ItemStack blockStone = new ItemStack(Blocks.stone);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockStone, 0.2F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Mg), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ti), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Zn), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Al), this.element(ElementEnum.O) }) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.stone, 16), true, COST_SMOOTH, new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O, 2), null, this.element(ElementEnum.Al, 2), this.element(ElementEnum.O, 3), null }));
    // Grass Block
    ItemStack blockGrass = new ItemStack(Blocks.grass, 1, 0);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockGrass, 0.07F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Mg), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ti), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Zn), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ga), this.element(ElementEnum.As) }), new DecomposerRecipe(new PotionChemical[] { moleculeCellulose }) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.grass, 16), true, COST_GRASS, new PotionChemical[] { null, moleculeCellulose, null, null, this.element(ElementEnum.O, 2), this.element(ElementEnum.Si) }));
    // Dirt
    ItemStack blockDirt = new ItemStack(Blocks.dirt, 1, 0);
    ItemStack blockPodzol = new ItemStack(Blocks.dirt, 1, 2);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockDirt, 0.07F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Mg), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ti), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Zn), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ga), this.element(ElementEnum.As) }) }));
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockPodzol, 0.07F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Mg), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ti), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Zn), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ga), this.element(ElementEnum.As) }) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.dirt, 1, 0), true, COST_BLOCK, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide), null, null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.dirt, 1, 2), true, COST_BLOCK, new PotionChemical[] { null, null, null, this.molecule(MoleculeEnum.siliconDioxide), null, null, null, null, null }));
    // Cobblestone
    ItemStack blockCobblestone = new ItemStack(Blocks.cobblestone);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockCobblestone, 0.1F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Mg), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ti), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Na), this.element(ElementEnum.Cl) }) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.cobblestone, 16), true, COST_SMOOTH, new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.O, 4), null }));
    // Planks
    ItemStack blockOakWoodPlanks = new ItemStack(Blocks.planks, 1, 0);
    ItemStack blockSpruceWoodPlanks = new ItemStack(Blocks.planks, 1, 1);
    ItemStack blockBirchWoodPlanks = new ItemStack(Blocks.planks, 1, 2);
    ItemStack blockJungleWoodPlanks = new ItemStack(Blocks.planks, 1, 3);
    ItemStack blockAcaciaWoodPlanks = new ItemStack(Blocks.planks, 1, 4);
    ItemStack blockDarkOakWoodPlanks = new ItemStack(Blocks.planks, 1, 5);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOakWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSpruceWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBirchWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockJungleWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAcaciaWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockDarkOakWoodPlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOakWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSpruceWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBirchWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockJungleWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockAcaciaWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDarkOakWoodPlanks, true, COST_PLANK, new PotionChemical[] { null, null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, null, null, null, null }));
    // Wooden Slabs
    ItemStack blockOakWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 0);
    ItemStack blockSpruceWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 1);
    ItemStack blockBirchWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 2);
    ItemStack blockJungleWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 3);
    ItemStack blockAcaciaWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 4);
    ItemStack blockDarkOakWoodSlabs = new ItemStack(Blocks.wooden_slab, 1, 5);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOakWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSpruceWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBirchWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockJungleWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAcaciaWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockDarkOakWoodSlabs, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOakWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSpruceWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBirchWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockJungleWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, null, null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockAcaciaWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDarkOakWoodSlabs, true, COST_PLANK, new PotionChemical[] { null, this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), null, null, null, null, null }));
    // Saplings
    ItemStack blockOakSapling = new ItemStack(Blocks.sapling, 1, 0);
    ItemStack blockSpruceSapling = new ItemStack(Blocks.sapling, 1, 1);
    ItemStack blockBirchSapling = new ItemStack(Blocks.sapling, 1, 2);
    ItemStack blockJungleSapling = new ItemStack(Blocks.sapling, 1, 3);
    ItemStack blockAcaciaSapling = new ItemStack(Blocks.sapling, 1, 4);
    ItemStack blockDarkOakSapling = new ItemStack(Blocks.sapling, 1, 5);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOakSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSpruceSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBirchSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockJungleSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAcaciaSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockDarkOakSapling, 0.25F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOakSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSpruceSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBirchSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockJungleSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockAcaciaSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.cellulose), null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDarkOakSapling, true, COST_PLANT, new PotionChemical[] { null, null, null, this.molecule(MoleculeEnum.cellulose), null, null, null, null, null }));
    // Sand
    ItemStack blockSand = new ItemStack(Blocks.sand);
    DecomposerRecipe.add(new DecomposerRecipe(blockSand, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSand, true, COST_BLOCK, new PotionChemical[] { moleculeSiliconDioxide, moleculeSiliconDioxide, moleculeSiliconDioxide, moleculeSiliconDioxide }));
    // Gravel
    ItemStack blockGravel = new ItemStack(Blocks.gravel);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockGravel, 0.35F, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGravel, true, COST_BLOCK, new PotionChemical[] { null, null, null, null, null, null, null, null, this.molecule(MoleculeEnum.siliconDioxide) }));
    // Gold Ore
    ItemStack goldOre = new ItemStack(Blocks.gold_ore);
    DecomposerRecipe.add(new DecomposerRecipe(goldOre, new PotionChemical[] { this.element(ElementEnum.Au, 48) }));
    // Iron Ore
    ItemStack ironOre = new ItemStack(Blocks.iron_ore);
    DecomposerRecipe.add(new DecomposerRecipe(ironOre, new PotionChemical[] { this.element(ElementEnum.Fe, 48) }));
    // Coal Ore
    ItemStack coalOre = new ItemStack(Blocks.coal_ore);
    DecomposerRecipe.add(new DecomposerRecipe(coalOre, new PotionChemical[] { this.element(ElementEnum.C, 48) }));
    // Log
    ItemStack blockOakLog = new ItemStack(Blocks.log, 1, 0);
    ItemStack blockSpruceLog = new ItemStack(Blocks.log, 1, 1);
    ItemStack blockBirchLog = new ItemStack(Blocks.log, 1, 2);
    ItemStack blockJungleLog = new ItemStack(Blocks.log, 1, 3);
    ItemStack blockAcaciaLog = new ItemStack(Blocks.log2, 1, 0);
    ItemStack blockDarkOakLog = new ItemStack(Blocks.log2, 1, 1);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOakLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSpruceLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBirchLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockJungleLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAcaciaLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockDarkOakLog, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 8) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOakLog, true, COST_WOOD, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSpruceLog, true, COST_WOOD, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBirchLog, true, COST_WOOD, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null, null, null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockJungleLog, true, COST_WOOD, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2), null, null, this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockAcaciaLog, true, COST_WOOD, new PotionChemical[] { null, null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), this.molecule(MoleculeEnum.cellulose, 2), null, null, this.molecule(MoleculeEnum.cellulose, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDarkOakLog, true, COST_WOOD, new PotionChemical[] { null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null, this.molecule(MoleculeEnum.cellulose, 2), null }));
    // Leaves
    ItemStack blockOakLeaves = new ItemStack(Blocks.leaves, 1, 0);
    ItemStack blockSpruceLeaves = new ItemStack(Blocks.leaves, 1, 1);
    ItemStack blockBirchLeaves = new ItemStack(Blocks.leaves, 1, 2);
    ItemStack blockJungleLeaves = new ItemStack(Blocks.leaves, 1, 3);
    ItemStack blockAcaciaLeaves = new ItemStack(Blocks.leaves2, 1, 0);
    ItemStack blockDarkOakLeaves = new ItemStack(Blocks.leaves2, 1, 1);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOakLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSpruceLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBirchLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockJungleLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAcaciaLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockDarkOakLeaves, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOakLeaves, true, COST_BLOCK, new PotionChemical[] { moleculeCellulose, moleculeCellulose, moleculeCellulose, null, moleculeCellulose, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSpruceLeaves, true, COST_BLOCK, new PotionChemical[] { null, null, null, null, moleculeCellulose, null, moleculeCellulose, moleculeCellulose, moleculeCellulose }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBirchLeaves, true, COST_BLOCK, new PotionChemical[] { moleculeCellulose, null, moleculeCellulose, null, null, null, moleculeCellulose, null, moleculeCellulose }));
    SynthesisRecipe.add(new SynthesisRecipe(blockJungleLeaves, true, COST_BLOCK, new PotionChemical[] { moleculeCellulose, null, null, moleculeCellulose, moleculeCellulose, null, moleculeCellulose, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockAcaciaLeaves, true, COST_BLOCK, new PotionChemical[] { null, null, moleculeCellulose, null, moleculeCellulose, moleculeCellulose, null, null, moleculeCellulose }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDarkOakLeaves, true, COST_BLOCK, new PotionChemical[] { null, moleculeCellulose, null, moleculeCellulose, null, moleculeCellulose, null, moleculeCellulose, null }));
    // Dyes
    ItemStack itemDyePowderBlack = new ItemStack(Items.dye, 1, 0);
    ItemStack itemDyePowderRed = new ItemStack(Items.dye, 1, 1);
    ItemStack itemDyePowderGreen = new ItemStack(Items.dye, 1, 2);
    ItemStack itemDyePowderBrown = new ItemStack(Items.dye, 1, 3);
    ItemStack itemDyePowderBlue = new ItemStack(Items.dye, 1, 4);
    ItemStack itemDyePowderPurple = new ItemStack(Items.dye, 1, 5);
    ItemStack itemDyePowderCyan = new ItemStack(Items.dye, 1, 6);
    ItemStack itemDyePowderLightGray = new ItemStack(Items.dye, 1, 7);
    ItemStack itemDyePowderGray = new ItemStack(Items.dye, 1, 8);
    ItemStack itemDyePowderPink = new ItemStack(Items.dye, 1, 9);
    ItemStack itemDyePowderLime = new ItemStack(Items.dye, 1, 10);
    ItemStack itemDyePowderYellow = new ItemStack(Items.dye, 1, 11);
    ItemStack itemDyePowderLightBlue = new ItemStack(Items.dye, 1, 12);
    ItemStack itemDyePowderMagenta = new ItemStack(Items.dye, 1, 13);
    ItemStack itemDyePowderOrange = new ItemStack(Items.dye, 1, 14);
    ItemStack itemDyePowderWhite = new ItemStack(Items.dye, 1, 15);
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderBlack, new PotionChemical[] { this.molecule(MoleculeEnum.blackPigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderRed, new PotionChemical[] { this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderGreen, new PotionChemical[] { this.molecule(MoleculeEnum.greenPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(itemDyePowderBrown, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.theobromine), this.molecule(MoleculeEnum.tannicacid) }));
    // Lapis
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderBlue, new PotionChemical[] { this.molecule(MoleculeEnum.lazurite) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderPurple, new PotionChemical[] { this.molecule(MoleculeEnum.purplePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderCyan, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderLightGray, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderGray, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderPink, new PotionChemical[] { this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderLime, new PotionChemical[] { this.molecule(MoleculeEnum.limePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderYellow, new PotionChemical[] { this.molecule(MoleculeEnum.yellowPigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderLightBlue, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderMagenta, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderOrange, new PotionChemical[] { this.molecule(MoleculeEnum.orangePigment) }));
    DecomposerRecipe.add(new DecomposerRecipe(itemDyePowderWhite, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderBlack, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderRed, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderGreen, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.greenPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderBrown, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.theobromine) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderBlue, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.lazurite) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderPurple, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.purplePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderCyan, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderLightGray, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderGray, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderPink, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderLime, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.limePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderYellow, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.yellowPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderLightBlue, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderMagenta, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderOrange, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.orangePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDyePowderWhite, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.whitePigment) }));
    // Glass
    ItemStack blockGlass = new ItemStack(Blocks.glass);
    ItemStack blockWhiteStainedGlass = new ItemStack(Blocks.stained_glass, 1, 0);
    ItemStack blockOrangeStainedGlass = new ItemStack(Blocks.stained_glass, 1, 1);
    ItemStack blockMagentaStainedGlass = new ItemStack(Blocks.stained_glass, 1, 2);
    ItemStack blockLiteBlueStainedGlass = new ItemStack(Blocks.stained_glass, 1, 3);
    ItemStack blockYellowStainedGlass = new ItemStack(Blocks.stained_glass, 1, 4);
    ItemStack blockLimeStainedGlass = new ItemStack(Blocks.stained_glass, 1, 5);
    ItemStack blockPinkStainedGlass = new ItemStack(Blocks.stained_glass, 1, 6);
    ItemStack blockGrayStainedGlass = new ItemStack(Blocks.stained_glass, 1, 7);
    ItemStack blockLiteGrayStainedGlass = new ItemStack(Blocks.stained_glass, 1, 8);
    ItemStack blockCyanStainedGlass = new ItemStack(Blocks.stained_glass, 1, 9);
    ItemStack blockPurpleStainedGlass = new ItemStack(Blocks.stained_glass, 1, 10);
    ItemStack blockBlueStainedGlass = new ItemStack(Blocks.stained_glass, 1, 11);
    ItemStack blockBrownStainedGlass = new ItemStack(Blocks.stained_glass, 1, 12);
    ItemStack blockGreenStainedGlass = new ItemStack(Blocks.stained_glass, 1, 13);
    ItemStack blockRedStainedGlass = new ItemStack(Blocks.stained_glass, 1, 14);
    ItemStack blockBlackStainedGlass = new ItemStack(Blocks.stained_glass, 1, 15);
    DecomposerRecipe.add(new DecomposerRecipe(blockGlass, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, null, null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockWhiteStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.whitePigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOrangeStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.orangePigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockMagentaStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, this.molecule(MoleculeEnum.lightbluePigment), null, this.molecule(MoleculeEnum.redPigment), moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLiteBlueStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.lightbluePigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockYellowStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.yellowPigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLimeStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.limePigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPinkStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.redPigment), moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGrayStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.blackPigment), moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLiteGrayStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment), moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockCyanStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.lightbluePigment), moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPurpleStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.purplePigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlueStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.lazurite), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBrownStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.tannicacid), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGreenStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.greenPigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockRedStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.redPigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlackStainedGlass, true, COST_GLASS, new PotionChemical[] { moleculeSiliconDioxide, null, moleculeSiliconDioxide, null, this.molecule(MoleculeEnum.blackPigment), null, moleculeSiliconDioxide, null, moleculeSiliconDioxide }));
    // Glass Panes
    ItemStack blockGlassPane = new ItemStack(Blocks.glass_pane);
    ItemStack blockWhiteStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 0);
    ItemStack blockOrangeStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 1);
    ItemStack blockMagentaStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 2);
    ItemStack blockLiteBlueStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 3);
    ItemStack blockYellowStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 4);
    ItemStack blockLimeStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 5);
    ItemStack blockPinkStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 6);
    ItemStack blockGrayStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 7);
    ItemStack blockLiteGrayStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 8);
    ItemStack blockCyanStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 9);
    ItemStack blockPurpleStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 10);
    ItemStack blockBlueStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 11);
    ItemStack blockBrownStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 12);
    ItemStack blockGreenStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 13);
    ItemStack blockRedStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 14);
    ItemStack blockBlackStainedGlassPane = new ItemStack(Blocks.stained_glass_pane, 1, 15);
    DecomposerRecipe.add(new DecomposerRecipe(blockGlassPane, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 6) }));
    Molecule siO = new Molecule(MoleculeEnum.siliconDioxide, 1);
    SynthesisRecipe.add(new SynthesisRecipe(blockGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, null, null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockWhiteStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.whitePigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOrangeStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.orangePigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockMagentaStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, this.molecule(MoleculeEnum.lightbluePigment), null, this.molecule(MoleculeEnum.redPigment), siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLiteBlueStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.lightbluePigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockYellowStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.yellowPigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLimeStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.limePigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPinkStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.redPigment), siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGrayStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.blackPigment), siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLiteGrayStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment), siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockCyanStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, this.molecule(MoleculeEnum.whitePigment), null, this.molecule(MoleculeEnum.lightbluePigment), siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPurpleStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.purplePigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlueStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.lazurite), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBrownStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.tannicacid), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGreenStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.greenPigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockRedStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.redPigment), null, siO, siO, siO }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlackStainedGlassPane, true, COST_PANE, new PotionChemical[] { siO, siO, siO, null, this.molecule(MoleculeEnum.blackPigment), null, siO, siO, siO }));
    // Lapis Lazuli Ore
    ItemStack blockOreLapis = new ItemStack(Blocks.lapis_ore);
    DecomposerRecipe.add(new DecomposerRecipe(blockOreLapis, new PotionChemical[] { this.molecule(MoleculeEnum.lazurite, 6), this.molecule(MoleculeEnum.sodalite), this.molecule(MoleculeEnum.noselite), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.pyrite) }));
    // Lapis Lazuli Block
    ItemStack blockLapis = new ItemStack(Blocks.lapis_block);
    DecomposerRecipe.add(new DecomposerRecipe(blockLapis, new PotionChemical[] { this.molecule(MoleculeEnum.lazurite, 9) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLapis, true, COST_LAPISBLOCK, new PotionChemical[] { moleculeLazurite, null, null, null, null, null, null, null, null }));
    // Cobweb
    ItemStack blockCobweb = new ItemStack(Blocks.web);
    DecomposerRecipe.add(new DecomposerRecipe(blockCobweb, new PotionChemical[] { this.molecule(MoleculeEnum.fibroin) }));
    // double tall plants
    ItemStack blockSunFlower = new ItemStack(Blocks.double_plant, 1, 0);
    ItemStack blockLilac = new ItemStack(Blocks.double_plant, 1, 1);
    ItemStack blockTallGrass = new ItemStack(Blocks.double_plant, 1, 2);
    ItemStack blockLargeFern = new ItemStack(Blocks.double_plant, 1, 3);
    ItemStack blockRoseBush = new ItemStack(Blocks.double_plant, 1, 4);
    ItemStack blockPeony = new ItemStack(Blocks.double_plant, 1, 5);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockSunFlower, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockLilac, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockTallGrass, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockLargeFern, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockRoseBush, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPeony, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSunFlower, true, COST_PLANT, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.yellowPigment), null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLilac, true, COST_PLANT, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.redPigment), new Molecule(MoleculeEnum.whitePigment, 2), null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockTallGrass, true, COST_PLANT, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), null, null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLargeFern, true, COST_PLANT, new PotionChemical[] { null, new Molecule(MoleculeEnum.shikimicAcid, 2), null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockRoseBush, true, COST_PLANT, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.redPigment), null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPeony, true, COST_PLANT, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.redPigment), new Molecule(MoleculeEnum.whitePigment), null, null, null, null, null, null }));
    // Sandstone
    ItemStack blockSandStone = new ItemStack(Blocks.sandstone, 1, 0);
    ItemStack blockChiseledSandStone = new ItemStack(Blocks.sandstone, 1, 1);
    ItemStack blockSmoothSandStone = new ItemStack(Blocks.sandstone, 1, 2);
    DecomposerRecipe.add(new DecomposerRecipe(blockSandStone, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    DecomposerRecipe.add(new DecomposerRecipe(blockChiseledSandStone, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    DecomposerRecipe.add(new DecomposerRecipe(blockSmoothSandStone, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSandStone, true, COST_BLOCK, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.siliconDioxide, 16), null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockChiseledSandStone, true, COST_BLOCK, new PotionChemical[] { null, null, null, null, null, null, null, this.molecule(MoleculeEnum.siliconDioxide, 16), null }));
    SynthesisRecipe.add(new SynthesisRecipe(blockSmoothSandStone, true, COST_BLOCK, new PotionChemical[] { null, this.molecule(MoleculeEnum.siliconDioxide, 16), null, null, null, null, null, null, null }));
    // Wool
    ItemStack blockWool = new ItemStack(Blocks.wool, 1, 0);
    ItemStack blockOrangeWool = new ItemStack(Blocks.wool, 1, 1);
    ItemStack blockMagentaWool = new ItemStack(Blocks.wool, 1, 2);
    ItemStack blockLightBlueWool = new ItemStack(Blocks.wool, 1, 3);
    ItemStack blockYellowWool = new ItemStack(Blocks.wool, 1, 4);
    ItemStack blockLimeWool = new ItemStack(Blocks.wool, 1, 5);
    ItemStack blockPinkWool = new ItemStack(Blocks.wool, 1, 6);
    ItemStack blockGrayWool = new ItemStack(Blocks.wool, 1, 7);
    ItemStack blockLightGrayWool = new ItemStack(Blocks.wool, 1, 8);
    ItemStack blockCyanWool = new ItemStack(Blocks.wool, 1, 9);
    ItemStack blockPurpleWool = new ItemStack(Blocks.wool, 1, 10);
    ItemStack blockBlueWool = new ItemStack(Blocks.wool, 1, 11);
    ItemStack blockBrownWool = new ItemStack(Blocks.wool, 1, 12);
    ItemStack blockGreenWool = new ItemStack(Blocks.wool, 1, 13);
    ItemStack blockRedWool = new ItemStack(Blocks.wool, 1, 14);
    ItemStack blockBlackWool = new ItemStack(Blocks.wool, 1, 15);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOrangeWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.orangePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockMagentaWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockLightBlueWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockYellowWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.yellowPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockLimeWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.limePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPinkWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockGrayWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockLightGrayWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockCyanWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPurpleWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.purplePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBlueWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lazurite) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBrownWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.tannicacid) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockGreenWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.greenPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockRedWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBlackWool, 0.6F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockOrangeWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.orangePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockMagentaWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLightBlueWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockYellowWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.yellowPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLimeWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.limePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPinkWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGrayWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockLightGrayWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockCyanWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPurpleWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.purplePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlueWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.lazurite) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGreenWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.greenPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockRedWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockBlackWool, false, COST_WOOL, new PotionChemical[] { this.molecule(MoleculeEnum.glycine, 2), this.molecule(MoleculeEnum.blackPigment) }));
    // Wool carpet
    ItemStack carpetBlockWool = new ItemStack(Blocks.carpet, 1, 0);
    ItemStack carpetBlockOrangeWool = new ItemStack(Blocks.carpet, 1, 1);
    ItemStack carpetBlockMagentaWool = new ItemStack(Blocks.carpet, 1, 2);
    ItemStack carpetBlockLightBlueWool = new ItemStack(Blocks.carpet, 1, 3);
    ItemStack carpetBlockYellowWool = new ItemStack(Blocks.carpet, 1, 4);
    ItemStack carpetBlockLimeWool = new ItemStack(Blocks.carpet, 1, 5);
    ItemStack carpetBlockPinkWool = new ItemStack(Blocks.carpet, 1, 6);
    ItemStack carpetBlockGrayWool = new ItemStack(Blocks.carpet, 1, 7);
    ItemStack carpetBlockLightGrayWool = new ItemStack(Blocks.carpet, 1, 8);
    ItemStack carpetBlockCyanWool = new ItemStack(Blocks.carpet, 1, 9);
    ItemStack carpetBlockPurpleWool = new ItemStack(Blocks.carpet, 1, 10);
    ItemStack carpetBlockBlueWool = new ItemStack(Blocks.carpet, 1, 11);
    ItemStack carpetBlockBrownWool = new ItemStack(Blocks.carpet, 1, 12);
    ItemStack carpetBlockGreenWool = new ItemStack(Blocks.carpet, 1, 13);
    ItemStack carpetBlockRedWool = new ItemStack(Blocks.carpet, 1, 14);
    ItemStack carpetBlockBlackWool = new ItemStack(Blocks.carpet, 1, 15);
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockOrangeWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.orangePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockMagentaWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockLightBlueWool, 0.2F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockYellowWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.yellowPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockLimeWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.limePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockPinkWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockGrayWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockLightGrayWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockCyanWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockPurpleWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.purplePigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockBlueWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lazurite) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockBrownWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.tannicacid) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockGreenWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.greenPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockRedWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.redPigment) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(carpetBlockBlackWool, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockOrangeWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.orangePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockMagentaWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockLightBlueWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockYellowWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.yellowPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockLimeWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.limePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockPinkWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.redPigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockGrayWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockLightGrayWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.whitePigment), this.molecule(MoleculeEnum.blackPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockCyanWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lightbluePigment), this.molecule(MoleculeEnum.whitePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockPurpleWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.purplePigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockBlueWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.lazurite) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockGreenWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.greenPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockRedWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.redPigment) }));
    SynthesisRecipe.add(new SynthesisRecipe(carpetBlockBlackWool, false, COST_CARPET, new PotionChemical[] { this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.blackPigment) }));
    // Flowers
    ItemStack blockYellowFlower = new ItemStack(Blocks.yellow_flower);
    ItemStack blockPoppyFlower = new ItemStack(Blocks.red_flower, 1, 0);
    ItemStack blockBlueOrchid = new ItemStack(Blocks.red_flower, 1, 1);
    ItemStack blockAllium = new ItemStack(Blocks.red_flower, 1, 2);
    ItemStack blockAsureBluet = new ItemStack(Blocks.red_flower, 1, 3);
    ItemStack blockRedTulip = new ItemStack(Blocks.red_flower, 1, 4);
    ItemStack blockOrangeTulip = new ItemStack(Blocks.red_flower, 1, 5);
    ItemStack blockWhiteTulip = new ItemStack(Blocks.red_flower, 1, 6);
    ItemStack blockPinkTulip = new ItemStack(Blocks.red_flower, 1, 7);
    ItemStack blockOxeyeDaisy = new ItemStack(Blocks.red_flower, 1, 8);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockYellowFlower, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.yellowPigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPoppyFlower, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.redPigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockBlueOrchid, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), this.molecule(MoleculeEnum.lazurite) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAllium, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.purplePigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockAsureBluet, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.whitePigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockRedTulip, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.redPigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOrangeTulip, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.orangePigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockWhiteTulip, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.whitePigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPinkTulip, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.whitePigment, 1), new Molecule(MoleculeEnum.redPigment, 1) }));
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOxeyeDaisy, 0.3F, new PotionChemical[] { new Molecule(MoleculeEnum.shikimicAcid, 2), new Molecule(MoleculeEnum.whitePigment, 1) }));
    // Mushrooms
    ItemStack blockMushroomBrown = new ItemStack(Blocks.brown_mushroom);
    ItemStack blockMushroomRed = new ItemStack(Blocks.red_mushroom);
    if (Settings.recreationalChemicalEffects) {
        DecomposerRecipe.add(new DecomposerRecipe(blockMushroomBrown, new PotionChemical[] { this.molecule(MoleculeEnum.psilocybin), this.molecule(MoleculeEnum.water, 2) }));
    }
    DecomposerRecipe.add(new DecomposerRecipe(blockMushroomRed, new PotionChemical[] { this.molecule(MoleculeEnum.pantherine), this.molecule(MoleculeEnum.water, 2) }));
    // Block of Gold
    DecomposerRecipe.add(new DecomposerRecipe(new ItemStack(Blocks.gold_block), new PotionChemical[] { this.element(ElementEnum.Au, 144) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.gold_block), true, COST_METALBLOCK, new PotionChemical[] { this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16), this.element(ElementEnum.Au, 16) }));
    // Block of Iron
    DecomposerRecipe.add(new DecomposerRecipe(new ItemStack(Blocks.iron_block), new PotionChemical[] { this.element(ElementEnum.Fe, 144) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.iron_block), true, COST_METALBLOCK, new PotionChemical[] { this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16), this.element(ElementEnum.Fe, 16) }));
    // TNT
    ItemStack blockTnt = new ItemStack(Blocks.tnt);
    DecomposerRecipe.add(new DecomposerRecipe(blockTnt, new PotionChemical[] { this.molecule(MoleculeEnum.tnt) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockTnt, false, COST_OBSIDIAN, new PotionChemical[] { this.molecule(MoleculeEnum.tnt) }));
    // Obsidian
    ItemStack blockObsidian = new ItemStack(Blocks.obsidian);
    DecomposerRecipe.add(new DecomposerRecipe(blockObsidian, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 16), this.molecule(MoleculeEnum.magnesiumOxide, 8) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockObsidian, true, COST_OBSIDIAN, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.magnesiumOxide, 2), null, this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.magnesiumOxide, 2), this.molecule(MoleculeEnum.magnesiumOxide, 2), this.molecule(MoleculeEnum.magnesiumOxide, 2) }));
    // Diamond Ore
    ItemStack blockOreDiamond = new ItemStack(Blocks.diamond_ore);
    DecomposerRecipe.add(new DecomposerRecipe(blockOreDiamond, new PotionChemical[] { this.molecule(MoleculeEnum.fullrene, 6) }));
    // Block of Diamond
    ItemStack blockDiamond = new ItemStack(Blocks.diamond_block);
    DecomposerRecipe.add(new DecomposerRecipe(blockDiamond, new PotionChemical[] { this.molecule(MoleculeEnum.fullrene, 27) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockDiamond, true, COST_GEMBLOCK, new PotionChemical[] { this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3), this.molecule(MoleculeEnum.fullrene, 3) }));
    // Pressure Plate
    ItemStack blockPressurePlatePlanks = new ItemStack(Blocks.wooden_pressure_plate);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockPressurePlatePlanks, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 4) }));
    // Redstone Ore
    ItemStack blockOreRedstone = new ItemStack(Blocks.redstone_ore);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockOreRedstone, 0.8F, new PotionChemical[] { this.molecule(MoleculeEnum.iron3oxide, 9), this.element(ElementEnum.Cu, 9) }));
    // Cactus
    ItemStack blockCactus = new ItemStack(Blocks.cactus);
    DecomposerRecipe.add(new DecomposerRecipe(blockCactus, new PotionChemical[] { this.molecule(MoleculeEnum.mescaline), this.molecule(MoleculeEnum.water, 20) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockCactus, true, COST_PLANT, new PotionChemical[] { this.molecule(MoleculeEnum.water, 5), null, this.molecule(MoleculeEnum.water, 5), null, this.molecule(MoleculeEnum.mescaline), null, this.molecule(MoleculeEnum.water, 5), null, this.molecule(MoleculeEnum.water, 5) }));
    // Pumpkin
    ItemStack blockPumpkin = new ItemStack(Blocks.pumpkin);
    DecomposerRecipe.add(new DecomposerRecipe(blockPumpkin, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPumpkin, false, COST_PLANT, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin) }));
    // Pumpkin seed
    ItemStack pumpkinSeed = new ItemStack(Items.pumpkin_seeds);
    DecomposerRecipe.add(new DecomposerRecipe(blockPumpkin, new PotionChemical[] { this.molecule(MoleculeEnum.water) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockPumpkin, false, COST_PLANT, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin) }));
    // Netherrack
    ItemStack blockNetherrack = new ItemStack(Blocks.netherrack);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockNetherrack, 0.1F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.O), this.element(ElementEnum.Fe) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.Ni), this.element(ElementEnum.Tc) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 3), this.element(ElementEnum.Ti), this.element(ElementEnum.Fe) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 1), this.element(ElementEnum.W, 4), this.element(ElementEnum.Cr, 2) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 10), this.element(ElementEnum.W, 1), this.element(ElementEnum.Zn, 8), this.element(ElementEnum.Be, 4) }) }));
    // Nether Brick
    ItemStack itemNetherbrick = new ItemStack(Items.netherbrick);
    DecomposerRecipe.add(new DecomposerRecipeSelect(itemNetherbrick, 0.15F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.C), this.element(ElementEnum.Fe) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.Ni), this.element(ElementEnum.Tc) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 3), this.element(ElementEnum.Ti), this.element(ElementEnum.Fe) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 1), this.element(ElementEnum.W, 4), this.element(ElementEnum.Cr, 2) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 10), this.element(ElementEnum.W, 1), this.element(ElementEnum.Zn, 8), this.element(ElementEnum.Be, 4) }) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemNetherbrick, true, COST_SMOOTH, new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.Si, 2), null, this.element(ElementEnum.Zn, 2), this.element(ElementEnum.W, 1), null, this.element(ElementEnum.Be, 2), this.element(ElementEnum.Be, 2), null }));
    // Water Bottle
    ItemStack itemPotion = new ItemStack(Items.potionitem, 1, 0);
    DecomposerRecipe.add(new DecomposerRecipe(itemPotion, new PotionChemical[] { this.molecule(MoleculeEnum.water, 5), this.molecule(MoleculeEnum.siliconDioxide, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemPotion, true, COST_ITEM, new PotionChemical[] { null, this.molecule(MoleculeEnum.siliconDioxide, 4), null, this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.water, 5), this.molecule(MoleculeEnum.siliconDioxide, 4), null, this.molecule(MoleculeEnum.siliconDioxide, 4), null }));
    // Ice Block
    ItemStack blockIce = new ItemStack(Blocks.ice);
    DecomposerRecipe.add(new DecomposerRecipe(blockIce, new PotionChemical[] { this.molecule(MoleculeEnum.water, 8) }));
    // Soul Sand
    ItemStack blockSlowSand = new ItemStack(Blocks.soul_sand);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockSlowSand, 0.2F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb, 3), this.element(ElementEnum.Be, 1), this.element(ElementEnum.Si, 2), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pb, 1), this.element(ElementEnum.Si, 5), this.element(ElementEnum.O, 2) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.O) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 6), this.element(ElementEnum.O, 2) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Es, 1), this.element(ElementEnum.O, 2) }) }));
    // Glowstone
    ItemStack blockGlowStone = new ItemStack(Blocks.glowstone);
    DecomposerRecipe.add(new DecomposerRecipe(blockGlowStone, new PotionChemical[] { this.element(ElementEnum.P, 4) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockGlowStone, true, COST_GLOWBLOCK, new PotionChemical[] { this.element(ElementEnum.P), null, this.element(ElementEnum.P), this.element(ElementEnum.P), null, this.element(ElementEnum.P), null, null, null }));
    // Mycelium
    ItemStack blockMycelium = new ItemStack(Blocks.mycelium);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockMycelium, 0.09F, new PotionChemical[] { this.molecule(MoleculeEnum.fingolimod) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.mycelium, 16), false, COST_GRASS, new PotionChemical[] { this.molecule(MoleculeEnum.fingolimod) }));
    // End Stone
    ItemStack blockWhiteStone = new ItemStack(Blocks.end_stone);
    DecomposerRecipe.add(new DecomposerRecipeSelect(blockWhiteStone, 0.8F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.O), this.element(ElementEnum.H, 4), this.element(ElementEnum.Li) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Es) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Pu) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fr) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Nd) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Si, 2), this.element(ElementEnum.O, 4) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.H, 4) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Be, 8) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Li, 2) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Zr) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Na) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Rb) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Ga), this.element(ElementEnum.As) }) }));
    // Emerald Ore
    ItemStack blockOreEmerald = new ItemStack(Blocks.emerald_ore);
    DecomposerRecipe.add(new DecomposerRecipe(blockOreEmerald, new PotionChemical[] { this.molecule(MoleculeEnum.beryl, 6), this.element(ElementEnum.Cr, 6), this.element(ElementEnum.V, 6) }));
    // Emerald Block
    ItemStack blockEmerald = new ItemStack(Blocks.emerald_block);
    SynthesisRecipe.add(new SynthesisRecipe(blockEmerald, true, COST_GEMBLOCK, new PotionChemical[] { this.element(ElementEnum.Cr, 3), this.element(ElementEnum.Cr, 3), this.element(ElementEnum.Cr, 3), this.element(ElementEnum.V, 9), this.molecule(MoleculeEnum.beryl, 18), this.element(ElementEnum.V, 9), this.element(ElementEnum.Cr, 3), this.element(ElementEnum.Cr, 3), this.element(ElementEnum.Cr, 3) }));
    DecomposerRecipe.add(new DecomposerRecipe(blockEmerald, new PotionChemical[] { this.molecule(MoleculeEnum.beryl, 18), this.element(ElementEnum.Cr, 18), this.element(ElementEnum.V, 18) }));
    // Section 2 - Items
    // Apple
    ItemStack itemAppleRed = new ItemStack(Items.apple);
    DecomposerRecipe.add(new DecomposerRecipe(itemAppleRed, new PotionChemical[] { this.molecule(MoleculeEnum.malicAcid) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemAppleRed, false, COST_FOOD, new PotionChemical[] { this.molecule(MoleculeEnum.malicAcid), this.molecule(MoleculeEnum.water, 2) }));
    // Arrow
    ItemStack itemArrow = new ItemStack(Items.arrow);
    DecomposerRecipe.add(new DecomposerRecipe(itemArrow, new PotionChemical[] { this.element(ElementEnum.Si), this.element(ElementEnum.O, 2), this.element(ElementEnum.N, 6) }));
    // Coal
    ItemStack itemCoal = new ItemStack(Items.coal);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemCoal, 0.92F, new PotionChemical[] { this.element(ElementEnum.C, 8) }));
    // Coal Block
    ItemStack blockCoal = new ItemStack(Blocks.coal_block);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockCoal, 0.82F, new PotionChemical[] { this.element(ElementEnum.C, 72) }));
    // Charcoal
    ItemStack itemChar = new ItemStack(Items.coal, 1, 1);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemChar, 0.82F, new PotionChemical[] { this.element(ElementEnum.C, 8) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemChar, false, COST_ITEM, new PotionChemical[] { this.element(ElementEnum.C, 4), this.element(ElementEnum.C, 4) }));
    // Diamond
    ItemStack itemDiamond = new ItemStack(Items.diamond);
    DecomposerRecipe.add(new DecomposerRecipe(itemDiamond, new PotionChemical[] { this.molecule(MoleculeEnum.fullrene, 3) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDiamond, true, COST_GEM, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.fullrene, 3), null, null, null, null }));
    // Polytool
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(MinechemItemsRegistration.polytool), true, COST_STAR, new PotionChemical[] { null, this.molecule(MoleculeEnum.fullrene, 64), null, this.molecule(MoleculeEnum.fullrene, 64), null, this.molecule(MoleculeEnum.fullrene, 64), null, this.molecule(MoleculeEnum.fullrene, 64), null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemDiamond, true, COST_GEM, new PotionChemical[] { null, this.molecule(MoleculeEnum.fullrene), null, this.molecule(MoleculeEnum.fullrene), null, this.molecule(MoleculeEnum.fullrene), null, this.molecule(MoleculeEnum.fullrene), null }));
    // Iron Ingot
    ItemStack itemIngotIron = new ItemStack(Items.iron_ingot);
    DecomposerRecipe.add(new DecomposerRecipe(itemIngotIron, new PotionChemical[] { this.element(ElementEnum.Fe, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemIngotIron, false, COST_INGOT, new PotionChemical[] { this.element(ElementEnum.Fe, 16) }));
    // Gold Ingot
    ItemStack itemIngotGold = new ItemStack(Items.gold_ingot);
    DecomposerRecipe.add(new DecomposerRecipe(itemIngotGold, new PotionChemical[] { this.element(ElementEnum.Au, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemIngotGold, false, COST_INGOT, new PotionChemical[] { this.element(ElementEnum.Au, 16) }));
    // Stick
    ItemStack itemStick = new ItemStack(Items.stick);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemStick, 0.3F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    // String
    ItemStack itemString = new ItemStack(Items.string);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemString, 0.45F, new PotionChemical[] { this.molecule(MoleculeEnum.serine), this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.alinine) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemString, true, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.serine), this.molecule(MoleculeEnum.glycine), this.molecule(MoleculeEnum.alinine) }));
    // Feather
    ItemStack itemFeather = new ItemStack(Items.feather);
    DecomposerRecipe.add(new DecomposerRecipe(itemFeather, new PotionChemical[] { this.molecule(MoleculeEnum.water, 8), this.element(ElementEnum.N, 6) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemFeather, true, COST_ITEM, new PotionChemical[] { this.element(ElementEnum.N), this.molecule(MoleculeEnum.water, 2), this.element(ElementEnum.N), this.element(ElementEnum.N), this.molecule(MoleculeEnum.water, 1), this.element(ElementEnum.N), this.element(ElementEnum.N), this.molecule(MoleculeEnum.water, 5), this.element(ElementEnum.N) }));
    // Gunpowder
    ItemStack itemGunpowder = new ItemStack(Items.gunpowder);
    DecomposerRecipe.add(new DecomposerRecipe(itemGunpowder, new PotionChemical[] { this.molecule(MoleculeEnum.potassiumNitrate), this.element(ElementEnum.S, 2), this.element(ElementEnum.C) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemGunpowder, true, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.potassiumNitrate), this.element(ElementEnum.C), null, this.element(ElementEnum.S, 2), null, null, null, null, null }));
    // Bread
    ItemStack itemBread = new ItemStack(Items.bread);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemBread, 0.1F, new PotionChemical[] { this.molecule(MoleculeEnum.starch), this.molecule(MoleculeEnum.sucrose) }));
    // Flint
    ItemStack itemFlint = new ItemStack(Items.flint);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemFlint, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemFlint, true, COST_ITEM, new PotionChemical[] { null, moleculeSiliconDioxide, null, moleculeSiliconDioxide, moleculeSiliconDioxide, moleculeSiliconDioxide, null, null, null }));
    // Golden Apple
    ItemStack itemAppleGold = new ItemStack(Items.golden_apple, 1, 0);
    DecomposerRecipe.add(new DecomposerRecipe(itemAppleGold, new PotionChemical[] { this.molecule(MoleculeEnum.malicAcid), this.element(ElementEnum.Au, 64) }));
    // Wooden Door
    ItemStack itemDoorWood = new ItemStack(Items.wooden_door);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemDoorWood, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 12) }));
    // Bucket
    ItemStack itemBucket = new ItemStack(Items.bucket);
    DecomposerRecipe.add(new DecomposerRecipe(itemBucket, this.element(ElementEnum.Fe, 48)));
    SynthesisRecipe.add(new SynthesisRecipe(itemBucket, true, COST_FOOD, new PotionChemical[] { null, null, null, this.element(ElementEnum.Fe, 16), null, this.element(ElementEnum.Fe, 16), null, this.element(ElementEnum.Fe, 16), null }));
    // Water Bucket
    ItemStack itemBucketWater = new ItemStack(Items.water_bucket);
    DecomposerRecipe.add(new DecomposerRecipe(itemBucketWater, new PotionChemical[] { this.molecule(MoleculeEnum.water, 16), this.element(ElementEnum.Fe, 48) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemBucketWater, true, COST_FOOD, new PotionChemical[] { null, null, null, this.element(ElementEnum.Fe, 16), this.molecule(MoleculeEnum.water, 16), this.element(ElementEnum.Fe, 16), null, this.element(ElementEnum.Fe, 16), null }));
    // Redstone
    ItemStack itemRedstone = new ItemStack(Items.redstone);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemRedstone, 0.42F, new PotionChemical[] { this.molecule(MoleculeEnum.iron3oxide), this.element(ElementEnum.Cu) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRedstone, true, COST_LAPIS, new PotionChemical[] { null, null, this.molecule(MoleculeEnum.iron3oxide), null, this.element(ElementEnum.Cu), null, null, null, null }));
    // Redstone Block
    ItemStack blockRedstone = new ItemStack(Blocks.redstone_block);
    DecomposerRecipe.add(new DecomposerRecipeChance(blockRedstone, 0.42F, new PotionChemical[] { this.molecule(MoleculeEnum.iron3oxide, 9), this.element(ElementEnum.Cu, 9) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockRedstone, true, COST_LAPISBLOCK, new PotionChemical[] { null, null, this.molecule(MoleculeEnum.iron3oxide, 9), null, this.element(ElementEnum.Cu, 9), null, null, null, null }));
    // Snowball
    ItemStack itemSnowball = new ItemStack(Items.snowball);
    DecomposerRecipe.add(new DecomposerRecipe(itemSnowball, new PotionChemical[] { this.molecule(MoleculeEnum.water) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.snowball, 5), true, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.water), null, this.molecule(MoleculeEnum.water), null, this.molecule(MoleculeEnum.water), null, this.molecule(MoleculeEnum.water), null, this.molecule(MoleculeEnum.water) }));
    // Leather
    ItemStack itemLeather = new ItemStack(Items.leather);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemLeather, 0.2F, new PotionChemical[] { this.molecule(MoleculeEnum.keratin) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.leather, 5), true, COST_ITEM, new PotionChemical[] { null, null, null, null, this.molecule(MoleculeEnum.keratin), null, null, null, null }));
    // Brick
    ItemStack itemBrick = new ItemStack(Items.brick);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemBrick, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.kaolinite) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.brick, 8), true, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.kaolinite), this.molecule(MoleculeEnum.kaolinite), null, this.molecule(MoleculeEnum.kaolinite), this.molecule(MoleculeEnum.kaolinite), null }));
    // Clay
    ItemStack itemClayBall = new ItemStack(Items.clay_ball);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemClayBall, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.kaolinite) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.clay_ball, 2), false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.kaolinite) }));
    // Reed
    ItemStack itemReed = new ItemStack(Items.reeds);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemReed, 0.65F, new PotionChemical[] { this.molecule(MoleculeEnum.sucrose), this.element(ElementEnum.H, 2), this.element(ElementEnum.O) }));
    // Vines
    ItemStack itemVine = new ItemStack(Blocks.vine);
    DecomposerRecipe.add(new DecomposerRecipe(itemVine, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 6) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemVine, true, COST_GRASS, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose), this.molecule(MoleculeEnum.cellulose), null, this.molecule(MoleculeEnum.cellulose) }));
    // Paper
    ItemStack itemPaper = new ItemStack(Items.paper);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemPaper, 0.35F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.paper, 8), true, COST_ITEM, new PotionChemical[] { null, this.molecule(MoleculeEnum.cellulose), null, null, this.molecule(MoleculeEnum.cellulose), null, null, this.molecule(MoleculeEnum.cellulose), null }));
    // Compass
    ItemStack itemCompass = new ItemStack(Items.compass);
    DecomposerRecipe.add(new DecomposerRecipeSelect(itemCompass, 1.0F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe, 64) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe, 64), this.molecule(MoleculeEnum.iron3oxide) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe, 64), this.molecule(MoleculeEnum.iron3oxide), this.element(ElementEnum.Cu) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Fe, 64), this.element(ElementEnum.Cu) }) }));
    // Map
    ItemStack itemMap = new ItemStack(Items.map);
    DecomposerRecipe.add(new DecomposerRecipeSuper(itemMap, new ItemStack[] { itemPaper, itemPaper, itemPaper, itemPaper, itemPaper, itemPaper, itemPaper, itemPaper, itemCompass }));
    // Book
    ItemStack itemBook = new ItemStack(Items.book);
    DecomposerRecipe.add(new DecomposerRecipeSuper(itemBook, new ItemStack[] { itemPaper, itemPaper, itemPaper, itemLeather }));
    // Bookshelf
    ItemStack blockBook = new ItemStack(Blocks.bookshelf);
    DecomposerRecipe.add(new DecomposerRecipeSuper(blockBook, new ItemStack[] { blockBirchWoodPlanks, blockBirchWoodPlanks, blockBirchWoodPlanks, itemBook, itemBook, itemBook, blockBirchWoodPlanks, blockBirchWoodPlanks, blockBirchWoodPlanks }));
    // Slimeball
    ItemStack itemSlimeBall = new ItemStack(Items.slime_ball);
    DecomposerRecipe.add(new DecomposerRecipeSelect(itemSlimeBall, 0.9F, new DecomposerRecipe[] { new DecomposerRecipe(new PotionChemical[] { this.molecule(MoleculeEnum.pmma) }), new DecomposerRecipe(new PotionChemical[] { this.element(ElementEnum.Hg) }), new DecomposerRecipe(new PotionChemical[] { this.molecule(MoleculeEnum.water, 10) }) }));
    // Glowstone Dust
    ItemStack itemGlowstone = new ItemStack(Items.glowstone_dust);
    DecomposerRecipe.add(new DecomposerRecipe(itemGlowstone, new PotionChemical[] { this.element(ElementEnum.P) }));
    // Bone
    ItemStack itemBone = new ItemStack(Items.bone);
    DecomposerRecipe.add(new DecomposerRecipe(itemBone, new PotionChemical[] { this.molecule(MoleculeEnum.hydroxylapatite) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemBone, false, COST_ITEM, new PotionChemical[] { this.molecule(MoleculeEnum.hydroxylapatite) }));
    // Sugar
    ItemStack itemSugar = new ItemStack(Items.sugar);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemSugar, 0.75F, new PotionChemical[] { this.molecule(MoleculeEnum.sucrose) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemSugar, false, COST_SUGAR, new PotionChemical[] { this.molecule(MoleculeEnum.sucrose) }));
    // Melon Slice
    ItemStack itemMelon = new ItemStack(Items.melon);
    DecomposerRecipe.add(new DecomposerRecipe(itemMelon, new PotionChemical[] { this.molecule(MoleculeEnum.water, 1) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Items.melon), false, COST_FOOD, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin), this.molecule(MoleculeEnum.asparticAcid), this.molecule(MoleculeEnum.water, 1) }));
    // Melon
    ItemStack blockMelon = new ItemStack(Blocks.melon_block);
    DecomposerRecipe.add(new DecomposerRecipe(blockMelon, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin), this.molecule(MoleculeEnum.asparticAcid), this.molecule(MoleculeEnum.water, 16) }));
    SynthesisRecipe.add(new SynthesisRecipe(new ItemStack(Blocks.melon_block, 1), false, COST_FOOD, new PotionChemical[] { this.molecule(MoleculeEnum.cucurbitacin), this.molecule(MoleculeEnum.asparticAcid), this.molecule(MoleculeEnum.water, 16) }));
    // Cooked Chicken
    ItemStack itemChickenCooked = new ItemStack(Items.cooked_chicken);
    DecomposerRecipe.add(new DecomposerRecipe(itemChickenCooked, new PotionChemical[] { this.element(ElementEnum.K), this.element(ElementEnum.Na), this.element(ElementEnum.C, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemChickenCooked, true, COST_FOOD, new PotionChemical[] { this.element(ElementEnum.K, 16), this.element(ElementEnum.Na, 16), this.element(ElementEnum.C, 16) }));
    // Rotten Flesh
    ItemStack itemRottenFlesh = new ItemStack(Items.rotten_flesh);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemRottenFlesh, 0.05F, new PotionChemical[] { new Molecule(MoleculeEnum.nodularin, 1) }));
    // Enderpearl
    ItemStack itemEnderPearl = new ItemStack(Items.ender_pearl);
    DecomposerRecipe.add(new DecomposerRecipe(itemEnderPearl, new PotionChemical[] { this.element(ElementEnum.Es), this.molecule(MoleculeEnum.calciumCarbonate, 8) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemEnderPearl, true, COST_TEAR, new PotionChemical[] { this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate), this.element(ElementEnum.Es), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate), this.molecule(MoleculeEnum.calciumCarbonate) }));
    // EnderDragon Egg
    ItemStack blockEnderDragonEgg = new ItemStack(Blocks.dragon_egg);
    DecomposerRecipe.add(new DecomposerRecipe(blockEnderDragonEgg, new PotionChemical[] { this.molecule(MoleculeEnum.calciumCarbonate, 16), this.molecule(MoleculeEnum.hydroxylapatite, 6), this.element(ElementEnum.Pu, 18), this.element(ElementEnum.Fm, 8) }));
    SynthesisRecipe.add(new SynthesisRecipe(blockEnderDragonEgg, true, COST_BLOCK * 2, new PotionChemical[] { this.molecule(MoleculeEnum.calciumCarbonate, 18), this.molecule(MoleculeEnum.hydroxylapatite, 8), this.element(ElementEnum.Pu, 22), this.element(ElementEnum.Fm, 12) }));
    // Blaze Rod
    ItemStack itemBlazeRod = new ItemStack(Items.blaze_rod);
    DecomposerRecipe.add(new DecomposerRecipe(itemBlazeRod, new PotionChemical[] { this.element(ElementEnum.Pu, 6) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemBlazeRod, true, COST_TEAR, new PotionChemical[] { this.element(ElementEnum.Pu, 2), null, null, this.element(ElementEnum.Pu, 2), null, null, this.element(ElementEnum.Pu, 2), null, null }));
    // Blaze Powder
    ItemStack itemBlazePowder = new ItemStack(Items.blaze_powder);
    DecomposerRecipe.add(new DecomposerRecipe(itemBlazePowder, new PotionChemical[] { this.element(ElementEnum.Pu) }));
    // Ghast Tear
    ItemStack itemGhastTear = new ItemStack(Items.ghast_tear);
    DecomposerRecipe.add(new DecomposerRecipe(itemGhastTear, new PotionChemical[] { this.element(ElementEnum.Yb, 4), this.element(ElementEnum.No, 4) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemGhastTear, true, COST_TEAR, new PotionChemical[] { this.element(ElementEnum.Yb), this.element(ElementEnum.Yb), this.element(ElementEnum.No), null, this.element(ElementEnum.Yb, 2), this.element(ElementEnum.No, 2), null, this.element(ElementEnum.No), null }));
    if (Settings.recreationalChemicalEffects) {
        // Nether Wart
        ItemStack itemNetherStalkSeeds = new ItemStack(Items.nether_wart);
        DecomposerRecipe.add(new DecomposerRecipeChance(itemNetherStalkSeeds, 0.5F, new PotionChemical[] { this.molecule(MoleculeEnum.cocainehcl) }));
    }
    // Spider Eye
    ItemStack itemSpiderEye = new ItemStack(Items.spider_eye);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemSpiderEye, 0.2F, new PotionChemical[] { this.molecule(MoleculeEnum.tetrodotoxin) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemSpiderEye, true, COST_ITEM, new PotionChemical[] { this.element(ElementEnum.C), null, null, null, this.molecule(MoleculeEnum.tetrodotoxin), null, null, null, this.element(ElementEnum.C) }));
    // Fermented Spider Eye
    ItemStack itemFermentedSpiderEye = new ItemStack(Items.fermented_spider_eye);
    DecomposerRecipe.add(new DecomposerRecipe(itemFermentedSpiderEye, new PotionChemical[] { this.element(ElementEnum.Po), this.molecule(MoleculeEnum.ethanol) }));
    // Magma Cream
    ItemStack itemMagmaCream = new ItemStack(Items.magma_cream);
    DecomposerRecipe.add(new DecomposerRecipe(itemMagmaCream, new PotionChemical[] { this.element(ElementEnum.Hg), this.element(ElementEnum.Pu), this.molecule(MoleculeEnum.pmma, 3) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemMagmaCream, true, COST_TEAR, new PotionChemical[] { null, this.element(ElementEnum.Pu), null, this.molecule(MoleculeEnum.pmma), this.element(ElementEnum.Hg), this.molecule(MoleculeEnum.pmma), null, this.molecule(MoleculeEnum.pmma), null }));
    // Glistering Melon
    ItemStack itemSpeckledMelon = new ItemStack(Items.speckled_melon);
    DecomposerRecipe.add(new DecomposerRecipe(itemSpeckledMelon, new PotionChemical[] { this.molecule(MoleculeEnum.water, 4), this.molecule(MoleculeEnum.whitePigment), this.element(ElementEnum.Au, 1) }));
    // Emerald
    ItemStack itemEmerald = new ItemStack(Items.emerald);
    DecomposerRecipe.add(new DecomposerRecipe(itemEmerald, new PotionChemical[] { this.molecule(MoleculeEnum.beryl, 2), this.element(ElementEnum.Cr, 2), this.element(ElementEnum.V, 2) }));
    SynthesisRecipe.add(new SynthesisRecipe(itemEmerald, true, 5000, new PotionChemical[] { null, this.element(ElementEnum.Cr), null, this.element(ElementEnum.V), this.molecule(MoleculeEnum.beryl, 2), this.element(ElementEnum.V), null, this.element(ElementEnum.Cr), null }));
    // Wheat
    ItemStack itemWheat = new ItemStack(Items.wheat);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemWheat, 0.3F, new PotionChemical[] { this.molecule(MoleculeEnum.cellulose, 2) }));
    // Carrot
    ItemStack itemCarrot = new ItemStack(Items.carrot);
    DecomposerRecipe.add(new DecomposerRecipe(itemCarrot, new PotionChemical[] { this.molecule(MoleculeEnum.retinol) }));
    // Potato
    ItemStack itemPotato = new ItemStack(Items.potato);
    DecomposerRecipe.add(new DecomposerRecipeChance(itemPotato, 0.4F, new PotionChemical[] { this.molecule(MoleculeEnum.water, 8), this.element(ElementEnum.K, 2), this.molecule(MoleculeEnum.cellulose) }));
    // Golden Carrot
    ItemStack itemGoldenCarrot = new ItemStack(Items.golden_carrot);
    DecomposerRecipe.add(new DecomposerRecipe(itemGoldenCarrot, new PotionChemical[] { this.molecule(MoleculeEnum.retinol), this.element(ElementEnum.Au, 4) }));
    // Nether Star
    ItemStack itemNetherStar = new ItemStack(Items.nether_star);
    DecomposerRecipe.add(new DecomposerRecipe(itemNetherStar, new PotionChemical[] { elementHelium, elementHelium, elementHelium, elementCarbon, this.element(ElementEnum.Cn, 16), elementHelium, elementHydrogen, elementHydrogen, elementHydrogen }));
    SynthesisRecipe.add(new SynthesisRecipe(itemNetherStar, true, COST_STAR, new PotionChemical[] { elementHelium, elementHelium, elementHelium, elementCarbon, this.element(ElementEnum.Cn, 16), elementHelium, elementHydrogen, elementHydrogen, elementHydrogen }));
    // Nether Quartz
    ItemStack itemNetherQuartz = new ItemStack(Items.quartz);
    DecomposerRecipe.add(new DecomposerRecipe(itemNetherQuartz, new PotionChemical[] { this.molecule(MoleculeEnum.siliconDioxide, 4), this.molecule(MoleculeEnum.galliumarsenide, 1) }));
    // Music Records
    ItemStack itemRecord13 = new ItemStack(Items.record_13);
    ItemStack itemRecordCat = new ItemStack(Items.record_cat);
    ItemStack itemRecordFar = new ItemStack(Items.record_far);
    ItemStack itemRecordMall = new ItemStack(Items.record_mall);
    ItemStack itemRecordMellohi = new ItemStack(Items.record_mellohi);
    ItemStack itemRecordStal = new ItemStack(Items.record_stal);
    ItemStack itemRecordStrad = new ItemStack(Items.record_strad);
    ItemStack itemRecordWard = new ItemStack(Items.record_ward);
    ItemStack itemRecordChirp = new ItemStack(Items.record_chirp);
    ItemStack itemRecord11 = new ItemStack(Items.record_11);
    ItemStack itemRecordWait = new ItemStack(Items.record_wait);
    ItemStack itemRecordBlocks = new ItemStack(Items.record_blocks);
    DecomposerRecipe.add(new DecomposerRecipe(itemRecord13, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordCat, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordFar, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordMall, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordMellohi, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordStal, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordStrad, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordWard, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordChirp, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecord11, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordWait, moleculePolyvinylChloride, moleculePolyvinylChloride));
    DecomposerRecipe.add(new DecomposerRecipe(itemRecordBlocks, moleculePolyvinylChloride, moleculePolyvinylChloride));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecord13, true, COST_GEM, new PotionChemical[] { moleculePolyvinylChloride, moleculePolyvinylChloride, null, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordCat, true, COST_GEM, new PotionChemical[] { null, moleculePolyvinylChloride, moleculePolyvinylChloride, null, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordFar, true, COST_GEM, new PotionChemical[] { null, null, moleculePolyvinylChloride, moleculePolyvinylChloride, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordMall, true, COST_GEM, new PotionChemical[] { null, null, null, moleculePolyvinylChloride, moleculePolyvinylChloride, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordMellohi, true, COST_GEM, new PotionChemical[] { null, null, null, null, moleculePolyvinylChloride, moleculePolyvinylChloride, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordStal, true, COST_GEM, new PotionChemical[] { null, null, null, null, null, moleculePolyvinylChloride, moleculePolyvinylChloride, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordStrad, true, COST_GEM, new PotionChemical[] { null, null, null, null, null, null, moleculePolyvinylChloride, moleculePolyvinylChloride, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordWard, true, COST_GEM, new PotionChemical[] { null, null, null, null, null, null, null, moleculePolyvinylChloride, moleculePolyvinylChloride }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordChirp, true, COST_GEM, new PotionChemical[] { moleculePolyvinylChloride, null, null, null, null, null, null, null, moleculePolyvinylChloride }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecord11, true, COST_GEM, new PotionChemical[] { moleculePolyvinylChloride, null, null, null, moleculePolyvinylChloride, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordWait, true, COST_GEM, new PotionChemical[] { moleculePolyvinylChloride, null, null, moleculePolyvinylChloride, null, null, null, null, null }));
    SynthesisRecipe.add(new SynthesisRecipe(itemRecordBlocks, true, COST_GEM, new PotionChemical[] { moleculePolyvinylChloride, null, null, null, null, moleculePolyvinylChloride, null, null, null }));
    // Ironbars
    ItemStack bars = new ItemStack(Blocks.iron_bars);
    DecomposerRecipe.add(new DecomposerRecipe(bars, new PotionChemical[] { element(ElementEnum.Fe, 3), element(ElementEnum.Fe, 3) }));
    SynthesisRecipe.add(new SynthesisRecipe(bars, false, COST_BLOCK, new PotionChemical[] { element(ElementEnum.Fe, 3), element(ElementEnum.Fe, 3) }));
    // Uranium Ore
    DecomposerRecipe.createAndAddRecipeSafely("oreUranium", new Element(ElementEnum.U, 48));
}
Also used : Molecule(minechem.item.molecule.Molecule) DecomposerRecipeSuper(minechem.tileentity.decomposer.DecomposerRecipeSuper) SynthesisRecipe(minechem.tileentity.synthesis.SynthesisRecipe) Element(minechem.item.element.Element) DecomposerRecipeSelect(minechem.tileentity.decomposer.DecomposerRecipeSelect) DecomposerRecipeChance(minechem.tileentity.decomposer.DecomposerRecipeChance) PotionChemical(minechem.potion.PotionChemical) DecomposerRecipe(minechem.tileentity.decomposer.DecomposerRecipe) ItemStack(net.minecraft.item.ItemStack)

Example 27 with PotionChemical

use of minechem.potion.PotionChemical in project Minechem by iopleke.

the class ChemicalTurtlePeripheral method addLuaMethods.

@Optional.Method(modid = "ComputerCraft")
protected void addLuaMethods() {
    methods.add(new LuaMethod("getMethods") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                String[] result = new String[methods.size()];
                int i = 0;
                for (LuaMethod method : methods) {
                    result[i++] = method.getMethodName() + method.getArgs();
                }
                return result;
            } else {
                throw new LuaException("getMethods does not take any arguments");
            }
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Returns: List of Method Names and Arguments" };
        }
    });
    methods.add(new LuaMethod("getDetails") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 1) {
                String methodName = (String) args[0];
                if (methodName != null) {
                    for (LuaMethod method : methods) {
                        if (method.getMethodName().equalsIgnoreCase(methodName)) {
                            return method.getDetails();
                        }
                    }
                }
                throw new LuaException("Invalid Method Name - do not include brackets");
            } else {
                throw new LuaException("getDetails takes a single argument");
            }
        }

        @Override
        public String getArgs() {
            return "(Method Name)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Method Name - from getMethods()", "Returns: Details of arguments and results" };
        }
    });
    methods.add(new LuaMethod("getChemicalName") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                String result = getName(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    String result = getName(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private String getName(int slot) {
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            if (Compare.isStackAnElement(current)) {
                return current.getDisplayName();
            } else if (Compare.isStackAMolecule(current)) {
                return current.getDisplayName();
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Chemical name of stack in slot, or nil if not a chemical" };
        }
    });
    methods.add(new LuaMethod("getChemicalFormula") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                String result = getChemicalFormula(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    String result = getChemicalFormula(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private String getChemicalFormula(int slot) {
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            if (Compare.isStackAnElement(current)) {
                return ElementItem.getElement(current).name();
            }
            if (Compare.isStackAMolecule(current)) {
                return MoleculeItem.getMolecule(current).getFormula();
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Chemical formula of stack in slot, or nil if not a chemical" };
        }
    });
    methods.add(new LuaMethod("getChemicalsAsTable") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                HashMap<Number, Object> result = getChemicalsAsTable(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    HashMap<Number, Object> result = getChemicalsAsTable(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private HashMap<Number, Object> getChemicalsAsTable(int slot) {
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            HashMap<Number, Object> map = new HashMap<Number, Object>();
            if (Compare.isStackAnElement(current)) {
                HashMap<String, Object> chemMap = new HashMap<String, Object>();
                chemMap.put("chemical", current.getDisplayName());
                chemMap.put("quantity", 1);
                map.put(1, chemMap);
                return map;
            }
            if (Compare.isStackAMolecule(current)) {
                MoleculeEnum molecule = MoleculeItem.getMolecule(current);
                ArrayList<PotionChemical> chemicals = molecule.components();
                for (int i = 0; i < chemicals.size(); i++) {
                    PotionChemical chemical = chemicals.get(i);
                    HashMap<String, Object> chemMap = new HashMap<String, Object>();
                    chemMap.put("chemical", MinechemUtil.getChemicalName(chemical));
                    chemMap.put("quantity", chemical.amount);
                    map.put(i + 1, chemMap);
                }
                return map;
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Chemical formula of stack in slot as a table, or nil if not a chemical" };
        }
    });
    methods.add(new LuaMethod("getAtomicMass") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                Integer result = getAtomicMass(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    Integer result = getAtomicMass(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private Integer getAtomicMass(Integer slot) {
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            if (Compare.isStackAnElement(current)) {
                return ElementItem.getElement(current).atomicNumber();
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Atomic Mass of elements" };
        }
    });
    methods.add(new LuaMethod("getRadioactivity") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                String result = getRadioactivity(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    String result = getRadioactivity(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private String getRadioactivity(Integer slot) {
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            if (Compare.isStackAnElement(current)) {
                return ElementItem.getElement(current).radioactivity().toString();
            } else if (Compare.isStackAMolecule(current)) {
                return MoleculeItem.getMolecule(current).radioactivity().toString();
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Radioactivity level of chemicals" };
        }
    });
    methods.add(new LuaMethod("getDecayTimeInTicks") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                Object result = getDecayTime(turtle.getSelectedSlot());
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    Object result = getDecayTime(slot);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Time left to Radioactive Decay in Ticks - Infinite for stable chemicals, null for non-chemicals" };
        }
    });
    methods.add(new LuaMethod("getDecayTime") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                Object result = getDecayTime(turtle.getSelectedSlot());
                if (result != null) {
                    if (result instanceof Long) {
                        return new Object[] { TimeHelper.getTimeFromTicks((Long) result) };
                    } else if (result instanceof String) {
                        return new Object[] { result };
                    }
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    Object result = getDecayTime(slot);
                    if (result != null) {
                        if (result instanceof Long) {
                            return new Object[] { TimeHelper.getTimeFromTicks((Long) result) };
                        } else if (result instanceof String) {
                            return new Object[] { result };
                        }
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Time left to Radioactive Decay - Infinite for stable chemicals, null for non-chemicals" };
        }
    });
    methods.add(new LuaMethod("syncJournal") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                String result = sync(turtle.getSelectedSlot(), computer);
                if (result != null) {
                    return new Object[] { result };
                }
            } else if (args.length == 1) {
                Integer slot = getInt(args[0]);
                if (validateInteger(slot, turtle.getInventory().getSizeInventory())) {
                    String result = sync(slot, computer);
                    if (result != null) {
                        return new Object[] { result };
                    }
                } else {
                    throw new LuaException("Invalid Slot Number.");
                }
            } else {
                throw new LuaException("Maximum 1 argument for slot number.");
            }
            return null;
        }

        private String sync(int slot, IComputerAccess computer) throws LuaException {
            ItemStack journal = getJournal(slot);
            if (journal != null) {
                return upload(journal) + " - " + download(journal, computer);
            }
            ItemStack book = getBook(slot);
            if (book != null) {
                return download(book, slot, computer);
            }
            throw new LuaException("Invalid Stack - not a journal or a book");
        }

        private String upload(ItemStack journal) {
            List<MapKey> journalItems = stackListToKeys(MinechemItemsRegistration.journal.getItemList(journal));
            if (journalItems == null) {
                journalItems = new ArrayList<MapKey>();
            }
            ArrayList<MapKey> addItems = new ArrayList<MapKey>();
            addItems.addAll(journalItems);
            addItems.removeAll(known);
            known.addAll(addItems);
            int added = addItems.size();
            return "Loaded " + added + " recipe" + (added != 1 ? "s" : "");
        }

        private String download(ItemStack journal, IComputerAccess computer) {
            return download(journal, -1, computer);
        }

        private String download(ItemStack journal, int slot, IComputerAccess computer) {
            if (journal.getItem() == Items.book) {
                journal = new ItemStack(MinechemItemsRegistration.journal);
            }
            List<MapKey> journalItems = stackListToKeys(MinechemItemsRegistration.journal.getItemList(journal));
            if (journalItems == null) {
                journalItems = new ArrayList<MapKey>();
            }
            ArrayList<MapKey> addItems = new ArrayList<MapKey>();
            addItems.addAll(known);
            addItems.removeAll(journalItems);
            for (ItemStack item : keyListToStacks(addItems)) {
                MinechemItemsRegistration.journal.addItemStackToJournal(item, journal, turtle.getWorld());
            }
            int added = addItems.size();
            String owner = journal.stackTagCompound.getString("owner");
            if (owner.equals("")) {
                journal.stackTagCompound.setString("owner", "Chemistry Turtle " + computer.getID());
            }
            if (!(slot < 0)) {
                turtle.getInventory().setInventorySlotContents(slot, journal);
            }
            return "Saved " + added + " recipe" + (added != 1 ? "s" : "");
        }

        private ItemStack getBook(int slot) {
            ItemStack result = turtle.getInventory().getStackInSlot(slot);
            if (result.getItem() == Items.book && result.stackSize == 1) {
                return result;
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Slot Number, defaults to current slot", "Returns: Number of Journal Entries loaded and saved" };
        }
    });
    methods.add(new LuaMethod("readRecipe") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            ForgeDirection dir = null;
            if (args.length == 0) {
                dir = getDirForString("front", turtle);
            } else if (args.length == 1) {
                dir = getDirForString((String) args[0], turtle);
            }
            if (dir == null) {
                throw new LuaException("Invalid Arguments");
            }
            TileEntity te = turtle.getWorld().getTileEntity(turtle.getPosition().posX + dir.offsetX, turtle.getPosition().posY + dir.offsetY, turtle.getPosition().posZ + dir.offsetZ);
            if (te != null) {
                if (te instanceof SynthesisTileEntity) {
                    SynthesisRecipe thisRecipe = ((SynthesisTileEntity) te).getCurrentRecipe();
                    if (thisRecipe != null) {
                        if (addStackToKnown(thisRecipe.getOutput())) {
                            return new Object[] { "Synthesis Recipe Scanned", stackToMap(thisRecipe.getOutput()) };
                        } else {
                            return new Object[] { "Item already known" };
                        }
                    }
                } else if (te instanceof DecomposerTileEntity) {
                    DecomposerRecipe thisRecipe = DecomposerRecipe.get(((DecomposerTileEntity) te).inventory[((DecomposerTileEntity) te).kInputSlot]);
                    if (thisRecipe != null) {
                        if (addStackToKnown(thisRecipe.getInput())) {
                            return new Object[] { "Decomposer Recipe Scanned", stackToMap(thisRecipe.getInput()) };
                        } else {
                            return new Object[] { "Item already known" };
                        }
                    }
                } else if (te instanceof MicroscopeTileEntity) {
                    ItemStack thisStack = ((MicroscopeTileEntity) te).inventory[0];
                    if (thisStack != null) {
                        if (addStackToKnown(thisStack)) {
                            return new Object[] { "Microscope scan complete", stackToMap(thisStack) };
                        } else {
                            return new Object[] { "Item already known" };
                        }
                    }
                }
            }
            return null;
        }

        @Override
        public String getArgs() {
            return "(?Direction)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Direction, defaults to front", "Returns: Confirmtion String, Recipe read" };
        }
    });
    methods.add(new LuaMethod("getSynthesisRecipe") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 1 || args.length == 2) {
                String UUID = (String) args[0];
                Integer metadata = args.length == 2 ? getInt(args[1]) : 0;
                if (metadata == null || metadata < 0) {
                    metadata = 0;
                }
                for (ItemStack current : keyListToStacks(known)) {
                    if (GameRegistry.findUniqueIdentifierFor(current.getItem()).toString().equals(UUID) && current.getItemDamage() == metadata) {
                        SynthesisRecipe output = SynthesisRecipeHandler.instance.getRecipeFromOutput(current);
                        if (output != null) {
                            return new Object[] { synthesisRecipeToMap(output) };
                        } else {
                            return new Object[] { "No Synthesiser recipe exists for " + UUID + ":" + metadata };
                        }
                    }
                }
                return new Object[] { UUID + ":" + metadata + " is unknown." };
            } else {
                throw new LuaException("Invalid arguments");
            }
        }

        @Override
        public String getArgs() {
            return "(name,?metadata)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Args: Item Name and optional metadata, default 0", "Returns: Synthesiser Recipes in table form" };
        }
    });
    methods.add(new LuaMethod("getSynthesisRecipes") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            if (args.length == 0) {
                int i = 1;
                HashMap<Number, Object> result = new HashMap<Number, Object>();
                for (ItemStack current : keyListToStacks(known)) {
                    SynthesisRecipe output = SynthesisRecipeHandler.instance.getRecipeFromOutput(current);
                    if (output != null) {
                        result.put(i++, synthesisRecipeToMap(output));
                    }
                }
                return new Object[] { result };
            } else {
                throw new LuaException("getSynthesisRecipes does not take any arguments");
            }
        }

        @Override
        public String getArgs() {
            return "()";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Returns: All Synthesiser Recipes in table form" };
        }
    });
    methods.add(new LuaMethod("setRecipe") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            ForgeDirection dir = null;
            if (args.length > 0 && args.length < 4) {
                String UUID = null;
                dir = getDirForString((String) args[0], turtle);
                if (dir == null && args.length < 3) {
                    UUID = (String) args[0];
                    dir = getDirForString("front", turtle);
                } else if (dir == null) {
                    throw new LuaException("Invalid Arguments");
                }
                TileEntity te = turtle.getWorld().getTileEntity(turtle.getPosition().posX + dir.offsetX, turtle.getPosition().posY + dir.offsetY, turtle.getPosition().posZ + dir.offsetZ);
                if (te instanceof SynthesisTileEntity) {
                    Integer metadata = getInt(args[args.length - 1]);
                    if (metadata == null || metadata < 0) {
                        metadata = 0;
                    }
                    if (UUID == null) {
                        UUID = (String) args[1];
                    }
                    for (ItemStack current : keyListToStacks(known)) {
                        if (GameRegistry.findUniqueIdentifierFor(current.getItem()).toString().equals(UUID) && current.getItemDamage() == metadata) {
                            SynthesisRecipe output = SynthesisRecipeHandler.instance.getRecipeFromOutput(current);
                            if (output != null) {
                                ((SynthesisTileEntity) te).setRecipe(output);
                                return new Object[] { true };
                            } else {
                                return new Object[] { false };
                            }
                        }
                    }
                }
            }
            return new Object[] { false };
        }

        @Override
        public String getArgs() {
            return "(?Direction,name,?metadata)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Direction, defaults to front", "Arg: Item name", "Arg: Optional metadata, defaults to 0", "Returns: boolean success" };
        }
    });
    methods.add(new LuaMethod("setMicroscope") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            ForgeDirection dir = null;
            Integer slot = null;
            switch(args.length) {
                case 0:
                    slot = turtle.getSelectedSlot();
                    dir = getDirForString("front", turtle);
                    break;
                case 1:
                    dir = getDirForString((String) args[0], turtle);
                    if (dir == null && args.length == 1) {
                        slot = getInt(args[0]);
                        slot = validateInteger(slot, turtle.getInventory().getSizeInventory()) ? slot : null;
                        dir = getDirForString("front", turtle);
                    }
                    break;
                case 2:
                    dir = getDirForString((String) args[0], turtle);
                    slot = getInt(args[0]);
                    slot = validateInteger(slot, turtle.getInventory().getSizeInventory()) ? slot : null;
                default:
            }
            if (dir == null || slot == null) {
                throw new LuaException("Invalid Arguments");
            }
            ItemStack current = turtle.getInventory().getStackInSlot(slot);
            TileEntity te = turtle.getWorld().getTileEntity(turtle.getPosition().posX + dir.offsetX, turtle.getPosition().posY + dir.offsetY, turtle.getPosition().posZ + dir.offsetZ);
            if (te instanceof MicroscopeTileEntity) {
                ItemStack microStack = ((MicroscopeTileEntity) te).getStackInSlot(0);
                if (microStack == null && current == null) {
                    return new Object[] { false };
                } else if (microStack == null) {
                    ((MicroscopeTileEntity) te).setInventorySlotContents(0, turtle.getInventory().decrStackSize(slot, 1));
                    return new Object[] { true };
                } else if (current == null) {
                    turtle.getInventory().setInventorySlotContents(slot, ((MicroscopeTileEntity) te).decrStackSize(0, 1));
                    return new Object[] { true };
                } else if (current.isItemEqual(microStack)) {
                    if (current.stackSize < current.getMaxStackSize()) {
                        ((MicroscopeTileEntity) te).decrStackSize(0, 1);
                        current.stackSize++;
                    }
                }
            }
            return new Object[] { false };
        }

        @Override
        public String getArgs() {
            return "(?Direction,?slot)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Direction, defaults to front", "Arg: Optional slot number, defaults to current", "Returns: boolean success" };
        }
    });
    methods.add(new LuaMethod("getState") {

        @Override
        public Object[] call(IComputerAccess computer, ILuaContext context, Object[] args) throws LuaException, InterruptedException {
            ForgeDirection dir = ForgeDirection.getOrientation(turtle.getDirection());
            if (args.length < 2) {
                if (args.length == 1) {
                    dir = getDirForString((String) args[0], turtle);
                    if (dir == null) {
                        throw new LuaException("Invalid Arguments");
                    }
                }
                TileEntity te = turtle.getWorld().getTileEntity(turtle.getPosition().posX + dir.offsetX, turtle.getPosition().posY + dir.offsetY, turtle.getPosition().posZ + dir.offsetZ);
                if (te instanceof SynthesisTileEntity) {
                    return new Object[] { ((SynthesisTileEntity) te).getState() };
                } else if (te instanceof DecomposerTileEntity) {
                    return new Object[] { ((DecomposerTileEntity) te).getStateString() };
                }
                throw new LuaException("Invalid TileEntity");
            }
            throw new LuaException("Invalid Arguments");
        }

        @Override
        public String getArgs() {
            return "(?Direction)";
        }

        @Override
        public String[] getDetails() {
            return new String[] { super.getDetails()[0], "Arg: Optional Direction, defaults to front", "Returns: Machine state" };
        }
    });
}
Also used : HashMap(java.util.HashMap) DecomposerTileEntity(minechem.tileentity.decomposer.DecomposerTileEntity) ArrayList(java.util.ArrayList) PotionChemical(minechem.potion.PotionChemical) ILuaContext(dan200.computercraft.api.lua.ILuaContext) LuaException(dan200.computercraft.api.lua.LuaException) MicroscopeTileEntity(minechem.tileentity.microscope.MicroscopeTileEntity) DecomposerTileEntity(minechem.tileentity.decomposer.DecomposerTileEntity) SynthesisTileEntity(minechem.tileentity.synthesis.SynthesisTileEntity) TileEntity(net.minecraft.tileentity.TileEntity) IComputerAccess(dan200.computercraft.api.peripheral.IComputerAccess) ForgeDirection(net.minecraftforge.common.util.ForgeDirection) ArrayList(java.util.ArrayList) List(java.util.List) MoleculeEnum(minechem.item.molecule.MoleculeEnum) DecomposerRecipe(minechem.tileentity.decomposer.DecomposerRecipe) SynthesisTileEntity(minechem.tileentity.synthesis.SynthesisTileEntity) MapKey(minechem.utils.MapKey) SynthesisRecipe(minechem.tileentity.synthesis.SynthesisRecipe) LuaMethod(minechem.computercraft.lua.LuaMethod) MicroscopeTileEntity(minechem.tileentity.microscope.MicroscopeTileEntity) ItemStack(net.minecraft.item.ItemStack)

Example 28 with PotionChemical

use of minechem.potion.PotionChemical in project Minechem by iopleke.

the class ChemicalTurtlePeripheral method synthesisRecipeToMap.

private HashMap<String, Object> synthesisRecipeToMap(SynthesisRecipe recipe) {
    HashMap<String, Object> result = new HashMap<String, Object>();
    result.put("output", stackToMap(recipe.getOutput()));
    result.put("shaped", recipe.isShaped());
    result.put("energyCost", recipe.energyCost());
    HashMap<Number, Object> inputs = new HashMap<Number, Object>();
    PotionChemical[] recipeInputs = recipe.isShaped() ? recipe.getShapedRecipe() : recipe.getShapelessRecipe();
    int i = 1;
    for (PotionChemical chemical : recipeInputs) {
        if (chemical != null) {
            HashMap<String, Object> input = new HashMap<String, Object>();
            if (chemical instanceof Element) {
                input.put("element", ((Element) chemical).element.getLongName());
                input.put("quantity", chemical.amount);
            } else if (chemical instanceof Molecule) {
                input.put("element", ((Molecule) chemical).molecule.name());
                input.put("quantity", chemical.amount);
            }
            inputs.put(i++, input);
        }
    }
    result.put("ingredients", inputs);
    return result;
}
Also used : Molecule(minechem.item.molecule.Molecule) HashMap(java.util.HashMap) Element(minechem.item.element.Element) PotionChemical(minechem.potion.PotionChemical)

Example 29 with PotionChemical

use of minechem.potion.PotionChemical in project Minechem by iopleke.

the class MinechemBucketHandler method registerBucketDecomposerRecipe.

private void registerBucketDecomposerRecipe(ItemStack itemStack, MinechemChemicalType type) {
    ArrayList<PotionChemical> tubes = new ArrayList<PotionChemical>();
    tubes.add(new Element(ElementEnum.Fe, 48));
    if (type instanceof ElementEnum) {
        tubes.add(new Element((ElementEnum) type, 8));
    } else if (type instanceof MoleculeEnum) {
        tubes.add(new Molecule((MoleculeEnum) type, 8));
    }
    DecomposerRecipe.add(new DecomposerRecipe(itemStack, tubes));
}
Also used : ElementEnum(minechem.item.element.ElementEnum) Molecule(minechem.item.molecule.Molecule) Element(minechem.item.element.Element) ArrayList(java.util.ArrayList) PotionChemical(minechem.potion.PotionChemical) MoleculeEnum(minechem.item.molecule.MoleculeEnum) DecomposerRecipe(minechem.tileentity.decomposer.DecomposerRecipe)

Example 30 with PotionChemical

use of minechem.potion.PotionChemical in project Minechem by iopleke.

the class SynthesisRecipe method getIngredientCount.

public int getIngredientCount() {
    int var1 = 0;
    PotionChemical var3;
    for (Iterator<PotionChemical> var2 = this.unshapedRecipe.iterator(); var2.hasNext(); var1 += var3.amount) {
        var3 = var2.next();
    }
    return var1;
}
Also used : PotionChemical(minechem.potion.PotionChemical)

Aggregations

PotionChemical (minechem.potion.PotionChemical)31 ItemStack (net.minecraft.item.ItemStack)13 ArrayList (java.util.ArrayList)9 Molecule (minechem.item.molecule.Molecule)8 Element (minechem.item.element.Element)7 DecomposerRecipe (minechem.tileentity.decomposer.DecomposerRecipe)7 MoleculeEnum (minechem.item.molecule.MoleculeEnum)4 SynthesisRecipe (minechem.tileentity.synthesis.SynthesisRecipe)4 MapKey (minechem.utils.MapKey)4 ZenMethod (stanhebben.zenscript.annotations.ZenMethod)4 ElementItem (minechem.item.element.ElementItem)3 Item (net.minecraft.item.Item)3 HashMap (java.util.HashMap)2 MinechemBucketItem (minechem.item.bucket.MinechemBucketItem)2 ElementEnum (minechem.item.element.ElementEnum)2 MoleculeItem (minechem.item.molecule.MoleculeItem)2 DecomposerRecipeChance (minechem.tileentity.decomposer.DecomposerRecipeChance)2 DecomposerRecipeSelect (minechem.tileentity.decomposer.DecomposerRecipeSelect)2 IIngredient (minetweaker.api.item.IIngredient)2 ILuaContext (dan200.computercraft.api.lua.ILuaContext)1