@Override
 @SideOnly(Side.CLIENT)
 public void registerIcons(IIconRegister reg) {
   for (Engines engine : Engines.values()) {
     engine.icon = reg.registerIcon(ICBM.PREFIX + engine.moduleName);
   }
 }
 @Override
 public void onPostInit() {
   for (Engines engine : Engines.values()) {
     IRocketEngine e = engine.newModule();
     if (e instanceof IPostInit) {
       ((IPostInit) e).onPostInit();
     }
   }
 }
  @SideOnly(Side.CLIENT)
  public void getSubItems(Item item, CreativeTabs tab, List list) {
    for (Engines engine : Engines.values()) {
      list.add(engine.newModuleStack());

      RocketEngine e = MissileModuleBuilder.INSTANCE.buildEngine(engine.newModuleStack());
      e.initFuel();
      list.add(e.toStack());
    }
  }
 @Override
 public IRocketEngine getModule(ItemStack stack) {
   if (stack != null) {
     ItemStack insert = stack.copy();
     insert.stackSize = 1;
     IRocketEngine engine = MissileModuleBuilder.INSTANCE.buildEngine(insert);
     if (engine == null) {
       // Data is invalid TODO see if we can save data if NBT is not null
       engine = Engines.get(insert).newModule();
       stack.setTagCompound(engine.save(new NBTTagCompound()));
       insert.setTagCompound(engine.save(new NBTTagCompound()));
     }
     return engine;
   }
   return null;
 }
 @SideOnly(Side.CLIENT)
 public IIcon getIconFromDamage(int meta) {
   return Engines.get(meta) != null ? Engines.get(meta).icon : this.itemIcon;
 }