diff --git a/build.gradle b/build.gradle
index a2106ef..6c0f203 100644
--- a/build.gradle
+++ b/build.gradle
@@ -20,7 +20,7 @@ repositories {
 
 dependencies {
     compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
-    implementation 'com.theokanning.openai-gpt3-java:service:0.14.0'
+    implementation 'com.squareup.okhttp3:okhttp:4.11.0'
 }
 
 def targetJavaVersion = 17
@@ -39,11 +39,9 @@ tasks.withType(JavaCompile).configureEach {
     }
 }
 
-processResources {
-    def props = [version: version]
-    inputs.properties props
-    filteringCharset 'UTF-8'
-    filesMatching('paper-plugin.yml') {
-        expand props
-    }
+tasks.register('copyJarToServer', Exec) {
+    dependsOn jar
+    mustRunAfter jar
+
+    commandLine 'scp', 'build/libs/spawn-1.0.jar', 'root@10.20.6.1:/root/server/plugins'
 }
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java
index 4b724c0..05a4c4d 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/Report.java
@@ -12,6 +12,7 @@ import org.bukkit.Bukkit;
 import org.bukkit.OfflinePlayer;
 import org.bukkit.entity.Player;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.io.IOException;
 import java.net.URI;
@@ -19,89 +20,109 @@ import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
 import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.UUID;
 
 public class Report extends Appliance {
-    private record Request(UUID reporter, UUID reported, String reason) {}
-    private record Response(String url) {}
+    private final URI apiEndpoint;
+    public Report() {
+        super("report");
+        this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
+    }
 
-    public void issueReport(Player issuer, String targetUsername, String reason) {
+    private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) {}
+    private record Response(@NotNull String url) {}
+
+    public void reportToUnknown(@NotNull Player issuer) {
+        Request request = new Request(issuer.getUniqueId(), null, "");
+        issueReport(issuer, request);
+    }
+
+    public void reportToKnown(@NotNull Player issuer, @NotNull String targetUsername, @Nullable String reason) {
+        OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(targetUsername);
+        if(issuer.getUniqueId().equals(offlinePlayer.getUniqueId())) {
+            issuer.sendMessage(
+                    Component.text("Du kannst dich nicht selbst reporten.").color(NamedTextColor.RED)
+            );
+            return;
+        }
+
+        Request request = new Request(issuer.getUniqueId(), offlinePlayer.getUniqueId(), Optional.ofNullable(reason).orElse(""));
+        issueReport(issuer, request);
+    }
+
+    private void issueReport(Player issuer, Request reportRequest) {
         try {
-            OfflinePlayer target = Bukkit.getOfflinePlayer(targetUsername);
-            Request request = new Request(issuer.getUniqueId(), target.getUniqueId(), reason);
-
-            HttpResponse<String> responseString = postRequest(URI.create("https://mhsl.eu/craftattack/report"), new Gson().toJson(request));
-
-            switch (responseString.statusCode()) {
-                case 201:
-                    Response response = new Gson().fromJson(responseString.body(), Response.class);
-                    issuer.sendMessage(
-                            Component.text()
-                                    .append(Component.text("\\/".repeat(10), NamedTextColor.DARK_GRAY))
-                                    .appendNewline()
-                                    .appendNewline()
-                                    .append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
-                                    .appendNewline()
-                                    .appendNewline()
-                                    .append(
-                                            Component
-                                                    .text(" > Hier klicken < ", NamedTextColor.GREEN)
-                                                    .hoverEvent(HoverEvent.showText(Component.text(response.url).color(NamedTextColor.GREEN)))
-                                                    .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
-                                    )
-                                    .appendNewline()
-                                    .appendNewline()
-                                    .append(
-                                            Component
-                                                    .text("(" + response.url + ")", NamedTextColor.GRAY)
-                                                    .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
-                                    )
-                                    .appendNewline()
-                                    .appendNewline()
-                                    .append(Component.text("/\\".repeat(10), NamedTextColor.DARK_GRAY))
-                    );
-                    break;
-
-                case 400:
-                    issuer.sendMessage(
-                            Component.text()
-                                    .append(Component.text("Der Nutzer ", NamedTextColor.RED))
-                                    .append(Component.text(targetUsername, NamedTextColor.DARK_RED))
-                                    .append(Component.text(" ist in unserem System nicht bekannt.", NamedTextColor.RED))
-                                    .appendNewline()
-                                    .append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED))
-                                    .appendNewline()
-                                    .append(Component.text("Du kannst dich alternativ jederzeit bei einem Admin melden.", NamedTextColor.GRAY))
-                    );
-                    break;
-
-                case 401:
-                default:
-                    issuer.sendMessage(
-                            Component.text()
-                                    .append(Component.text("Interner Serverfehler beim anlegen des Reports.", NamedTextColor.RED))
-                                    .appendNewline()
-                                    .append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
-                    );
-                    break;
-            }
-
-
+            HttpClient client = HttpClient.newHttpClient();
+            HttpRequest httpRequest = HttpRequest.newBuilder()
+                    .uri(this.apiEndpoint)
+                    .header("Content-Type", "application/json")
+                    .POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(reportRequest)))
+                    .build();
 
+            HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+            printResultMessage(issuer, httpResponse);
         } catch (IOException | InterruptedException e) {
+            issuer.sendMessage(
+                    Component.text("Internal server error: " + e.getMessage()).color(NamedTextColor.RED)
+            );
             throw new RuntimeException(e);
         }
     }
 
-    private HttpResponse<String> postRequest(URI uri, String body) throws IOException, InterruptedException {
-        HttpClient client = HttpClient.newHttpClient();
-        HttpRequest httpRequest = HttpRequest.newBuilder()
-                .uri(uri)
-                .header("Content-Type", "application/json")
-                .POST(HttpRequest.BodyPublishers.ofString(body))
-                .build();
+    private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) {
+        switch (httpResponse.statusCode()) {
+            case 201:
+                Response response = new Gson().fromJson(httpResponse.body(), Response.class);
+                issuer.sendMessage(
+                        Component.text()
+                                .append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY))
+                                .appendNewline()
+                                .appendNewline()
+                                .append(Component.text("!!! Report hier fertigstellen !!!", NamedTextColor.GOLD))
+                                .appendNewline()
+                                .appendNewline()
+                                .append(
+                                        Component
+                                                .text(" > Hier klicken < ", NamedTextColor.GREEN)
+                                                .hoverEvent(HoverEvent.showText(Component.text(response.url).color(NamedTextColor.GREEN)))
+                                                .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
+                                )
+                                .appendNewline()
+                                .appendNewline()
+                                .append(
+                                        Component
+                                                .text(response.url, NamedTextColor.GRAY)
+                                                .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
+                                )
+                                .appendNewline()
+                                .appendNewline()
+                                .append(Component.text("/\\".repeat(20), NamedTextColor.DARK_GRAY))
+                );
+                break;
 
-        return client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+            case 400:
+                issuer.sendMessage(
+                        Component.text()
+                                .append(Component.text("Der angegebene Nutzer ist in unserem System nicht bekannt.", NamedTextColor.RED))
+                                .appendNewline()
+                                .append(Component.text("Bist du sicher, dass du den Namen richtig geschrieben hast?", NamedTextColor.RED))
+                                .appendNewline()
+                                .append(Component.text("Du kannst dich alternativ jederzeit bei einem Admin melden.", NamedTextColor.GRAY))
+                );
+                break;
+
+            case 401:
+            default:
+                issuer.sendMessage(
+                        Component.text()
+                                .append(Component.text("Interner Serverfehler beim anlegen des Reports.", NamedTextColor.RED))
+                                .appendNewline()
+                                .append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
+                );
+                break;
+        }
     }
 
     @Override
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/command/ReportCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/command/ReportCommand.java
index eb40dca..ec23e65 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/command/ReportCommand.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/report/command/ReportCommand.java
@@ -1,6 +1,5 @@
 package eu.mhsl.craftattack.spawn.appliances.report.command;
 
-import eu.mhsl.craftattack.spawn.Main;
 import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
 import eu.mhsl.craftattack.spawn.appliances.report.Report;
 import net.kyori.adventure.text.Component;
@@ -26,16 +25,6 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
 
     @Override
     protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
-        if(args.length == 0) {
-            sender.sendMessage(
-                    Component
-                            .text("Bitte gib einen Spieler an, den du reporten möchtest!", NamedTextColor.RED)
-                            .appendNewline()
-                            .append(Component.text("/report <spieler> [grund]", NamedTextColor.RED))
-            );
-            return;
-        }
-
         sender.sendMessage(
                 Component.newline()
                         .append(Component.text("Reportanfrage wird erstellt...", NamedTextColor.GREEN))
@@ -44,13 +33,17 @@ public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
                         .appendNewline()
         );
 
-        Bukkit.getScheduler().runTask(Main.instance(), () -> {
-            getAppliance().issueReport(
-                    getPlayer(),
-                    args[0],
-                    Arrays.stream(args).skip(1).collect(Collectors.joining(" "))
-            );
-        });
+        if(args.length == 0) {
+            getAppliance().reportToUnknown(getPlayer());
+        }
+
+        if(args.length == 1) {
+            getAppliance().reportToKnown(getPlayer(), args[0], null);
+        }
+
+        if(args.length > 1) {
+            getAppliance().reportToKnown(getPlayer(), args[0], Arrays.stream(args).skip(1).collect(Collectors.joining(" ")));
+        }
     }
 
     @Override
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 004cf0a..375640f 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -20,3 +20,6 @@ countdown:
   countdown: 60
   worldborder-before: 37
   worldborder-after: 0
+
+report:
+  api: https://mhsl.eu/craftattack/report