From 33df1d3319df1b7e4b8c1dd32a7a7a55148069aa Mon Sep 17 00:00:00 2001
From: Dragon2488 <Zolotuhinnikita2012@gmail.com>
Date: Sat, 16 Jul 2016 16:44:54 +0700
Subject: [PATCH 1/5] Implemented Lightning Rod, improved ore dictionary
 integration for dusts, nuggets and plates.   Plates now registers
 automatically for every gem and ingot in TR. (#673)

---
 .../blocks/generator/BlockLightningRod.java   |  34 +--
 .../techreborn/config/ConfigTechReborn.java   |   5 +
 src/main/java/techreborn/init/ModBlocks.java  |  12 +-
 src/main/java/techreborn/init/ModItems.java   | 253 ------------------
 src/main/java/techreborn/init/OreDict.java    | 169 ++++++++----
 .../java/techreborn/items/ItemIngots.java     |   2 +-
 .../java/techreborn/items/ItemPlates.java     |  24 +-
 .../tiles/generator/TileLightningRod.java     | 108 ++++++++
 .../java/techreborn/utils/OreDictUtils.java   |  10 +
 .../java/techreborn/utils/RecipeUtils.java    |  13 +-
 .../techreborn/utils/StackWIPHandler.java     |   1 -
 .../techreborn/blockstates/lightningrod.json  |  25 +-
 .../generators/lightning_rod_side_off.png     | Bin 739 -> 530 bytes
 .../generators/lightning_rod_side_on.png      | Bin 708 -> 532 bytes
 .../generators/lightning_rod_top_off.png      | Bin 622 -> 0 bytes
 .../generators/lightning_rod_top_on.png       | Bin 608 -> 0 bytes
 16 files changed, 288 insertions(+), 368 deletions(-)
 create mode 100644 src/main/java/techreborn/tiles/generator/TileLightningRod.java
 delete mode 100644 src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_off.png
 delete mode 100644 src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_on.png

diff --git a/src/main/java/techreborn/blocks/generator/BlockLightningRod.java b/src/main/java/techreborn/blocks/generator/BlockLightningRod.java
index cce00b3c9..e43931b49 100644
--- a/src/main/java/techreborn/blocks/generator/BlockLightningRod.java
+++ b/src/main/java/techreborn/blocks/generator/BlockLightningRod.java
@@ -1,43 +1,23 @@
 package techreborn.blocks.generator;
 
 import net.minecraft.block.material.Material;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
 import reborncore.common.blocks.BlockMachineBase;
-import reborncore.common.blocks.IAdvancedRotationTexture;
 import techreborn.client.TechRebornCreativeTab;
+import techreborn.tiles.generator.TileLightningRod;
 
-public class BlockLightningRod extends BlockMachineBase implements IAdvancedRotationTexture
-{
+public class BlockLightningRod extends BlockMachineBase {
 
-	private final String prefix = "techreborn:blocks/machine/generators/";
-
-	public BlockLightningRod(Material material)
-	{
+	public BlockLightningRod(Material material) {
 		super();
 		setUnlocalizedName("techreborn.lightningrod");
 		setCreativeTab(TechRebornCreativeTab.instance);
 	}
 
 	@Override
-	public String getFront(boolean isActive)
-	{
-		return isActive ? prefix + "lightning_rod_side_on" : prefix + "lightning_rod_side_off";
+	public TileEntity createNewTileEntity(World worldObj, int meta) {
+		return new TileLightningRod();
 	}
 
-	@Override
-	public String getSide(boolean isActive)
-	{
-		return isActive ? prefix + "lightning_rod_side_on" : prefix + "lightning_rod_side_off";
-	}
-
-	@Override
-	public String getTop(boolean isActive)
-	{
-		return isActive ? prefix + "lightning_rod_top_on" : prefix + "lightning_rod_top_off";
-	}
-
-	@Override
-	public String getBottom(boolean isActive)
-	{
-		return prefix + "generator_machine_bottom";
-	}
 }
diff --git a/src/main/java/techreborn/config/ConfigTechReborn.java b/src/main/java/techreborn/config/ConfigTechReborn.java
index fe45961b5..65e5a21c8 100644
--- a/src/main/java/techreborn/config/ConfigTechReborn.java
+++ b/src/main/java/techreborn/config/ConfigTechReborn.java
@@ -24,6 +24,7 @@ public class ConfigTechReborn
 	public static boolean UninsulatedElectocutionDamage;
 	public static boolean ScrapboxDispenser;
 	// Power
+	public static int LightningRodChance;
 	public static int ThermalGeneratorOutput;
 	public static int CentrifugeInputTick;
 	public static int DragonEggSiphonerOutput;
@@ -202,6 +203,10 @@ public class ConfigTechReborn
 				"FortuneSecondaryOreMultiplierPerLevel").getDouble();
 
 		// Power
+		LightningRodChance = config
+				.get(CATEGORY_POWER, "Lightning Rod light struck chance", 24, "Set the chance of light strike (0-70)", 0, 70)
+				.getInt();
+
 		ThermalGeneratorOutput = config
 				.get(CATEGORY_POWER, "ThermalGenerator Max Output", 60, "Set the max output for the ThermalGenerator")
 				.getInt();
diff --git a/src/main/java/techreborn/init/ModBlocks.java b/src/main/java/techreborn/init/ModBlocks.java
index dc3b371c9..3ce5e3f26 100644
--- a/src/main/java/techreborn/init/ModBlocks.java
+++ b/src/main/java/techreborn/init/ModBlocks.java
@@ -72,16 +72,7 @@ import techreborn.itemblocks.ItemBlockStorage;
 import techreborn.itemblocks.ItemBlockStorage2;
 import techreborn.tiles.*;
 import techreborn.tiles.fusionReactor.TileEntityFusionController;
-import techreborn.tiles.generator.TileDieselGenerator;
-import techreborn.tiles.generator.TileDragonEggSiphoner;
-import techreborn.tiles.generator.TileGasTurbine;
-import techreborn.tiles.generator.TileGenerator;
-import techreborn.tiles.generator.TileHeatGenerator;
-import techreborn.tiles.generator.TileSemifluidGenerator;
-import techreborn.tiles.generator.TileSolarPanel;
-import techreborn.tiles.generator.TileThermalGenerator;
-import techreborn.tiles.generator.TileWaterMill;
-import techreborn.tiles.generator.TileWindMill;
+import techreborn.tiles.generator.*;
 import techreborn.tiles.idsu.TileIDSU;
 import techreborn.tiles.lesu.TileLesu;
 import techreborn.tiles.lesu.TileLesuStorage;
@@ -334,6 +325,7 @@ public class ModBlocks
 
 		LightningRod = new BlockLightningRod(Material.ROCK);
 		registerBlock(LightningRod, "lightningrod");
+		GameRegistry.registerTileEntity(TileLightningRod.class, "TileLightningRodTR");
 
 		heatGenerator = new BlockHeatGenerator(Material.ROCK);
 		registerBlock(heatGenerator, "heatgenerator");
diff --git a/src/main/java/techreborn/init/ModItems.java b/src/main/java/techreborn/init/ModItems.java
index 0e8f330eb..ce6aa8b8c 100644
--- a/src/main/java/techreborn/init/ModItems.java
+++ b/src/main/java/techreborn/init/ModItems.java
@@ -307,8 +307,6 @@ public class ModItems
 
 		Core.logHelper.info("TechReborns Items Loaded");
 
-		registerOreDict();
-
 		BlockMachineBase.advancedMachineStack = BlockMachineFrame.getFrameByName("advancedMachine", 1);
 		BlockMachineBase.machineStack = BlockMachineFrame.getFrameByName("machine", 1);
 	}
@@ -318,255 +316,4 @@ public class ModItems
 		GameRegistry.register(item);
 	}
 
-	public static void registerOreDict()
-	{
-
-		OreUnifier.registerOre("gemRuby", ItemGems.getGemByName("ruby"));
-		OreUnifier.registerOre("gemSapphire", ItemGems.getGemByName("sapphire"));
-		OreUnifier.registerOre("gemPeridot", ItemGems.getGemByName("peridot"));
-		OreUnifier.registerOre("gemRedGarnet", ItemGems.getGemByName("redGarnet"));
-		OreUnifier.registerOre("gemYellowGarnet", ItemGems.getGemByName("yellowGarnet"));
-
-		// Dusts
-		OreUnifier.registerOre("dustAlmandine", ItemDusts.getDustByName("almandine"));
-		OreUnifier.registerOre("dustAluminum", ItemDusts.getDustByName("aluminum"));
-		OreUnifier.registerOre("dustAluminium", ItemDusts.getDustByName("aluminum"));
-		OreUnifier.registerOre("dustAndesite", ItemDusts.getDustByName("andesite"));
-		OreUnifier.registerOre("dustAndradite", ItemDusts.getDustByName("andradite"));
-		OreUnifier.registerOre("dustAsh", ItemDusts.getDustByName("ashes"));
-		OreUnifier.registerOre("dustBasalt", ItemDusts.getDustByName("basalt"));
-		OreUnifier.registerOre("dustBauxite", ItemDusts.getDustByName("bauxite"));
-		OreUnifier.registerOre("dustBrass", ItemDusts.getDustByName("brass"));
-		OreUnifier.registerOre("dustBronze", ItemDusts.getDustByName("bronze"));
-		OreUnifier.registerOre("dustCalcite", ItemDusts.getDustByName("calcite"));
-		OreUnifier.registerOre("dustCharcoal", ItemDusts.getDustByName("charcoal"));
-		OreUnifier.registerOre("dustChrome", ItemDusts.getDustByName("chrome"));
-		OreUnifier.registerOre("dustCinnabar", ItemDusts.getDustByName("cinnabar"));
-		OreUnifier.registerOre("dustClay", ItemDusts.getDustByName("clay"));
-		OreUnifier.registerOre("dustCoal", ItemDusts.getDustByName("coal"));
-		OreUnifier.registerOre("dustCopper", ItemDusts.getDustByName("copper"));
-		OreUnifier.registerOre("dustDarkAsh", ItemDusts.getDustByName("darkAshes"));
-		OreUnifier.registerOre("dustDiamond", ItemDusts.getDustByName("diamond"));
-		OreUnifier.registerOre("dustDiorite", ItemDusts.getDustByName("diorite"));
-		OreUnifier.registerOre("dustElectrum", ItemDusts.getDustByName("electrum"));
-		OreUnifier.registerOre("dustEmerald", ItemDusts.getDustByName("emerald"));
-		OreUnifier.registerOre("dustEnderEye", ItemDusts.getDustByName("enderEye"));
-		OreUnifier.registerOre("dustEnderPearl", ItemDusts.getDustByName("enderPearl"));
-		OreUnifier.registerOre("dustEndstone", ItemDusts.getDustByName("endstone"));
-		OreUnifier.registerOre("dustFlint", ItemDusts.getDustByName("flint"));
-		OreUnifier.registerOre("dustGalena", ItemDusts.getDustByName("galena"));
-		OreUnifier.registerOre("dustGold", ItemDusts.getDustByName("gold"));
-		OreUnifier.registerOre("dustGranite", ItemDusts.getDustByName("granite"));
-		OreUnifier.registerOre("dustGrossular", ItemDusts.getDustByName("grossular"));
-		OreUnifier.registerOre("dustInvar", ItemDusts.getDustByName("invar"));
-		OreUnifier.registerOre("dustIron", ItemDusts.getDustByName("iron"));
-		OreUnifier.registerOre("dustLapis", ItemDusts.getDustByName("lazurite"));
-		OreUnifier.registerOre("dustLazurite", ItemDusts.getDustByName("lazurite"));
-		OreUnifier.registerOre("dustLead", ItemDusts.getDustByName("lead"));
-		OreUnifier.registerOre("dustMagnesium", ItemDusts.getDustByName("magnesium"));
-		OreUnifier.registerOre("dustManganese", ItemDusts.getDustByName("manganese"));
-		OreUnifier.registerOre("dustMarble", ItemDusts.getDustByName("marble"));
-		OreUnifier.registerOre("dustNetherrack", ItemDusts.getDustByName("netherrack"));
-		OreUnifier.registerOre("dustNickel", ItemDusts.getDustByName("nickel"));
-		OreUnifier.registerOre("dustObsidian", ItemDusts.getDustByName("obsidian"));
-		OreUnifier.registerOre("dustPeridot", ItemDusts.getDustByName("peridot"));
-		OreUnifier.registerOre("dustPhosphorous", ItemDusts.getDustByName("phosphorous"));
-		OreUnifier.registerOre("dustPlatinum", ItemDusts.getDustByName("platinum"));
-		OreUnifier.registerOre("dustPyrite", ItemDusts.getDustByName("pyrite"));
-		OreUnifier.registerOre("dustPyrope", ItemDusts.getDustByName("pyrope"));
-		OreUnifier.registerOre("dustRedGarnet", ItemDusts.getDustByName("redGarnet"));
-		OreUnifier.registerOre("dustRuby", ItemDusts.getDustByName("ruby"));
-		OreUnifier.registerOre("dustSaltpeter", ItemDusts.getDustByName("saltpeter"));
-		OreUnifier.registerOre("dustSapphire", ItemDusts.getDustByName("sapphire"));
-		OreUnifier.registerOre("dustSilver", ItemDusts.getDustByName("silver"));
-		OreUnifier.registerOre("dustSodalite", ItemDusts.getDustByName("sodalite"));
-		OreUnifier.registerOre("dustSpessartine", ItemDusts.getDustByName("spessartine"));
-		OreUnifier.registerOre("dustSphalerite", ItemDusts.getDustByName("sphalerite"));
-		OreUnifier.registerOre("dustSteel", ItemDusts.getDustByName("steel"));
-		OreUnifier.registerOre("dustSulfur", ItemDusts.getDustByName("sulfur"));
-		OreUnifier.registerOre("dustCopper", ItemDusts.getDustByName("copper"));
-		OreUnifier.registerOre("dustTin", ItemDusts.getDustByName("tin"));
-		OreUnifier.registerOre("dustTitanium", ItemDusts.getDustByName("titanium"));
-		OreUnifier.registerOre("dustTungsten", ItemDusts.getDustByName("tungsten"));
-		OreUnifier.registerOre("dustUvarovite", ItemDusts.getDustByName("uvarovite"));
-		OreUnifier.registerOre("dustYellowGarnet", ItemDusts.getDustByName("yellowGarnet"));
-		OreUnifier.registerOre("dustZinc", ItemDusts.getDustByName("zinc"));
-		OreUnifier.registerOre("dustOlivine", ItemDusts.getDustByName("olivine"));
-		OreUnifier.registerOre("dustWood", ItemDusts.getDustByName("sawDust"));
-		OreUnifier.registerOre("pulpWood", ItemDusts.getDustByName("sawDust"));
-
-		// Small Dusts
-		OreUnifier.registerOre("dustAlmandine", ItemDusts.getDustByName("almandine"));
-		OreUnifier.registerOre("dustAluminum", ItemDusts.getDustByName("aluminum"));
-		OreUnifier.registerOre("dustAluminium", ItemDusts.getDustByName("aluminum"));
-		OreUnifier.registerOre("dustAndesite", ItemDusts.getDustByName("andesite"));
-		OreUnifier.registerOre("dustAndradite", ItemDusts.getDustByName("andradite"));
-		OreUnifier.registerOre("dustAsh", ItemDusts.getDustByName("ashes"));
-		OreUnifier.registerOre("dustBasalt", ItemDusts.getDustByName("basalt"));
-		OreUnifier.registerOre("dustBauxite", ItemDusts.getDustByName("bauxite"));
-		OreUnifier.registerOre("dustBrass", ItemDusts.getDustByName("brass"));
-		OreUnifier.registerOre("dustBronze", ItemDusts.getDustByName("bronze"));
-		OreUnifier.registerOre("dustCalcite", ItemDusts.getDustByName("calcite"));
-		OreUnifier.registerOre("dustCharcoal", ItemDusts.getDustByName("charcoal"));
-		OreUnifier.registerOre("dustChrome", ItemDusts.getDustByName("chrome"));
-		OreUnifier.registerOre("dustCinnabar", ItemDusts.getDustByName("cinnabar"));
-		OreUnifier.registerOre("dustClay", ItemDusts.getDustByName("clay"));
-		OreUnifier.registerOre("dustCoal", ItemDusts.getDustByName("coal"));
-		OreUnifier.registerOre("dustCopper", ItemDusts.getDustByName("copper"));
-		OreUnifier.registerOre("dustDarkAsh", ItemDusts.getDustByName("darkAshes"));
-		OreUnifier.registerOre("dustDiamond", ItemDusts.getDustByName("diamond"));
-		OreUnifier.registerOre("dustDiorite", ItemDusts.getDustByName("diorite"));
-		OreUnifier.registerOre("dustElectrum", ItemDusts.getDustByName("electrum"));
-		OreUnifier.registerOre("dustEmerald", ItemDusts.getDustByName("emerald"));
-		OreUnifier.registerOre("dustEnderEye", ItemDusts.getDustByName("enderEye"));
-		OreUnifier.registerOre("dustEnderPearl", ItemDusts.getDustByName("enderPearl"));
-		OreUnifier.registerOre("dustEndstone", ItemDusts.getDustByName("endstone"));
-		OreUnifier.registerOre("dustFlint", ItemDusts.getDustByName("flint"));
-		OreUnifier.registerOre("dustGalena", ItemDusts.getDustByName("galena"));
-		OreUnifier.registerOre("dustGold", ItemDusts.getDustByName("gold"));
-		OreUnifier.registerOre("dustGranite", ItemDusts.getDustByName("granite"));
-		OreUnifier.registerOre("dustGrossular", ItemDusts.getDustByName("grossular"));
-		OreUnifier.registerOre("dustInvar", ItemDusts.getDustByName("invar"));
-		OreUnifier.registerOre("dustIron", ItemDusts.getDustByName("iron"));
-		OreUnifier.registerOre("dustLapis", ItemDusts.getDustByName("lazurite"));
-		OreUnifier.registerOre("dustLazurite", ItemDusts.getDustByName("lazurite"));
-		OreUnifier.registerOre("dustLead", ItemDusts.getDustByName("lead"));
-		OreUnifier.registerOre("dustMagnesium", ItemDusts.getDustByName("magnesium"));
-		OreUnifier.registerOre("dustManganese", ItemDusts.getDustByName("manganese"));
-		OreUnifier.registerOre("dustMarble", ItemDusts.getDustByName("marble"));
-		OreUnifier.registerOre("dustNetherrack", ItemDusts.getDustByName("netherrack"));
-		OreUnifier.registerOre("dustNickel", ItemDusts.getDustByName("nickel"));
-		OreUnifier.registerOre("dustObsidian", ItemDusts.getDustByName("obsidian"));
-		OreUnifier.registerOre("dustPeridot", ItemDusts.getDustByName("peridot"));
-		OreUnifier.registerOre("dustPhosphorous", ItemDusts.getDustByName("phosphorous"));
-		OreUnifier.registerOre("dustPlatinum", ItemDusts.getDustByName("platinum"));
-		OreUnifier.registerOre("dustPyrite", ItemDusts.getDustByName("pyrite"));
-		OreUnifier.registerOre("dustPyrope", ItemDusts.getDustByName("pyrope"));
-		OreUnifier.registerOre("dustRedGarnet", ItemDusts.getDustByName("redGarnet"));
-		OreUnifier.registerOre("dustRuby", ItemDusts.getDustByName("ruby"));
-		OreUnifier.registerOre("dustSaltpeter", ItemDusts.getDustByName("saltpeter"));
-		OreUnifier.registerOre("dustSapphire", ItemDusts.getDustByName("sapphire"));
-		OreUnifier.registerOre("dustSilver", ItemDusts.getDustByName("silver"));
-		OreUnifier.registerOre("dustSodalite", ItemDusts.getDustByName("sodalite"));
-		OreUnifier.registerOre("dustSpessartine", ItemDusts.getDustByName("spessartine"));
-		OreUnifier.registerOre("dustSphalerite", ItemDusts.getDustByName("sphalerite"));
-		OreUnifier.registerOre("dustSteel", ItemDusts.getDustByName("steel"));
-		OreUnifier.registerOre("dustSulfur", ItemDusts.getDustByName("sulfur"));
-		OreUnifier.registerOre("dustCopper", ItemDusts.getDustByName("copper"));
-		OreUnifier.registerOre("dustTin", ItemDusts.getDustByName("tin"));
-		OreUnifier.registerOre("dustTitanium", ItemDusts.getDustByName("titanium"));
-		OreUnifier.registerOre("dustTungsten", ItemDusts.getDustByName("tungsten"));
-		OreUnifier.registerOre("dustUvarovite", ItemDusts.getDustByName("uvarovite"));
-		OreUnifier.registerOre("dustYellowGarnet", ItemDusts.getDustByName("yellowGarnet"));
-		OreUnifier.registerOre("dustZinc", ItemDusts.getDustByName("zinc"));
-		OreUnifier.registerOre("dustOlivine", ItemDusts.getDustByName("olivine"));
-		OreUnifier.registerOre("pulpWood", ItemDusts.getDustByName("sawDust"));
-
-		// Ingots
-		OreUnifier.registerOre("ingotAluminum", ItemIngots.getIngotByName("aluminum"));
-		OreUnifier.registerOre("ingotAluminium", ItemIngots.getIngotByName("aluminum"));
-		OreUnifier.registerOre("ingotBrass", ItemIngots.getIngotByName("brass"));
-		OreUnifier.registerOre("ingotBronze", ItemIngots.getIngotByName("bronze"));
-		OreUnifier.registerOre("ingotChrome", ItemIngots.getIngotByName("chrome"));
-		OreUnifier.registerOre("ingotCopper", ItemIngots.getIngotByName("copper"));
-		OreUnifier.registerOre("ingotElectrum", ItemIngots.getIngotByName("electrum"));
-		OreUnifier.registerOre("ingotInvar", ItemIngots.getIngotByName("invar"));
-		OreUnifier.registerOre("ingotIridium", ItemIngots.getIngotByName("iridium"));
-		OreUnifier.registerOre("ingotLead", ItemIngots.getIngotByName("lead"));
-		OreUnifier.registerOre("ingotNickel", ItemIngots.getIngotByName("nickel"));
-		OreUnifier.registerOre("ingotPlatinum", ItemIngots.getIngotByName("platinum"));
-		OreUnifier.registerOre("ingotSilver", ItemIngots.getIngotByName("silver"));
-		OreUnifier.registerOre("ingotSteel", ItemIngots.getIngotByName("steel"));
-		OreUnifier.registerOre("ingotTin", ItemIngots.getIngotByName("tin"));
-		OreUnifier.registerOre("ingotTitanium", ItemIngots.getIngotByName("titanium"));
-		OreUnifier.registerOre("ingotTungsten", ItemIngots.getIngotByName("tungsten"));
-		OreUnifier.registerOre("ingotTungstensteel", ItemIngots.getIngotByName("tungstensteel"));
-		OreUnifier.registerOre("ingotHotTungstenSteel", ItemIngots.getIngotByName("hotTungstensteel"));
-		OreUnifier.registerOre("ingotZinc", ItemIngots.getIngotByName("zinc"));
-		OreUnifier.registerOre("ingotRefinedIron", ItemIngots.getIngotByName("refinedIron"));
-		OreUnifier.registerOre("ingotCopper", ItemIngots.getIngotByName("copper"));
-
-
-		// Nuggets
-		OreUnifier.registerOre("nuggetAluminum", ItemNuggets.getNuggetByName("aluminum"));
-		OreUnifier.registerOre("nuggetAluminium", ItemNuggets.getNuggetByName("aluminum"));
-		OreUnifier.registerOre("nuggetBrass", ItemNuggets.getNuggetByName("brass"));
-		OreUnifier.registerOre("nuggetBronze", ItemNuggets.getNuggetByName("bronze"));
-		OreUnifier.registerOre("nuggetChrome", ItemNuggets.getNuggetByName("chrome"));
-		OreUnifier.registerOre("nuggetCopper", ItemNuggets.getNuggetByName("copper"));
-		OreUnifier.registerOre("nuggetElectrum", ItemNuggets.getNuggetByName("electrum"));
-		OreUnifier.registerOre("nuggetInvar", ItemNuggets.getNuggetByName("invar"));
-		OreUnifier.registerOre("nuggetIridium", ItemNuggets.getNuggetByName("iridium"));
-		OreUnifier.registerOre("nuggetLead", ItemNuggets.getNuggetByName("lead"));
-		OreUnifier.registerOre("nuggetNickel", ItemNuggets.getNuggetByName("nickel"));
-		OreUnifier.registerOre("nuggetPlatinum", ItemNuggets.getNuggetByName("platinum"));
-		OreUnifier.registerOre("nuggetSilver", ItemNuggets.getNuggetByName("silver"));
-		OreUnifier.registerOre("nuggetSteel", ItemNuggets.getNuggetByName("steel"));
-		OreUnifier.registerOre("nuggetTin", ItemNuggets.getNuggetByName("tin"));
-		OreUnifier.registerOre("nuggetTitanium", ItemNuggets.getNuggetByName("titanium"));
-		OreUnifier.registerOre("nuggetTungsten", ItemNuggets.getNuggetByName("tungsten"));
-		OreUnifier.registerOre("nuggetTungstensteel", ItemNuggets.getNuggetByName("tungstensteel"));
-		OreUnifier.registerOre("nuggetHotTungstenSteel", ItemNuggets.getNuggetByName("hotTungstensteel"));
-		OreUnifier.registerOre("nuggetZinc", ItemNuggets.getNuggetByName("zinc"));
-		OreUnifier.registerOre("nuggetRefinedIron", ItemNuggets.getNuggetByName("refinedIron"));
-		OreUnifier.registerOre("nuggetCopper", ItemNuggets.getNuggetByName("copper"));
-		OreUnifier.registerOre("nuggetIron", ItemNuggets.getNuggetByName("iron"));
-
-		// Plates
-		OreUnifier.registerOre("plateAluminum", ItemPlates.getPlateByName("aluminum"));
-		OreUnifier.registerOre("plateAluminium", ItemPlates.getPlateByName("aluminum"));
-		OreUnifier.registerOre("plateBrass", ItemPlates.getPlateByName("brass"));
-		OreUnifier.registerOre("plateBronze", ItemPlates.getPlateByName("bronze"));
-		OreUnifier.registerOre("plateChrome", ItemPlates.getPlateByName("chrome"));
-		OreUnifier.registerOre("plateCopper", ItemPlates.getPlateByName("copper"));
-		OreUnifier.registerOre("plateDiamond", ItemPlates.getPlateByName("diamond"));
-		OreUnifier.registerOre("plateElectrum", ItemPlates.getPlateByName("electrum"));
-		OreUnifier.registerOre("plateEmerald", ItemPlates.getPlateByName("emerald"));
-		OreUnifier.registerOre("plateGold", ItemPlates.getPlateByName("gold"));
-		OreUnifier.registerOre("plateInvar", ItemPlates.getPlateByName("invar"));
-		OreUnifier.registerOre("plateIridium", ItemPlates.getPlateByName("iridium"));
-		OreUnifier.registerOre("plateIron", ItemPlates.getPlateByName("iron"));
-		OreUnifier.registerOre("plateLapis", ItemPlates.getPlateByName("lapis"));
-		OreUnifier.registerOre("plateLead", ItemPlates.getPlateByName("lead"));
-		OreUnifier.registerOre("plateMagnalium", ItemPlates.getPlateByName("magnalium"));
-		OreUnifier.registerOre("plateNickel", ItemPlates.getPlateByName("nickel"));
-		OreUnifier.registerOre("plateObsidian", ItemPlates.getPlateByName("obsidian"));
-		OreUnifier.registerOre("platePeridot", ItemPlates.getPlateByName("peridot"));
-		OreUnifier.registerOre("platePlatinum", ItemPlates.getPlateByName("platinum"));
-		OreUnifier.registerOre("plateRedGarnet", ItemPlates.getPlateByName("redGarnet"));
-		OreUnifier.registerOre("plateRedstone", ItemPlates.getPlateByName("redstone"));
-		OreUnifier.registerOre("plateRuby", ItemPlates.getPlateByName("ruby"));
-		OreUnifier.registerOre("plateSapphire", ItemPlates.getPlateByName("sapphire"));
-		OreUnifier.registerOre("plateSilicon", ItemPlates.getPlateByName("silicon"));
-		OreUnifier.registerOre("plateSilver", ItemPlates.getPlateByName("silver"));
-		OreUnifier.registerOre("plateSteel", ItemPlates.getPlateByName("steel"));
-		OreUnifier.registerOre("plateTin", ItemPlates.getPlateByName("tin"));
-		OreUnifier.registerOre("plateTitanium", ItemPlates.getPlateByName("titanium"));
-		OreUnifier.registerOre("plateTungsten", ItemPlates.getPlateByName("tungsten"));
-		OreUnifier.registerOre("plateTungstensteel", ItemPlates.getPlateByName("tungstensteel"));
-		OreUnifier.registerOre("plateYellowGarnet", ItemPlates.getPlateByName("yellowGarnet"));
-		OreUnifier.registerOre("plateZinc", ItemPlates.getPlateByName("zinc"));
-		OreUnifier.registerOre("blockLapis", ItemPlates.getPlateByName("lazurite"));
-
-		OreUnifier.registerOre("diamondTR", ItemDusts.getDustByName("Diamond"));
-		OreUnifier.registerOre("diamondTR", Items.DIAMOND);
-
-		OreUnifier.registerOre("craftingGrinder", ItemParts.getPartByName("diamondGrindingHead"));
-		OreUnifier.registerOre("craftingGrinder", ItemParts.getPartByName("tungstenGrindingHead"));
-		OreUnifier.registerOre("circuitElite", ItemParts.getPartByName("dataControlCircuit"));
-		OreUnifier.registerOre("circuitData", ItemParts.getPartByName("dataStorageCircuit"));
-		OreUnifier.registerOre("craftingSuperconductor", ItemParts.getPartByName("superconductor"));
-		OreUnifier.registerOre("batteryUltimate", ItemParts.getPartByName("diamondGrindingHead"));
-
-		//Buggy.
-		//OreUnifier.registerOre("containerWater", ItemCells.getCellByName("water"));
-		//OreUnifier.registerOre("containerWater", Items.WATER_BUCKET);
-
-		OreUnifier.registerOre("materialResin", ItemParts.getPartByName("rubberSap"));
-		OreUnifier.registerOre("materialRubber", ItemParts.getPartByName("rubber"));
-		OreUnifier.registerOre("circuitBasic", ItemParts.getPartByName("electronicCircuit"));
-		OreUnifier.registerOre("circuitAdvanced", ItemParts.getPartByName("advancedCircuit"));
-
-	}
-
 }
diff --git a/src/main/java/techreborn/init/OreDict.java b/src/main/java/techreborn/init/OreDict.java
index 775ab088b..995e0ede7 100644
--- a/src/main/java/techreborn/init/OreDict.java
+++ b/src/main/java/techreborn/init/OreDict.java
@@ -1,9 +1,12 @@
 package techreborn.init;
 
+import com.google.common.collect.ImmutableList;
+import ic2.core.block.BlockIC2Fence;
 import ic2.core.block.BlockTexGlass;
 import ic2.core.block.type.ResourceBlock;
-import ic2.core.block.wiring.CableType;
-import ic2.core.item.type.*;
+import ic2.core.item.type.CraftingItemType;
+import ic2.core.item.type.MiscResourceType;
+import ic2.core.item.type.NuclearResourceType;
 import ic2.core.ref.BlockName;
 import ic2.core.ref.ItemName;
 import ic2.core.ref.TeBlock;
@@ -12,65 +15,92 @@ import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fml.common.Loader;
 import net.minecraftforge.oredict.OreDictionary;
+import techreborn.Core;
 import techreborn.blocks.BlockMachineFrame;
-import techreborn.items.ItemIngots;
-import techreborn.items.ItemParts;
-import techreborn.items.ItemPlates;
+import techreborn.items.*;
 import techreborn.parts.powerCables.ItemStandaloneCables;
+import techreborn.utils.OreDictUtils;
 
 public class OreDict {
 
+    private static final ImmutableList<String> plateGenIgnores = ImmutableList.of(
+            "hot", //Hot ingots
+            "mixedMetal", //Mixed metal has own version of plate
+            "iridiumAlloy", //Iridium alloy is plate itself
+            ModItems.META_PLACEHOLDER //...
+    );
+
     public static void init() {
         if(Loader.isModLoaded("IC2")) {
-            OreDictionary.registerOre("reBattery", ItemName.re_battery.getItemStack());
+            Core.logHelper.info("IC2 installed, enabling integration");
+            try {
+                CraftingItemType.circuit.getName();
 
-            OreDictionary.registerOre("circuitBasic", ItemName.crafting.getItemStack(CraftingItemType.circuit));
-            OreDictionary.registerOre("circuitAdvanced", ItemName.crafting.getItemStack(CraftingItemType.advanced_circuit));
+                OreDictionary.registerOre("reBattery", ItemName.re_battery.getItemStack());
+
+                OreDictionary.registerOre("circuitBasic", ItemName.crafting.getItemStack(CraftingItemType.circuit));
+                OreDictionary.registerOre("circuitAdvanced", ItemName.crafting.getItemStack(CraftingItemType.advanced_circuit));
 
 
-            OreDictionary.registerOre("machineBlockBasic", BlockName.resource.getItemStack(ResourceBlock.machine));
-            OreDictionary.registerOre("machineBlockAdvanced", BlockName.resource.getItemStack(ResourceBlock.advanced_machine));
+                OreDictionary.registerOre("machineBlockBasic", BlockName.resource.getItemStack(ResourceBlock.machine));
+                OreDictionary.registerOre("machineBlockAdvanced", BlockName.resource.getItemStack(ResourceBlock.advanced_machine));
 
-            OreDictionary.registerOre("lapotronCrystal", ItemName.lapotron_crystal.getItemStack());
-            OreDictionary.registerOre("energyCrystal", ItemName.lapotron_crystal.getItemStack());
+                OreDictionary.registerOre("lapotronCrystal", ItemName.lapotron_crystal.getItemStack());
+                OreDictionary.registerOre("energyCrystal", ItemName.lapotron_crystal.getItemStack());
 
-            OreDictionary.registerOre("drillBasic", ItemName.drill.getItemStack());
-            OreDictionary.registerOre("drillDiamond", ItemName.diamond_drill.getItemStack());
-            OreDictionary.registerOre("drillAdvanced", ItemName.iridium_drill.getItemStack());
+                OreDictionary.registerOre("drillBasic", ItemName.drill.getItemStack());
+                OreDictionary.registerOre("drillDiamond", ItemName.diamond_drill.getItemStack());
+                OreDictionary.registerOre("drillAdvanced", ItemName.iridium_drill.getItemStack());
 
-            ItemStack industrialTnt = BlockName.te.getItemStack(TeBlock.itnt);
-            industrialTnt.setItemDamage(1);
-            OreDictionary.registerOre("industrialTnt", industrialTnt);
+                ItemStack industrialTnt = BlockName.te.getItemStack(TeBlock.itnt);
+                industrialTnt.setItemDamage(1);
+                OreDictionary.registerOre("industrialTnt", industrialTnt);
 
-            OreDictionary.registerOre("craftingIndustrialDiamond", ItemName.crafting.getItemStack(CraftingItemType.industrial_diamond));
-            OreDictionary.registerOre("fertilizer", ItemName.crafting.getItemStack(CraftingItemType.bio_chaff));
-            OreDictionary.registerOre("hvTransformer", BlockName.te.getItemStack(TeBlock.hv_transformer));
+                OreDictionary.registerOre("craftingIndustrialDiamond", ItemName.crafting.getItemStack(CraftingItemType.industrial_diamond));
+                OreDictionary.registerOre("fertilizer", ItemName.crafting.getItemStack(CraftingItemType.bio_chaff));
+                OreDictionary.registerOre("hvTransformer", BlockName.te.getItemStack(TeBlock.hv_transformer));
 
-            //TODO:
+                //TODO:
 
-            //OreDictionary.registerOre("insulatedGoldCableItem", BlockName.te.getItemStack(CableType.gold));
+                //OreDictionary.registerOre("insulatedGoldCableItem", BlockName.te.getItemStack(CableType.gold));
 
-            //OreDictionary.registerOre("ic2Generator", ModBlocks.Generator);
-            //OreDictionary.registerOre("ic2SolarPanel", ModBlocks.solarPanel);
-            //OreDictionary.registerOre("ic2Macerator", ModBlocks.Grinder);
-            //OreDictionary.registerOre("ic2Extractor", ModBlocks.Extractor);
-            //OreDictionary.registerOre("ic2Windmill", ModBlocks.windMill);
-            //OreDictionary.registerOre("ic2Watermill", ModBlocks.waterMill);
+                //OreDictionary.registerOre("ic2Generator", ModBlocks.Generator);
+                //OreDictionary.registerOre("ic2SolarPanel", ModBlocks.solarPanel);
+                //OreDictionary.registerOre("ic2Macerator", ModBlocks.Grinder);
+                //OreDictionary.registerOre("ic2Extractor", ModBlocks.Extractor);
+                //OreDictionary.registerOre("ic2Windmill", ModBlocks.windMill);
+                //OreDictionary.registerOre("ic2Watermill", ModBlocks.waterMill);
 
-            OreDictionary.registerOre("uran235", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_235));
-            OreDictionary.registerOre("uran238", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_238));
-            OreDictionary.registerOre("smallUran238", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_238));
-            OreDictionary.registerOre("smallUran235", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_235));
+                OreDictionary.registerOre("uran235", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_235));
+                OreDictionary.registerOre("uran238", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_238));
+                OreDictionary.registerOre("smallUran238", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_238));
+                OreDictionary.registerOre("smallUran235", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_235));
 
-            OreDictionary.registerOre("rubberWood", BlockName.rubber_wood.getItemStack());
-            OreDictionary.registerOre("glassReinforced", BlockName.glass.getItemStack(BlockTexGlass.GlassType.reinforced));
-            OreDictionary.registerOre("oreIridium", ItemName.misc_resource.getItemStack(MiscResourceType.iridium_ore));
+                OreDictionary.registerOre("fenceIron", BlockName.fence.getItemStack(BlockIC2Fence.IC2FenceType.iron));
+                OreDictionary.registerOre("rubberWood", BlockName.rubber_wood.getItemStack());
+                OreDictionary.registerOre("glassReinforced", BlockName.glass.getItemStack(BlockTexGlass.GlassType.reinforced));
+
+                OreDictionary.registerOre("oreIridium", ItemName.misc_resource.getItemStack(MiscResourceType.iridium_ore));
+            } catch (NoClassDefFoundError notFound) {
+                Core.logHelper.warn(
+                        "Can't enable integration: IC2 installed but cannot be hooked\n" +
+                                "Do you use incompatible IC2 version?\n" +
+                                "Please create issue on github and provide FULL LOG and mod list");
+            } catch (Throwable error) {
+                Core.logHelper.warn(
+                        "Exception thrown during IC2 integration init\n" +
+                                "Do you use incompatible IC2 version?\n" +
+                                "Please create issue on github and provide FULL LOG and mod list.\n" +
+                                "Error stack trace: ");
+                error.printStackTrace();
+            }
         }
 
         OreDictionary.registerOre("reBattery", ModItems.reBattery);
 
         OreDictionary.registerOre("circuitBasic", ItemParts.getPartByName("electronicCircuit"));
         OreDictionary.registerOre("circuitAdvanced", ItemParts.getPartByName("advancedCircuit"));
+        OreDictionary.registerOre("circuitStorage", ItemParts.getPartByName("dataStorageCircuit"));
         OreDictionary.registerOre("circuitElite", ItemParts.getPartByName("dataControlCircuit"));
         OreDictionary.registerOre("circuitMaster", ItemParts.getPartByName("energyFlowCircuit"));
 
@@ -96,26 +126,69 @@ public class OreDict {
         OreDictionary.registerOre("ic2Windmill", ModBlocks.windMill);
         OreDictionary.registerOre("ic2Watermill", ModBlocks.waterMill);
 
-        //OreDictionary.registerOre("uran235", );
-        //OreDictionary.registerOre("uran238", );
-        //OreDictionary.registerOre("smallUran235", );
+        //OreDictionary.registerOre("uran235", nothing);
+        //OreDictionary.registerOre("uran238", nothing);
+        //OreDictionary.registerOre("smallUran235", nothing);
 
+        OreDictionary.registerOre("fenceIron", ModBlocks.ironFence);
         OreDictionary.registerOre("woodRubber", ModBlocks.rubberLog);
         OreDictionary.registerOre("glassReinforced", ModBlocks.reinforcedglass);
 
+        OreDictionary.registerOre("diamondTR", ItemDusts.getDustByName("Diamond"));
+        OreDictionary.registerOre("diamondTR", Items.DIAMOND);
+
+        OreDictionary.registerOre("craftingGrinder", ItemParts.getPartByName("diamondGrindingHead"));
+        OreDictionary.registerOre("craftingGrinder", ItemParts.getPartByName("tungstenGrindingHead"));
+        OreDictionary.registerOre("craftingSuperconductor", ItemParts.getPartByName("superconductor"));
+        OreDictionary.registerOre("batteryUltimate", ItemParts.getPartByName("diamondGrindingHead"));
+
+        OreDictionary.registerOre("materialResin", ItemParts.getPartByName("rubberSap"));
+        OreDictionary.registerOre("materialRubber", ItemParts.getPartByName("rubber"));
+        OreDictionary.registerOre("pulpWood", ItemDusts.getDustByName("sawDust"));
+
+        //Gems registration
+        for(String type : ItemGems.types) {
+            if(type.equals(ModItems.META_PLACEHOLDER)) continue; //Aware of placeholders!
+            String upper = OreDictUtils.toFirstUpper(type);
+            OreDictionary.registerOre("gem" + upper, ItemGems.getGemByName(type));
+            boolean ignoreIt = false;
+            for(String ignore : plateGenIgnores)
+                if(type.startsWith(ignore)) ignoreIt = true;
+            if(!ignoreIt) ItemPlates.registerType(upper);
+        }
+        
+        //Ingots registration
+        for(String type : ItemIngots.types) {
+            if(type.equals(ModItems.META_PLACEHOLDER)) continue; //Aware of placeholders!
+            String upperName = OreDictUtils.toFirstUpper(type);
+            OreDictionary.registerOre("ingot" + upperName, ItemIngots.getIngotByName(type));
+            boolean ignoreIt = false;
+            for(String ignore : plateGenIgnores)
+                if(type.startsWith(ignore)) ignoreIt = true;
+            if(!ignoreIt) ItemPlates.registerType(type);
+        }
+
+
+        //Dusts, nuggets and plates auto-registration
+
         for(String type : ItemPlates.types) {
-            String oreDictName = "plate" + Character.toUpperCase(type.charAt(0)) + type.substring(1);
-            System.out.println(oreDictName);
+            if(type.equals(ModItems.META_PLACEHOLDER)) continue; //Aware of placeholders!
+            String oreDictName = "plate" + OreDictUtils.toFirstUpper(type);
             OreDictionary.registerOre(oreDictName, ItemPlates.getPlateByName(type));
         }
-
-        for(String type : ItemIngots.types) {
-            String oreDictName = "ingot" + Character.toUpperCase(type.charAt(0)) + type.substring(1);
-            System.out.println(oreDictName);
-            OreDictionary.registerOre(oreDictName, ItemIngots.getIngotByName(type));
+        
+        for(String type : ItemDusts.types) {
+            if(type.equals(ModItems.META_PLACEHOLDER)) continue; //Aware of placeholders!
+            String oreDictName = "dust" + OreDictUtils.toFirstUpper(type);
+            OreDictionary.registerOre(oreDictName, ItemDusts.getDustByName(type));
         }
-
-
+        
+        for(String type : ItemNuggets.types) {
+            if(type.equals(ModItems.META_PLACEHOLDER)) continue; //Aware of placeholders!
+            String oreDictName = "nugget" + OreDictUtils.toFirstUpper(type);
+            OreDictionary.registerOre(oreDictName, ItemNuggets.getNuggetByName(type));
+        }
+        
     }
 
 }
diff --git a/src/main/java/techreborn/items/ItemIngots.java b/src/main/java/techreborn/items/ItemIngots.java
index 67b550fc0..8b1d5dcf3 100644
--- a/src/main/java/techreborn/items/ItemIngots.java
+++ b/src/main/java/techreborn/items/ItemIngots.java
@@ -15,7 +15,7 @@ public class ItemIngots extends ItemTextureBase
 	public static final String[] types = new String[] { "aluminum", "brass", "bronze", "chrome", "copper", "electrum",
 			"invar", "iridium", "lead", "nickel", "platinum", "silver", "steel", "tin", "titanium", "tungsten",
 			"hotTungstensteel", "tungstensteel", "zinc", "refinedIron", "advancedAlloy", "mixedMetal",
-			"iridiumAlloy" };
+			"iridiumAlloy", "silicon" };
 
 	public ItemIngots()
 	{
diff --git a/src/main/java/techreborn/items/ItemPlates.java b/src/main/java/techreborn/items/ItemPlates.java
index b383f290a..302d7662b 100644
--- a/src/main/java/techreborn/items/ItemPlates.java
+++ b/src/main/java/techreborn/items/ItemPlates.java
@@ -3,9 +3,11 @@ package techreborn.items;
 import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
 import techreborn.client.TechRebornCreativeTabMisc;
 import techreborn.init.ModItems;
 import techreborn.lib.ModInfo;
+import techreborn.utils.OreDictUtils;
 
 import java.security.InvalidParameterException;
 import java.util.List;
@@ -13,11 +15,10 @@ import java.util.List;
 public class ItemPlates extends ItemTextureBase
 {
 
-	public static final String[] types = new String[] { "aluminum", "brass", "bronze", "chrome", "copper", "electrum",
-			"invar", "iridium", "iron", "gold", "lead", "nickel", "platinum", "silver", "steel", "tin", "titanium",
-			"tungsten", "tungstensteel", "zinc", "refinedIron", "carbon", "wood", "magnalium",
-			"silicon", "ruby", "sapphire", "peridot", "redGarnet", "yellowGarnet", "redstone",
-			"diamond", "emerald", "lapis", "coal", "obsidian", "advancedAlloy", "lazurite" };
+	//Vanilla plates or plates not from ingots or gems
+	public static String[] types = new String[] {
+			"iron", "gold", "carbon", "wood", "redstone", "diamond", "emerald", "lapis", "coal", "obsidian", "lazurite"
+	};
 
 	public ItemPlates()
 	{
@@ -65,6 +66,19 @@ public class ItemPlates extends ItemTextureBase
 		}
 	}
 
+	public static void registerType(String plateType) {
+		for (String type : types) {
+			if (type.equals(plateType)) return;
+		}
+		int plateIndex = types.length;
+		String[] newTypes = new String[plateIndex + 1];
+		System.arraycopy(types, 0, newTypes, 0, types.length);
+		types = newTypes;
+		newTypes[plateIndex] = plateType;
+		String oreName = "plate" + OreDictUtils.toFirstUpper(plateType);
+		OreDictionary.registerOre(oreName, new ItemStack(ModItems.plate, 1, plateIndex));
+	}
+
 	@Override public String getTextureName(int damage)
 	{
 		return ModInfo.MOD_ID + ":items/plate/" + types[damage] + "Plate";
diff --git a/src/main/java/techreborn/tiles/generator/TileLightningRod.java b/src/main/java/techreborn/tiles/generator/TileLightningRod.java
new file mode 100644
index 000000000..264c1b6be
--- /dev/null
+++ b/src/main/java/techreborn/tiles/generator/TileLightningRod.java
@@ -0,0 +1,108 @@
+package techreborn.tiles.generator;
+
+import net.minecraft.entity.effect.EntityLightningBolt;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.math.BlockPos;
+import net.minecraftforge.oredict.OreDictionary;
+import reborncore.api.power.EnumPowerTier;
+import reborncore.common.blocks.BlockMachineBase;
+import reborncore.common.powerSystem.TilePowerAcceptor;
+import techreborn.config.ConfigTechReborn;
+
+public class TileLightningRod extends TilePowerAcceptor {
+
+    private int onStatusHoldTicks = -1;
+
+    public TileLightningRod() {
+        super(2);
+    }
+
+    @Override
+    public void update() {
+        super.update();
+
+        if(onStatusHoldTicks > 0)
+            --onStatusHoldTicks;
+
+        if(onStatusHoldTicks == 0 || getEnergy() <= 0) {
+            if(getBlockType() instanceof BlockMachineBase)
+                ((BlockMachineBase) getBlockType()).setActive(false, worldObj, pos);
+            onStatusHoldTicks = -1;
+        }
+
+        float weatherStrength = worldObj.getThunderStrength(1.0F);
+        if(weatherStrength > 0.2F) {
+            //lightStrikeChance = (MAX - (CHANCE * WEATHER_STRENGTH)
+            float lightStrikeChance = ((100F - ConfigTechReborn.LightningRodChance) * 20F);
+            float totalChance = lightStrikeChance * getLightningStrikeMultiplier() * ((1.1F - weatherStrength));
+            if (worldObj.rand.nextInt((int) Math.floor(totalChance)) == 0) {
+                EntityLightningBolt lightningBolt = new EntityLightningBolt(worldObj,
+                        pos.getX() + 0.5F,
+                        worldObj.provider.getAverageGroundLevel(),
+                        pos.getZ() + 0.5F, false);
+                worldObj.addWeatherEffect(lightningBolt);
+                worldObj.spawnEntityInWorld(lightningBolt);
+                addEnergy(32768 * (0.3F + weatherStrength));
+                ((BlockMachineBase) getBlockType()).setActive(true, worldObj, pos);
+                onStatusHoldTicks = 400;
+            }
+        }
+
+    }
+
+    public float getLightningStrikeMultiplier() {
+        float actualHeight = worldObj.provider.getActualHeight();
+        float groundLevel = worldObj.provider.getAverageGroundLevel();
+        for(int i = pos.getY() + 1; i < actualHeight; i++) {
+            if(!isValidIronFence(i)) {
+                if(groundLevel >= i)
+                    return 4.3F;
+                float max = actualHeight - groundLevel;
+                float got = i - groundLevel;
+                return 1.2F - got / max;
+            }
+        }
+        return 4F;
+    }
+
+    public boolean isValidIronFence(int y) {
+        Item itemBlock = Item.getItemFromBlock(worldObj.getBlockState(new BlockPos(pos.getX(), y, pos.getZ())).getBlock());
+        for(ItemStack fence : OreDictionary.getOres("fenceIron")) {
+            if(fence.getItem() == itemBlock) return true;
+        }
+        return false;
+    }
+
+    @Override
+    public double getMaxPower() {
+        return 327680;
+    }
+
+    @Override
+    public boolean canAcceptEnergy(EnumFacing direction) {
+        return false;
+    }
+
+    @Override
+    public boolean canProvideEnergy(EnumFacing direction) {
+        return direction == getFacingEnum();
+    }
+
+    @Override
+    public double getMaxOutput() {
+        return 2048;
+    }
+
+    @Override
+    public double getMaxInput() {
+        return 0;
+    }
+
+    @Override
+    public EnumPowerTier getTier() {
+        return EnumPowerTier.HIGH;
+    }
+
+}
diff --git a/src/main/java/techreborn/utils/OreDictUtils.java b/src/main/java/techreborn/utils/OreDictUtils.java
index e450a2f1d..1a380304b 100644
--- a/src/main/java/techreborn/utils/OreDictUtils.java
+++ b/src/main/java/techreborn/utils/OreDictUtils.java
@@ -9,6 +9,16 @@ import net.minecraftforge.oredict.OreDictionary;
 public class OreDictUtils
 {
 
+	public static String toFirstLower(String string) {
+		if(string == null || string.isEmpty()) return string;
+		return Character.toLowerCase(string.charAt(0)) + string.substring(1);
+	}
+
+	public static String toFirstUpper(String string) {
+		if(string.isEmpty()) return string;
+		return Character.toUpperCase(string.charAt(0)) + string.substring(1);
+	}
+
 	public static boolean isOre(Block block, String oreName)
 	{
 		return isOre(new ItemStack(Item.getItemFromBlock(block)), oreName);
diff --git a/src/main/java/techreborn/utils/RecipeUtils.java b/src/main/java/techreborn/utils/RecipeUtils.java
index 3db8c49be..001f27cc6 100644
--- a/src/main/java/techreborn/utils/RecipeUtils.java
+++ b/src/main/java/techreborn/utils/RecipeUtils.java
@@ -1,18 +1,11 @@
 package techreborn.utils;
 
 import net.minecraft.item.ItemStack;
-import techreborn.init.ModItems;
+import techreborn.items.DynamicCell;
 
 public class RecipeUtils
 {
-	public static ItemStack getEmptyCell(int stackSize)
-	{ // TODO ic2
-		// if (Loader.isModLoaded("IC2")) {
-		// ItemStack cell = IC2Items.getItem("cell").copy();
-		// cell.stackSize = stackSize;
-		// return cell;
-		// } else {
-		return new ItemStack(ModItems.emptyCell);
-		// }
+	public static ItemStack getEmptyCell(int stackSize) {
+		return DynamicCell.getEmptyCell(stackSize);
 	}
 }
diff --git a/src/main/java/techreborn/utils/StackWIPHandler.java b/src/main/java/techreborn/utils/StackWIPHandler.java
index c0b44fc0b..352bed787 100644
--- a/src/main/java/techreborn/utils/StackWIPHandler.java
+++ b/src/main/java/techreborn/utils/StackWIPHandler.java
@@ -22,7 +22,6 @@ public class StackWIPHandler
 
 	public StackWIPHandler()
 	{
-		wipBlocks.add(ModBlocks.LightningRod);
 		wipBlocks.add(ModBlocks.MagicalAbsorber);
 		wipBlocks.add(ModBlocks.ChunkLoader);
 		wipBlocks.add(ModBlocks.ElectricCraftingTable);
diff --git a/src/main/resources/assets/techreborn/blockstates/lightningrod.json b/src/main/resources/assets/techreborn/blockstates/lightningrod.json
index cd6739335..3613b7c44 100644
--- a/src/main/resources/assets/techreborn/blockstates/lightningrod.json
+++ b/src/main/resources/assets/techreborn/blockstates/lightningrod.json
@@ -4,18 +4,14 @@
       "transform":"forge:default-block",
       "model":"orientable",
       "textures":{
-         "particle":"techreborn:blocks/machine/generators/lightning_rod_side_off",
-         "top":"techreborn:blocks/machine/generators/lightning_rod_top_off",
-         "side":"techreborn:blocks/machine/generators/lightning_rod_side_off"
+         "particle": "techreborn:blocks/machine/generators/lightning_rod_side_off",
+         "top": "techreborn:blocks/machine/generators/lightning_rod_top",
+         "side": "techreborn:blocks/machine/generators/lightning_rod_side_off",
+		 "down":"techreborn:blocks/machine/generators/lightning_rod_side_off",
+		 "front":"techreborn:blocks/machine/generators/plasma_generator_front"
       }
    },
    "variants":{
-      "inventory":{
-         "transform":"forge:default-block",
-         "textures":{
-            "front":"techreborn:blocks/machine/generators/lightning_rod_side_off"
-         }
-      },
       "facing":{
          "north":{
 
@@ -33,12 +29,14 @@
       "active":{
          "true":{
             "textures":{
-               "front":"techreborn:blocks/machine/generators/lightning_rod_side_on"
+			   "down":"techreborn:blocks/machine/generators/lightning_rod_side_on",
+			   "side":"techreborn:blocks/machine/generators/lightning_rod_side_on"
             }
          },
          "false":{
             "textures":{
-               "front":"techreborn:blocks/machine/generators/lightning_rod_side_off"
+               "down":"techreborn:blocks/machine/generators/lightning_rod_side_off",
+			   "side":"techreborn:blocks/machine/generators/lightning_rod_side_off"
             }
          }
       },
@@ -46,9 +44,10 @@
             "model": "orientable",
             "textures": {
                 "particle": "techreborn:blocks/machine/generators/lightning_rod_side_off",
-                "top": "techreborn:blocks/machine/generators/lightning_rod_top_off",
+                "top": "techreborn:blocks/machine/generators/lightning_rod_top",
                 "side": "techreborn:blocks/machine/generators/lightning_rod_side_off",
-                "front": "techreborn:blocks/machine/generators/lightning_rod_side_off"
+				"down":"techreborn:blocks/machine/generators/lightning_rod_side_off",
+				"front":"techreborn:blocks/machine/generators/plasma_generator_front"
             }
         }
    }
diff --git a/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_side_off.png b/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_side_off.png
index 16f2dd319bb474100b3940b40c7c4123ea6fc2bb..e3c13cd87490ef971571781ca9ae3ec0393c88dd 100644
GIT binary patch
delta 492
zcmV<I0Tce?1(F1i83+ad001BJ|6!3X8-H^E01|Tnj3T)Q0000QbVXQnQ*UN;cVTj6
z08n9RZgehAMN}YmGcGkQF)>H;LN@>a0gg#TK~y+Tg_CPb0znjp=jZw#g4iGg=~I!=
zR$7{xck_bxORixBQK^|(-~5nWw7+ojJ#m&%7ZM(4cW2)BoH;W`ZEkyLW6Mp3dw+*K
zyI$Hm^wUW!NtNqc>hzz;dhApCp-0WTdy3|Z6i8<1ES;rLCP%SCiPTXjN{LdHNmc4}
zQE$=JU`Q{YU-UNrq1V}*8NN?RDPsxWd7P9#npm4K3}>v~fHJivCCfDqcpQ$ALb`~W
zZCo<4*yVC9A>Z{tY@lbLi%rwCM}K*i`E<3xuoi#0X4_E=EX!h6O%RX`umy=OV*DV&
z`(!e4G(jEgBIa9`V|0l1Q8%z_;FN)gL<l4!fVH?2W-ziah^Or8>x=)}0)p}uU?3Uj
zS%`s?7~mcp1j3|F6KN{6JB)53M*1l82nf9X;GcnfSj|L7zM}`A0k#270a<qewdf8<
z_Tp9aKw#e&SkC}FPd~VU#@{mr@8#|dcOgy<#RKSEg+9Qgh!-n-H0Vfl<IQNy?Tlx%
iGK&`l*A2{Ignj`kl&UvVyG|AW0000<MNUMnLSTYm?%D4E

delta 703
zcmV;w0zmze1mgve85IHm005AYXf^-<00DDSM?wIu&K&8HAsc^m000tn0p4aGcmMzZ
z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M`R7pfZR5(vfQR`1qaTq=y
z`X@?mQZBy43P%A)gSDjA2fwt{R$FU*=r*(Est?k}EU%3d7MK?d5VRzMt{c-7jV`1D
zB3_U?XczC7^bddNIsP{0*|T@gIlt$5-rxHkDz>~bySOy-cOf$WE0oCwlBu83*w@I^
zx5?>|SlmA|3;dXl;?*}XIUEX8$+h*w>RNndbvN*ZAhxu;_sE3;>E#0H6`tb8Xgt9h
z#Ah^xrIlRSH6C4&+5DH?+9EZ*u?bIfVKJPW3#QUg`@(+_Dz(0m+up`8sgMFhihEAX
z&4<z%uKXrXQ6W@Tc>^J~1HbeRvWv<zFu+f4GWGip=D`>MvdKI{!EttI=m-!DKh#*j
zcs7S?j3tu5{xYpVdACq?e{d{F;fhDkF#s7Cei)#J4v|<6HU?lt;A{u1a`!e>DwRwo
z6NyApsg!@FX>hVlKzO3M&p$#9j0Ob9t32QRABTMI{z0)=yl3ZOI2^Z7s8*|8eFGo7
zUvP?QalD}%pFD3rd!3$s09>I^NF);Z&I67<=3b|%yO&>b8y)I&%~V@g4_*Yydqt<~
z?C$qgr`zUwXL;@F>~Y|z-S!e{@DBSc5S_7&Vp@ONaST98bR-f|03P5_dE<eT4>+=`
zjm<`?L2o#Ap24p;cuI>H<BP867JI9;o5Z8Gm~DB~KGsu@nw}Ustp<|?(mcuAK<JBx
z;<HUW`qsYUOEnETs-Ahum0#zVR30vWC{k;lb(jH!v3`>U5yTII@0yx=)_~Rs1CWZd
lya6ACcu>Lht)^;i?SJ!==+5>DrT_o{002ovPDHLkV1mtrLk$1`

diff --git a/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_side_on.png b/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_side_on.png
index a5a59004ea0a8a218580348ca0de4e73a1c36653..f1ff3616bcedefeac4b32edf3c06f213b21a001c 100644
GIT binary patch
delta 494
zcmV<K0TKSh1(XDk83+ad001BJ|6!3K8-H;C01|Nl^W1ul0000QbVXQnQ*UN;cVTj6
z08n9RZgehAMN}YmGcGkQF)>H;LN@>a0gy>VK~y+Tg_GG%0znW(`%m~6p7|paGZI5W
ze9}lFDkumz?6QP?5ip2}Q2`OrcX0uKq2w0np&2Ie;mp$A_f~avm)PEQ)7FlQG=J9~
zx%WMEaO|hEXoAYOchng?Q~PN^t;aq!?jK0c6)2EM(?u#np>&p_`67vvkWTSpg-Moc
zbX9B8&2U7oU*GgT|E0ItoEd#gNeFEX-(`%1UypB0Xqq+c{*cnu1|>>W4tN@ll0dqM
znyFtia<LHJHCE#**g(xd729k{vVYr~{06E?s#0fIi$}K6vJ?Y{V~N=W0oedskkO@B
zieTV$TAQE_MiFz(wq<mP)wgP3)W9kODUw1UGm-|l6W(BCVGv6i)yJe<{NEN3l(zr_
znSq*xG_Vo_+=HV)n8bNJMfp~TQB5G0+cAp~5P1B-rGXqUXQCp<(F4!`!&?BSfV+TN
zbVp-ju^BZGIP?WJGXO8sPi~;e&y2x;soUc&#Hpcp0G%t)2e=fmLYa>S9f@x2jVIjB
k_(m(Ucu{cGz#ELvALc}R&w)Bb{{R3007*qoM6N<$f;eT_x&QzG

delta 672
zcmV;R0$=@<1jGf983+OZ005AYXf}}{8-H^E01|Tnj3T)Q0000ObVXQnQ*UN;cVTj6
z0B~VxZgehgWpp4kE-)@RY%_jN0006)Nkl<ZI8RMcTT@bD6y20HO>a)qH2njfcwnMI
z$iyfns_DTOXX>H<Q4fuiX*DPocmw0E2?!QeBnc#1qyirB!d*bSc)z4SpmqFa7=O>K
z*|X01)>`}9`%rdkJF~I5{C7RI_A5~;#|p)t>FiW$ae85CCYy^cXMi6|X}m^~3*QnP
z6?XUXJG;5<os+;9hV14RUFjrg57ik2^^VzGo;TFq_t!MKNN%MDSLxti`S6g{mHh*F
z((4;sWi?)0fjYvasJORZIXc2ItACIJOp1FZSJx6NC8{5y>(0|kUnrK~J5Zw!*=N)t
z7~p3&S^WJ6^I!}B*=(M0e4ZZ~ItB#84>cArU#{R9bNK>5>L@8c)6GC|E>5`O#Ro}%
zjSD{vP(z1EEC(9{up)5216Fx*n+k<ODwPU_LWx8om&?J~Hu;6B!sF2yntzy$(Ty?x
z_vlzS;td2vBGIj6v;32~=J-*mRG#q(UuY7isAlH~IY0VGzlPlY001tN$;4uD-SGpC
zKBi%}(J@SlQFM5&>7qXCApfHLBDlxdy&o)Yug&w`?D7l@I&su*8-g0#V1Eaq(f3hD
zcR!8+NSTgBLJGhGoNwYz-G81Wx#dNdp4zp#OAk5xinDj85u<-=?J?VXEe;ls+HJB`
z(fUeD&t7)w1}r+G8PY1L+CVNp%3NrUQNsvb)wi^3sIB8QU9$@mp4z6Vb9aJo3?=|!
zyx(X>1oMO7`;(S7-hkE!1CWZdssV&~P{Fmm#>Y=v{{!!;?|!DgrVZHu0000<MNUMn
GLSTZ0KQ(3m

diff --git a/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_off.png b/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_off.png
deleted file mode 100644
index c3bd3b9e4f69a8136c5c870444160b370b12b26c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 622
zcmV-!0+IcRP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00004XF*Lt006O%
z3;baP00009a7bBm000tm000tm0gNKK2LJ#77<5HgbW?9;ba!ELWdLwtX>N2bZe?^J
zG%heMIczh2P5=M_>`6pHR5(vPlF3dRQ4mF2mhh9>7O?PwO)M5+1_>mT-(bZ)#1d>E
z5eWW;DS=2VfCiHgL=+++W-x=XjR!md353CIW<DUNsa9K8Pvxq6>(+bK+LuXVWMXpM
z2pT_^7B{xmBC(C5#Cj}FuzDEXj3;+e>D^3rKbJqqpG5zjYZQ`K*Qx89bivHt-hoW<
zR!#{dPMbvtYtbW(9=W^wk~eK7mF@28fG_|_Kv34)ThaQlwBbE{Ex}eIWeF<VrObKq
z@Cf9u<EGbs;IthmyQ>1i5UL=5|3JnX#w@DZZcfOyfZFj*ft!p5=fLN=ZxR5p6`3WF
zk$|`l8#78N?e*vL`9@}gB*ll0JfP)p`uK!^EUBSs1FGNe*LB_N^$yR>LbU`1GjVxk
zUz&N);J_&Ym&^6)p$$$=GbfE;vxJp!MB7dtI|42<_I;lA9*;)^<MTf#$?YLnBOxGl
z_Wb<k<%JW**M$WK=t;`cVYR#;*4RAM@|Hf)2#5iV0KJ(<H4gA;{0{Bef{J&a#K)o9
zODLG}f0ukns-`QH&MfWhS^~<Y4IO%2K-Kp+jpglQ=NGD}U)6NF-*)U}bHBDj_NARY
zNFZyXefabY9xo}M@Z$QWCL3W&no-6bPiiojfp)+Vtb`-~0rmVp@^kM>eE<Le07*qo
IM6N<$g7y;>fB*mh

diff --git a/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_on.png b/src/main/resources/assets/techreborn/textures/blocks/machine/generators/lightning_rod_top_on.png
deleted file mode 100644
index d31321e3ead3403090c357189cbcd01866a9f195..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 608
zcmV-m0-ybfP)<h;3K|Lk000e1NJLTq000mG000mO0ssI2kdbIM00004XF*Lt006O%
z3;baP00009a7bBm000tm000tm0gNKK2LJ#77<5HgbW?9;ba!ELWdLwtX>N2bZe?^J
zG%heMIczh2P5=M_-bqA3R5(vPl37n8Q4obYB-%~GBhUN^6XT-`8XtIYe$_ndlj1tY
zDB1#!V>Do5+z@eL09j;nopGUY_Xqg3)oF5aQ&gQ(r|zv*rozVfTzJNa8XJlA{e#_X
ze*dhvmoE_P{LLi`rNeUNs9HOzH%=QDxtm*sLh1gY{P0+5nzg5AP;EWQDS^Zlvjt%{
zcc##z{`}I`@w2^iMD1P>1|SIt+`)wYBccT+>1zoNie(DzUBgo5ym);B^4D=wduKUq
z2g+(sSQtVTG+tiGSi_httv}8Q*%nYce{6D-iD(Q=##ST%Vk<IBAR_^B4;jm<sw&?<
zpU*cQiINl_I`V*)!{ysM0<xsWmJFzVzhBpNuh$z|jzF~pO|y7+Z(o{u(BQx+0+-A6
z?V*e=E-@#KV6%knOjb#i&K&`lnf|>>dymH>f|=Dnl;rjhtdS6qy88II{`};G@oR0(
z0eX`1bXaYjWE3_JRUg_Ejer=?2+*5(v|x%)V>5kh3*19d@o}j35}Ib={~aHa7FbDF
zs)@rROF&s0nAZB{wZXX4Sl&K=`_COrYJr&AJ%3!Q$5Uzh(#{?vkTuahb9n`imy}O<
ueJ`oVMwpUjlyS$C8VqKj9dHEOnd}$4jYmUb_bqe)0000<MNUMnLSTZB3kG!n


From 25c581e1298acfba9db8bd422011880cb83d2ddb Mon Sep 17 00:00:00 2001
From: Dragon2488 <zolotuhinnikita2012@gmail.com>
Date: Sat, 16 Jul 2016 22:17:44 +0700
Subject: [PATCH 2/5] Recipe fixes.

---
 src/main/java/techreborn/init/ModRecipes.java | 83 ++++++++++---------
 1 file changed, 43 insertions(+), 40 deletions(-)

diff --git a/src/main/java/techreborn/init/ModRecipes.java b/src/main/java/techreborn/init/ModRecipes.java
index 221b12fcc..9aba2db53 100644
--- a/src/main/java/techreborn/init/ModRecipes.java
+++ b/src/main/java/techreborn/init/ModRecipes.java
@@ -389,11 +389,11 @@ public class ModRecipes
 	static void addExtractorRecipes()
 	{
 		RecipeHandler.addRecipe(
-				new ExtractorRecipe(ItemParts.getPartByName("rubberSap"), ItemParts.getPartByName("rubber", 3), 400,
-						2));
+				new ExtractorRecipe(ItemParts.getPartByName("rubberSap"),
+						ItemParts.getPartByName("rubber", 3), 400, 2));
 		RecipeHandler.addRecipe(
-				new ExtractorRecipe(new ItemStack(ModBlocks.rubberLog), ItemParts.getPartByName("rubber"), 400, 2,
-						false));
+				new ExtractorRecipe(new ItemStack(ModBlocks.rubberLog),
+						ItemParts.getPartByName("rubber"), 400, 2, true));
 	}
 
 	static void addIc2ReplacementReicpes()
@@ -519,7 +519,7 @@ public class ModRecipes
 	{
 		FusionReactorRecipeHelper.registerRecipe(
 				new FusionReactorRecipe(ItemCells.getCellByName("helium3"), ItemCells.getCellByName("deuterium"),
-						ItemCells.getCellByName("helium"), 40000000, 32768, 1024));
+						ItemCells.getCellByName("heliumplasma"), 40000000, 32768, 1024));
 		FusionReactorRecipeHelper.registerRecipe(
 				new FusionReactorRecipe(ItemCells.getCellByName("tritium"), ItemCells.getCellByName("deuterium"),
 						ItemCells.getCellByName("helium3"), 60000000, 32768, 2048));
@@ -628,7 +628,7 @@ public class ModRecipes
 				"ingotCopper", 'W', ItemStandaloneCables.getCableByName("insulatedcopper"));
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.MachineCasing, 4, 0), "RRR", "CAC", "RRR", 'R',
-				ItemIngots.getIngotByName("refinedIron"), 'C', ItemParts.getPartByName("electronicCircuit"), 'A',
+				ItemIngots.getIngotByName("refinedIron"), 'C', "circuitBasic", 'A',
 				BlockMachineFrame.getFrameByName("machine", 1));
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.MachineCasing, 4, 1), "RRR", "CAC", "RRR", 'R',
@@ -636,19 +636,18 @@ public class ModRecipes
 				BlockMachineFrame.getFrameByName("advancedMachine", 1));
 
 		CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("dataOrb"), "DDD", "DID", "DDD", 'D',
-				"circuitElite", 'I', ItemParts.getPartByName("dataControlCircuit"));
+				"circuitData", 'I', "circuitElite");
 
 		CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("dataControlCircuit", 4), "CDC", "DID", "CDC", 'I',
-				ItemPlates.getPlateByName("iridium"), 'D', "circuitElite", 'C',
-				"circuitAdvanced");
+				ItemPlates.getPlateByName("iridium"), 'D', "circuitData", 'C', "circuitAdvanced");
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.thermalGenerator), "III", "IRI", "CGC", 'I', "ingotInvar",
 						'R', ModBlocks.reinforcedglass, 'G', ModBlocks.Generator, 'C',
-						ItemParts.getPartByName("electronicCircuit"));
+						"circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.recycler), "XEX", "DCD", "GDG", 'D', Blocks.DIRT, 'C',
-				ModBlocks.Compressor, 'G', Items.GLOWSTONE_DUST, 'E', ItemParts.getPartByName("electronicCircuit"));
+				ModBlocks.Compressor, 'G', Items.GLOWSTONE_DUST, 'E', "circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.batBox), "WCW", "BBB", "WWW", 'W', "plankWood", 'B',
 				batteryStack, 'C', ItemStandaloneCables.getCableByName("insulatedcopper"));
@@ -806,15 +805,14 @@ public class ModRecipes
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.Extractor), "TMT", "TCT", "XXX", 'T', ModItems.treeTap, 'M',
 						BlockMachineFrame.getFrameByName("machine", 1), 'C',
-						ItemParts.getPartByName("electronicCircuit"));
+						"circuitBasic");
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.centrifuge), "RCR", "AEA", "RCR", 'R', "ingotRefinedIron",
 						'E', new ItemStack(ModBlocks.Extractor), 'A', "machineBlockAdvanced", 'C', "circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("advancedCircuit"), "RGR", "LCL", "RGR", 'R',
-				Items.REDSTONE, 'G', Items.GLOWSTONE_DUST, 'L', "dyeBlue", 'C',
-				ItemParts.getPartByName("electronicCircuit"));
+				Items.REDSTONE, 'G', Items.GLOWSTONE_DUST, 'L', "dyeBlue", 'C', "circuitBasic");
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModItems.energyCrystal), "RRR", "RDR", "RRR", 'R', Items.REDSTONE,
@@ -822,7 +820,7 @@ public class ModRecipes
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModItems.lapotronCrystal), "LCL", "LEL", "LCL", 'L', "dyeBlue", 'E',
-						new ItemStack(ModItems.energyCrystal), 'C', ItemParts.getPartByName("electronicCircuit"));
+						"energyCrystal", 'C',"circuitBasic");
 
 		CraftingHelper.addShapelessOreRecipe(new ItemStack(ModBlocks.Generator), batteryStack,
 				BlockMachineFrame.getFrameByName("machine", 1), Blocks.FURNACE);
@@ -835,8 +833,8 @@ public class ModRecipes
 						ItemIngots.getIngotByName("advancedAlloy"), 'C', ItemPlates.getPlateByName("carbon"), 'M',
 						BlockMachineFrame.getFrameByName("machine", 1));
 
-		CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("dataControlCircuit"), "EEE", "ECE", "EEE", 'E',
-				new ItemStack(Items.EMERALD), 'C', ItemParts.getPartByName("electronicCircuit"));
+		CraftingHelper.addShapedOreRecipe(ItemParts.getPartByName("dataStorageCircuit", 8), "EEE", "ECE", "EEE", 'E',
+				new ItemStack(Items.EMERALD), 'C', "circuitBasic");
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModItems.parts, 4, 8), "DSD", "S S", "DSD", 'D', "dustDiamond", 'S',
@@ -877,7 +875,7 @@ public class ModRecipes
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModItems.rockCutter), "DT ", "DT ", "DCB", 'D', "dustDiamond", 'T',
-						"ingotTitanium", 'C', ItemParts.getPartByName("electronicCircuit"), 'B', batteryStack);
+						"ingotTitanium", 'C', "circuitBasic", 'B', batteryStack);
 
 		for (String part : ItemParts.types)
 		{
@@ -948,25 +946,25 @@ public class ModRecipes
 
 		CraftingHelper.addShapedOreRecipe(ItemUpgrades.getUpgradeByName("Overclock"), "TTT", "WCW", 'T',
 				ItemParts.getPartByName("CoolantSimple"), 'W', ItemStandaloneCables.getCableByName("insulatedcopper"),
-				'C', ItemParts.getPartByName("electronicCircuit"));
+				'C', "circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(ItemUpgrades.getUpgradeByName("Overclock", 2), " T ", "WCW", 'T',
 				ItemParts.getPartByName("heliumCoolantSimple"), 'W',
 				ItemStandaloneCables.getCableByName("insulatedcopper"), 'C',
-				ItemParts.getPartByName("electronicCircuit"));
+				"circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(ItemUpgrades.getUpgradeByName("Overclock", 2), " T ", "WCW", 'T',
 				ItemParts.getPartByName("NaKCoolantSimple"), 'W',
 				ItemStandaloneCables.getCableByName("insulatedcopper"), 'C',
-				ItemParts.getPartByName("electronicCircuit"));
+				"circuitBasic");
 
 		CraftingHelper.addShapedOreRecipe(ItemUpgrades.getUpgradeByName("Transformer"), "GGG", "WTW", "GCG", 'G',
 				"blockGlass", 'W', ItemStandaloneCables.getCableByName("insulatedgold"), 'C',
-				ItemParts.getPartByName("electronicCircuit"), 'T', ModBlocks.mvt);
+				"circuitBasic", 'T', ModBlocks.mvt);
 
 		CraftingHelper.addShapedOreRecipe(ItemUpgrades.getUpgradeByName("EnergyStorage"), "PPP", "WBW", "PCP", 'P',
 				"plankWood", 'W', ItemStandaloneCables.getCableByName("insulatedcopper"), 'C',
-				ItemParts.getPartByName("electronicCircuit"), 'B', ModItems.reBattery);
+				"circuitBasic", 'B', ModItems.reBattery);
 
 		CraftingHelper
 				.addShapedOreRecipe(ItemParts.getPartByName("CoolantSimple"), " T ", "TWT", " T ", 'T', "ingotTin", 'W',
@@ -1031,8 +1029,8 @@ public class ModRecipes
 		}
 
 		CraftingHelper.addShapelessRecipe(new ItemStack(ModBlocks.rubberPlanks, 4), ModBlocks.rubberLog);
-		CraftingHelper.addShapelessRecipe(new ItemStack(ModItems.frequencyTransmitter),
-				ItemStandaloneCables.getCableByName("insulatedcopper"), ItemParts.getPartByName("electronicCircuit"));
+		CraftingHelper.addShapelessOreRecipe(new ItemStack(ModItems.frequencyTransmitter),
+				ItemStandaloneCables.getCableByName("insulatedcopper"), "circuitBasic");
 
 		for (String name : ItemDustsSmall.types)
 		{
@@ -1065,12 +1063,12 @@ public class ModRecipes
 						ItemParts.getPartByName("dataOrb"), 'C', ItemParts.getPartByName("computerMonitor"));
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.AlloySmelter), "XCX", "FMF", "XXX", 'C',
-				ItemParts.getPartByName("electronicCircuit"), 'F', new ItemStack(ModBlocks.ElectricFurnace), 'M',
+				"circuitBasic", 'F', new ItemStack(ModBlocks.ElectricFurnace), 'M',
 				BlockMachineFrame.getFrameByName("machine", 1));
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.LesuStorage), "LLL", "LCL", "LLL", 'L', "blockLapis", 'C',
-						ItemParts.getPartByName("electronicCircuit"));
+						"circuitBasic");
 
 		TechRebornAPI
 				.addRollingOreMachinceRecipe(ItemParts.getPartByName("cupronickelHeatingCoil"), "NCN", "C C", "NCN",
@@ -1078,8 +1076,13 @@ public class ModRecipes
 
 		RecipeHandler.addRecipe(new VacuumFreezerRecipe(ItemIngots.getIngotByName("hotTungstensteel"),
 				ItemIngots.getIngotByName("tungstensteel"), 440, 128));
+
+		RecipeHandler.addRecipe(new VacuumFreezerRecipe(ItemCells.getCellByName("heliumplasma"),
+				ItemCells.getCellByName("helium"), 440, 128));
+
 		RecipeHandler.addRecipe(
-				new VacuumFreezerRecipe(ItemCells.getCellByName("water"), ItemCells.getCellByName("cell"), 60, 128));
+				new VacuumFreezerRecipe(ItemCells.getCellByName("water"),
+						ItemCells.getCellByName("cell"), 60, 128));
 	}
 
 	static void addSmeltingRecipes()
@@ -2265,20 +2268,20 @@ public class ModRecipes
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.Semifluidgenerator), "III", "IHI", "CGC", 'I', "plateIron",
-						'H', ModBlocks.reinforcedglass, 'C', ItemParts.getPartByName("electronicCircuit"), 'G',
+						'H', ModBlocks.reinforcedglass, 'C', "circuitBasic", 'G',
 						ModBlocks.Generator);
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.Semifluidgenerator), "AAA", "AHA", "CGC", 'A',
-				"plateAluminum", 'H', ModBlocks.reinforcedglass, 'C', ItemParts.getPartByName("electronicCircuit"), 'G',
+				"plateAluminum", 'H', ModBlocks.reinforcedglass, 'C', "circuitBasic", 'G',
 				ModBlocks.Generator);
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.DieselGenerator), "III", "I I", "CGC", 'I', "refinedIron",
-						'C', ItemParts.getPartByName("electronicCircuit"), 'G', ModBlocks.Generator);
+						'C', "circuitBasic", 'G', ModBlocks.Generator);
 
 		CraftingHelper
 				.addShapedOreRecipe(new ItemStack(ModBlocks.DieselGenerator), "AAA", "A A", "CGC", 'A', "ingotAluminum",
-						'C', ItemParts.getPartByName("electronicCircuit"), 'G', ModBlocks.Generator);
+						'C', "circuitBasic", 'G', ModBlocks.Generator);
 
 		// CraftingHelper.addShapedOreRecipe(new
 		// ItemStack(ModBlocks.MagicalAbsorber),
@@ -2299,7 +2302,7 @@ public class ModRecipes
 		// 'T', TechRebornAPI.recipeCompact.getItem("teleporter"));
 
 		CraftingHelper.addShapedOreRecipe(new ItemStack(ModBlocks.Dragoneggenergysiphoner), "CTC", "ISI", "CBC", 'I',
-				"plateIridium", 'C', ItemParts.getPartByName("electronicCircuit"),
+				"plateIridium", 'C', "circuitBasic",
 				'B', ModItems.lithiumBattery, 'S', ModBlocks.Supercondensator, 'T', ModBlocks.Extractor);
 
 		CraftingHelper
@@ -2408,7 +2411,7 @@ public class ModRecipes
 		CraftingHelper
 				.addSmelting(ItemDusts.getDustByName("silver", 1), ItemIngots.getIngotByName("silver"),
 						1F);
-		
+
 		// UU
 		if (ConfigTechReborn.UUrecipesIridiamOre)
 			CraftingHelper
@@ -2518,9 +2521,9 @@ public class ModRecipes
 		// Rubber Wood Yields
 		RecipeHandler.addRecipe(
 				new CentrifugeRecipe(new ItemStack(getOre("rubberWood").getItem(), 16),
-						ItemCells.getCellByName("empty", 5), new ItemStack(ModItems.parts, 8, 41),
+						ItemCells.getCellByName("empty", 5), ItemParts.getPartByName("rubber", 8),
 						new ItemStack(Blocks.SAPLING, 6), ItemCells.getCellByName("methane", 1),
-						ItemCells.getCellByName("carbon", 4), 5000, 5, false));
+						ItemCells.getCellByName("carbon", 4), 5000, 5, true));
 
 		// Soul Sand Byproducts
 		RecipeHandler.addRecipe(
@@ -3163,7 +3166,7 @@ public class ModRecipes
 				gemStack.stackSize = 2;
 				ItemStack dustStack = OreDictionary.getOres("gemMalachite").get(0);
 				dustStack.stackSize = 1;
-				
+
 				RecipeHandler.addRecipe(
 						new IndustrialGrinderRecipe(oreStack,ItemCells.getCellByName("water"), null,
 								gemStack, dustStack, null, ItemCells.getCellByName("empty"), 100, 120));
@@ -3471,7 +3474,7 @@ public class ModRecipes
 				.addShapedOreRecipe(new ItemStack(ModItems.lapotronpack, 1, OreDictionary.WILDCARD_VALUE), "FOF", "SPS",
 						"FIF", 'F', "circuitMaster", 'O',
 						new ItemStack(ModItems.lapotronicOrb), 'S', ItemParts.getPartByName("superConductor"), 'I',
-						"ingotIridium", 'P', new ItemStack(ModItems.lapotronpack));
+						"ingotIridium", 'P', new ItemStack(ModItems.lithiumBatpack));
 	}
 
 	static void addGemToolRecipes(ItemStack gemsword, ItemStack gempick, ItemStack gemaxe, ItemStack gemHoe,
@@ -3501,9 +3504,9 @@ public class ModRecipes
 	{
 		return UniversalBucket.getFilledBucket(ForgeModContainer.getInstance().universalBucket, fluid);
 	}
-	
+
 	public static ItemStack getOre(String name) {
 		return OreDictionary.getOres(name).get(0).copy();
 	}
-	
+
 }
\ No newline at end of file

From 43bdf25ab3656370fbfc1e66cc4685a73347fdd9 Mon Sep 17 00:00:00 2001
From: Modmuss50 <modmuss50@gmail.com>
Date: Sat, 16 Jul 2016 18:11:06 +0100
Subject: [PATCH 3/5] Version 1.3.3

---
 build.gradle | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.gradle b/build.gradle
index 627e531cb..5b9dda777 100644
--- a/build.gradle
+++ b/build.gradle
@@ -64,7 +64,7 @@ configurations {
 }
 
 
-version = "1.3.2"
+version = "1.3.3"
 
 def ENV = System.getenv()
 if (ENV.BUILD_NUMBER) {

From adf9b8c0e41b47b48c93a1d753ede1c378a728d2 Mon Sep 17 00:00:00 2001
From: modmuss50 <modmuss50@gmail.com>
Date: Sat, 16 Jul 2016 22:16:22 +0100
Subject: [PATCH 4/5] Fix #676

---
 build.gradle                                  |  2 +-
 src/main/java/techreborn/init/IC2Dict.java    | 84 +++++++++++++++++++
 src/main/java/techreborn/init/ModRecipes.java |  3 +
 src/main/java/techreborn/init/OreDict.java    | 71 +---------------
 4 files changed, 89 insertions(+), 71 deletions(-)
 create mode 100644 src/main/java/techreborn/init/IC2Dict.java

diff --git a/build.gradle b/build.gradle
index 5b9dda777..f5709c245 100644
--- a/build.gradle
+++ b/build.gradle
@@ -64,7 +64,7 @@ configurations {
 }
 
 
-version = "1.3.3"
+version = "1.3.4"
 
 def ENV = System.getenv()
 if (ENV.BUILD_NUMBER) {
diff --git a/src/main/java/techreborn/init/IC2Dict.java b/src/main/java/techreborn/init/IC2Dict.java
new file mode 100644
index 000000000..6e368b07e
--- /dev/null
+++ b/src/main/java/techreborn/init/IC2Dict.java
@@ -0,0 +1,84 @@
+package techreborn.init;
+
+import ic2.core.block.BlockIC2Fence;
+import ic2.core.block.BlockTexGlass;
+import ic2.core.block.type.ResourceBlock;
+import ic2.core.item.type.CraftingItemType;
+import ic2.core.item.type.MiscResourceType;
+import ic2.core.item.type.NuclearResourceType;
+import ic2.core.ref.BlockName;
+import ic2.core.ref.ItemName;
+import ic2.core.ref.TeBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.oredict.OreDictionary;
+import techreborn.Core;
+
+/**
+ * Created by modmuss50 on 16/07/2016.
+ */
+public class IC2Dict {
+
+    public static void init() {
+        try {
+            CraftingItemType.circuit.getName();
+
+            OreDictionary.registerOre("reBattery", ItemName.re_battery.getItemStack());
+
+            OreDictionary.registerOre("circuitBasic", ItemName.crafting.getItemStack(CraftingItemType.circuit));
+            OreDictionary.registerOre("circuitAdvanced", ItemName.crafting.getItemStack(CraftingItemType.advanced_circuit));
+
+
+            OreDictionary.registerOre("machineBlockBasic", BlockName.resource.getItemStack(ResourceBlock.machine));
+            OreDictionary.registerOre("machineBlockAdvanced", BlockName.resource.getItemStack(ResourceBlock.advanced_machine));
+
+            OreDictionary.registerOre("lapotronCrystal", ItemName.lapotron_crystal.getItemStack());
+            OreDictionary.registerOre("energyCrystal", ItemName.lapotron_crystal.getItemStack());
+
+            OreDictionary.registerOre("drillBasic", ItemName.drill.getItemStack());
+            OreDictionary.registerOre("drillDiamond", ItemName.diamond_drill.getItemStack());
+            OreDictionary.registerOre("drillAdvanced", ItemName.iridium_drill.getItemStack());
+
+            ItemStack industrialTnt = BlockName.te.getItemStack(TeBlock.itnt);
+            industrialTnt.setItemDamage(1);
+            OreDictionary.registerOre("industrialTnt", industrialTnt);
+
+            OreDictionary.registerOre("craftingIndustrialDiamond", ItemName.crafting.getItemStack(CraftingItemType.industrial_diamond));
+            OreDictionary.registerOre("fertilizer", ItemName.crafting.getItemStack(CraftingItemType.bio_chaff));
+            OreDictionary.registerOre("hvTransformer", BlockName.te.getItemStack(TeBlock.hv_transformer));
+
+            //TODO:
+
+            //OreDictionary.registerOre("insulatedGoldCableItem", BlockName.te.getItemStack(CableType.gold));
+
+            //OreDictionary.registerOre("ic2Generator", ModBlocks.Generator);
+            //OreDictionary.registerOre("ic2SolarPanel", ModBlocks.solarPanel);
+            //OreDictionary.registerOre("ic2Macerator", ModBlocks.Grinder);
+            //OreDictionary.registerOre("ic2Extractor", ModBlocks.Extractor);
+            //OreDictionary.registerOre("ic2Windmill", ModBlocks.windMill);
+            //OreDictionary.registerOre("ic2Watermill", ModBlocks.waterMill);
+
+            OreDictionary.registerOre("uran235", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_235));
+            OreDictionary.registerOre("uran238", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_238));
+            OreDictionary.registerOre("smallUran238", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_238));
+            OreDictionary.registerOre("smallUran235", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_235));
+
+            OreDictionary.registerOre("fenceIron", BlockName.fence.getItemStack(BlockIC2Fence.IC2FenceType.iron));
+            OreDictionary.registerOre("rubberWood", BlockName.rubber_wood.getItemStack());
+            OreDictionary.registerOre("glassReinforced", BlockName.glass.getItemStack(BlockTexGlass.GlassType.reinforced));
+
+            OreDictionary.registerOre("oreIridium", ItemName.misc_resource.getItemStack(MiscResourceType.iridium_ore));
+        } catch (NoClassDefFoundError notFound) {
+            Core.logHelper.warn(
+                    "Can't enable integration: IC2 installed but cannot be hooked\n" +
+                            "Do you use incompatible IC2 version?\n" +
+                            "Please create issue on github and provide FULL LOG and mod list");
+        } catch (Throwable error) {
+            Core.logHelper.warn(
+                    "Exception thrown during IC2 integration init\n" +
+                            "Do you use incompatible IC2 version?\n" +
+                            "Please create issue on github and provide FULL LOG and mod list.\n" +
+                            "Error stack trace: ");
+            error.printStackTrace();
+        }
+    }
+}
diff --git a/src/main/java/techreborn/init/ModRecipes.java b/src/main/java/techreborn/init/ModRecipes.java
index 9aba2db53..f2b5715aa 100644
--- a/src/main/java/techreborn/init/ModRecipes.java
+++ b/src/main/java/techreborn/init/ModRecipes.java
@@ -3506,6 +3506,9 @@ public class ModRecipes
 	}
 
 	public static ItemStack getOre(String name) {
+		if(OreDictionary.getOres(name).isEmpty()){
+			return new ItemStack(ModItems.missingRecipe);
+		}
 		return OreDictionary.getOres(name).get(0).copy();
 	}
 
diff --git a/src/main/java/techreborn/init/OreDict.java b/src/main/java/techreborn/init/OreDict.java
index 995e0ede7..097a44df7 100644
--- a/src/main/java/techreborn/init/OreDict.java
+++ b/src/main/java/techreborn/init/OreDict.java
@@ -1,15 +1,6 @@
 package techreborn.init;
 
 import com.google.common.collect.ImmutableList;
-import ic2.core.block.BlockIC2Fence;
-import ic2.core.block.BlockTexGlass;
-import ic2.core.block.type.ResourceBlock;
-import ic2.core.item.type.CraftingItemType;
-import ic2.core.item.type.MiscResourceType;
-import ic2.core.item.type.NuclearResourceType;
-import ic2.core.ref.BlockName;
-import ic2.core.ref.ItemName;
-import ic2.core.ref.TeBlock;
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
@@ -33,67 +24,7 @@ public class OreDict {
     public static void init() {
         if(Loader.isModLoaded("IC2")) {
             Core.logHelper.info("IC2 installed, enabling integration");
-            try {
-                CraftingItemType.circuit.getName();
-
-                OreDictionary.registerOre("reBattery", ItemName.re_battery.getItemStack());
-
-                OreDictionary.registerOre("circuitBasic", ItemName.crafting.getItemStack(CraftingItemType.circuit));
-                OreDictionary.registerOre("circuitAdvanced", ItemName.crafting.getItemStack(CraftingItemType.advanced_circuit));
-
-
-                OreDictionary.registerOre("machineBlockBasic", BlockName.resource.getItemStack(ResourceBlock.machine));
-                OreDictionary.registerOre("machineBlockAdvanced", BlockName.resource.getItemStack(ResourceBlock.advanced_machine));
-
-                OreDictionary.registerOre("lapotronCrystal", ItemName.lapotron_crystal.getItemStack());
-                OreDictionary.registerOre("energyCrystal", ItemName.lapotron_crystal.getItemStack());
-
-                OreDictionary.registerOre("drillBasic", ItemName.drill.getItemStack());
-                OreDictionary.registerOre("drillDiamond", ItemName.diamond_drill.getItemStack());
-                OreDictionary.registerOre("drillAdvanced", ItemName.iridium_drill.getItemStack());
-
-                ItemStack industrialTnt = BlockName.te.getItemStack(TeBlock.itnt);
-                industrialTnt.setItemDamage(1);
-                OreDictionary.registerOre("industrialTnt", industrialTnt);
-
-                OreDictionary.registerOre("craftingIndustrialDiamond", ItemName.crafting.getItemStack(CraftingItemType.industrial_diamond));
-                OreDictionary.registerOre("fertilizer", ItemName.crafting.getItemStack(CraftingItemType.bio_chaff));
-                OreDictionary.registerOre("hvTransformer", BlockName.te.getItemStack(TeBlock.hv_transformer));
-
-                //TODO:
-
-                //OreDictionary.registerOre("insulatedGoldCableItem", BlockName.te.getItemStack(CableType.gold));
-
-                //OreDictionary.registerOre("ic2Generator", ModBlocks.Generator);
-                //OreDictionary.registerOre("ic2SolarPanel", ModBlocks.solarPanel);
-                //OreDictionary.registerOre("ic2Macerator", ModBlocks.Grinder);
-                //OreDictionary.registerOre("ic2Extractor", ModBlocks.Extractor);
-                //OreDictionary.registerOre("ic2Windmill", ModBlocks.windMill);
-                //OreDictionary.registerOre("ic2Watermill", ModBlocks.waterMill);
-
-                OreDictionary.registerOre("uran235", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_235));
-                OreDictionary.registerOre("uran238", ItemName.nuclear.getItemStack(NuclearResourceType.uranium_238));
-                OreDictionary.registerOre("smallUran238", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_238));
-                OreDictionary.registerOre("smallUran235", ItemName.nuclear.getItemStack(NuclearResourceType.small_uranium_235));
-
-                OreDictionary.registerOre("fenceIron", BlockName.fence.getItemStack(BlockIC2Fence.IC2FenceType.iron));
-                OreDictionary.registerOre("rubberWood", BlockName.rubber_wood.getItemStack());
-                OreDictionary.registerOre("glassReinforced", BlockName.glass.getItemStack(BlockTexGlass.GlassType.reinforced));
-
-                OreDictionary.registerOre("oreIridium", ItemName.misc_resource.getItemStack(MiscResourceType.iridium_ore));
-            } catch (NoClassDefFoundError notFound) {
-                Core.logHelper.warn(
-                        "Can't enable integration: IC2 installed but cannot be hooked\n" +
-                                "Do you use incompatible IC2 version?\n" +
-                                "Please create issue on github and provide FULL LOG and mod list");
-            } catch (Throwable error) {
-                Core.logHelper.warn(
-                        "Exception thrown during IC2 integration init\n" +
-                                "Do you use incompatible IC2 version?\n" +
-                                "Please create issue on github and provide FULL LOG and mod list.\n" +
-                                "Error stack trace: ");
-                error.printStackTrace();
-            }
+            IC2Dict.init();
         }
 
         OreDictionary.registerOre("reBattery", ModItems.reBattery);

From fbc0d324072f2d2c628236ed9f524ab02ab6c0c2 Mon Sep 17 00:00:00 2001
From: modmuss50 <modmuss50@gmail.com>
Date: Sat, 16 Jul 2016 23:44:42 +0100
Subject: [PATCH 5/5] Fix rare crash with the power net

---
 src/main/java/techreborn/power/TRPowerNet.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/techreborn/power/TRPowerNet.java b/src/main/java/techreborn/power/TRPowerNet.java
index 3244a9cc9..28087b190 100644
--- a/src/main/java/techreborn/power/TRPowerNet.java
+++ b/src/main/java/techreborn/power/TRPowerNet.java
@@ -180,7 +180,7 @@ public class TRPowerNet
 			te.setNetwork(null);
 			te.findAndJoinNetwork(te.getWorld(), te.getPos());
 		}
-		this.clear(true);
+		this.clear(false);
 		MinecraftForge.EVENT_BUS.unregister(this);
 	}