-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#3569: Separate component styling into a ComponentStyle class
- Loading branch information
Showing
8 changed files
with
714 additions
and
145 deletions.
There are no files selected for viewing
231 changes: 168 additions & 63 deletions
231
chat/src/main/java/net/md_5/bungee/api/chat/BaseComponent.java
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
234 changes: 234 additions & 0 deletions
234
chat/src/main/java/net/md_5/bungee/api/chat/ComponentStyle.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,234 @@ | ||
package net.md_5.bungee.api.chat; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.EqualsAndHashCode; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
import net.md_5.bungee.api.ChatColor; | ||
|
||
/** | ||
* Represents a style that may be applied to a {@link BaseComponent}. | ||
*/ | ||
@Setter | ||
@AllArgsConstructor | ||
@NoArgsConstructor | ||
@EqualsAndHashCode | ||
public final class ComponentStyle implements Cloneable | ||
{ | ||
|
||
/** | ||
* The color of this style. | ||
*/ | ||
private ChatColor color; | ||
/** | ||
* The font of this style. | ||
*/ | ||
private String font; | ||
/** | ||
* Whether this style is bold. | ||
*/ | ||
private Boolean bold; | ||
/** | ||
* Whether this style is italic. | ||
*/ | ||
private Boolean italic; | ||
/** | ||
* Whether this style is underlined. | ||
*/ | ||
private Boolean underlined; | ||
/** | ||
* Whether this style is strikethrough. | ||
*/ | ||
private Boolean strikethrough; | ||
/** | ||
* Whether this style is obfuscated. | ||
*/ | ||
private Boolean obfuscated; | ||
|
||
/** | ||
* Returns the color of this style. May return null. | ||
* | ||
* @return the color of this style, or null if default color | ||
*/ | ||
public ChatColor getColor() | ||
{ | ||
return color; | ||
} | ||
|
||
/** | ||
* Returns whether or not this style has a color set. | ||
* | ||
* @return whether a color is set | ||
*/ | ||
public boolean hasColor() | ||
{ | ||
return ( color != null ); | ||
} | ||
|
||
/** | ||
* Returns the font of this style. May return null. | ||
* | ||
* @return the font of this style, or null if default font | ||
*/ | ||
public String getFont() | ||
{ | ||
return font; | ||
} | ||
|
||
/** | ||
* Returns whether or not this style has a font set. | ||
* | ||
* @return whether a font is set | ||
*/ | ||
public boolean hasFont() | ||
{ | ||
return ( font != null ); | ||
} | ||
|
||
/** | ||
* Returns whether this style is bold. | ||
* | ||
* @return whether the style is bold | ||
*/ | ||
public boolean isBold() | ||
{ | ||
return ( bold != null ) && bold.booleanValue(); | ||
} | ||
|
||
/** | ||
* Returns whether this style is bold. May return null. | ||
* | ||
* @return whether the style is bold, or null if not set | ||
*/ | ||
public Boolean isBoldRaw() | ||
{ | ||
return bold; | ||
} | ||
|
||
/** | ||
* Returns whether this style is italic. May return null. | ||
* | ||
* @return whether the style is italic | ||
*/ | ||
public boolean isItalic() | ||
{ | ||
return ( italic != null ) && italic.booleanValue(); | ||
} | ||
|
||
/** | ||
* Returns whether this style is italic. May return null. | ||
* | ||
* @return whether the style is italic, or null if not set | ||
*/ | ||
public Boolean isItalicRaw() | ||
{ | ||
return italic; | ||
} | ||
|
||
/** | ||
* Returns whether this style is underlined. | ||
* | ||
* @return whether the style is underlined | ||
*/ | ||
public boolean isUnderlined() | ||
{ | ||
return ( underlined != null ) && underlined.booleanValue(); | ||
} | ||
|
||
/** | ||
* Returns whether this style is underlined. May return null. | ||
* | ||
* @return whether the style is underlined, or null if not set | ||
*/ | ||
public Boolean isUnderlinedRaw() | ||
{ | ||
return underlined; | ||
} | ||
|
||
/** | ||
* Returns whether this style is strikethrough | ||
* | ||
* @return whether the style is strikethrough | ||
*/ | ||
public boolean isStrikethrough() | ||
{ | ||
return ( strikethrough != null ) && strikethrough.booleanValue(); | ||
} | ||
|
||
/** | ||
* Returns whether this style is strikethrough. May return null. | ||
* | ||
* @return whether the style is strikethrough, or null if not set | ||
*/ | ||
public Boolean isStrikethroughRaw() | ||
{ | ||
return strikethrough; | ||
} | ||
|
||
/** | ||
* Returns whether this style is obfuscated. | ||
* | ||
* @return whether the style is obfuscated | ||
*/ | ||
public boolean isObfuscated() | ||
{ | ||
return ( obfuscated != null ) && obfuscated.booleanValue(); | ||
} | ||
|
||
/** | ||
* Returns whether this style is obfuscated. May return null. | ||
* | ||
* @return whether the style is obfuscated, or null if not set | ||
*/ | ||
public Boolean isObfuscatedRaw() | ||
{ | ||
return obfuscated; | ||
} | ||
|
||
/** | ||
* Returns whether this style has any formatting explicitly set. | ||
* | ||
* @return true if at least one value is set, false if none are set | ||
*/ | ||
public boolean isEmpty() | ||
{ | ||
return color != null || font != null || bold != null | ||
|| italic != null || underlined != null | ||
|| strikethrough != null || obfuscated != null; | ||
} | ||
|
||
@Override | ||
public ComponentStyle clone() | ||
{ | ||
return new ComponentStyle( color, font, bold, italic, underlined, strikethrough, obfuscated ); | ||
} | ||
|
||
/** | ||
* Get a new {@link ComponentStyleBuilder}. | ||
* | ||
* @return the builder | ||
*/ | ||
public static ComponentStyleBuilder builder() | ||
{ | ||
return new ComponentStyleBuilder(); | ||
} | ||
|
||
/** | ||
* Get a new {@link ComponentStyleBuilder} with values initialized to the | ||
* style values of the supplied {@link ComponentStyle}. | ||
* | ||
* @param other the component style whose values to copy into the builder | ||
* @return the builder | ||
*/ | ||
public static ComponentStyleBuilder builder(ComponentStyle other) | ||
{ | ||
return new ComponentStyleBuilder() | ||
.color( other.color ) | ||
.font( other.font ) | ||
.bold( other.bold ) | ||
.italic( other.italic ) | ||
.underlined( other.underlined ) | ||
.strikethrough( other.strikethrough ) | ||
.obfuscated( other.obfuscated ); | ||
} | ||
} |
126 changes: 126 additions & 0 deletions
126
chat/src/main/java/net/md_5/bungee/api/chat/ComponentStyleBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
package net.md_5.bungee.api.chat; | ||
|
||
import net.md_5.bungee.api.ChatColor; | ||
|
||
/** | ||
* <p> | ||
* ComponentStyleBuilder simplifies creating component styles by allowing the | ||
* use of a chainable builder. | ||
* </p> | ||
* <pre> | ||
* ComponentStyle style = ComponentStyle.builder() | ||
* .color(ChatColor.RED) | ||
* .font("custom:font") | ||
* .bold(true).italic(true).create(); | ||
* | ||
* BaseComponent component = new ComponentBuilder("Hello world").style(style).create(); | ||
* // Or it can be used directly on a component | ||
* TextComponent text = new TextComponent("Hello world"); | ||
* text.applyStyle(style); | ||
* </pre> | ||
* | ||
* @see ComponentStyle#builder() | ||
* @see ComponentStyle#builder(ComponentStyle) | ||
*/ | ||
public final class ComponentStyleBuilder | ||
{ | ||
|
||
private ChatColor color; | ||
private String font; | ||
private Boolean bold, italic, underlined, strikethrough, obfuscated; | ||
|
||
/** | ||
* Set the style color. | ||
* | ||
* @param color the color to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder color(ChatColor color) | ||
{ | ||
this.color = color; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style font. | ||
* | ||
* @param font the font key to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder font(String font) | ||
{ | ||
this.font = font; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style's bold property. | ||
* | ||
* @param bold the bold value to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder bold(Boolean bold) | ||
{ | ||
this.bold = bold; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style's italic property. | ||
* | ||
* @param italic the italic value to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder italic(Boolean italic) | ||
{ | ||
this.italic = italic; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style's underlined property. | ||
* | ||
* @param underlined the underlined value to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder underlined(Boolean underlined) | ||
{ | ||
this.underlined = underlined; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style's strikethrough property. | ||
* | ||
* @param strikethrough the strikethrough value to set, or null to use the | ||
* default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder strikethrough(Boolean strikethrough) | ||
{ | ||
this.strikethrough = strikethrough; | ||
return this; | ||
} | ||
|
||
/** | ||
* Set the style's obfuscated property. | ||
* | ||
* @param obfuscated the obfuscated value to set, or null to use the default | ||
* @return this ComponentStyleBuilder for chaining | ||
*/ | ||
public ComponentStyleBuilder obfuscated(Boolean obfuscated) | ||
{ | ||
this.obfuscated = obfuscated; | ||
return this; | ||
} | ||
|
||
/** | ||
* Build the {@link ComponentStyle} using the values set in this builder. | ||
* | ||
* @return the created ComponentStyle | ||
*/ | ||
public ComponentStyle build() | ||
{ | ||
return new ComponentStyle( color, font, bold, italic, underlined, strikethrough, obfuscated ); | ||
} | ||
} |
Oops, something went wrong.