Meilleure gestion des messages privés en provenance de la console

This commit is contained in:
2015-02-15 01:33:10 -05:00
parent 6a90f06445
commit 65b3bb5b15
7 changed files with 91 additions and 9 deletions

View File

@@ -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.RequestExecutorCommandAsync;
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 {
@@ -22,6 +23,7 @@ public class NetworkAPI {
new RequestExecutorCommandAsync();
new RequestExecutorPlayerList();
new RequestExecutorChatSend();
new RequestExecutorPrivateMessage();
}

View File

@@ -51,10 +51,7 @@ public class NetworkAPIListener extends Thread {
private HashMap<String, AbstractRequestExecutor> requestExecutors = new HashMap<String, AbstractRequestExecutor>();
private NetworkAPIListener() {
super("NetworkAPI Listener");
plugin.getServer().getLogger().info("System property 'file.encoding' was set to 'UTF-8'");
super("NAPI Listener");
}
@Override
@@ -148,7 +145,7 @@ class PacketExecutor extends Thread {
private Socket socket;
public PacketExecutor(Socket s, int iteration) {
super("NetworkAPI Input Packet #"+iteration);
super("NAPI Input "+iteration);
socket = s;
}

View File

@@ -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, "");
}
}

View File

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