Amélioration de la commande /staff et meilleure gestion de la file d'attente /Staff
This commit is contained in:
parent
85fa583ef5
commit
b01ffd8bcb
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<jardesc>
|
<jardesc>
|
||||||
<jar path="PandacraftUtils/jar_export/PandacraftUtils-3.2.jar"/>
|
<jar path="PandacraftUtils/jar_export/PandacraftUtils-3.3.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"/>
|
<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"/>
|
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
|
||||||
<selectedProjects/>
|
<selectedProjects/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: PandacraftUtils
|
name: PandacraftUtils
|
||||||
main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils
|
main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils
|
||||||
version: 3.2
|
version: 3.3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -153,22 +153,22 @@ public class ConfigManager {
|
|||||||
Map<String, String> message;
|
Map<String, String> message;
|
||||||
|
|
||||||
message = new HashMap<String, String>();
|
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");
|
message.put("permissions", "pandacraft.grade.default");
|
||||||
Automessages_messages.add(message);
|
Automessages_messages.add(message);
|
||||||
|
|
||||||
message = new HashMap<String, String>();
|
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", "*");
|
message.put("permissions", "*");
|
||||||
Automessages_messages.add(message);
|
Automessages_messages.add(message);
|
||||||
|
|
||||||
message = new HashMap<String, String>();
|
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", "*");
|
message.put("permissions", "*");
|
||||||
Automessages_messages.add(message);
|
Automessages_messages.add(message);
|
||||||
|
|
||||||
message = new HashMap<String, String>();
|
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", "*");
|
message.put("permissions", "*");
|
||||||
Automessages_messages.add(message);
|
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.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"+
|
sender.sendMessage(ChatColor.RED+"Commande : "+ChatColor.GRAY+"/staff "+ChatColor.ITALIC+"Message"+
|
||||||
ChatColor.RED+" pour rentrer dans la file d'attente");
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
staffManager.playerQueue.add(staffManager.new WaitingPlayer(((Player)sender).getName(), StringUtils.join(args, " "), ((Player)sender).getLocation()));
|
staffManager.addWaitingPlayer((Player)sender, StringUtils.join(args, " "));
|
||||||
staffManager.updateScoreBoardWaitingList();
|
|
||||||
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+"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");
|
sender.sendMessage(ChatColor.GREEN+"Vous êtes à la position "+staffManager.getPlayerPosition((Player)sender)+" de la file d'attente");
|
||||||
return true;
|
return true;
|
||||||
@ -64,7 +63,7 @@ public class CommandStaff extends AbstractCommandExecutor {
|
|||||||
else if (sender instanceof Player)
|
else if (sender instanceof Player)
|
||||||
{ // un joueur du staff
|
{ // un joueur du staff
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
showWaintingList(sender);
|
staffManager.showWaintingList(sender);
|
||||||
sender.sendMessage(ChatColor.GOLD+"Pour connaitre les commandes, faites "+ChatColor.GRAY+"/staff ?");
|
sender.sendMessage(ChatColor.GOLD+"Pour connaitre les commandes, faites "+ChatColor.GRAY+"/staff ?");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -79,7 +78,7 @@ public class CommandStaff extends AbstractCommandExecutor {
|
|||||||
|
|
||||||
|
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
showWaintingList(sender);
|
staffManager.showWaintingList(sender);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -104,23 +103,39 @@ public class CommandStaff extends AbstractCommandExecutor {
|
|||||||
if (args[0].equalsIgnoreCase("?"))
|
if (args[0].equalsIgnoreCase("?"))
|
||||||
{ // affichage de l'aide
|
{ // affichage de l'aide
|
||||||
sender.sendMessage(ChatColor.GOLD+"--- Commandes administratives pour gérer la file d'attente ---");
|
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 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 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");
|
sender.sendMessage(ChatColor.GRAY+"/staff add <Joueur> <Message>"+ChatColor.RESET+" : ajoute un joueur dans la file");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("select") && args.length > 1 && sender instanceof Player)
|
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) {
|
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 liste");
|
||||||
return true;
|
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());
|
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
|
||||||
if (p != null && p.isOnline()) {
|
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;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -156,14 +207,14 @@ public class CommandStaff extends AbstractCommandExecutor {
|
|||||||
{
|
{
|
||||||
WaitingPlayer wp = staffManager.getWaitingPlayer(args[1]);
|
WaitingPlayer wp = staffManager.getWaitingPlayer(args[1]);
|
||||||
if (wp == null) {
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
staffManager.removePlayer(args[1]);
|
staffManager.removePlayer(args[1]);
|
||||||
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
|
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
|
||||||
if (p != null && p.isOnline()) {
|
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");
|
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, " ");
|
String message = StringUtils.join(args, " ");
|
||||||
|
|
||||||
|
|
||||||
staffManager.playerQueue.add(staffManager.new WaitingPlayer(p.getName(),message, p.getLocation()));
|
staffManager.addWaitingPlayer(p, message);
|
||||||
staffManager.updateScoreBoardWaitingList();
|
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN+"Vous venez d'ajouter "+p.getDisplayName()+ChatColor.RESET+ChatColor.GREEN+" dans la file d'attente");
|
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;
|
package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
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.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
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;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
|
||||||
public class StaffQueueManager implements Listener {
|
public class StaffQueueManager implements Listener {
|
||||||
@ -25,7 +26,7 @@ public class StaffQueueManager implements Listener {
|
|||||||
private PandacraftUtils plugin = PandacraftUtils.getInstance();
|
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();
|
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) {
|
public WaitingPlayer getWaitingPlayer(String p) {
|
||||||
for (WaitingPlayer wp : playerQueue)
|
for (WaitingPlayer wp : playerQueue)
|
||||||
{
|
{
|
||||||
@ -57,7 +69,7 @@ public class StaffQueueManager implements Listener {
|
|||||||
for (WaitingPlayer wp : playerQueue)
|
for (WaitingPlayer wp : playerQueue)
|
||||||
{
|
{
|
||||||
i++;
|
i++;
|
||||||
if (wp != null && wp.getPlayerName().equalsIgnoreCase(p.getName()))
|
if (wp != null && wp.getPlayerName().equals(p.getName()))
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -75,53 +87,98 @@ public class StaffQueueManager implements Listener {
|
|||||||
}
|
}
|
||||||
public void removePlayer(OfflinePlayer p) {
|
public void removePlayer(OfflinePlayer p) {
|
||||||
removePlayer(p.getName());
|
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() {
|
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");
|
// contient les joueurs qui ne sont pas encore associés à un membre du staff connecté
|
||||||
obj.setDisplayName(ChatColor.GOLD+"File d'attente staff");
|
ArrayList<String> newPlayers = new ArrayList<String>();
|
||||||
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
|
||||||
|
|
||||||
int i=0;
|
int i = 1;
|
||||||
for (WaitingPlayer wp : playerQueue) {
|
for (WaitingPlayer wp : playerQueue) {
|
||||||
i++;
|
String line = i+"."+wp.getPlayerDisplayName();
|
||||||
|
if (wp.getStaffPlayerName() == null)
|
||||||
Player p = plugin.getServer().getPlayerExact(wp.getPlayerName());
|
newPlayers.add(line);
|
||||||
String name;
|
|
||||||
if (p == null || !p.isOnline())
|
|
||||||
name = wp.getPlayerName();
|
|
||||||
else
|
else
|
||||||
name = p.getPlayerListName();
|
selectedPlayers.add(line);
|
||||||
|
i++;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 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
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
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() {
|
plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
|
||||||
@Override public void run() { updateScoreBoardWaitingList(); }
|
@Override public void run() { updateScoreBoardWaitingList(); }
|
||||||
}, 2L);
|
}, 2L);
|
||||||
@ -167,25 +231,47 @@ public class StaffQueueManager implements Listener {
|
|||||||
|
|
||||||
private String player;
|
private String player;
|
||||||
private String message;
|
private String message;
|
||||||
private Date creationDate;
|
private Date creationDate = new Date();
|
||||||
private Location location;
|
private Location location; // localisation du joueur au moment où il fait /staff
|
||||||
|
private String staffPlayer = null;
|
||||||
|
|
||||||
|
|
||||||
public WaitingPlayer(String p, String m, Location l) {
|
public WaitingPlayer(String p, String m, Location l) {
|
||||||
|
|
||||||
player = p;
|
player = p;
|
||||||
message = m;
|
message = m;
|
||||||
creationDate = new Date();
|
|
||||||
location = l;
|
location = l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return le pseudo du joueur
|
||||||
|
*/
|
||||||
public String getPlayerName() { return player; }
|
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 String getMessage() { return message; }
|
||||||
|
|
||||||
public Date getDate() { return creationDate; }
|
public Date getDate() { return creationDate; }
|
||||||
|
|
||||||
public Location getLocation() { return location; }
|
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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
60
src/net/mc_pandacraft/java/util/ScoreBoardUtil.java
Normal file
60
src/net/mc_pandacraft/java/util/ScoreBoardUtil.java
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package net.mc_pandacraft.java.util;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
import org.bukkit.scoreboard.Objective;
|
||||||
|
import org.bukkit.scoreboard.Score;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
|
||||||
|
public class ScoreBoardUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour la Sidebar d'un Scoreboard donné
|
||||||
|
* @param scBrd Le Scoreboard à mettre à jour (ne doit pas être null)
|
||||||
|
* @param title Le titre de la Sidebar
|
||||||
|
* @param lines Les lignes qui doivent être affichés. Si un éléments du tableau est null, il sera compté comme une chaine vide. Toutes les lignes seront rognés aux 16 premiers caractères
|
||||||
|
*/
|
||||||
|
public static void updateScoreboardSidebar(Scoreboard scBrd, String title, String[] lines) {
|
||||||
|
if (scBrd == null) throw new IllegalArgumentException("scBrd doit être non null");
|
||||||
|
Objective obj = scBrd.getObjective("sidebar_autogen");
|
||||||
|
if (obj != null)
|
||||||
|
obj.unregister();
|
||||||
|
|
||||||
|
if (lines == null || lines.length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
obj = scBrd.registerNewObjective("sidebar_autogen", "dummy");
|
||||||
|
obj.setDisplayName(title == null ? "" : title);
|
||||||
|
obj.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||||
|
|
||||||
|
int boardPos = lines.length;
|
||||||
|
for (String line : lines) {
|
||||||
|
if (line == null) line = "";
|
||||||
|
|
||||||
|
Score score = obj.getScore(
|
||||||
|
Bukkit.getServer().getOfflinePlayer(
|
||||||
|
line.substring(
|
||||||
|
0,
|
||||||
|
(line.length()>16) ? 16 : line.length()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
score.setScore(boardPos);
|
||||||
|
boardPos--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour la Sidebar d'un Scoreboard donné
|
||||||
|
* @param scBrd Le Scoreboard à mettre à jour
|
||||||
|
* @param title Le titre de la Sidebar
|
||||||
|
* @param lines Les lignes qui doivent être affichés. Si un éléments du tableau est null, il sera compté comme une chaine vide. Toutes les lignes seront rognés aux 16 premiers caractères
|
||||||
|
*/
|
||||||
|
public static void updateScoreboardSidebar(Scoreboard scBrd, String title, List<String> lines) {
|
||||||
|
updateScoreboardSidebar(scBrd, title, lines.toArray(new String[lines.size()]));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user