package me.viper.teamplugin.manager; import me.viper.teamplugin.util.Utils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class MessageManager { private static final Map PENDING_INPUT = new HashMap<>(); private static final Map PENDING_REPLY = new HashMap<>(); public static void startInput(Player sender, String targetName) { PENDING_INPUT.put(sender.getUniqueId(), targetName); sender.sendMessage(Utils.color( Utils.replace(LangManager.get("msg_enter_message"), "%player%", targetName))); sender.sendMessage(Utils.color(LangManager.get("msg_cancel_hint"))); } public static void startReply(Player sender, String targetName) { PENDING_REPLY.put(sender.getUniqueId(), targetName); sender.sendMessage(Utils.color( Utils.replace(LangManager.get("msg_reply_prompt"), "%player%", targetName))); sender.sendMessage(Utils.color(LangManager.get("msg_cancel_hint"))); } public static boolean isAwaitingInput(UUID uuid) { return PENDING_INPUT.containsKey(uuid) || PENDING_REPLY.containsKey(uuid); } public static boolean handleInput(Player sender, String text) { String target = PENDING_INPUT.remove(sender.getUniqueId()); if (target == null) target = PENDING_REPLY.remove(sender.getUniqueId()); if (target == null) return false; if (text.equalsIgnoreCase(LangManager.get("msg_cancel_word"))) { sender.sendMessage(Utils.color(LangManager.get("msg_cancelled"))); return true; } deliver(sender, target, text); return true; } public static void cancelInput(UUID uuid) { PENDING_INPUT.remove(uuid); PENDING_REPLY.remove(uuid); } private static void deliver(Player sender, String targetName, String text) { MailboxManager.store(targetName, sender.getName(), text); Player target = Bukkit.getPlayerExact(targetName); if (target != null && target.isOnline()) { String formatted = Utils.color(Utils.replace( LangManager.get("msg_format"), "%sender%", sender.getName(), "%message%", text)); target.sendMessage(formatted); sender.sendMessage(Utils.color( Utils.replace(LangManager.get("msg_sent_online"), "%player%", targetName))); } else { sender.sendMessage(Utils.color( Utils.replace(LangManager.get("msg_sent_offline"), "%player%", targetName))); } } public static void deliverPending(Player player) { int unread = MailboxManager.getUnreadCount(player.getName()); if (unread == 0) return; Bukkit.getScheduler().runTaskLater( me.viper.teamplugin.Main.getInstance(), () -> { player.sendMessage(Utils.color(Utils.replace( LangManager.get("msg_offline_header"), "%count%", String.valueOf(unread)))); player.sendMessage(Utils.color(LangManager.get("msg_mailbox_hint"))); }, 20L); } }