From 114567a30216df3a501f2ddcb866d1ad50bafdd0 Mon Sep 17 00:00:00 2001 From: Super_ Date: Wed, 15 Jul 2020 00:23:26 -0400 Subject: [PATCH] randomized gradients and /playtime --- .../admin/ActivityLogEntry.java | 13 ++++ .../command/Command_nickgradient.java | 21 ++++++- .../command/Command_playtime.java | 63 +++++++++++++++++++ .../totalfreedommod/command/Command_tag.java | 21 ++++++- .../totalfreedommod/player/PlayerData.java | 1 + .../totalfreedommod/util/FUtil.java | 15 +++++ 6 files changed, 128 insertions(+), 6 deletions(-) create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_playtime.java diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/ActivityLogEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/ActivityLogEntry.java index 6ff54333..7904e35f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/ActivityLogEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/ActivityLogEntry.java @@ -119,6 +119,19 @@ public class ActivityLogEntry implements IConfig ips.clear(); } + public int getTotalSecondsPlayed() + { + int result = 0; + for (String duration : durations) + { + String[] spl = duration.split(" "); + result += Integer.parseInt(spl[0]) * 60 * 60; + result += Integer.parseInt(spl[2]) * 60; + result += Integer.parseInt(spl[5]); + } + return result; + } + @Override public boolean isValid() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_nickgradient.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_nickgradient.java index a957c86a..3063c42a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_nickgradient.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_nickgradient.java @@ -45,11 +45,26 @@ public class Command_nickgradient extends FreedomCommand } } + String from = "", to = ""; java.awt.Color awt1, awt2; try { - awt1 = java.awt.Color.decode(args[0]); - awt2 = java.awt.Color.decode(args[1]); + if (args[0].equalsIgnoreCase("random") || + args[0].equalsIgnoreCase("r")) + { + awt1 = FUtil.getRandomAWTColor(); + from = " (From: " + FUtil.getHexStringOfAWTColor(awt1) + ")"; + } + else + awt1 = java.awt.Color.decode(args[0]); + if (args[1].equalsIgnoreCase("random") || + args[1].equalsIgnoreCase("r")) + { + awt2 = FUtil.getRandomAWTColor(); + to = " (To: " + FUtil.getHexStringOfAWTColor(awt2) + ")"; + } + else + awt2 = java.awt.Color.decode(args[1]); } catch (NumberFormatException ex) { @@ -69,7 +84,7 @@ public class Command_nickgradient extends FreedomCommand plugin.esb.setNickname(sender.getName(), outputNick); - msg("Your nickname is now: " + outputNick); + msg("Your nickname is now: '" + outputNick + ChatColor.GRAY + "'" + from + to); return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playtime.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playtime.java new file mode 100644 index 00000000..276bbd7d --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playtime.java @@ -0,0 +1,63 @@ +package me.totalfreedom.totalfreedommod.command; + +import java.time.Instant; +import java.util.Date; +import java.util.List; +import me.totalfreedom.totalfreedommod.admin.ActivityLogEntry; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Gets your playtime statistics.", usage = "/") +public class Command_playtime extends FreedomCommand +{ + @Override + public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole) + { + ActivityLogEntry entry = plugin.acl.getActivityLog(playerSender); + int seconds = entry.getTotalSecondsPlayed(); + int minutes = 0; + int hours = 0; + while (seconds >= 60) + { + seconds -= 60; + minutes += 1; + } + while (minutes >= 60) + { + minutes -= 60; + hours += 1; + } + if (entry.getTimestamps().size() == 0) + { + entry.addLogin(); + } + String lastLoginString = entry.getTimestamps().get(entry.getTimestamps().size() - 1); + Date currentTime = Date.from(Instant.now()); + lastLoginString = lastLoginString.replace("Login: ", ""); + Date lastLogin = FUtil.stringToDate(lastLoginString); + + long duration = currentTime.getTime() - lastLogin.getTime(); + long cseconds = duration / 1000 % 60; + long cminutes = duration / (60 * 1000) % 60; + long chours = duration / (60 * 60 * 1000); + StringBuilder sb = new StringBuilder() + .append("Playtime - " + sender.getName() + "\n") + .append("Current Session: " + chours + " hours, " + cminutes + " minutes, and " + cseconds + " seconds" + "\n") + .append("Overall: " + hours + " hours, " + minutes + " minutes, and " + seconds + " seconds" + "\n"); + List durations = entry.getDurations(); + if (durations.size() >= 3) + { + sb.append("Recent Sessions:"); + for (int i = 0; i < 3; i++) + { + sb.append("\n" + " - " + durations.get((durations.size() - 1) - i)); + } + } + msg(sb.toString()); + return true; + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java index 8795ff79..0293767c 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java @@ -183,11 +183,26 @@ public class Command_tag extends FreedomCommand } else if (args[0].equalsIgnoreCase("gradient")) { + String from = "", to = ""; java.awt.Color awt1, awt2; try { - awt1 = java.awt.Color.decode(args[1]); - awt2 = java.awt.Color.decode(args[2]); + if (args[1].equalsIgnoreCase("random") || + args[1].equalsIgnoreCase("r")) + { + awt1 = FUtil.getRandomAWTColor(); + from = " (From: " + FUtil.getHexStringOfAWTColor(awt1) + ")"; + } + else + awt1 = java.awt.Color.decode(args[1]); + if (args[2].equalsIgnoreCase("random") || + args[2].equalsIgnoreCase("r")) + { + awt2 = FUtil.getRandomAWTColor(); + to = " (To: " + FUtil.getHexStringOfAWTColor(awt2) + ")"; + } + else + awt2 = java.awt.Color.decode(args[2]); } catch (NumberFormatException ex) { @@ -233,7 +248,7 @@ public class Command_tag extends FreedomCommand { save(playerSender, tag); } - msg("Tag set to '" + outputTag + ChatColor.GRAY + "'." + (save ? " (Saved)" : "")); + msg("Tag set to '" + outputTag + ChatColor.GRAY + "'." + (save ? " (Saved)" : "") + from + to); return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java index 43963a76..48401f85 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java @@ -7,6 +7,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import lombok.Getter; import lombok.Setter; import me.totalfreedom.totalfreedommod.TotalFreedomMod; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java index 449190a0..6493a60c 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java @@ -779,6 +779,21 @@ public class FUtil return new java.awt.Color(color.getRed(), color.getGreen(), color.getBlue()); } + public static java.awt.Color getRandomAWTColor() + { + return new java.awt.Color(randomInteger(0, 255), randomInteger(0, 255), randomInteger(0, 255)); + } + + public static String getHexStringOfAWTColor(java.awt.Color color) + { + String hex = Integer.toHexString(color.getRGB() & 0xFFFFFF); + if (hex.length() < 6) + { + hex = "0" + hex; + } + return "#" + hex; + } + public static void createExplosionOnDelay(Location location, float power, int delay) { new BukkitRunnable()