diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..57bca72
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..8c9809a
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ ExtremeDemonList
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8c9943d
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/bin/data/DownloadLevels.class b/bin/data/DownloadLevels.class
new file mode 100644
index 0000000..6d09a47
Binary files /dev/null and b/bin/data/DownloadLevels.class differ
diff --git a/bin/data/FetchData.class b/bin/data/FetchData.class
new file mode 100644
index 0000000..88c292d
Binary files /dev/null and b/bin/data/FetchData.class differ
diff --git a/bin/data/ManageFiles.class b/bin/data/ManageFiles.class
new file mode 100644
index 0000000..fcc7ce5
Binary files /dev/null and b/bin/data/ManageFiles.class differ
diff --git a/bin/filestructure/CreateFileStructure.class b/bin/filestructure/CreateFileStructure.class
new file mode 100644
index 0000000..d45e39d
Binary files /dev/null and b/bin/filestructure/CreateFileStructure.class differ
diff --git a/bin/main/Main.class b/bin/main/Main.class
new file mode 100644
index 0000000..bfc1924
Binary files /dev/null and b/bin/main/Main.class differ
diff --git a/bin/module-info.class b/bin/module-info.class
new file mode 100644
index 0000000..3ec61ff
Binary files /dev/null and b/bin/module-info.class differ
diff --git a/src/data/DownloadLevels.java b/src/data/DownloadLevels.java
new file mode 100644
index 0000000..63b9759
--- /dev/null
+++ b/src/data/DownloadLevels.java
@@ -0,0 +1,41 @@
+package data;
+
+import java.io.BufferedInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+
+public class DownloadLevels {
+
+ private ManageFiles data = new ManageFiles();
+
+
+ public void download() throws IOException {
+
+ String fileURL;
+
+ for(int i = 0; i < data.missingLevels().size(); i++) {
+
+ System.out.println("downloading " + data.missingLevels().get(i));
+ fileURL = "https://raw.githubusercontent.com/All-Rated-Extreme-Demon-List/AREDL/main/data/" + data.missingLevels().get(i) + ".json";
+
+ try (BufferedInputStream in = new BufferedInputStream(new URL(fileURL).openStream());
+
+ FileOutputStream fileOutputStream = new FileOutputStream("C:\\ExtremeDemonList\\levels\\" + data.missingLevels().get(i) + ".json")) {
+
+ byte dataBuffer[] = new byte[1024];
+ int bytesRead;
+
+ while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
+
+ fileOutputStream.write(dataBuffer, 0, bytesRead);
+
+ }
+ } catch (IOException e) {
+ // Handle exceptions
+ e.printStackTrace();
+ }
+ }
+ }
+
+}
diff --git a/src/data/FetchData.java b/src/data/FetchData.java
new file mode 100644
index 0000000..0be79dc
--- /dev/null
+++ b/src/data/FetchData.java
@@ -0,0 +1,42 @@
+package data;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+
+public class FetchData {
+
+ private ArrayList levels = new ArrayList();
+
+ public void getGithubString() throws IOException {
+ String link = "https://raw.githubusercontent.com/All-Rated-Extreme-Demon-List/AREDL/main/data/_list.json";
+
+
+ URL url = new URL(link);
+
+ try (BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()))) {
+
+ String line;
+ StringBuilder sb = new StringBuilder();
+
+ while ((line = in.readLine()) != null) {
+
+ String trimmedLine = line.trim().replace(",", "").replace("\"", "");
+
+ if (!trimmedLine.equals("[") && !trimmedLine.equals("]")) {
+ levels.add(trimmedLine);
+ }
+ }
+ }
+ }
+
+ public ArrayList allLevels() {
+ return levels;
+ }
+
+}
+
+
+
diff --git a/src/data/ManageFiles.java b/src/data/ManageFiles.java
new file mode 100644
index 0000000..3e430fe
--- /dev/null
+++ b/src/data/ManageFiles.java
@@ -0,0 +1,38 @@
+package data;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+public class ManageFiles {
+
+ private FetchData fetch = new FetchData();
+ private static ArrayList missinglevels = new ArrayList(); // fehlende noch zu herunterladende level
+
+
+ private void feedMissingLevelsArray(String levelname) { // fehlende level werden missinglevels hinzugefügt
+ missinglevels.add(levelname);
+ }
+
+
+ public void compareArrays() throws IOException { // downloadedlevels und onlinelevels werden verglichen und die fehlenden level in missinglevels gepackt
+
+ fetch.getGithubString();
+
+ for(int i = 0; i < fetch.allLevels().size(); i++) {
+
+ File file = new File("C:\\ExtremeDemonList\\levels\\" + fetch.allLevels().get(i) + ".json");
+
+ if(!file.exists()) { // wenn der level lokal nicht vorhanden ist, wird er als fehlend gemeldet.
+ System.out.println(fetch.allLevels().get(i) + " fehlt");
+ feedMissingLevelsArray(fetch.allLevels().get(i));
+ }
+ }
+
+ }
+
+ public ArrayList missingLevels() { // missinglevels wird zurückgegeben
+ return missinglevels;
+ }
+
+}
diff --git a/src/filestructure/CreateFileStructure.java b/src/filestructure/CreateFileStructure.java
new file mode 100644
index 0000000..32554dd
--- /dev/null
+++ b/src/filestructure/CreateFileStructure.java
@@ -0,0 +1,17 @@
+package filestructure;
+
+import java.io.File;
+
+public class CreateFileStructure {
+
+ public void create() {
+
+ File file = new File("C:\\ExtremeDemonList\\levels");
+
+ if(!file.isDirectory()) {
+ file.mkdir();
+ }
+
+ }
+
+}
diff --git a/src/main/Main.java b/src/main/Main.java
new file mode 100644
index 0000000..48b327c
--- /dev/null
+++ b/src/main/Main.java
@@ -0,0 +1,29 @@
+package main;
+
+import java.io.IOException;
+
+import data.DownloadLevels;
+import data.FetchData;
+import data.ManageFiles;
+import filestructure.CreateFileStructure;
+
+public class Main {
+
+ public static void main(String[] args) throws IOException {
+
+ CreateFileStructure struct = new CreateFileStructure();
+ struct.create();
+
+ FetchData fetch = new FetchData();
+ fetch.getGithubString();
+
+ ManageFiles manager = new ManageFiles();
+ manager.compareArrays();
+
+ DownloadLevels download = new DownloadLevels();
+ download.download();
+
+
+ }
+
+}
diff --git a/src/module-info.java b/src/module-info.java
new file mode 100644
index 0000000..8b64736
--- /dev/null
+++ b/src/module-info.java
@@ -0,0 +1,8 @@
+/**
+ *
+ */
+/**
+ *
+ */
+module ExtremeDemonList {
+}
\ No newline at end of file