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