Compare commits

..

No commits in common. "a412f5c24c89834e248fe2e6496d5e3e4541a7f5" and "eae979ee65a8549af691927aadf10c976b4e0ada" have entirely different histories.

4 changed files with 17 additions and 122 deletions

View File

@ -13,12 +13,13 @@ import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.List;
import java.util.WeakHashMap;
public class AfkTag extends Appliance implements DisplayName.DisplayNamed { public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
private final HashMap<UUID, Long> afkTimings = new HashMap<>(); private final WeakHashMap<Player, Long> afkTimings = new WeakHashMap<>();
private static final int updateIntervalSeconds = 30; private static final int updateIntervalSeconds = 30;
private static final int afkWhenMillis = 3 * 60 * 1000; private static final int afkWhenMillis = 5 * 60 * 1000;
@Override @Override
public void onEnable() { public void onEnable() {
@ -32,22 +33,21 @@ public class AfkTag extends Appliance implements DisplayName.DisplayNamed {
public void resetTiming(Player player) { public void resetTiming(Player player) {
boolean wasAfk = isAfk(player); boolean wasAfk = isAfk(player);
this.afkTimings.put(player.getUniqueId(), System.currentTimeMillis()); this.afkTimings.put(player, System.currentTimeMillis());
if (wasAfk) this.updateAfkPrefix(player); if (wasAfk) this.updateAfkPrefix(player);
} }
private void checkAfkPlayers() { private void checkAfkPlayers() {
this.afkTimings.keySet().stream() this.afkTimings.keySet().forEach((player) -> {
.map(Bukkit::getPlayer) if(!isAfk(player)) return;
.filter(Objects::nonNull) this.updateAfkPrefix(player);
.filter(this::isAfk) });
.forEach(this::updateAfkPrefix);
} }
private boolean isAfk(Player player) { private boolean isAfk(Player player) {
if(player.isSleeping()) return false; if(player.isSleeping()) return false;
long lastTimeActive = this.afkTimings.getOrDefault(player.getUniqueId(), 0L); long lastTimeActive = this.afkTimings.getOrDefault(player, 0L);
long timeSinceLastActive = System.currentTimeMillis() - lastTimeActive; long timeSinceLastActive = System.currentTimeMillis() - lastTimeActive;
return timeSinceLastActive >= afkWhenMillis; return timeSinceLastActive >= afkWhenMillis;
} }

View File

@ -5,12 +5,9 @@ import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentBuilder;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.apache.http.client.utils.URIBuilder;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -19,7 +16,6 @@ import org.jetbrains.annotations.Nullable;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient; import java.net.http.HttpClient;
import java.net.http.HttpRequest; import java.net.http.HttpRequest;
import java.net.http.HttpResponse; import java.net.http.HttpResponse;
@ -49,16 +45,7 @@ public class Report extends Appliance {
private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) { private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) {
} }
private record ReportResponse(@NotNull String url) { private record Response(@NotNull String url) {
}
private record ReportsResponse(List<ReportInfo> from_self, Object to_self) {
}
private record ReportInfo(Reporter reported, @NotNull String subject, boolean draft, @NotNull String status, @NotNull String url) {
}
private record Reporter(@NotNull String username, @NotNull String uuid) {
} }
public void reportToUnknown(@NotNull Player issuer) { public void reportToUnknown(@NotNull Player issuer) {
@ -79,27 +66,6 @@ public class Report extends Appliance {
this.issueReport(issuer, request); this.issueReport(issuer, request);
} }
public void requestReports(Player issuer) {
URIBuilder uriBuilder = new URIBuilder(this.apiEndpoint);
uriBuilder.addParameter("uuid", issuer.getUniqueId().toString());
try(HttpClient client = HttpClient.newHttpClient()) {
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(uriBuilder.build())
.header("Content-Type", "application/json")
.GET()
.build();
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
this.printReports(issuer, httpResponse);
} catch (IOException | InterruptedException | URISyntaxException e) {
issuer.sendMessage(
Component.text("Internal server description: " + e.getMessage()).color(NamedTextColor.RED)
);
throw new RuntimeException(e);
}
}
private void issueReport(Player issuer, Request reportRequest) { private void issueReport(Player issuer, Request reportRequest) {
try(HttpClient client = HttpClient.newHttpClient()) { try(HttpClient client = HttpClient.newHttpClient()) {
HttpRequest httpRequest = HttpRequest.newBuilder() HttpRequest httpRequest = HttpRequest.newBuilder()
@ -118,57 +84,10 @@ public class Report extends Appliance {
} }
} }
private void printReports(Player issuer, HttpResponse<String> httpResponse) {
if(httpResponse.statusCode() != 200) {
Main.logger().warning("Failed to request Reports: " + httpResponse.statusCode());
issuer.sendMessage(
Component.text()
.append(Component.text("Interner Serverfehler beim abfragen der Reports.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Bitte melde dich bei einem Admin!", NamedTextColor.RED))
);
return;
}
List<ReportInfo> reports = new Gson().fromJson(httpResponse.body(), ReportsResponse.class).from_self;
reports.removeIf(reportInfo -> reportInfo.draft);
if(reports.isEmpty()) {
issuer.sendMessage(
Component.text()
.append(Component.text("Du hast noch niemanden reportet.", NamedTextColor.RED))
.appendNewline()
.append(Component.text("Um jemanden zu melden, nutze /report", NamedTextColor.GRAY))
);
return;
}
ComponentBuilder<TextComponent, TextComponent.Builder> component = Component.text();
component.append(
Component.newline()
.append(Component.text("Von dir erstellte Reports: ", NamedTextColor.GOLD))
.appendNewline()
);
reports.forEach(reportInfo -> {
component.append(
Component.text()
.append(Component.text(" - ", NamedTextColor.WHITE))
.append(Component.text(reportInfo.reported.username, NamedTextColor.WHITE))
.append(Component.text(String.format(": %s", reportInfo.subject), NamedTextColor.GRAY))
.clickEvent(ClickEvent.openUrl(reportInfo.url))
.hoverEvent(HoverEvent.showText(Component.text("Klicke, um den Report einzusehen.", NamedTextColor.GOLD)))
);
component.appendNewline();
});
issuer.sendMessage(component.build());
}
private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) { private void printResultMessage(Player issuer, HttpResponse<String> httpResponse) {
switch(httpResponse.statusCode()) { switch(httpResponse.statusCode()) {
case 201: case 201:
ReportResponse createdReport = new Gson().fromJson(httpResponse.body(), ReportResponse.class); Response response = new Gson().fromJson(httpResponse.body(), Response.class);
issuer.sendMessage( issuer.sendMessage(
Component.text() Component.text()
.append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY)) .append(Component.text("\\/".repeat(20), NamedTextColor.DARK_GRAY))
@ -180,15 +99,15 @@ public class Report extends Appliance {
.append( .append(
Component Component
.text(" > Hier klicken < ", NamedTextColor.GREEN) .text(" > Hier klicken < ", NamedTextColor.GREEN)
.hoverEvent(HoverEvent.showText(Component.text(createdReport.url).color(NamedTextColor.GREEN))) .hoverEvent(HoverEvent.showText(Component.text(response.url).color(NamedTextColor.GREEN)))
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, createdReport.url)) .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
) )
.appendNewline() .appendNewline()
.appendNewline() .appendNewline()
.append( .append(
Component Component
.text(createdReport.url, NamedTextColor.GRAY) .text(response.url, NamedTextColor.GRAY)
.clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, createdReport.url)) .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.OPEN_URL, response.url))
) )
.appendNewline() .appendNewline()
.appendNewline() .appendNewline()
@ -223,9 +142,6 @@ public class Report extends Appliance {
@Override @Override
@NotNull @NotNull
protected List<ApplianceCommand<?>> commands() { protected List<ApplianceCommand<?>> commands() {
return List.of( return List.of(new ReportCommand());
new ReportCommand(),
new ReportsCommand()
);
} }
} }

View File

@ -1,19 +0,0 @@
package eu.mhsl.craftattack.spawn.appliances.report;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.util.text.ComponentUtil;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
public class ReportsCommand extends ApplianceCommand.PlayerChecked<Report> {
public ReportsCommand() {
super("reports");
}
@Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
sender.sendMessage(ComponentUtil.pleaseWait());
getAppliance().requestReports(getPlayer());
}
}

View File

@ -10,8 +10,6 @@ commands:
permission: admin permission: admin
report: report:
description: Reporte einen Spieler description: Reporte einen Spieler
reports:
description: Von dir erstellte Reports
userinfo: userinfo:
description: Get UUID from any user description: Get UUID from any user
projectStart: projectStart: