Ajout de la requête plater_list dans le networkAPI
This commit is contained in:
parent
13a3ab93b9
commit
f950434030
@ -41,13 +41,28 @@ Pareil que `command` mais cette fois, celle-ci n'est pas forcément exécutée d
|
||||
|
||||
#### `broadcast`
|
||||
Affiche un message sur le chat pour tout le monde connecté.
|
||||
Le message passé dans la partie **donnée** est diffusé
|
||||
Le message passé dans la partie **donnée** est diffusé en convertissant les codes couleurs `&x` en `§x`
|
||||
|
||||
#### `player_list`
|
||||
Renvoi la liste des joueurs connectés visibles, avec quelques infos utiles en convertissant les codes couleurs `&x` en `§x`
|
||||
Renvoi la liste des joueurs connectés, avec quelques infos utiles.
|
||||
|
||||
Si la partie **donnée** de la requête contient `op` et seulement ça (c'est à dire que `data.trim().equalsIgnoreCase("op")` doit être vrai), la liste des joueurs contiendra
|
||||
aussi les joueurs vanish. Sinon, les joueurs vanish ne seront pas inclus dans la liste retournée
|
||||
|
||||
La première ligne de la réponse sera de la forme `5/30` avec le premier nombre représentant le nombre de joueur retourné, et le deuxième nombre étant le nombre de slots disponible sur le serveur. Le tout est suivi d'un `\n`.
|
||||
|
||||
Ensuite, une ligne pour un joueur. Chaque ligne, séparé par un `\n`, aura cette forme :
|
||||
|
||||
Pseudojoueur\0§f[§4Admin§f]§4Pseudojoueur§r\01\0creative;20;20\01
|
||||
|
||||
Chaque information sur une ligne sera séparé par un `\0` représentant le caractère NULL. Les informations données sont les suivantes :
|
||||
|
||||
1. Pseudo réel du joueur (répondant à la regex `[A-Za-z0-9_]{2,16}`)
|
||||
2. Pseudo du joueur tel qu'il est affiché IG (avec le préfixe et le suffixe, + éventuellement un nickname, et les codes couleurs de la forme `§x`)
|
||||
3. `1` si le joueur est actif, `0` si il est AFK.
|
||||
4. 3 informations séparés par des `;`<br/>- Gamemode du joueur<br/>- Point de vie arrondi à l'unité<br/>- Point de faim arrondi à l'unité
|
||||
5. `1` si le joueur est visible, `0` si il est vanish.
|
||||
|
||||
#### `player_list_op`
|
||||
Renvoi la liste de tous les joueurs connectés (même vanish), avec quelques infos utiles en convertissant les codes couleurs `&x` en `§x`
|
||||
|
||||
## Structure d'une réponse
|
||||
La réponse est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :
|
||||
@ -71,7 +86,7 @@ Réponse à une commande inexistante
|
||||
Réponse à une requête de type `player_list`
|
||||
|
||||
OK
|
||||
56
|
||||
player\0disp_name
|
||||
marcbal\0§f[§4Admin§f]§4marcbal§r
|
||||
52
|
||||
1/30
|
||||
marcbal\0§f[§4Admin§f]§4marcbal§r\01\01;20;20\01
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<jardesc>
|
||||
<jar path="PandacraftUtils/jar_export/PandacraftUtils-3.5.jar"/>
|
||||
<jar path="PandacraftUtils/jar_export/PandacraftUtils-3.6.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"/>
|
||||
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
|
||||
<selectedProjects/>
|
||||
|
@ -1,6 +1,6 @@
|
||||
name: PandacraftUtils
|
||||
main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils
|
||||
version: 3.5
|
||||
version: 3.6
|
||||
|
||||
|
||||
|
||||
|
@ -2,6 +2,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
@ -18,7 +19,6 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.ConfigManager;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface;
|
||||
|
||||
public class PacketOutServerInfoListener {
|
||||
private PandacraftUtils plugin = PandacraftUtils.getInstance();
|
||||
@ -39,7 +39,7 @@ public class PacketOutServerInfoListener {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent event)
|
||||
{
|
||||
Player[] pl_list = PacketOutServerInfoListener.this.plugin.getServer().getOnlinePlayers();
|
||||
Collection<OnlinePlayer> pl_list = OnlinePlayerManager.getAllNotVanished();
|
||||
|
||||
int count_player = 0;
|
||||
|
||||
@ -50,28 +50,21 @@ public class PacketOutServerInfoListener {
|
||||
List<Player> plPlayerPremium = new ArrayList<Player>();
|
||||
List<Player> plPlayer = new ArrayList<Player>();
|
||||
|
||||
for (Player p : pl_list)
|
||||
for (OnlinePlayer op : pl_list)
|
||||
{
|
||||
if (p != null && p.isOnline())
|
||||
{
|
||||
// on passe si le joueur est vanish
|
||||
if(EssentialsInterface.isPlayerVanished(p)) continue;
|
||||
|
||||
OnlinePlayer op = OnlinePlayerManager.get(p);
|
||||
if (op.isInGroup("admins"))
|
||||
plAdmin.add(op.getPlayer());
|
||||
else if (op.isInStaff())
|
||||
plStaff.add(op.getPlayer());
|
||||
else if (op.isInGroup("ultimate"))
|
||||
plPlayerUltimate.add(op.getPlayer());
|
||||
else if (op.isInGroup("premium"))
|
||||
plPlayerPremium.add(op.getPlayer());
|
||||
else
|
||||
plPlayer.add(op.getPlayer());
|
||||
|
||||
if (op.isInGroup("admins"))
|
||||
plAdmin.add(p);
|
||||
else if (op.isInStaff())
|
||||
plStaff.add(p);
|
||||
else if (op.isInGroup("ultimate"))
|
||||
plPlayerUltimate.add(p);
|
||||
else if (op.isInGroup("premium"))
|
||||
plPlayerPremium.add(p);
|
||||
else
|
||||
plPlayer.add(p);
|
||||
|
||||
count_player++;
|
||||
}
|
||||
count_player++;
|
||||
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.network_api;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorBroadcast;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorCommand;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorCommandAsync;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPlayerList;
|
||||
|
||||
public class NetworkAPI {
|
||||
|
||||
@ -13,21 +14,14 @@ public class NetworkAPI {
|
||||
|
||||
/*
|
||||
* Initialisation des exécuteurs des commandes réseau
|
||||
* LEs constructeurs s'occupent eux même de se référencer dans l'instance de la classe NetworkAPIListener
|
||||
* Les constructeurs s'occupent eux même de se référencer dans l'instance de la classe NetworkAPIListener
|
||||
*/
|
||||
new RequestExecutorCommand();
|
||||
new RequestExecutorBroadcast();
|
||||
new RequestExecutorCommandAsync();
|
||||
new RequestExecutorPlayerList();
|
||||
|
||||
}
|
||||
/*
|
||||
public static void main(String[] args) throws Throwable {
|
||||
loadNewInstance();
|
||||
|
||||
System.out.println(NetworkAPIListener.getInstance().getCommandList());
|
||||
|
||||
NetworkAPIListener.getInstance().join();
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
@ -7,12 +7,21 @@ public class Response {
|
||||
public String data = "";
|
||||
|
||||
|
||||
public Response(boolean good, String data) {
|
||||
this.good = good;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Response() {
|
||||
}
|
||||
|
||||
|
||||
public void sendPacket(PrintStream out) {
|
||||
|
||||
if (data == null) data = "";
|
||||
|
||||
out.print((good?"OK":"ERROR")+"\n");
|
||||
out.print(data.length()+"\n");
|
||||
out.print(data.getBytes().length+"\n");
|
||||
out.print(data);
|
||||
out.flush();
|
||||
}
|
||||
|
@ -0,0 +1,54 @@
|
||||
package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer;
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
||||
|
||||
public class RequestExecutorPlayerList extends AbstractRequestExecutor {
|
||||
|
||||
public RequestExecutorPlayerList() {
|
||||
super("player_list");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Response run(String data) {
|
||||
|
||||
boolean ope = data.trim().equalsIgnoreCase("op");
|
||||
|
||||
Collection<OnlinePlayer> players = ope ?
|
||||
OnlinePlayerManager.getAll() :
|
||||
OnlinePlayerManager.getAllNotVanished();
|
||||
|
||||
char nul = '\u0000', nl = '\n';
|
||||
|
||||
StringBuilder returnData = new StringBuilder();
|
||||
|
||||
// d'abord, le nombre de connecté / le nombre de slot
|
||||
returnData.append(players.size()+"/"+plugin.getServer().getMaxPlayers()+nl);
|
||||
|
||||
for (OnlinePlayer op : players) {
|
||||
|
||||
returnData.append(op.getPlayer().getName());
|
||||
|
||||
returnData.append(nul+op.getPlayer().getDisplayName());
|
||||
|
||||
returnData.append(nul+(op.isAfk()?"0":"1"));
|
||||
|
||||
|
||||
returnData.append(nul+op.getPlayer().getGameMode().toString());
|
||||
returnData.append(';'+op.getPlayer().getHealth());
|
||||
returnData.append(';'+op.getPlayer().getFoodLevel());
|
||||
|
||||
|
||||
returnData.append(nul+(op.isVanished()?"0":"1"));
|
||||
|
||||
returnData.append(nl);
|
||||
}
|
||||
|
||||
|
||||
return new Response(true, returnData.toString());
|
||||
}
|
||||
|
||||
}
|
@ -249,6 +249,17 @@ public class OnlinePlayer {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Indique si le joueur est vanish, en se basant sur le plugin Essentials, qui
|
||||
* gère cette foncionnalitée
|
||||
*/
|
||||
public boolean isVanished() {
|
||||
return EssentialsInterface.isPlayerVanished(player);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
package net.mc_pandacraft.java.plugin.pandacraftutils.players;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
||||
|
||||
@ -33,7 +36,7 @@ public final class OnlinePlayerManager implements Listener {
|
||||
|
||||
|
||||
|
||||
HashMap<Player, OnlinePlayer> players = new HashMap<Player, OnlinePlayer>();
|
||||
Map<Player, OnlinePlayer> players = Collections.synchronizedMap(new HashMap<Player, OnlinePlayer>());
|
||||
|
||||
private OnlinePlayerManager() {
|
||||
|
||||
@ -80,12 +83,23 @@ public final class OnlinePlayerManager implements Listener {
|
||||
}
|
||||
|
||||
public static Collection<OnlinePlayer> getAll() {
|
||||
return getInstance().players.values();
|
||||
return new ArrayList<OnlinePlayer>(getInstance().players.values());
|
||||
}
|
||||
|
||||
|
||||
public static boolean contains(Player p) {
|
||||
public static boolean isOnline(Player p) {
|
||||
return getInstance().players.containsKey(p);
|
||||
}
|
||||
|
||||
public static Collection<OnlinePlayer> getAllNotVanished() {
|
||||
Collection<OnlinePlayer> players = getAll();
|
||||
|
||||
for (OnlinePlayer op : players.toArray(new OnlinePlayer[players.size()])) {
|
||||
if (op.isVanished())
|
||||
players.remove(op);
|
||||
}
|
||||
|
||||
return players;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user