Added ReportCommand

This commit is contained in:
Elias Müller 2023-10-25 15:27:40 +02:00
parent b28a618431
commit 309c1ac3f2
4 changed files with 197 additions and 1 deletions

View File

@ -5,6 +5,7 @@ import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
import eu.mhsl.craftattack.spawn.appliances.countdown.Countdown; import eu.mhsl.craftattack.spawn.appliances.countdown.Countdown;
import eu.mhsl.craftattack.spawn.appliances.debug.Debug; import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
import eu.mhsl.craftattack.spawn.appliances.report.Report;
import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist; import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist;
import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear; import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear;
import eu.mhsl.craftattack.spawn.config.Configuration; import eu.mhsl.craftattack.spawn.config.Configuration;
@ -32,8 +33,8 @@ public final class Main extends JavaPlugin {
new TitleClear(), new TitleClear(),
new Countdown(), new Countdown(),
new Tablist(), new Tablist(),
new ChatMessages()
new ChatMessages(), new ChatMessages(),
new Report(),
new Debug() new Debug()
); );
Bukkit.getLogger().info("Loading appliances..."); Bukkit.getLogger().info("Loading appliances...");

View File

@ -0,0 +1,111 @@
package eu.mhsl.craftattack.spawn.appliances.report;
import com.google.gson.Gson;
import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.report.command.ReportCommand;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
import java.util.UUID;
public class Report extends Appliance {
private record Request(UUID reporter, UUID reported, String reason) {}
private record Response(String url) {}
public void issueReport(Player issuer, String targetUsername, String reason) {
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;
}
} catch (IOException | InterruptedException e) {
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();
return client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
}
@Override
protected @NotNull List<ApplianceCommand<?>> commands() {
return List.of(new ReportCommand());
}
}

View File

@ -0,0 +1,80 @@
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;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ReportCommand extends ApplianceCommand.PlayerChecked<Report> {
public ReportCommand() {
super("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))
.appendNewline()
.append(Component.text("Bitte warte einen Augenblick", NamedTextColor.GRAY))
.appendNewline()
);
Bukkit.getScheduler().runTask(Main.instance(), () -> {
getAppliance().issueReport(
getPlayer(),
args[0],
Arrays.stream(args).skip(1).collect(Collectors.joining(" "))
);
});
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
List<String> response = new ArrayList<>();
if(args.length == 1) {
response = Stream.concat(
Bukkit.getOnlinePlayers().stream().map(Player::getName),
Arrays.stream(Bukkit.getOfflinePlayers()).map(OfflinePlayer::getName)
).toList();
}
if(args.length == 2) {
response = List.of(
"Griefing",
"Diebstahl",
"Beleidigung",
"Hacking",
"Andere Regelverstöße",
" "
);
}
return super.tabCompleteReducer(response, args);
}
}

View File

@ -8,6 +8,10 @@ commands:
description: Moves world museum villager to current player location and persists location to config description: Moves world museum villager to current player location and persists location to config
usage: /moveWmVillager usage: /moveWmVillager
permission: admin permission: admin
report:
description: Reporte einen Spieler
userinfo:
description: Get UUID from any user
projectStart: projectStart:
description: Starts project countdown description: Starts project countdown
projectStartCancel: projectStartCancel: