private static void extractSkin(String fileName) {
    InputStream input = null;
    FileOutputStream output = null;
    File outputFile = new File(SkinIOUtils.getSkinLibraryDirectory(), fileName + ".armour");
    if (outputFile.exists()) {
      if (getFileSize(outputFile) > 0) {
        return;
      } else {
        ModLogger.log("Deleting corrupted skin file " + fileName);
        outputFile.delete();
      }
    }

    try {
      ModLogger.log("Extracting file " + fileName);
      input =
          SkinExtractor.class
              .getClassLoader()
              .getResourceAsStream(SKINS_ASSETS_LOCATION + fileName + ".armour");
      if (input != null) {
        output = new FileOutputStream(outputFile);
        while (input.available() > 0) {
          output.write(input.read());
        }
        output.flush();
      } else {
        ModLogger.log(Level.ERROR, "Error extracting skin " + fileName);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      IOUtils.closeQuietly(input);
      IOUtils.closeQuietly(output);
    }
  }
  @Mod.EventHandler
  public void perInit(FMLPreInitializationEvent event) {
    ModLogger.log("Loading " + LibModInfo.NAME + " " + LibModInfo.VERSION);
    creativeTabArmorersWorkshop.setMinecraftCreativeTab(tabArmorersWorkshop);
    ConfigHandler.init(event.getSuggestedConfigurationFile());

    Addons.preInit();
    proxy.preInit();

    SkinIOUtils.makeLibraryDirectory();
    UpdateCheck.checkForUpdates();
    SkinExtractor.extractSkins();

    modItems = new ModItems();
    modBlocks = new ModBlocks();

    SkinTypeRegistry.init();
    CubeRegistry.init();
    proxy.initLibraryManager();
  }