Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ repositories {
}

dependencies {
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.3.0")
implementation("com.diffplug.gradle.spotless:com.diffplug.gradle.spotless.gradle.plugin:8.1.0")
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.3.1")
implementation("com.diffplug.gradle.spotless:com.diffplug.gradle.spotless.gradle.plugin:8.2.0")
implementation("de.skuzzle.restrictimports:de.skuzzle.restrictimports.gradle.plugin:3.0.0")
}
25 changes: 15 additions & 10 deletions buildSrc/src/main/kotlin/buildlogic.java-conventions.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,24 @@ repositories {
}

dependencies {
implementation("com.zaxxer:HikariCP:2.4.1") { isTransitive = false }
implementation("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false }
api("com.zaxxer:HikariCP:2.4.1") { isTransitive = false }
api("fr.minuskube.inv:smart-invs:1.2.7") { isTransitive = false }
api("redis.clients:jedis:3.5.1")
api("net.kyori:adventure-api:4.26.1")
api("net.kyori:adventure-text-serializer-plain:4.26.1")
api("net.kyori:adventure-platform-bukkit:4.4.1")
api("org.reflections:reflections:0.10.2")

implementation("redis.clients:jedis:3.5.1")
implementation("net.kyori:adventure-api:4.25.0")
implementation("net.kyori:adventure-text-serializer-plain:4.25.0")
implementation("net.kyori:adventure-platform-bukkit:4.4.1")
implementation("org.reflections:reflections:0.10.2")
// Annotations
api("org.jspecify:jspecify:1.0.0")
compileOnly("org.jetbrains:annotations:26.0.2-1")

// Runtime dependencies
compileOnly("tc.oc.pgm:core:0.16-SNAPSHOT")
compileOnly("tc.oc.pgm:util:0.16-SNAPSHOT")
compileOnly("tc.oc.occ:AFK:1.0.0-SNAPSHOT")
compileOnly("tc.oc.occ:Environment:1.0.0-SNAPSHOT")
compileOnly("org.incendo:cloud-annotations:2.0.0")
compileOnly("org.jetbrains:annotations:26.0.2")
compileOnly("net.dmulloy2:ProtocolLib:5.4.0")

// Minecraft includes these (or equivalents)
Expand All @@ -60,13 +63,15 @@ spotless {
ratchetFrom = "origin/dev"
java {
removeUnusedImports()
palantirJavaFormat("2.83.0").style("GOOGLE").formatJavadoc(true)
trimTrailingWhitespace()
formatAnnotations()
palantirJavaFormat("2.85.0").style("GOOGLE").formatJavadoc(true)
}
}

restrictImports {
group {
reason = "Use org.jetbrains.annotations to add annotations"
reason = "Use org.jspecify.annotations to add annotations, or org.jetbrains.annotations if needed"
bannedImports = listOf("javax.annotation.**")
}
group {
Expand Down
1 change: 0 additions & 1 deletion core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ tasks.named<ShadowJar>("shadowJar") {
}

dependencies {
exclude(dependency("org.jspecify:jspecify"))
exclude(dependency("org.jetbrains:annotations"))
}

Expand Down
58 changes: 19 additions & 39 deletions core/src/main/java/dev/pgm/community/CommunityCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import dev.pgm.community.utils.NameUtils;
import dev.pgm.community.utils.PGMUtils;
import dev.pgm.community.utils.VisibilityUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
Expand All @@ -24,7 +25,7 @@
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import org.jspecify.annotations.Nullable;
import tc.oc.pgm.api.match.Match;
import tc.oc.pgm.api.player.MatchPlayer;
import tc.oc.pgm.teams.Team;
Expand All @@ -46,27 +47,15 @@ protected CompletableFuture<Optional<UUID>> getTarget(String target, UsersFeatur
boolean username = NameUtils.isMinecraftName(target);
if (!username) {
try {
return CompletableFuture.completedFuture(Optional.ofNullable(UUID.fromString(target)));
return CompletableFuture.completedFuture(Optional.of(UUID.fromString(target)));
} catch (IllegalArgumentException e) {
throw TextException.exception(target + " is not a valid UUID.");
}
}
return service.getStoredId(target);
}

public class PlayerSelection {

private final Set<Player> players;
private final Component selectionText;

public PlayerSelection(Set<Player> players, Component selectionText) {
this.players = players;
this.selectionText = selectionText;
}

public Set<Player> getPlayers() {
return players;
}
public record PlayerSelection(Set<Player> players, Component selectionText) {

public Component getText() {
List<Component> names = players.stream()
Expand All @@ -75,9 +64,9 @@ public Component getText() {
.collect(Collectors.toList());

Component hover = TextFormatter.list(names, NamedTextColor.GRAY);
if (getPlayers().size() > names.size()) {
int leftOver = getPlayers().size() - names.size();
hover
if (players().size() > names.size()) {
int leftOver = players().size() - names.size();
hover = hover
.append(text(" plus "))
.append(text(leftOver, NamedTextColor.YELLOW))
.append(text(" other player" + (leftOver != 1 ? "s" : "")))
Expand Down Expand Up @@ -106,7 +95,7 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {

String[] parts = input.split("=");

List<Player> allOnline = Bukkit.getOnlinePlayers().stream().collect(Collectors.toList());
List<Player> allOnline = new ArrayList<>(Bukkit.getOnlinePlayers());

Set<Player> targets = Sets.newHashSet();
Component text;
Expand Down Expand Up @@ -141,16 +130,14 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
// Allow Observers to be selected
if (teamName.toLowerCase().startsWith("obs")) {
text = text("Observers", NamedTextColor.AQUA);
targets.addAll(match.getObservers().stream()
.map(MatchPlayer::getBukkit)
.collect(Collectors.toList()));
targets.addAll(
match.getObservers().stream().map(MatchPlayer::getBukkit).toList());
} else {
Team team = teams.bestFuzzyMatch(teamName);
if (team == null) {
throw TextException.exception(teamName + " is not a valid team name");
}
targets.addAll(
team.getPlayers().stream().map(MatchPlayer::getBukkit).collect(Collectors.toList()));
targets.addAll(team.getPlayers().stream().map(MatchPlayer::getBukkit).toList());
text = text()
.append(text(team.getNameLegacy(), TextFormatter.convert(team.getColor())))
.build();
Expand All @@ -176,9 +163,7 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
// If no permission for multiple, get a random single entry
Player random = targets.stream().findAny().get();
targets.clear();
if (random != null) {
targets.add(random);
}
targets.add(random);
}
}

Expand All @@ -189,8 +174,7 @@ private int parseInputInt(String input, int def) {
int value = def;
try {
value = Integer.parseInt(input);
} catch (NumberFormatException e) {
value = def;
} catch (NumberFormatException ignored) {
}
return value;
}
Expand All @@ -210,8 +194,8 @@ protected Player getSinglePlayer(CommandAudience viewer, String target, boolean
}

if (player == null
|| (player != null && !canViewVanished(viewer, player))
|| (player != null && nicked == null && isNicked(viewer, player))) {
|| !canViewVanished(viewer, player)
|| nicked == null && isNicked(viewer, player)) {
viewer.sendWarning(formatNotFoundComponent(target));
return null;
}
Expand All @@ -234,7 +218,7 @@ protected UUID getOnlineTarget(String target, UsersFeature service) {
// priority now
Optional<UUID> cachedId = service.getId(
target); // If user is online or was online recently, we will have their UUID.
if (!cachedId.isPresent()) {
if (cachedId.isEmpty()) {
throw TextException.exception(formatNotFoundMsg(target));
} else {
id = cachedId.get();
Expand All @@ -257,13 +241,9 @@ private boolean isVanished(@Nullable Player player) {
}

public boolean canViewVanished(CommandAudience viewer, Player player) {
boolean vanished = isVanished(player);
if (vanished
&& viewer.isPlayer()
&& !viewer.getPlayer().hasPermission(CommunityPermissions.VIEW_VANISHED)) {
return false;
}
return true;
return !isVanished(player)
|| !viewer.isPlayer()
|| viewer.getPlayer().hasPermission(CommunityPermissions.VIEW_VANISHED);
}

protected String formatNotFoundMsg(String target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ public RequestType getType() {
return type;
}

public static enum RequestType {
public enum RequestType {
PLAYER_HELP,
REPORT;
REPORT
}

@Override
Expand Down
5 changes: 2 additions & 3 deletions core/src/main/java/dev/pgm/community/assistance/Report.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class Report extends AssistanceRequest implements Comparable<Report> {
* @param reporterId UUID of reporting player
* @param reason reason for report
* @param time time reported
* @param name of current server
* @param server name of current server
*/
public Report(UUID reportedId, UUID reporterId, String reason, long time, String server) {
this(UUID.randomUUID(), reportedId, reporterId, reason, time, server);
Expand Down Expand Up @@ -51,8 +51,7 @@ public int compareTo(Report o) {

@Override
public boolean equals(Object other) {
if (!(other instanceof Report)) return false;
Report otherReport = (Report) other;
if (!(other instanceof Report otherReport)) return false;
return getId().equals(otherReport.getId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

public class PlayerHelpCommand extends CommunityCommand {

private AssistanceFeature assistance;
private ModerationFeature moderation;
private final AssistanceFeature assistance;
private final ModerationFeature moderation;

public PlayerHelpCommand() {
this.assistance = Community.get().getFeatures().getReports();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,14 @@ public void recentReports(
checkEnabled();

if (player != null) {
reports
.query(player)
.thenAcceptAsync(
reports -> {
if (reports.isEmpty()) {
audience.sendWarning(
text("No reports found for ").append(text(player, NamedTextColor.AQUA)));
return;
}
sendReportHistory(audience, reports, page);
});
reports.query(player).thenAcceptAsync(reports -> {
if (reports.isEmpty()) {
audience.sendWarning(
text("No reports found for ").append(text(player, NamedTextColor.AQUA)));
return;
}
sendReportHistory(audience, reports, page);
});
return;
}

Expand All @@ -113,16 +110,15 @@ public void sendReportHistory(CommandAudience audience, Collection<Report> repor
int pages = (reportData.size() + perPage - 1) / perPage;
page = Math.max(1, Math.min(page, pages));

Component pageNum =
translatable(
"command.simplePageHeader",
NamedTextColor.GRAY,
text(Integer.toString(page), NamedTextColor.RED),
text(Integer.toString(pages), NamedTextColor.RED));
Component pageNum = translatable(
"command.simplePageHeader",
NamedTextColor.GRAY,
text(Integer.toString(page), NamedTextColor.RED),
text(Integer.toString(pages), NamedTextColor.RED));

Component header =
translatable("moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum)
.append(text(" (").append(headerResultCount).append(text(") » ")).append(pageNum));
Component header = translatable(
"moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum)
.append(text(" (").append(headerResultCount).append(text(") » ")).append(pageNum));

Component formattedHeader =
TextFormatter.horizontalLineHeading(audience.getSender(), header, NamedTextColor.DARK_GRAY);
Expand All @@ -132,23 +128,19 @@ public Component format(Report data, int index) {
Component reporterName = getReportFormatName(data.getSenderId()).join();
Component reportedName = getReportFormatName(data.getTargetId()).join();

Component serverName =
text("Server ", NamedTextColor.GRAY)
.append(text(": ", NamedTextColor.DARK_GRAY))
.append(text(data.getServer(), NamedTextColor.AQUA));
Component serverName = text("Server ", NamedTextColor.GRAY)
.append(text(": ", NamedTextColor.DARK_GRAY))
.append(text(data.getServer(), NamedTextColor.AQUA));

TextComponent.Builder reporter =
text()
.append(
translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName));
TextComponent.Builder reporter = text()
.append(translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName));

if (!data.getServer().equalsIgnoreCase(Community.get().getServerConfig().getServerId())) {
reporter.append(newline()).append(serverName);
}

Component timeAgo =
TemporalComponent.relativePastApproximate(data.getTime())
.color(NamedTextColor.DARK_GREEN);
Component timeAgo = TemporalComponent.relativePastApproximate(data.getTime())
.color(NamedTextColor.DARK_GREEN);

return text()
.append(timeAgo.hoverEvent(HoverEvent.showText(reporter.build())))
Expand All @@ -171,9 +163,7 @@ private CompletableFuture<Component> getReportFormatName(UUID id) {
return usernames
.getStoredUsername(id)
.thenApplyAsync(
name -> {
return PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY);
});
name -> PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY));
}

private void checkEnabled() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
import org.bukkit.configuration.Configuration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.jetbrains.annotations.Nullable;
import org.jspecify.annotations.Nullable;
import tc.oc.pgm.util.Audience;
import tc.oc.pgm.util.bukkit.BukkitUtils;
import tc.oc.pgm.util.named.NameStyle;
Expand Down Expand Up @@ -110,7 +110,7 @@ private boolean isPersistent() {

@Override
public boolean canRequest(UUID uuid) {
return isCooldownEnabled() ? cooldown.getIfPresent(uuid) == null : true;
return !isCooldownEnabled() || cooldown.getIfPresent(uuid) == null;
}

@Override
Expand Down Expand Up @@ -346,9 +346,9 @@ public void onPunishment(PlayerPunishmentEvent event) {
.getReporyNotifyTime()
.minus(Duration.between(r.getTime(), Instant.now()))
.isNegative())
.collect(Collectors.toList());
.toList();
Set<UUID> reporters =
relatedReports.stream().map(r -> r.getSenderId()).collect(Collectors.toSet());
relatedReports.stream().map(AssistanceRequest::getSenderId).collect(Collectors.toSet());
for (UUID reporterId : reporters) {
Player onlineReporter = Bukkit.getPlayer(reporterId);
if (onlineReporter != null) {
Expand Down
Loading