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`
|
#### `broadcast`
|
||||||
Affiche un message sur le chat pour tout le monde connecté.
|
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`
|
#### `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
|
## Structure d'une réponse
|
||||||
La réponse est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' :
|
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`
|
Réponse à une requête de type `player_list`
|
||||||
|
|
||||||
OK
|
OK
|
||||||
56
|
52
|
||||||
player\0disp_name
|
1/30
|
||||||
marcbal\0§f[§4Admin§f]§4marcbal§r
|
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"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<jardesc>
|
<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"/>
|
<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.5
|
version: 3.6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
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.PandacraftUtils;
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer;
|
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.players.OnlinePlayerManager;
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface;
|
|
||||||
|
|
||||||
public class PacketOutServerInfoListener {
|
public class PacketOutServerInfoListener {
|
||||||
private PandacraftUtils plugin = PandacraftUtils.getInstance();
|
private PandacraftUtils plugin = PandacraftUtils.getInstance();
|
||||||
@ -39,7 +39,7 @@ public class PacketOutServerInfoListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onPacketSending(PacketEvent event)
|
public void onPacketSending(PacketEvent event)
|
||||||
{
|
{
|
||||||
Player[] pl_list = PacketOutServerInfoListener.this.plugin.getServer().getOnlinePlayers();
|
Collection<OnlinePlayer> pl_list = OnlinePlayerManager.getAllNotVanished();
|
||||||
|
|
||||||
int count_player = 0;
|
int count_player = 0;
|
||||||
|
|
||||||
@ -50,28 +50,21 @@ public class PacketOutServerInfoListener {
|
|||||||
List<Player> plPlayerPremium = new ArrayList<Player>();
|
List<Player> plPlayerPremium = new ArrayList<Player>();
|
||||||
List<Player> plPlayer = new ArrayList<Player>();
|
List<Player> plPlayer = new ArrayList<Player>();
|
||||||
|
|
||||||
for (Player p : pl_list)
|
for (OnlinePlayer op : pl_list)
|
||||||
{
|
{
|
||||||
if (p != null && p.isOnline())
|
|
||||||
{
|
if (op.isInGroup("admins"))
|
||||||
// on passe si le joueur est vanish
|
plAdmin.add(op.getPlayer());
|
||||||
if(EssentialsInterface.isPlayerVanished(p)) continue;
|
else if (op.isInStaff())
|
||||||
|
plStaff.add(op.getPlayer());
|
||||||
OnlinePlayer op = OnlinePlayerManager.get(p);
|
else if (op.isInGroup("ultimate"))
|
||||||
|
plPlayerUltimate.add(op.getPlayer());
|
||||||
if (op.isInGroup("admins"))
|
else if (op.isInGroup("premium"))
|
||||||
plAdmin.add(p);
|
plPlayerPremium.add(op.getPlayer());
|
||||||
else if (op.isInStaff())
|
else
|
||||||
plStaff.add(p);
|
plPlayer.add(op.getPlayer());
|
||||||
else if (op.isInGroup("ultimate"))
|
|
||||||
plPlayerUltimate.add(p);
|
count_player++;
|
||||||
else if (op.isInGroup("premium"))
|
|
||||||
plPlayerPremium.add(p);
|
|
||||||
else
|
|
||||||
plPlayer.add(p);
|
|
||||||
|
|
||||||
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.RequestExecutorBroadcast;
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorCommand;
|
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.RequestExecutorCommandAsync;
|
||||||
|
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPlayerList;
|
||||||
|
|
||||||
public class NetworkAPI {
|
public class NetworkAPI {
|
||||||
|
|
||||||
@ -13,21 +14,14 @@ public class NetworkAPI {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialisation des exécuteurs des commandes réseau
|
* 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 RequestExecutorCommand();
|
||||||
new RequestExecutorBroadcast();
|
new RequestExecutorBroadcast();
|
||||||
new RequestExecutorCommandAsync();
|
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 String data = "";
|
||||||
|
|
||||||
|
|
||||||
|
public Response(boolean good, String data) {
|
||||||
|
this.good = good;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Response() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendPacket(PrintStream out) {
|
public void sendPacket(PrintStream out) {
|
||||||
|
|
||||||
if (data == null) data = "";
|
if (data == null) data = "";
|
||||||
|
|
||||||
out.print((good?"OK":"ERROR")+"\n");
|
out.print((good?"OK":"ERROR")+"\n");
|
||||||
out.print(data.length()+"\n");
|
out.print(data.getBytes().length+"\n");
|
||||||
out.print(data);
|
out.print(data);
|
||||||
out.flush();
|
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;
|
package net.mc_pandacraft.java.plugin.pandacraftutils.players;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
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() {
|
private OnlinePlayerManager() {
|
||||||
|
|
||||||
@ -80,12 +83,23 @@ public final class OnlinePlayerManager implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Collection<OnlinePlayer> getAll() {
|
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);
|
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