Simple Network Chat Walkthrough
Getting a reference to ProtonManager
Before you do anything with Proton, you need a reference to ProtonManager. In your onEnable()
method, store a reference to it.
public void onEnable(){
this.protonManager = ProtonProvider.get();
}
Forward chat messages network-wide
Create an event listener for the async chat event and broadcast your custom data there. In this case, we opted for a container class which holds the player name and message.
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event){
PlayerMessage message = new PlayerMessage(event.getPlayer().getName(), event.getMessage());
protonManager.broadcast("networkchat", "chatMessage", message);
}
Listen for the broadcasted message
Here we will listen for broadcasted messages using a MessageHandler
@MessageHandler(namespace = "networkchat", subject="chatMessage")
public void onChatReceived(PlayerMessage message){
getServer().broadcastMessage(String.format("<%s> %s", message.getPlayer(), message.getMessage()));
}
We must also register our MessageHandlers with Proton. This is done through the registerMessageHandlers
method.
public void onEnable(){
this.protonManager = ProtonProvider.get();
this.protonManager.registerMessageHandlers(this);
}
We're done! You will now be able to chat network-wide.
Full Code (with Bukkit API calls)
public class NetworkChat extends JavaPlugin implements Listener {
ProtonManager manager;
public void onEnable(){
manager = Proton.getProtonManager();
if(manager != null){
manager.registerMessageHandlers(this, this);
}
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent event){
PlayerMessage message = new PlayerMessage(event.getPlayer().getName(), event.getMessage());
manager.broadcast("networkchat", "chatMessage", message);
}
@MessageHandler(namespace = "networkchat", subject="chatMessage")
public void onChatReceived(PlayerMessage message){
getServer().broadcastMessage(String.format("<%s> %s", message.getPlayer(), message.getMessage()));
}
public class PlayerMessage {
String player;
String message;
public PlayerMessage(String player, String message) {
this.player = player;
this.message = message;
}
public String getPlayer() {
return player;
}
public String getMessage() {
return message;
}
}
}
Last updated
Was this helpful?