Allow appending BaseComponent arrays in ComponentBuilder
This commit is contained in:
parent
a1f9c2e7d4
commit
fd675022c0
@ -1,5 +1,6 @@
|
|||||||
package net.md_5.bungee.api.chat;
|
package net.md_5.bungee.api.chat;
|
||||||
|
|
||||||
|
import com.google.common.base.Preconditions;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -25,7 +26,7 @@ import java.util.List;
|
|||||||
public class ComponentBuilder
|
public class ComponentBuilder
|
||||||
{
|
{
|
||||||
|
|
||||||
private TextComponent current;
|
private BaseComponent current;
|
||||||
private final List<BaseComponent> parts = new ArrayList<BaseComponent>();
|
private final List<BaseComponent> parts = new ArrayList<BaseComponent>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,6 +54,41 @@ public class ComponentBuilder
|
|||||||
current = new TextComponent( text );
|
current = new TextComponent( text );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the components to the builder and makes it the current target for
|
||||||
|
* formatting. The text will have all the formatting from the previous part.
|
||||||
|
*
|
||||||
|
* @param components the components to append
|
||||||
|
* @return this ComponentBuilder for chaining
|
||||||
|
*/
|
||||||
|
public ComponentBuilder append(BaseComponent[] components)
|
||||||
|
{
|
||||||
|
return append( components, FormatRetention.ALL );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the components to the builder and makes it the current target for
|
||||||
|
* formatting. You can specify the amount of formatting retained.
|
||||||
|
*
|
||||||
|
* @param components the components to append
|
||||||
|
* @param retention the formatting to retain
|
||||||
|
* @return this ComponentBuilder for chaining
|
||||||
|
*/
|
||||||
|
public ComponentBuilder append(BaseComponent[] components, FormatRetention retention)
|
||||||
|
{
|
||||||
|
Preconditions.checkArgument( components.length != 0, "No components to append" );
|
||||||
|
|
||||||
|
for ( BaseComponent component : components )
|
||||||
|
{
|
||||||
|
parts.add( current );
|
||||||
|
|
||||||
|
current = component.duplicate();
|
||||||
|
retain( retention );
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends the text to the builder and makes it the current target for
|
* Appends the text to the builder and makes it the current target for
|
||||||
* formatting. The text will have all the formatting from the previous part.
|
* formatting. The text will have all the formatting from the previous part.
|
||||||
@ -77,8 +113,8 @@ public class ComponentBuilder
|
|||||||
{
|
{
|
||||||
parts.add( current );
|
parts.add( current );
|
||||||
|
|
||||||
current = new TextComponent( current );
|
current = new TextComponent( (TextComponent) current );
|
||||||
current.setText( text );
|
( (TextComponent) current ).setText( text );
|
||||||
retain( retention );
|
retain( retention );
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
@ -215,13 +251,29 @@ public class ComponentBuilder
|
|||||||
switch ( retention )
|
switch ( retention )
|
||||||
{
|
{
|
||||||
case NONE:
|
case NONE:
|
||||||
current = new TextComponent( current.getText() );
|
if ( current instanceof TextComponent )
|
||||||
|
{
|
||||||
|
current = new TextComponent( ( (TextComponent) current ).getText() );
|
||||||
|
} else if ( current instanceof TranslatableComponent )
|
||||||
|
{
|
||||||
|
TranslatableComponent oldComponent = (TranslatableComponent) current;
|
||||||
|
current = new TranslatableComponent( oldComponent.getTranslate(), oldComponent.getWith() );
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ALL:
|
case ALL:
|
||||||
// No changes are required
|
// No changes are required
|
||||||
break;
|
break;
|
||||||
case EVENTS:
|
case EVENTS:
|
||||||
current = new TextComponent( current.getText() );
|
if ( current instanceof TextComponent )
|
||||||
|
{
|
||||||
|
current = new TextComponent( ( (TextComponent) current ).getText() );
|
||||||
|
} else if ( current instanceof TranslatableComponent )
|
||||||
|
{
|
||||||
|
TranslatableComponent oldComponent = (TranslatableComponent) current;
|
||||||
|
current = new TranslatableComponent( oldComponent.getTranslate(), oldComponent.getWith() );
|
||||||
|
}
|
||||||
|
|
||||||
current.setInsertion( previous.getInsertion() );
|
current.setInsertion( previous.getInsertion() );
|
||||||
current.setClickEvent( previous.getClickEvent() );
|
current.setClickEvent( previous.getClickEvent() );
|
||||||
current.setHoverEvent( previous.getHoverEvent() );
|
current.setHoverEvent( previous.getHoverEvent() );
|
||||||
|
@ -13,6 +13,23 @@ import org.junit.Test;
|
|||||||
public class ComponentsTest
|
public class ComponentsTest
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBuilderAppend()
|
||||||
|
{
|
||||||
|
ClickEvent clickEvent = new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/help " );
|
||||||
|
HoverEvent hoverEvent = new HoverEvent( HoverEvent.Action.SHOW_TEXT, new ComponentBuilder( "Hello world" ).create() );
|
||||||
|
|
||||||
|
ComponentBuilder builder = new ComponentBuilder( "Hello " ).color( ChatColor.YELLOW );
|
||||||
|
builder.append( new ComponentBuilder( "world!" ).color( ChatColor.GREEN ).event( hoverEvent ).event( clickEvent ).create() );
|
||||||
|
|
||||||
|
BaseComponent[] components = builder.create();
|
||||||
|
|
||||||
|
Assert.assertEquals( components[1].getHoverEvent(), hoverEvent );
|
||||||
|
Assert.assertEquals( components[1].getClickEvent(), clickEvent );
|
||||||
|
Assert.assertEquals( "Hello world!", BaseComponent.toPlainText( components ) );
|
||||||
|
Assert.assertEquals( ChatColor.YELLOW + "Hello " + ChatColor.GREEN + "world!", BaseComponent.toLegacyText( components ) );
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBasicComponent()
|
public void testBasicComponent()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user