On ne sait jamais Au moins ça reste plus sûr. Bon je vais tester le mien maintenant ^^ok, ba de toute façon c'était juste une petite modif :
Code:package net.minecraft.launcher; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class OldModDeleter { public static void run(File workingDirectory) { List<URL> modList = getFullModFile(); File modsFolder = new File(workingDirectory, "mods"); if(modsFolder.exists()) { File[] modsList = modsFolder.listFiles(); for(File mods : modsList) { if(!valideFile(mods, modList)) { mods.delete(); } } } } public static List<URL> getFullModFile() { List<URL> result = Collections.synchronizedList(new ArrayList<URL>()); try { URL resourceUrl = new URL(LauncherConstants.URL_DOWNLOAD_MODS); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(resourceUrl.openStream()); NodeList nodeLst = doc.getElementsByTagName("Contents"); long start = System.nanoTime(); for(int i = 0; i < nodeLst.getLength(); i++) { Node node = nodeLst.item(i); if(node.getNodeType() == 1) { Element element = (Element)node; String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue(); long size = Long.parseLong(element.getElementsByTagName("Size").item(0).getChildNodes().item(0).getNodeValue()); if(size > 0L) { result.add(new URL(LauncherConstants.URL_DOWNLOAD_MODS + key)); } } } long end = System.nanoTime(); long delta = end - start; Launcher.getInstance().println("Delta time to compare mods: " + delta / 1000000L + " ms "); } catch(Exception ex) { Launcher.getInstance().println("Couldn't download mods", ex); } return result; } public static boolean valideFile(File file, List<URL> urlList) { System.out.println("Vérification de : " + file.getName()); if(file.isDirectory()) { File[] fileInSubfolder = file.listFiles(); for(File subFile : fileInSubfolder) { if(!valideFile(subFile, urlList)) { subFile.delete(); } } return true; } for(URL remoteMods : urlList) { String remoteFileName = remoteMods.getFile().substring(remoteMods.getFile().lastIndexOf('/') + 1); System.out.println("Comparaison avec : " + remoteFileName); if(file.getName().equals(remoteFileName)) { System.out.println("Fichier validé : " + file.getName()); return true; } } System.out.println("Fichier non validé : " + file.getName()); return false; } }
Et puis de toute façon c'est pas nécessaire de faire du récursive, car FML ne charge que les mods dans le dossier mods ou mods/<version de minecraft>
Le premier code que j'ai envoyé suffisait largement.