Add ComponentBuilder + make events final

An example of ComponentBuilder usage can be found at CommandAlertRaw
This commit is contained in:
Thinkofdeath
2013-12-10 11:50:34 +00:00
parent bc746a546f
commit 5d68b422e5
8 changed files with 199 additions and 40 deletions

View File

@@ -55,11 +55,13 @@ public class BaseComponentSerializer
if ( object.has( "hoverEvent" ) )
{
JsonObject event = object.getAsJsonObject( "hoverEvent" );
HoverEvent hoverEvent = new HoverEvent();
hoverEvent.setAction( HoverEvent.Action.valueOf( event.get( "action" ).getAsString().toUpperCase() ) );
BaseComponent res = context.deserialize( event.get( "value" ), BaseComponent.class );
hoverEvent.setValue( res );
component.setHoverEvent( hoverEvent );
BaseComponent[] res;
if (event.get("value").isJsonArray()) {
res = context.deserialize( event.get( "value" ), BaseComponent[].class );
} else {
res = new BaseComponent[]{context.<BaseComponent>deserialize( event.get( "value" ), BaseComponent.class )};
}
component.setHoverEvent( new HoverEvent( HoverEvent.Action.valueOf( event.get( "action" ).getAsString().toUpperCase() ), res ) );
}
}

View File

@@ -4,6 +4,7 @@ import com.google.common.base.Joiner;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Command;
@@ -34,15 +35,12 @@ public class CommandAlertRaw extends Command
ProxyServer.getInstance().broadcast( ComponentSerializer.parse( message ) );
} catch ( Exception e )
{
TextComponent error = new TextComponent( "An error occurred while parsing your message. (Hover for details)" );
error.setColor( ChatColor.RED );
error.setUnderlined( true );
TextComponent errorMessage = new TextComponent( e.getMessage() );
errorMessage.setColor( ChatColor.RED );
error.setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, errorMessage ) );
sender.sendMessage( error );
sender.sendMessage(
new ComponentBuilder( "An error occured while parsing your message. (Hover for details)" ).
color( ChatColor.RED ).underlined( true ).
event( new HoverEvent( HoverEvent.Action.SHOW_TEXT,
new ComponentBuilder( e.getMessage() ).color( ChatColor.RED ).create() ) ).
create() );
}
}
}

View File

@@ -3,6 +3,7 @@ package net.md_5.bungee.chat;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.chat.TranslatableComponent;
import org.junit.Assert;
@@ -66,4 +67,16 @@ public class ComponentsTest
Assert.assertEquals( ChatColor.WHITE + "Page " + ChatColor.WHITE + "5" + ChatColor.WHITE + " of " + ChatColor.WHITE + "50", positional.toLegacyText() );
}
@Test
public void testBuilder()
{
BaseComponent[] components = new ComponentBuilder( "Hello " ).color( ChatColor.RED ).
append( "World" ).bold( true ).color( ChatColor.BLUE ).
append( "!" ).color( ChatColor.YELLOW ).create();
Assert.assertEquals( "Hello World!", BaseComponent.toPlainText( components ) );
Assert.assertEquals( ChatColor.RED + "Hello " + ChatColor.BLUE + ChatColor.BOLD +
"World" + ChatColor.YELLOW + ChatColor.BOLD + "!", BaseComponent.toLegacyText( components ) );
}
}