A maneira mais facil(eu acho) usar o PlayerChatEvent, e uma lista pra colocar os "jogadores" que clicaram,
ai tu checa, caso o jogador que falou no chat esteja na lista tu pega oq ele falou e usa,...
Da pra fazer assim tbm (jeito mais hardcore, usando nms e packet)
// Quando o cara clicar
final Player p = ...;
p.sendMessage("Digite seu skype no chat.");
CraftPlayer cp = (CraftPlayer) p;
ChannelPipeline pipeline = ((CraftPlayer) p).getHandle().playerConnection.networkManager.channel.pipeline();
pipeline.addBefore("packet_handler", "edit_skype", new ChannelDuplexHandler() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object packet) throws Exception {
if (packet instanceof PacketPlayInChat) {
String text = ((PacketPlayInChat) packet).a();
p.sendMessage("Skype definido para " + text);
pipeline.remove(this);
return;
}
super.channelRead(ctx, packet);
}
});
Se não me engano só funciona do cb 1.8 r3 pra cima.
Assim eu acho que é melhor pois ele vai adicionar o canal na "conexão" do jogador e vai pegar a proxima msg que o jogador editar e vai tirar o canal... já no evento que eu disse ali em cima ele vai ficar verificando as mensagens de todos os jogadores pra sempre.