diff --git a/api/src/main/java/com/alttd/chat/database/Queries.java b/api/src/main/java/com/alttd/chat/database/Queries.java index 33a4707..2dc67dc 100755 --- a/api/src/main/java/com/alttd/chat/database/Queries.java +++ b/api/src/main/java/com/alttd/chat/database/Queries.java @@ -482,4 +482,26 @@ public class Queries { return userNames; } + + public static UUID getPlayerUUID(String playerName) { + String query = "SELECT UUID FROM utility_users WHERE Username = ?"; + UUID uuid = null; + try { + Connection connection = DatabaseConnection.getConnection(); + + PreparedStatement statement = connection.prepareStatement(query); + + statement.setString(1, playerName); + + ResultSet resultSet = statement.executeQuery(); + + while (resultSet.next()) { + uuid = UUID.fromString(resultSet.getString("UUID")); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return uuid; + } } diff --git a/api/src/main/java/com/alttd/chat/objects/ChatUser.java b/api/src/main/java/com/alttd/chat/objects/ChatUser.java index fce0860..c9d853c 100755 --- a/api/src/main/java/com/alttd/chat/objects/ChatUser.java +++ b/api/src/main/java/com/alttd/chat/objects/ChatUser.java @@ -4,7 +4,6 @@ import com.alttd.chat.database.Queries; import com.alttd.chat.objects.channels.Channel; import com.alttd.chat.util.Utility; import net.kyori.adventure.text.Component; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.List; diff --git a/api/src/main/java/com/alttd/chat/objects/Mail.java b/api/src/main/java/com/alttd/chat/objects/Mail.java index 6f3acfa..d90f177 100755 --- a/api/src/main/java/com/alttd/chat/objects/Mail.java +++ b/api/src/main/java/com/alttd/chat/objects/Mail.java @@ -4,11 +4,11 @@ import java.util.UUID; public class Mail { - private final UUID uuid; // the player - private final UUID sender; // the sender - private final long sendTime; // any other option for this? does the db store recordcreation and edit time? - private long readTime; // any other option for this? - private final String message; // do we want staff to edit this after being send but being unread? + private final UUID uuid; + private final UUID sender; + private final long sendTime; + private long readTime; + private final String message; public Mail(UUID player, UUID sender, long sendTime, long readTime, String message) { this.uuid = player; @@ -21,8 +21,8 @@ public class Mail { public Mail(UUID player, UUID sender, String message) { this.uuid = player; this.sender = sender; - this.sendTime = System.nanoTime(); - this.readTime = System.nanoTime(); + this.sendTime = System.currentTimeMillis(); + this.readTime = System.currentTimeMillis(); this.message = message; } diff --git a/velocity/src/main/java/com/alttd/velocitychat/commands/SendMail.java b/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java similarity index 98% rename from velocity/src/main/java/com/alttd/velocitychat/commands/SendMail.java rename to velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java index 0310363..61f6f57 100755 --- a/velocity/src/main/java/com/alttd/velocitychat/commands/SendMail.java +++ b/velocity/src/main/java/com/alttd/velocitychat/commands/MailCommand.java @@ -15,9 +15,9 @@ import com.velocitypowered.api.proxy.ProxyServer; import java.util.ArrayList; import java.util.Collection; -public class SendMail { +public class MailCommand { - public SendMail(ProxyServer proxyServer) { + public MailCommand(ProxyServer proxyServer) { RequiredArgumentBuilder playerNode = RequiredArgumentBuilder .argument("player", StringArgumentType.string()) diff --git a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java index 58031e8..702afd0 100755 --- a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java +++ b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java @@ -1,20 +1,20 @@ package com.alttd.velocitychat.handlers; -import com.alttd.chat.util.Utility; -import com.alttd.velocitychat.VelocityChat; import com.alttd.chat.config.Config; import com.alttd.chat.managers.ChatUserManager; import com.alttd.chat.managers.PartyManager; import com.alttd.chat.objects.ChatUser; +import com.alttd.chat.objects.Mail; import com.alttd.chat.objects.Party; import com.alttd.chat.util.ALogger; +import com.alttd.chat.util.Utility; +import com.alttd.velocitychat.VelocityChat; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ServerConnection; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; @@ -113,29 +113,64 @@ public class ChatHandler { }); } - /** - * constructs a mail object and notifies all involved players about it - * / mail send playerA,playerB,playerC message - */ public void sendMail(CommandSource commandSource, String recipient, String message) { - UUID uuid; - if (commandSource instanceof Player) { - uuid = ((Player) commandSource).getUniqueId(); - } else { - uuid = Config.CONSOLEUUID; + UUID uuid = Config.CONSOLEUUID;; + String senderName = Config.CONSOLENAME; + UUID targetUUID; + if (commandSource instanceof Player player) { + uuid = player.getUniqueId(); + senderName = player.getUsername(); } Optional optionalPlayer = VelocityChat.getPlugin().getProxy().getPlayer(recipient); - - //Mail mail = new Mail() - // todo construct the mail and notify the player if online? + if (optionalPlayer.isEmpty()) { + targetUUID = ServerHandler.getPlayerUUID(recipient); + if (targetUUID == null) { + commandSource.sendMessage(Utility.parseMiniMessage("A player with this name hasn't logged in recently.")); // TOOD load from config + return; + } + } else { + targetUUID = optionalPlayer.get().getUniqueId(); + } + Mail mail = new Mail(uuid, targetUUID, message); + ChatUser chatUser = ChatUserManager.getChatUser(targetUUID); + chatUser.addMail(mail); + // TODO load from config + String finalSenderName = senderName; + optionalPlayer.ifPresent(player -> player.sendMessage(Utility.parseMiniMessage("New mail from " + finalSenderName))); } public void readMail(CommandSource commandSource, String targetPlayer, boolean unread) { - + UUID uuid = ServerHandler.getPlayerUUID(targetPlayer); + if (uuid == null) { + commandSource.sendMessage(Utility.parseMiniMessage("A player with this name hasn't logged in recently.")); // TOOD load from config + return; + } + ChatUser chatUser = ChatUserManager.getChatUser(uuid); + commandSource.sendMessage(getMails(chatUser.getMails(), false)); } public void readMail(CommandSource commandSource, boolean unread) { + if (commandSource instanceof Player player) { + ChatUser chatUser = ChatUserManager.getChatUser(player.getUniqueId()); + commandSource.sendMessage(getMails(chatUser.getMails(), unread)); + } + } + private Component getMails(List mails, boolean mark) { + Component component = Component.empty(); + for (Mail mail : mails) { + if (mail.isUnRead() && mark) mail.setReadTime(System.currentTimeMillis()); + ChatUser chatUser = ChatUserManager.getChatUser(mail.getSender()); + List