Amélioration de la commande /staff et meilleure gestion de la file d'attente /Staff
This commit is contained in:
@@ -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);
|
||||
/*
|
||||
|
@@ -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+"-------------------------------------------");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user