public static void loadLocal(final List<ScriptInfo> scripts, final File directory) throws ClassNotFoundException, InstantiationException, IllegalAccessException, FileNotFoundException, IOException {
        final List<File> classes = new ArrayList<File>();
        for (final File file : directory.listFiles()) {
            if (file.isDirectory()) {
                putClasses(classes, file);
            } else if (file.toString().endsWith(".class")) {
                classes.add(file);
            }
        }
        for (final File file : classes) {
            final ClassGen cg = new ClassGen(new ClassParser(file.toURI().toURL().openStream(), file.getName()).parse());
            final String className = cg.getClassName();
            String fileDir;
            if (className.indexOf('.') != -1) {
                final String classDir = className.substring(0, className.indexOf('.'));
                fileDir = getDirectory(file).toString();
                fileDir = fileDir.substring(0, fileDir.indexOf(classDir + '/'));
            } else {
                fileDir = directory.toURI().toURL().toString();
            }
            final URLClassLoader loader = new URLClassLoader(new URL[]{new URL(fileDir)}) {
                public Class loadClass(String name, final boolean resolve) throws ClassNotFoundException {
                    name = name.replace('/', '.').replace('\\', '.');
                    return super.loadClass(name, resolve);
                }
            };
            Class<?> clazz;
            try {
                clazz = loader.loadClass(className);
            } catch (Exception e) {
                e.printStackTrace();
                clazz = null;
            }
            if (clazz != null) {
                if (clazz.isAnnotationPresent(ScriptManifest.class)) {
                    final ScriptManifest manifest = clazz.getAnnotation(ScriptManifest.class);
                    scripts.add(new ScriptInfo(manifest.name(), manifest.description(), clazz, manifest.authors(), manifest.version(), manifest.type()));
                }
            }
            loader.close();
        }
    }