Amélioration de la commande /staff et meilleure gestion de la file d'attente /Staff
This commit is contained in:
@@ -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