Meilleure gestion des messages privés en provenance de la console
This commit is contained in:
parent
6a90f06445
commit
65b3bb5b15
@ -22,7 +22,7 @@ La requête est construite en mode texte, sur plusieurs lignes. Chaque ligne se
|
|||||||
- Longueur des données, en octets + '\n'
|
- Longueur des données, en octets + '\n'
|
||||||
- Valeur/données (pas de '\n' à la fin)
|
- Valeur/données (pas de '\n' à la fin)
|
||||||
|
|
||||||
Pour que l'analyse de la requête côté serveur puisse s'effectuer côté serveur, le flux qui va du client vers le serveur doit être fermée après envoi des données.
|
Pour que l'analyse de la requête puisse s'effectuer côté serveur, le flux qui va du client vers le serveur doit être fermée après envoi des données.
|
||||||
|
|
||||||
### Exemple de paquet
|
### Exemple de paquet
|
||||||
ervg1e3r2c
|
ervg1e3r2c
|
||||||
@ -45,7 +45,7 @@ Le message passé dans la partie **donnée** est diffusé en convertissant les c
|
|||||||
|
|
||||||
#### `chat_send`
|
#### `chat_send`
|
||||||
Affiche un message en tant qu'un joueur donné, sur le chat du serveur
|
Affiche un message en tant qu'un joueur donné, sur le chat du serveur
|
||||||
La partie **donnée** de la requête contient d'abord le pseudo du joueur concerné, suivi d'un espace, suivi du message.
|
La partie **donnée** de la requête contient d'abord le pseudo du joueur concerné, suivi d'un espace, suivi du message. Aucun espace ne peut se trouver dans le pseudo.
|
||||||
|
|
||||||
#### `player_list`
|
#### `player_list`
|
||||||
Renvoi la liste des joueurs connectés, avec quelques infos utiles.
|
Renvoi la liste des joueurs connectés, avec quelques infos utiles.
|
||||||
@ -69,6 +69,14 @@ Chaque information sur une ligne sera séparé par un `\0` représentant le cara
|
|||||||
6. Point de faim arrondi à l'unité
|
6. Point de faim arrondi à l'unité
|
||||||
7. `1` si le joueur est visible, `0` si il est vanish.
|
7. `1` si le joueur est visible, `0` si il est vanish.
|
||||||
|
|
||||||
|
#### `private_message`
|
||||||
|
Envoi un message à un joueur connecté, en tant qu'un autre joueur donné.
|
||||||
|
La partie **donnée** de la requête contient d'abord le pseudo du joueur source, suivi d'un espace, suivi du pseudo du joueur cible, suivi d'un espace et enfin suivi du message. Les pseudos ne peuvent pas contenir d'espace.
|
||||||
|
|
||||||
|
marcbal toto salut :)
|
||||||
|
|
||||||
|
Cet exemple enverra de la part de `marcbal` le message `salut :)` à `toto`.
|
||||||
|
|
||||||
|
|
||||||
## 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' :
|
||||||
|
@ -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.9.jar"/>
|
<jar path="PandacraftUtils/jar_export/PandacraftUtils-3.10.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.9
|
version: 3.10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executo
|
|||||||
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;
|
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPlayerList;
|
||||||
|
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPrivateMessage;
|
||||||
|
|
||||||
public class NetworkAPI {
|
public class NetworkAPI {
|
||||||
|
|
||||||
@ -22,6 +23,7 @@ public class NetworkAPI {
|
|||||||
new RequestExecutorCommandAsync();
|
new RequestExecutorCommandAsync();
|
||||||
new RequestExecutorPlayerList();
|
new RequestExecutorPlayerList();
|
||||||
new RequestExecutorChatSend();
|
new RequestExecutorChatSend();
|
||||||
|
new RequestExecutorPrivateMessage();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,10 +51,7 @@ public class NetworkAPIListener extends Thread {
|
|||||||
private HashMap<String, AbstractRequestExecutor> requestExecutors = new HashMap<String, AbstractRequestExecutor>();
|
private HashMap<String, AbstractRequestExecutor> requestExecutors = new HashMap<String, AbstractRequestExecutor>();
|
||||||
|
|
||||||
private NetworkAPIListener() {
|
private NetworkAPIListener() {
|
||||||
super("NetworkAPI Listener");
|
super("NAPI Listener");
|
||||||
plugin.getServer().getLogger().info("System property 'file.encoding' was set to 'UTF-8'");
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -148,7 +145,7 @@ class PacketExecutor extends Thread {
|
|||||||
private Socket socket;
|
private Socket socket;
|
||||||
|
|
||||||
public PacketExecutor(Socket s, int iteration) {
|
public PacketExecutor(Socket s, int iteration) {
|
||||||
super("NetworkAPI Input Packet #"+iteration);
|
super("NAPI Input "+iteration);
|
||||||
socket = s;
|
socket = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.CommandSource;
|
||||||
|
import com.earth2me.essentials.Console;
|
||||||
|
|
||||||
|
import ru.tehkode.permissions.PermissionUser;
|
||||||
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||||
|
import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response;
|
||||||
|
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
||||||
|
import net.mc_pandacraft.java.plugin.pandacraftutils.plugin_interface.EssentialsInterface;
|
||||||
|
|
||||||
|
public class RequestExecutorPrivateMessage extends AbstractRequestExecutor {
|
||||||
|
|
||||||
|
public RequestExecutorPrivateMessage() {
|
||||||
|
super("private_message");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Response run(String data) {
|
||||||
|
|
||||||
|
String[] dataSplit = data.split(" ", 3);
|
||||||
|
if (dataSplit.length != 3)
|
||||||
|
return new Response(false, "bad_data : at least two space");
|
||||||
|
|
||||||
|
PermissionUser permUser = PermissionsEx.getUser(dataSplit[0]);
|
||||||
|
|
||||||
|
if (permUser == null)
|
||||||
|
return new Response(false, "user_src_not_exist : user is not registered in permission plugin");
|
||||||
|
|
||||||
|
Player p = plugin.getServer().getPlayer(dataSplit[1]);
|
||||||
|
|
||||||
|
if (p == null || !p.isOnline()) {
|
||||||
|
plugin.getLogger().warning(ChatColor.RED+dataSplit[1]+" n'est pas en ligne");
|
||||||
|
return new Response(false, "user_dest_not_online");
|
||||||
|
}
|
||||||
|
|
||||||
|
String displayName = "["+ChatColor.GRAY+"Console"+ChatColor.GOLD+"]"+permUser.getPrefix() + permUser.getName() + permUser.getSuffix();
|
||||||
|
|
||||||
|
|
||||||
|
String finalMessageToUser = ChatColor.GOLD+"["+displayName+ChatColor.GOLD+" -> moi] "+ChatColor.RESET+dataSplit[2];
|
||||||
|
String finalMessageToConsole = ChatColor.GOLD+"["+displayName+ChatColor.GOLD+" -> "+p.getDisplayName()+ChatColor.GOLD+"] "+ChatColor.RESET+dataSplit[2];
|
||||||
|
|
||||||
|
plugin.getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', finalMessageToConsole));
|
||||||
|
p.sendMessage(ChatColor.translateAlternateColorCodes('&', finalMessageToUser));
|
||||||
|
|
||||||
|
if (!OnlinePlayerManager.get(p).hasReceiveMessageFromNetworkAPI()) {
|
||||||
|
p.sendMessage(ChatColor.GREEN+"Répondez à un message venant de la console avec "+ChatColor.GRAY+"/m console");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EssentialsInterface.getPlayer(p).setReplyTo(new CommandSource(plugin.getServer().getConsoleSender()));
|
||||||
|
Console.getConsoleReplyTo().setReplyTo(new CommandSource(p));
|
||||||
|
|
||||||
|
return new Response(true, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -315,6 +315,21 @@ public class OnlinePlayer {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private boolean hasAlreadyReceivedMessageFromNetworkAPI = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indique à l'intance de OnlinePlayer que le joueur vient de recevoir un message
|
||||||
|
* depuis le networkAPI.
|
||||||
|
* @return <code>false</code> si il s'agit du premier message depuis la connexion du joueur ou <code>true</code> pour les messages suivant
|
||||||
|
*/
|
||||||
|
public boolean hasReceiveMessageFromNetworkAPI() {
|
||||||
|
boolean r = hasAlreadyReceivedMessageFromNetworkAPI;
|
||||||
|
hasAlreadyReceivedMessageFromNetworkAPI = true;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user