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

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

View File

@ -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/>

View File

@ -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

View File

@ -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);
/* /*

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.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+"-------------------------------------------");
}

View File

@ -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 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; }
} }
} }

View 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()]));
}
}