diff --git a/make_jar.jardesc b/make_jar.jardesc index 8ad80c1..1aa63b4 100644 --- a/make_jar.jardesc +++ b/make_jar.jardesc @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <jardesc> - <jar path="PandacraftUtils/jar_export/PandacraftUtils-4.3.jar"/> + <jar path="PandacraftUtils/jar_export/PandacraftUtils-4.4.jar"/> <options buildIfNeeded="true" compress="true" descriptionLocation="/PandacraftUtils/make_jar.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/> <storedRefactorings deprecationInfo="true" structuralOnly="false"/> <selectedProjects/> diff --git a/resources/plugin.yml b/resources/plugin.yml index f5a9242..584a61a 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: PandacraftUtils main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils -version: 4.3 +version: 4.4 diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java index 507f0f1..6442ed6 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandTell.java @@ -1,7 +1,13 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.commands; +import java.text.DateFormat; +import java.util.List; +import java.util.Locale; + +import mkremins.fanciful.FancyMessage; import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.MessageSender; import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.MessageSendingException; +import net.mc_pandacraft.java.plugin.pandacraftutils.modules.PrivateMessagesManager.PrivateDiscussion; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import org.bukkit.ChatColor; @@ -20,11 +26,12 @@ public class CommandTell extends AbstractCommandExecutor { String[] args) { if (args.length == 0 && sender instanceof Player) { - plugin.privateMessagesManager.displayUnreadMessages((Player)sender); + Player player = (Player) sender; + onCommandDiscussionsList(player); return true; } else if (args.length == 0) { - sender.sendMessage(ChatColor.RED+"Seul un joueur en ligne peut lire ses messages non lus."); + sender.sendMessage(ChatColor.RED+"Seul un joueur en ligne peut voir la liste de ses discussions."); return false; } @@ -60,5 +67,46 @@ public class CommandTell extends AbstractCommandExecutor { } + + + private void onCommandDiscussionsList(Player player) { + List<PrivateDiscussion> lastDiscussions = plugin.privateMessagesManager.getLastDiscussions(player, 5); + + + player.sendMessage(ChatColor.GOLD+"--- Messagerie privée - Liste des conversations ---"); + + for (PrivateDiscussion pvd : lastDiscussions) { + String name = (pvd.name == null) ? + new MessageSender(pvd.name).getDisplayName() : + (pvd.name.toLowerCase().startsWith("g:")) ? + ChatColor.GOLD+pvd.name.substring(2) : + new MessageSender(pvd.name).getDisplayName(); + + String line = name+ChatColor.RESET; + + int nbM = pvd.nbUnread; + + if (nbM > 0) + line += ChatColor.GRAY+" - "+ChatColor.RED+nbM+" message"+((nbM > 1)?"s":"")+" non lu"+((nbM > 1)?"s":""); + + + DateFormat date = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.FRANCE); + DateFormat hour = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.FRANCE); + + String affDate = date.format(pvd.timeLastMessage) + " à " + hour.format(pvd.timeLastMessage); + + line += ChatColor.GRAY+" - "+affDate; + + + new FancyMessage("").then(line).color(ChatColor.GRAY).command("/m d:"+((pvd.name == null)?"null":pvd.name)).send(player); + + } + + player.sendMessage(ChatColor.GOLD+"Cliquez sur une conversation pour voir les messages"); + player.sendMessage(ChatColor.GOLD+"----------------------------------------------"); + + } + + } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java index f6a1186..2f3e37c 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/PrivateMessagesManager.java @@ -24,6 +24,7 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.players.OffPlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; +import org.apache.commons.lang.NullArgumentException; import org.apache.commons.lang.Validate; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -262,37 +263,21 @@ public class PrivateMessagesManager extends BukkitRunnable { + + + + /** - * - * @param player le joueur qui veut voir ses messages non lus - * @return vrai si le joueur a bien des messages non lu, faux sinon. Retourne vrai en cas d'erreur lors de la récupération des messages + * Retourne les dernières discussions auquel a participé le joueur passé en paramètre. + * @param p le joueur pour lequel on doit retourner les dernières discussions + * @param nbLastMin le nombre de discussion minimum qui doit être retourné (si il en existe au moins ce nombre minimum)<br/> + * Si le nombre de discussion totale est inférieur ou égale à <i>nbLastMin</i>, aucune suppression n'est faite.<br/> + * Dans le cas contraire, la méthode supprime itérativement la discussion déjà lu la plus ancienne, jusqu'à ce que le nombre de discussion restante + * soit égale à <i>nbLastMin</i> ou jusqu'à ce qu'il ne reste que des discussion non lus. + * @return les discussions, dans l'ordre chronologique inverse des derniers messages de chaque discussions. Plus clairement, la discussion la + * plus récente est placé à l'indice 0 de la liste. */ - public boolean displayUnreadMessages(Player player) { - try { - List<MPMessageElement> messages = ((MPMessageTable)ORM.getTable("mp_message")).getAllUnreadForPlayer(player.getName()); - if (messages.size() == 0) { - player.sendMessage(ChatColor.GRAY+"Vous n'avez pas de messages non lus"); - return false; - } - - for(MPMessageElement mess : messages) - tryDisplayMessage(mess); - - return true; - - } catch (SQLException e) { - e.printStackTrace(); - player.sendMessage(ChatColor.RED+"Impossible de lire les messages non lus"); - return true; - } - } - - - - - - - public List<PrivateDiscussion> getLastDiscussions(Player p, Integer nbLast) { + public List<PrivateDiscussion> getLastDiscussions(Player p, Integer nbLastMin) { try { // récupère les messages, triés de la plus vieille à la plus récente List<MPMessageElement> messages = ORM.getTable(MPMessageTable.class).getForPlayer(p.getName(), false, 1000); @@ -321,9 +306,11 @@ public class PrivateMessagesManager extends BukkitRunnable { } - if (nbLast != null && nbLast >= 0) { - while (discussionList.size()>nbLast.intValue()) { - discussionList.remove(discussionList.size()-1); + if (nbLastMin != null && nbLastMin >= 0) { + for (int i = discussionList.size()-1; i >= 0 && discussionList.size() > nbLastMin; i--) { + if (discussionList.get(i).nbUnread == 0) { + discussionList.remove(i); + } } } @@ -342,6 +329,7 @@ public class PrivateMessagesManager extends BukkitRunnable { public class PrivateDiscussion { /** * Le pseudo du joueur ou du groupe de discussion (avec "g:" devant) + * ou null si il s'agit d'un message système (hors groupe) */ public final String name; public int nbUnread; @@ -383,6 +371,8 @@ public class PrivateMessagesManager extends BukkitRunnable { */ private void tryDisplayMessage(MPMessageElement message) { + if (message == null) throw new NullArgumentException("message doit être non null"); + try { OffPlayer offP = new OffPlayer(message.getViewerNick()); @@ -546,12 +536,15 @@ public class PrivateMessagesManager extends BukkitRunnable { try { List<MPMessageElement> messages = ((MPMessageTable)ORM.getTable("mp_message")).getAllUnreadForPlayer(event.getPlayer().getName()); - if (messages.size() == 0) return; + int nbMess = messages.size(); + + if (nbMess == 0) return; + String[] m = new String[] { ChatColor.GOLD+"--------------- Messagerie privée ---------------", - ChatColor.GOLD+"Vous avez "+messages.size()+" message"+((messages.size()>1)?"s":"")+" non lu"+((messages.size()>1)?"s":""), - ChatColor.GOLD+"Faites "+ChatColor.GRAY+"/m"+ChatColor.GOLD+" pour voir le"+((messages.size()>1)?"s":"")+" message"+((messages.size()>1)?"s":""), + ChatColor.GOLD+"Vous avez "+nbMess+" message"+((nbMess>1)?"s":"")+" non lu"+((nbMess>1)?"s":""), + ChatColor.GOLD+"Faites "+ChatColor.GRAY+"/m"+ChatColor.GOLD+" pour voir le"+((nbMess>1)?"s":"")+" message"+((nbMess>1)?"s":""), ChatColor.GOLD+"----------------------------------------------", };