Search in sources :

Example 11 with DecomposerRecipe

use of minechem.tileentity.decomposer.DecomposerRecipe in project Minechem by iopleke.

the class MinechemRecipes method addUnusedSynthesisRecipes.

private void addUnusedSynthesisRecipes() {
    Iterator decomposerRecipes = DecomposerRecipe.recipes.values().iterator();
    while (decomposerRecipes.hasNext()) {
        DecomposerRecipe nextDecomposerRecipe = (DecomposerRecipe) decomposerRecipes.next();
        if (nextDecomposerRecipe.getInput().getItemDamage() != -1) {
            boolean check = false;
            Iterator synthesisRecipes = SynthesisRecipe.recipes.values().iterator();
            while (true) {
                if (synthesisRecipes.hasNext()) {
                    SynthesisRecipe nextSynthesisRecipe = (SynthesisRecipe) synthesisRecipes.next();
                    if (!Compare.stacksAreSameKind(nextSynthesisRecipe.getOutput(), nextDecomposerRecipe.getInput())) {
                        continue;
                    }
                    check = true;
                }
                if (!check) {
                    ArrayList rawDecomposerRecipe = nextDecomposerRecipe.getOutputRaw();
                    if (rawDecomposerRecipe != null) {
                        if (shouldCreateSynthesis(nextDecomposerRecipe.getInput())) {
                            SynthesisRecipe.add(new SynthesisRecipe(nextDecomposerRecipe.getInput(), false, 100, rawDecomposerRecipe));
                        }
                    }
                }
                break;
            }
        }
    }
}
Also used : SynthesisRecipe(minechem.tileentity.synthesis.SynthesisRecipe) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) DecomposerRecipe(minechem.tileentity.decomposer.DecomposerRecipe)

Example 12 with DecomposerRecipe

use of minechem.tileentity.decomposer.DecomposerRecipe 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 13 with DecomposerRecipe

use of minechem.tileentity.decomposer.DecomposerRecipe 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 14 with DecomposerRecipe

use of minechem.tileentity.decomposer.DecomposerRecipe 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 15 with DecomposerRecipe

use of minechem.tileentity.decomposer.DecomposerRecipe in project Minechem by iopleke.

the class ChemistJournalGui method showRecipesForStack.

public void showRecipesForStack(ItemStack itemstack) {
    currentItemStack = itemstack;
    MinechemItemsRegistration.journal.setActiveStack(itemstack, journalStack);
    ChemistJournalActiveItemMessage message = new ChemistJournalActiveItemMessage(itemstack, player);
    MessageHandler.INSTANCE.sendToServer(message);
    SynthesisRecipe synthesisRecipe = SynthesisRecipeHandler.instance.getRecipeFromOutput(itemstack);
    DecomposerRecipe decomposerRecipe = DecomposerRecipeHandler.instance.getRecipe(itemstack);
    synthesisSlots = new GuiFakeSlot[9];
    decomposerSlots = new GuiFakeSlot[9];
    currentSynthesisRecipe = null;
    currentDecomposerRecipe = null;
    if (synthesisRecipe != null) {
        showSynthesisRecipe(synthesisRecipe);
        currentSynthesisRecipe = synthesisRecipe;
    }
    if (decomposerRecipe != null) {
        showDecomposerRecipe(decomposerRecipe);
        currentDecomposerRecipe = decomposerRecipe;
    }
}
Also used : SynthesisRecipe(minechem.tileentity.synthesis.SynthesisRecipe) DecomposerRecipe(minechem.tileentity.decomposer.DecomposerRecipe) ChemistJournalActiveItemMessage(minechem.network.message.ChemistJournalActiveItemMessage)

Aggregations

DecomposerRecipe (minechem.tileentity.decomposer.DecomposerRecipe)17 ItemStack (net.minecraft.item.ItemStack)10 SynthesisRecipe (minechem.tileentity.synthesis.SynthesisRecipe)8 PotionChemical (minechem.potion.PotionChemical)7 ArrayList (java.util.ArrayList)5 MoleculeEnum (minechem.item.molecule.MoleculeEnum)5 Element (minechem.item.element.Element)4 Molecule (minechem.item.molecule.Molecule)3 DecomposerRecipeSelect (minechem.tileentity.decomposer.DecomposerRecipeSelect)3 Iterator (java.util.Iterator)2 ElementEnum (minechem.item.element.ElementEnum)2 DecomposerRecipeChance (minechem.tileentity.decomposer.DecomposerRecipeChance)2 MapKey (minechem.utils.MapKey)2 SubscribeEvent (cpw.mods.fml.common.eventhandler.SubscribeEvent)1 ILuaContext (dan200.computercraft.api.lua.ILuaContext)1 LuaException (dan200.computercraft.api.lua.LuaException)1 IComputerAccess (dan200.computercraft.api.peripheral.IComputerAccess)1 HashMap (java.util.HashMap)1 List (java.util.List)1 LuaMethod (minechem.computercraft.lua.LuaMethod)1