Amélioration de la commande /staff et meilleure gestion de la file d'attente /Staff

This commit is contained in:
2015-01-27 02:37:46 -05:00
parent 85fa583ef5
commit b01ffd8bcb
6 changed files with 247 additions and 76 deletions

View File

@@ -153,22 +153,22 @@ public class ConfigManager {
Map<String, String> message;
message = new HashMap<String, String>();
message.put("message", ChatColor.BLUE+"Bienvenue sur Pandacraft ! :) Pour pouvoir jouer, n'oubliez pas de vous inscrire en cliquant sur le lien en dessous%n &ahttp://mc-pandacraft.net/?p=inscription");
message.put("message", ChatColor.BLUE+"Bienvenue sur Pandacraft ! :) Pour pouvoir jouer, n'oubliez pas de vous inscrire en cliquant sur le lien en dessous%n &ahttps://www.mc-pandacraft.net/?p=inscription");
message.put("permissions", "pandacraft.grade.default");
Automessages_messages.add(message);
message = new HashMap<String, String>();
message.put("message", "Utilisez la commande &7/cubo"+ServerMessages_defaultColor+" en Survie pour protéger vos construction ! :)");
message.put("message", "Utilisez la commande &7/cubo"+ServerMessages_defaultColor+" en Survie pour protéger vos construction ! :)%n&a https://www.mc-pandacraft.net/?p=antigrief#tuto_cubo");
message.put("permissions", "*");
Automessages_messages.add(message);
message = new HashMap<String, String>();
message.put("message", "WorldEdit disponible en &bCréatif"+ServerMessages_defaultColor+" avec le grade &f[&eUltimate&f]"+ServerMessages_defaultColor+". Profitez en vite :D%n &a http://mc-pandacraft.net/?p=ultimate");
message.put("message", "WorldEdit disponible en &bCréatif"+ServerMessages_defaultColor+" avec le grade %n&f[&eUltimate&f]"+ServerMessages_defaultColor+". Profitez en vite :D%n &a https://www.mc-pandacraft.net/?p=ultimate");
message.put("permissions", "*");
Automessages_messages.add(message);
message = new HashMap<String, String>();
message.put("message", "Launcher disponible pour Pandacraft : Optifine intégré et mise à jour automatique avec le serveur.%n &ahttp://mc-pandacraft.net/?p=launcher");
message.put("message", "Launcher disponible pour Pandacraft : Optifine intégré et mise à jour automatique avec le serveur.%n &ahttps://www.mc-pandacraft.net/?p=launcher");
message.put("permissions", "*");
Automessages_messages.add(message);
/*

View File

@@ -51,12 +51,11 @@ public class CommandStaff extends AbstractCommandExecutor {
sender.sendMessage(ChatColor.GREEN+"Cette file d'attente sers à demander un service à une personne du staff connecté");
sender.sendMessage(ChatColor.RED+"Commande : "+ChatColor.GRAY+"/staff "+ChatColor.ITALIC+"Message"+
ChatColor.RED+" pour rentrer dans la file d'attente");
sender.sendMessage(ChatColor.RED+"Si votre message n'est pas assez explicite ou détaillée, votre demande sera ignoré");
sender.sendMessage(ChatColor.RED+"Si votre message n'est pas assez explicite ou détaillée, votre demande pourra être ignoré");
return true;
}
staffManager.playerQueue.add(staffManager.new WaitingPlayer(((Player)sender).getName(), StringUtils.join(args, " "), ((Player)sender).getLocation()));
staffManager.updateScoreBoardWaitingList();
staffManager.addWaitingPlayer((Player)sender, StringUtils.join(args, " "));
sender.sendMessage(ChatColor.GREEN+"Veuillez maintenant patienter quelques instant, le temps que le staff traite le début de la file d'attente ;)");
sender.sendMessage(ChatColor.GREEN+"Vous êtes à la position "+staffManager.getPlayerPosition((Player)sender)+" de la file d'attente");
return true;
@@ -64,7 +63,7 @@ public class CommandStaff extends AbstractCommandExecutor {
else if (sender instanceof Player)
{ // un joueur du staff
if (args.length == 0) {
showWaintingList(sender);
staffManager.showWaintingList(sender);
sender.sendMessage(ChatColor.GOLD+"Pour connaitre les commandes, faites "+ChatColor.GRAY+"/staff ?");
return true;
}
@@ -79,7 +78,7 @@ public class CommandStaff extends AbstractCommandExecutor {
if (args.length == 0) {
showWaintingList(sender);
staffManager.showWaintingList(sender);
return true;
}
else
@@ -104,23 +103,39 @@ public class CommandStaff extends AbstractCommandExecutor {
if (args[0].equalsIgnoreCase("?"))
{ // affichage de l'aide
sender.sendMessage(ChatColor.GOLD+"--- Commandes administratives pour gérer la file d'attente ---");
if (sender instanceof Player)
if (sender instanceof Player) {
sender.sendMessage(ChatColor.GRAY+"/staff select <Joueur>"+ChatColor.RESET+" : prendre en charge un joueur de la file");
sender.sendMessage(ChatColor.GRAY+"/staff finish"+ChatColor.RESET+" : quand vous avez fini de prendre en charge le joueur en cours");
sender.sendMessage(ChatColor.GRAY+"/staff cancel"+ChatColor.RESET+" : quand vous ne pouvez pas prendre en charge le joueur en cours");
}
sender.sendMessage(ChatColor.GRAY+"/staff remove <Joueur>"+ChatColor.RESET+" : retire un joueur de la file sans le prendre en charge");
sender.sendMessage(ChatColor.GRAY+"/staff add <Joueur> <Message>"+ChatColor.RESET+" : ajoute un joueur dans la file");
return true;
}
else if (args[0].equalsIgnoreCase("select") && args.length > 1 && sender instanceof Player)
{
WaitingPlayer wp = staffManager.getWaitingPlayer(args[1]);
WaitingPlayer wp;
// on vérifie si le membre du staff n'est pas déjà associé à un joueur
if ((wp = staffManager.getSelectedWaitingPlayer((Player)sender)) != null) {
sender.sendMessage(ChatColor.RED+"Vous vous occupez déjà d'un joueur. Faites "+ChatColor.GRAY+"/staff finish"+ChatColor.RED+" si vous en avez fini avec "+wp.getPlayerDisplayName());
return true;
}
// on vérifie que le joueur indiqué se trouve dans la file d'attente
wp = staffManager.getWaitingPlayer(args[1]);
if (wp == null) {
sender.sendMessage(ChatColor.RED+"Le joueur n'est pas dans la liste");
return true;
}
// on vérifie si un membre du staff ne s'occupe pas déjà du joueur
if (wp.getStaffPlayerName() != null) {
sender.sendMessage(ChatColor.RED+wp.getStaffPlayerName()+" s'occupe déjà de ce joueur");
return true;
}
staffManager.removePlayer(args[1]);
wp.setStaffPlayer((Player)sender);
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
if (p != null && p.isOnline()) {
@@ -149,6 +164,42 @@ public class CommandStaff extends AbstractCommandExecutor {
return true;
}
else if (args[0].equalsIgnoreCase("finish") && sender instanceof Player)
{
WaitingPlayer wp = staffManager.getSelectedWaitingPlayer((Player)sender);
if (wp == null) {
sender.sendMessage(ChatColor.RED+"Vous ne vous occupez actuellement de personne. Faites "+ChatColor.GRAY+"/staff"+ChatColor.RED+" pour voir si vous pouvez aider un joueur");
return true;
}
staffManager.removePlayer(wp.getPlayerName());
sender.sendMessage(ChatColor.GREEN+wp.getPlayerName()+ChatColor.RESET+ChatColor.GREEN+" a été retiré de la file d'attente");
return true;
}
else if (args[0].equalsIgnoreCase("cancel") && sender instanceof Player)
{
WaitingPlayer wp = staffManager.getSelectedWaitingPlayer((Player)sender);
if (wp == null) {
sender.sendMessage(ChatColor.RED+"Vous ne vous occupez actuellement de personne. Faites "+ChatColor.GRAY+"/staff"+ChatColor.RED+" pour voir si vous pouvez aider un joueur");
return true;
}
wp.setStaffPlayer(null);
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
if (p != null && p.isOnline()) {
p.sendMessage(ChatColor.RED+((Player)sender).getDisplayName()+ChatColor.RED+" ne s'occupe plus de vous, mais vous restez en file d'attente");
}
sender.sendMessage(ChatColor.GREEN+wp.getPlayerName()+ChatColor.RESET+ChatColor.GREEN+" a été remis en attente");
return true;
}
@@ -156,14 +207,14 @@ public class CommandStaff extends AbstractCommandExecutor {
{
WaitingPlayer wp = staffManager.getWaitingPlayer(args[1]);
if (wp == null) {
sender.sendMessage(ChatColor.RED+"Le joueur n'est pas dans la liste");
sender.sendMessage(ChatColor.RED+"Le joueur n'est pas dans la file");
return true;
}
staffManager.removePlayer(args[1]);
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
if (p != null && p.isOnline()) {
p.sendMessage(ChatColor.RED+"Vous avez été retiré de la liste des joueurs en attente");
p.sendMessage(ChatColor.RED+"Vous avez été retiré de la file d'attente");
}
sender.sendMessage(ChatColor.GREEN+wp.getPlayerName()+ChatColor.RESET+ChatColor.GREEN+" a été retiré de la file d'attente");
@@ -196,8 +247,7 @@ public class CommandStaff extends AbstractCommandExecutor {
String message = StringUtils.join(args, " ");
staffManager.playerQueue.add(staffManager.new WaitingPlayer(p.getName(),message, p.getLocation()));
staffManager.updateScoreBoardWaitingList();
staffManager.addWaitingPlayer(p, message);
sender.sendMessage(ChatColor.GREEN+"Vous venez d'ajouter "+p.getDisplayName()+ChatColor.RESET+ChatColor.GREEN+" dans la file d'attente");
@@ -214,31 +264,6 @@ public class CommandStaff extends AbstractCommandExecutor {
private void showWaintingList(CommandSender sender) {
sender.sendMessage(ChatColor.BOLD+"-- File d'attente des joueurs pour le staff --");
int i=0;
for (WaitingPlayer wp : plugin.staffQueueManager.playerQueue) {
i++;
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
String name;
if (p == null || !p.isOnline())
name = wp.getPlayerName();
else
name = p.getDisplayName();
sender.sendMessage(i+". "+name+ChatColor.RESET+" : "+wp.getMessage()+" - "
+ChatColor.ITALIC+"Il y a "+TimeUtil.durationToString((new Date()).getTime() - wp.getDate().getTime()));
}
sender.sendMessage(ChatColor.BOLD+"-------------------------------------------");
}

View File

@@ -1,23 +1,24 @@
package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.Queue;
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
import net.mc_pandacraft.java.util.ScoreBoardUtil;
import net.mc_pandacraft.java.util.TimeUtil;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
public class StaffQueueManager implements Listener {
@@ -25,7 +26,7 @@ public class StaffQueueManager implements Listener {
private PandacraftUtils plugin = PandacraftUtils.getInstance();
public Queue<WaitingPlayer> playerQueue = new LinkedList<WaitingPlayer>();
private Queue<WaitingPlayer> playerQueue = new LinkedList<WaitingPlayer>();
private Scoreboard scoreboardPlayerQueue = Bukkit.getScoreboardManager().getNewScoreboard();
@@ -35,6 +36,17 @@ public class StaffQueueManager implements Listener {
}
// le joueur ajouté doit-être en ligne
public void addWaitingPlayer(Player p, String m) {
if (getWaitingPlayer(p) != null) return; // le joueur est déjà dans la file
playerQueue.add(new WaitingPlayer(p.getName(), m, p.getLocation()));
updateScoreBoardWaitingList();
}
public WaitingPlayer getWaitingPlayer(String p) {
for (WaitingPlayer wp : playerQueue)
{
@@ -57,7 +69,7 @@ public class StaffQueueManager implements Listener {
for (WaitingPlayer wp : playerQueue)
{
i++;
if (wp != null && wp.getPlayerName().equalsIgnoreCase(p.getName()))
if (wp != null && wp.getPlayerName().equals(p.getName()))
return i;
}
return -1;
@@ -75,53 +87,98 @@ public class StaffQueueManager implements Listener {
}
public void removePlayer(OfflinePlayer p) {
removePlayer(p.getName());
updateScoreBoardWaitingList();
}
public WaitingPlayer getSelectedWaitingPlayer(Player staffPlayer) {
String staffName = staffPlayer.getName();
for (WaitingPlayer wp : playerQueue)
{
if (wp != null && wp.getStaffPlayerName() != null && wp.getStaffPlayerName().equals(staffName))
return wp;
}
return null;
}
public void updateScoreBoardWaitingList() {
Objective obj = scoreboardPlayerQueue.getObjective("file_attente");
if (obj != null)
obj.unregister();
// contient les joueurs qui sont associés à un membre du staff
ArrayList<String> selectedPlayers = new ArrayList<String>();
obj = scoreboardPlayerQueue.registerNewObjective("file_attente", "dummy");
obj.setDisplayName(ChatColor.GOLD+"File d'attente staff");
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
// contient les joueurs qui ne sont pas encore associés à un membre du staff connecté
ArrayList<String> newPlayers = new ArrayList<String>();
int i=0;
int i = 1;
for (WaitingPlayer wp : playerQueue) {
i++;
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
String name;
if (p == null || !p.isOnline())
name = wp.getPlayerName();
String line = i+"."+wp.getPlayerDisplayName();
if (wp.getStaffPlayerName() == null)
newPlayers.add(line);
else
name = p.getPlayerListName();
String line = i+"."+name;
int boardPos = playerQueue.size()-i+1;
Score score = obj.getScore(plugin.getServer().getOfflinePlayer(line.substring(0, (line.length()>16)?16:line.length())));
score.setScore(boardPos);
selectedPlayers.add(line);
i++;
}
// contients les lignes qui vont être affichés dans la sidebar
ArrayList<String> lines = new ArrayList<String>();
if (!selectedPlayers.isEmpty()) {
lines.add("En traitement :");
lines.addAll(selectedPlayers);
}
if (!newPlayers.isEmpty()) {
lines.add("En attente :");
lines.addAll(newPlayers);
}
if (!lines.isEmpty()) {
lines.add("");
lines.add("Commande :");
lines.add(ChatColor.GRAY+" /staff");
}
ScoreBoardUtil.updateScoreboardSidebar(scoreboardPlayerQueue, ChatColor.GOLD+"File d'attente staff", lines);
}
public void showWaintingList(CommandSender sender) {
sender.sendMessage(ChatColor.BOLD+"--- File d'attente des joueurs pour le staff ---");
int i=1;
for (WaitingPlayer wp : playerQueue) {
String staffPlayer = wp.getStaffPlayerName();
if (staffPlayer != null)
staffPlayer = " ("+staffPlayer+ChatColor.RESET+")";
else
staffPlayer = "";
sender.sendMessage(i+"."+staffPlayer+" "+wp.getPlayerDisplayName()+ChatColor.RESET+" : "+wp.getMessage()+" - "
+ChatColor.ITALIC+"Il y a "+TimeUtil.durationToString((new Date()).getTime() - wp.getDate().getTime()));
i++;
}
sender.sendMessage(ChatColor.BOLD+"-------------------------------------------");
}
@@ -144,6 +201,13 @@ public class StaffQueueManager implements Listener {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
// on vérifie si un membre du staff se déconnecte
for (WaitingPlayer wp : playerQueue) {
if (wp.getStaffPlayerName() != null && wp.getStaffPlayerName().equals(event.getPlayer().getName()))
wp.setStaffPlayer(null);
}
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
@Override public void run() { updateScoreBoardWaitingList(); }
}, 2L);
@@ -167,25 +231,47 @@ public class StaffQueueManager implements Listener {
private String player;
private String message;
private Date creationDate;
private Location location;
private Date creationDate = new Date();
private Location location; // localisation du joueur au moment où il fait /staff
private String staffPlayer = null;
public WaitingPlayer(String p, String m, Location l) {
player = p;
message = m;
creationDate = new Date();
location = l;
}
/**
*
* @return le pseudo du joueur
*/
public String getPlayerName() { return player; }
/**
*
* @return le pseudo du joueur, avec la coloration si il est connecté
*/
public String getPlayerDisplayName() {
Player p = plugin.getServer().getPlayerExact(player);
if (p == null || !p.isOnline())
return player;
else
return p.getPlayerListName();
}
public String getMessage() { return message; }
public Date getDate() { return creationDate; }
public Location getLocation() { return location; }
public void setStaffPlayer(Player p) {
if (p == null) staffPlayer = null;
else staffPlayer = p.getName();
updateScoreBoardWaitingList();
}
public String getStaffPlayerName() { return staffPlayer; }
}
}