Fix errors with playtime message length

This commit is contained in:
Heliosares
2023-11-06 20:36:45 -05:00
parent d12cef51c4
commit 1bb6cce895
3 changed files with 18 additions and 8 deletions

View File

@@ -147,7 +147,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.20.1-R0.1-SNAPSHOT</version>
<version>1.20.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@@ -11,6 +11,7 @@ import dev.heliosares.auxprotect.spigot.AuxProtectSpigot;
import dev.heliosares.auxprotect.utils.*;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Bukkit;
import java.sql.SQLException;
@@ -381,11 +382,13 @@ public class LookupCommand extends Command {
return;
}
String name = users.stream().findAny().orElse(null);
sender.sendMessage(PlayTimeSolver.solvePlaytime(rs,
for (BaseComponent[] line : PlayTimeSolver.solvePlaytime(rs,
params_.getAfter(),
params_.getBefore() == Long.MAX_VALUE ? System.currentTimeMillis() : params_.getBefore(),
name,
plugin.getSenderAdapter(name) != null));
plugin.getSenderAdapter(name) != null)) {
sender.sendMessage(line);
}
return;
} else if (params_.hasFlag(Flag.ACTIVITY)) {
String uuid = sender.getUniqueId().toString();

View File

@@ -15,21 +15,21 @@ import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
public class PlayTimeSolver {
public static BaseComponent[] solvePlaytime(List<DbEntry> entries, long startTimeMillis, long stopTimeMillis, String player, final boolean currentlyOnline) {
public static BaseComponent[][] solvePlaytime(List<DbEntry> entries, long startTimeMillis, long stopTimeMillis, String player, final boolean currentlyOnline) {
ComponentBuilder message = new ComponentBuilder().append("", FormatRetention.NONE);
final int limitDays = 60;
final int hours = (int) Math.ceil((stopTimeMillis - startTimeMillis) / 3600000D);
if (hours - 1 > limitDays * 24) {
message.append(Language.L.COMMAND__LOOKUP__PLAYTIME__TOOLONG.translate(limitDays));
return message.create();
return new BaseComponent[][]{message.create()};
}
StringBuilder line = new StringBuilder(ChatColor.DARK_GRAY + "" + ChatColor.STRIKETHROUGH);
line.append(String.valueOf((char) 65293).repeat(6)).append(ChatColor.RESET);
message.append(line + " " + Language.L.COMMAND__LOOKUP__PLAYTIME__HEADER.translate(player, Language.getOptionalS(player)) + " " + line);
message.append("\n");
LocalDateTime startTime = Instant.ofEpochMilli(startTimeMillis).atZone(ZoneId.systemDefault()).toLocalDateTime()
.withMinute(0).withSecond(0).withNano(0);
long firstTime = startTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
@@ -100,6 +100,10 @@ public class PlayTimeSolver {
newLogin = newLogout = false;
}
}
List<BaseComponent[]> components = new ArrayList<>();
components.add(message.create());
message = new ComponentBuilder();
DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("ddMMM");
DateTimeFormatter formatterDateTime = DateTimeFormatter.ofPattern("ddMMM hh a");
for (int i = 0; i < startTime.getHour(); i++) {
@@ -128,9 +132,11 @@ public class PlayTimeSolver {
if (time.getHour() == 23) {
message.append(" " + time.format(formatterDate)).color(ChatColor.BLUE).event((HoverEvent) null);
message.append(" (" + (Math.round(hourCount * 10.0) / 10.0) + "h)\n").color(ChatColor.GRAY)
message.append(" (" + (Math.round(hourCount * 10.0) / 10.0) + "h)").color(ChatColor.GRAY)
.event((HoverEvent) null);
hourCount = 0;
components.add(message.create());
message = new ComponentBuilder();
}
}
for (int i = counter.length; ; i++) {
@@ -141,6 +147,7 @@ public class PlayTimeSolver {
message.append(" " + startTime.plusHours(hours).format(formatterDate)).color(ChatColor.BLUE);
message.append(" (" + (Math.round(hourCount * 10.0) / 10.0) + "h)").color(ChatColor.GRAY)
.event((HoverEvent) null);
return message.create();
components.add(message.create());
return components.toArray(new BaseComponent[0][0]);
}
}