Add chat position API.

This commit is contained in:
Minecrell 2014-09-08 21:15:14 +02:00 committed by md_5
parent 772c8d7f2b
commit f19cc7fe4f
3 changed files with 62 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import net.md_5.bungee.api.Callback; import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.Title; import net.md_5.bungee.api.Title;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -31,6 +32,22 @@ public interface ProxiedPlayer extends Connection, CommandSender
*/ */
void setDisplayName(String name); void setDisplayName(String name);
/**
* Send a message to the specified screen position of this player.
*
* @param position the screen position
* @param message the message to send
*/
public void sendMessage(ChatMessageType position, BaseComponent... message);
/**
* Send a message to the specified screen position of this player.
*
* @param position the screen position
* @param message the message to send
*/
public void sendMessage(ChatMessageType position, BaseComponent message);
/** /**
* Connects / transfers this user to the specified connection, gracefully * Connects / transfers this user to the specified connection, gracefully
* closing the current one. Depending on the implementation, this method * closing the current one. Depending on the implementation, this method

View File

@ -0,0 +1,11 @@
package net.md_5.bungee.api;
/**
* Represents the position on the screen where a message will appear.
*/
public enum ChatMessageType
{
CHAT,
SYSTEM,
ACTION_BAR
}

View File

@ -24,6 +24,7 @@ import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import net.md_5.bungee.api.Callback; import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.Title; import net.md_5.bungee.api.Title;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
@ -370,13 +371,44 @@ public final class UserConnection implements ProxiedPlayer
@Override @Override
public void sendMessage(BaseComponent... message) public void sendMessage(BaseComponent... message)
{ {
unsafe().sendPacket( new Chat( ComponentSerializer.toString( message ) ) ); sendMessage( ChatMessageType.CHAT, message );
} }
@Override @Override
public void sendMessage(BaseComponent message) public void sendMessage(BaseComponent message)
{ {
unsafe().sendPacket( new Chat( ComponentSerializer.toString( message ) ) ); sendMessage( ChatMessageType.CHAT, message );
}
private void sendMessage(ChatMessageType position, String message)
{
unsafe().sendPacket( new Chat( message, (byte) position.ordinal() ) );
}
@Override
public void sendMessage(ChatMessageType position, BaseComponent... message)
{
// Action bar doesn't display the new JSON formattings, legacy works - send it using this for now
if ( position == ChatMessageType.ACTION_BAR && pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_SNAPSHOT )
{
sendMessage( position, ComponentSerializer.toString( new TextComponent( TextComponent.toLegacyText( message ) ) ) );
} else
{
sendMessage( position, ComponentSerializer.toString( message ) );
}
}
@Override
public void sendMessage(ChatMessageType position, BaseComponent message)
{
// Action bar doesn't display the new JSON formattings, legacy works - send it using this for now
if ( position == ChatMessageType.ACTION_BAR && pendingConnection.getVersion() >= ProtocolConstants.MINECRAFT_SNAPSHOT )
{
sendMessage( position, ComponentSerializer.toString( new TextComponent( TextComponent.toLegacyText( message ) ) ) );
} else
{
sendMessage( position, ComponentSerializer.toString( message ) );
}
} }
@Override @Override