Added ReportCommand
This commit is contained in:
parent
b28a618431
commit
309c1ac3f2
@ -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...");
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user