package gtPlusPlus.xmod.gregtech.loaders.recipe;

import static gtPlusPlus.core.lib.CORE.GTNH;

import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.util.GT_ModHandler;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.item.ModItems;
import gtPlusPlus.core.item.chemistry.GenericChem;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.ELEMENT;
import gtPlusPlus.core.material.nuclear.FLUORIDES;
import gtPlusPlus.core.material.nuclear.NUCLIDE;
import gtPlusPlus.core.recipe.common.CI;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.minecraft.FluidUtils;
import gtPlusPlus.core.util.minecraft.ItemUtils;
import gtPlusPlus.core.util.reflect.AddGregtechRecipe;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;

public class RecipeLoader_Nuclear {



	public static void generate() {
		createRecipes();
		RecipeLoader_LFTR.generate();
		RecipeLoader_NuclearFuelProcessing.generate();	
	}

	private static void createRecipes() {
		autoclave();		
		blastFurnace();
		centrifugeRecipes();
		chemicalBathRecipes();
		chemicalReactorRecipes();
		dehydratorRecipes();
		electroMagneticSeperator();
		fluidExtractorRecipes();
		macerator();
		mixerRecipes();		
		sifter();
	}

	private static void autoclave() {	

		GT_Values.RA.addAutoclaveRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 9),
				FluidUtils.getFluidStack("chlorine", 9 * 4 * 144),
				ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 9),
				0, 
				120 * 20, 
				30);

	}

	private static void blastFurnace() {

		GT_Values.RA.addBlastRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 2),
				ItemUtils.getItemStackOfAmountFromOreDict("dustBerylliumFluoride", 1),
				GT_Values.NF, 
				GT_Values.NF,
				ItemUtils.getItemStackOfAmountFromOreDict("dustLi2BeF4", 3),
				null, 
				60 * 20, 2000, 
				3000);

		GT_Values.RA.addBlastRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 1),
				null, 
				GT_Values.NF,
				GT_Values.NF, 
				ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1),
				null,
				60 * 20,
				340, 
				300);

	}


	private static void centrifugeRecipes() {				

		//Process Used Fuel Rods for Krypton

		//Uranium
		GT_Values.RA.addCentrifugeRecipe(
				CI.getNumberedCircuit(20),
				ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumSimpledepleted", 8),
				GT_Values.NF,
				ELEMENT.getInstance().KRYPTON.getFluid(60),
				ItemList.IC2_Fuel_Rod_Empty.get(8),
				ELEMENT.getInstance().URANIUM238.getDust(2),
				ELEMENT.getInstance().URANIUM232.getSmallDust(1),
				ELEMENT.getInstance().URANIUM233.getSmallDust(1),
				ELEMENT.getInstance().URANIUM235.getSmallDust(1),
				ELEMENT.getInstance().PLUTONIUM239.getTinyDust(1),
				new int[] { 0, 0, 1000, 1000, 1000, 500 }, 500 * 20, 4000);
		//Mox
		GT_Values.RA.addCentrifugeRecipe(
				CI.getNumberedCircuit(20),
				ItemUtils.getItemStackFromFQRN("IC2:reactorMOXSimpledepleted", 8),
				GT_Values.NF,
				ELEMENT.getInstance().KRYPTON.getFluid(90),
				ItemList.IC2_Fuel_Rod_Empty.get(8),
				ELEMENT.getInstance().PLUTONIUM244.getDust(2),
				ELEMENT.getInstance().PLUTONIUM241.getTinyDust(1),
				ELEMENT.getInstance().PLUTONIUM239.getTinyDust(1),
				ELEMENT.getInstance().PLUTONIUM238.getTinyDust(1),
				ELEMENT.getInstance().PLUTONIUM239.getTinyDust(1),
				new int[] { 0, 0, 500, 500, 500, 500 }, 750 * 20, 4000);

		//Thorium
		GT_Values.RA.addCentrifugeRecipe(
				CI.getNumberedCircuit(20),
				ItemList.Depleted_Thorium_1.get(8),
				GT_Values.NF,
				ELEMENT.getInstance().KRYPTON.getFluid(30),
				ItemList.IC2_Fuel_Rod_Empty.get(8),
				ELEMENT.getInstance().THORIUM.getDust(2),
				ELEMENT.getInstance().THORIUM232.getDust(1),
				ELEMENT.getInstance().LUTETIUM.getSmallDust(1),
				ELEMENT.getInstance().POLONIUM.getSmallDust(1),
				ELEMENT.getInstance().THALLIUM.getTinyDust(1),
				new int[] { 0, 0, 5000, 5000, 5000, 2500 }, 250 * 20, 4000);

	}


	private static void chemicalBathRecipes() {

		int[] chances = {9000, 6000, 3000};
		GT_Values.RA.addChemicalBathRecipe(ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 12),
				FluidUtils.getFluidStack("chlorine", 2400),
				ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3),
				ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 4),
				ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 5), 
				chances, 
				30 * 20, 
				480);

		chances = new int[]{9000, 3000, 1000};		
		GT_Values.RA.addChemicalBathRecipe(ItemUtils.getItemStackOfAmountFromOreDict("dustRutile", 5),
				FluidUtils.getFluidStack("chlorine", 4000),
				ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3),
				ItemUtils.getItemStackOfAmountFromOreDict("dustTitanium", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1),
				chances, 
				30 * 20, 
				1024);

		GT_Values.RA.addChemicalBathRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 10),
				FluidUtils.getFluidStack("hydrofluoricacid", 10 * 144),
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 10), 
				null, 
				null,
				new int[] {},
				90 * 20,
				500);

	}


	private static void chemicalReactorRecipes() {

		GT_Values.RA.addChemicalRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 5), // Input
				ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5), // Input
				null, // Fluid Input
				null, // Fluid Output
				ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 10),
				600 * 20);

		GT_Values.RA.addChemicalRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 5), // Input
				null, // Input Stack 2
				FluidUtils.getFluidStack("hydrofluoricacid", 5 * 144),
				FluidUtils.getFluidStack("water", 5 * 144), // Fluid Output
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 5),
				600 * 20);

		GT_Values.RA.addChemicalRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 1), null,
				FluidUtils.getFluidStack("sulfuricacid", 144 * 8),
				FluidUtils.getFluidStack("sulfuriclithium", 144 * 2),
				ItemUtils.getItemStackOfAmountFromOreDict("dustSmallLithium7", 1),
				20 * 20);

		GT_Values.RA.addChemicalRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 16), 
				FluidUtils.getFluidStack("water", 1000),
				FluidUtils.getFluidStack("lithiumhydroxide", 144 * 4),
				CI.emptyCells(1), 
				300 * 20);

		// LFTR Fuel Related Compounds
		if (GTNH) {
			// Hydroxide
			AddGregtechRecipe.addChemicalRecipeForBasicMachineOnly(
					ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 1),
					ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 1), GT_Values.NF,
					FluidUtils.getFluidStack("hydroxide", 2000),
					CI.emptyCells(2), GT_Values.NI, 8 * 20, 30);
			// Beryllium Hydroxide
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("dustBeryllium", 7),
					ItemUtils.getGregtechCircuit(3), FluidUtils.getFluidStack("hydroxide", 1000),
					FluidUtils.getFluidStack("berylliumhydroxide", 2000), GT_Values.NI, 8 * 20);
			// Ammonium Bifluoride
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1),
					ItemUtils.getGregtechCircuit(3), FluidUtils.getFluidStack("ammonium", 1000),
					FluidUtils.getFluidStack("ammoniumbifluoride", 2000),
					CI.emptyCells(1), 26 * 20);
			// Ammonium
			AddGregtechRecipe.addChemicalRecipeForBasicMachineOnly(
					ItemUtils.getItemStackOfAmountFromOreDict("cellAmmonia", 1),
					ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 1), GT_Values.NF,
					FluidUtils.getFluidStack("ammonium", 2000),
					CI.emptyCells(2), GT_Values.NI, 20 * 20, 30);
		}

		if (!GTNH) {
			// Hydroxide
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 1),
					ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 1), GT_Values.NF,
					FluidUtils.getFluidStack("hydroxide", 2000),
					CI.emptyCells(2), 8 * 20);
			// Ammonia (moved to GTNH core mod)
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 3),
					ItemUtils.getItemStackOfAmountFromOreDict("dustMagnetite", 0),
					FluidUtils.getFluidStack("nitrogen", 1000), FluidUtils.getFluidStack("ammonia", 1000),
					CI.emptyCells(3), 14 * 20);
			// Beryllium Hydroxide
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("dustBeryllium", 7), GT_Values.NI,
					FluidUtils.getFluidStack("hydroxide", 1000), FluidUtils.getFluidStack("berylliumhydroxide", 2000),
					GT_Values.NI, 8 * 20);
			// Ammonium Bifluoride
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1),
					GT_Values.NI, FluidUtils.getFluidStack("ammonium", 1000),
					FluidUtils.getFluidStack("ammoniumbifluoride", 2000),
					CI.emptyCells(1), 26 * 20);
			// Ammonium
			GT_Values.RA.addChemicalRecipe(ItemUtils.getItemStackOfAmountFromOreDict("cellAmmonia", 1),
					ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 1), GT_Values.NF,
					FluidUtils.getFluidStack("ammonium", 2000),
					CI.emptyCells(2), 20 * 20);
		}


		//Technetium
		GT_Values.RA.addChemicalRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustTechnetium99", 1), 
				null,
				FluidUtils.getFluidStack("sulfuricacid", 1000), 
				FluidUtils.getFluidStack("sulfuricacid", 144 * 2),
				ItemUtils.getItemStackOfAmountFromOreDict("dustTechnetium", 1),
				100 * 20);

	}

	private static void dehydratorRecipes() {

		// Makes 7-Lithium
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] {
						CI.getNumberedAdvancedCircuit(14),
						ItemUtils.getItemStackOfAmountFromOreDict("cellSulfuricLithium", 1)
				}, 
				FluidUtils.getFluidStack("sulfuriclithium", 440), 
				null, 
				new ItemStack[] {
						CI.emptyCells(1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustSulfur", 3),
						ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustSodium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 4)						
				},
				new int[] {10000, 10000, 10000, 10000, 10000}, 
				30 * 20,
				30);

		// Makes Lithium Carbonate	
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] { 
						CI.emptyCells(12), 
						ItemUtils.getItemStackOfAmountFromOreDict("dustLepidolite", 20) 
				}, // Item input (Array, up to 2)
				FluidUtils.getFluidStack("sulfuricacid", 10000), 
				FluidUtils.getFluidStack("sulfuriclithium", 10000),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustPotassium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustAluminium", 4),
						ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 10),
						ItemUtils.getItemStackOfAmountFromOreDict("cellFluorine", 2),
						ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 3), // LithiumCarbonate
				}, // Output Array of Items - Upto 9,
				new int[] { 10000, 10000, 10000, 10000, 10000 },
				75 * 20, // Time in ticks
				1000); // EU

		// Makes Uranium Tetrafluoride
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] { 
						CI.getNumberedAdvancedCircuit(13),
						ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 10)
				}, 
				FluidUtils.getFluidStack("molten.uraniumtetrafluoride", 1440), 
				null, 
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustUraniumTetrafluoride", 10),
						CI.emptyCells(10) 
				}, 
				new int[] { 10000 }, 
				150 * 20, // Time in ticks
				2000); // EU

		// Makes Uranium Hexafluoride
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] { 
						CI.getNumberedAdvancedCircuit(12),
						ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 10)
				}, // Item
				FluidUtils.getFluidStack("molten.uraniumhexafluoride", 1440), // Fluid
				null, // Fluid output (slot 2)
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustUraniumHexafluoride", 10),
						CI.emptyCells(10) }, // Output
				new int[] { 10000 }, 
				300 * 20, // Time in ticks
				4000); // EU

		// Calcium Hydroxide
		if ((ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1)))	|| LoadedMods.IHL) {
			CORE.RA.addDehydratorRecipe(
					new ItemStack[] { 
							CI.getNumberedBioCircuit(20),
							ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 10) 
					},
					FluidUtils.getFluidStack("water", 10000),
					null, // Fluid output (slot 2)
					new ItemStack[] { 
							ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 20) 
					}, // Output
					new int[] { 10000 }, 
					120 * 20, // Time in ticks
					120); // EU	
		}
		else {			
			Logger.INFO("[dustCalciumHydroxide] FAILED TO LOAD RECIPE");
			if (!ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1))) {
				Logger.INFO("Could not find dustQuicklime, cannot make dustCalciumHydroxide.");
			}
			else if (!LoadedMods.IHL) {
				Logger.INFO("IHL not loaded.");					
			}
		}

		// 2 LiOH + CaCO3
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] {
						CI.getNumberedAdvancedCircuit(20),
						ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 5)
				}, // Item
				null, // Fluid input (slot 1)
				null, // Fluid output (slot 2)
				new ItemStack[] {
						ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 2),
						ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumCarbonate", 3) 
				}, // Output
				new int[] { 10000, 10000 },
				120 * 20, // Time in ticks
				1000); // EU

		// LiOH Liquid to Dust
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] {
						CI.getNumberedAdvancedCircuit(22)
				},
				FluidUtils.getFluidStack("lithiumhydroxide", 144),
				null,
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 1)
				},
				new int[] { 10000 },
				1 * 20, // Time in ticks
				64); // EU

		// Zirconium Chloride -> TetraFluoride
		FluidStack aHydrogenChloride = new FluidStack(GenericChem.HydrochloricAcid, 9000);
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] { 
						CI.getNumberedAdvancedCircuit(11),
						ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 9),
				}, // Item
				FluidUtils.getFluidStack("hydrofluoricacid", 9 * 144), 
				aHydrogenChloride, 
				new ItemStack[] {
						FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(9)
				},
				new int[] { 10000 }, 
				120 * 20, // Time in ticks
				500); // EU

		// Zirconium Chloride -> TetraFluoride
		FluidStack aGregtechHydro = FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 1);
		if (aGregtechHydro != null || Utils.getGregtechVersionAsInt() >= 50929) {
			CORE.RA.addDehydratorRecipe(
					new ItemStack[] { 
							CI.getNumberedAdvancedCircuit(10),
							ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 9)
					},
					FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 18 * 144),
					aHydrogenChloride,
					new ItemStack[] { 
							FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(9) 
					},						
					new int[] { 10000 },
					240 * 20, // Time in ticks
					500); // EU
		}

		// Be(OH)2 + 2 (NH4)HF2 → (NH4)2BeF4 + 2 H2O
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] {
						CI.getNumberedAdvancedCircuit(6),
						ItemUtils.getItemStackOfAmountFromOreDict("cellAmmoniumBifluoride", 4)
				}, 
				FluidUtils.getFluidStack("berylliumhydroxide", 2000), // Fluid input (slot 1)
				FluidUtils.getFluidStack("ammoniumtetrafluoroberyllate", 6000), 
				new ItemStack[] {
						ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 4)
				}, 
				new int[] { 10000}, 
				32 * 20, // Time in ticks
				64); // EU

		// (NH4)2BeF4 → 2 NH3 + 2 HF + BeF2
		CORE.RA.addDehydratorRecipe(
				new ItemStack[] {
						CI.getNumberedAdvancedCircuit(17),
						CI.emptyCells(5)
				}, 
				FluidUtils.getFluidStack("ammoniumtetrafluoroberyllate", 5000), 
				null, 
				new ItemStack[] {
						ItemUtils.getItemStackOfAmountFromOreDict("cellAmmonia", 2),
						ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 2),
						ItemUtils.getItemStackOfAmountFromOreDict("cellBerylliumFluoride", 1)						
				},
				new int[] {10000, 10000, 10000}, 
				5 * 60 * 20,
				120);


	}

	private static void electroMagneticSeperator() {

		// Zirconium
		GT_Values.RA.addElectromagneticSeparatorRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedBauxite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustBauxite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustSmallRutile", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("nuggetZirconium", 1), 
				new int[] { 10000, 2500, 4000 },
				20 * 20, 
				24);

		// Zircon
		GT_Values.RA.addElectromagneticSeparatorRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMagnetite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustMagnetite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1), 
				new int[] { 10000, 1250, 2500 },
				20 * 20, 
				24);
		GT_Values.RA.addElectromagneticSeparatorRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1), 
				new int[] { 10000, 1250, 2500 },
				20 * 20, 
				24);

	}

	private static void fluidExtractorRecipes() {

		//FLiBe fuel
		CORE.RA.addFluidExtractionRecipe(ItemUtils.getItemStackOfAmountFromOreDict("dustLi2BeF4", 1),
				new FluidStack(ModItems.fluidFLiBeSalt, 144), 100, 500);
		//LFTR Fuel 1
		CORE.RA.addFluidExtractionRecipe(NUCLIDE.LiFBeF2ZrF4U235.getDust(1),
				NUCLIDE.LiFBeF2ZrF4U235.getFluid(144), 250, 1000);
		CORE.RA.addFluidExtractionRecipe(NUCLIDE.LiFBeF2ZrF4UF4.getDust(1),
				NUCLIDE.LiFBeF2ZrF4UF4.getFluid(144), 150, 2000);
		CORE.RA.addFluidExtractionRecipe(NUCLIDE.LiFBeF2ThF4UF4.getDust(1),
				NUCLIDE.LiFBeF2ThF4UF4.getFluid(144), 200, 1500);

		//ZIRCONIUM_TETRAFLUORIDE
		CORE.RA.addFluidExtractionRecipe(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(1),
				FluidUtils.getFluidStack(ModItems.fluidZrF4, 144), 200, 512+256);

	}

	private static void macerator() {	

		GT_ModHandler.addPulverisationRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 1),
				ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 1));

	}

	private static void mixerRecipes() {		

		GT_Values.RA.addMixerRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("dustUranium233", 4),
				ItemUtils.getItemStackOfAmountFromOreDict("dustUranium235", 1),
				null, 
				null,
				FluidUtils.getFluidStack("hydrofluoricacid", 144 * 5),
				FluidUtils.getFluidStack("molten.uraniumtetrafluoride", 144 * 5), 
				null,
				3000, 
				500);

	}


	private static void sifter() {		

		// Zirconium
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedIlmenite", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustIron", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyWroughtIron", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1) },
				new int[] { 5000, 2500, 1000, 1000, 300, 300 }, 
				20 * 30, 
				500);
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedTin", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZinc", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1) },
				new int[] { 10000, 5000, 1500, 1000, 500, 500 }, 
				20 * 30, 
				500);
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyTin", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1) },
				new int[] { 10000, 5000, 1500, 1000, 500, 500 }, 
				20 * 30, 
				500);

		// Radium
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUranium", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyLead", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1) },
				new int[] { 10000, 5000, 1000, 500, 500, 500 }, 
				20 * 30, 
				500);
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUraninite", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustUraninite", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyUranium", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1) },
				new int[] { 10000, 5000, 500, 250, 250, 250 }, 
				20 * 30, 
				500);
		GT_Values.RA.addSifterRecipe(
				ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedPitchblende", 1),
				new ItemStack[] { 
						ItemUtils.getItemStackOfAmountFromOreDict("dustPitchblende", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustTinyLead", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1),
						ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1) },
				new int[] { 10000, 5000, 500, 250, 250, 250 }, 
				20 * 30, 
				500);
	}

}