Allow appending BaseComponent arrays in ComponentBuilder

This commit is contained in:
Mystiflow
2017-08-11 14:28:18 +01:00
committed by md_5
parent a1f9c2e7d4
commit fd675022c0
2 changed files with 74 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
package net.md_5.bungee.api.chat;
import com.google.common.base.Preconditions;
import net.md_5.bungee.api.ChatColor;
import java.util.ArrayList;
import java.util.List;
@@ -25,7 +26,7 @@ import java.util.List;
public class ComponentBuilder
{
private TextComponent current;
private BaseComponent current;
private final List<BaseComponent> parts = new ArrayList<BaseComponent>();
/**
@@ -53,6 +54,41 @@ public class ComponentBuilder
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
* formatting. The text will have all the formatting from the previous part.
@@ -77,8 +113,8 @@ public class ComponentBuilder
{
parts.add( current );
current = new TextComponent( current );
current.setText( text );
current = new TextComponent( (TextComponent) current );
( (TextComponent) current ).setText( text );
retain( retention );
return this;
@@ -215,13 +251,29 @@ public class ComponentBuilder
switch ( retention )
{
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;
case ALL:
// No changes are required
break;
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.setClickEvent( previous.getClickEvent() );
current.setHoverEvent( previous.getHoverEvent() );