Adds a FormatBuilder for cleaner advanced formatting operations
All checks were successful
KnarCraft/KnarLib/pipeline/head This commit looks good
All checks were successful
KnarCraft/KnarLib/pipeline/head This commit looks good
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
package net.knarcraft.knarlib.formatting;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A builder for making a replaced and formatted string
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public final class FormatBuilder {
|
||||
|
||||
private static StringFormatter stringFormatter;
|
||||
private static final IllegalStateException NOT_SETUP_EXCEPTION = new IllegalStateException("String formatter has not been set!");
|
||||
private @NotNull String toFormat;
|
||||
|
||||
/**
|
||||
* Sets the string formatter to use for translation and formatting
|
||||
*
|
||||
* @param stringFormatter <p>The string formatter to use</p>
|
||||
*/
|
||||
public static void setStringFormatter(@NotNull StringFormatter stringFormatter) {
|
||||
FormatBuilder.stringFormatter = stringFormatter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new format builder
|
||||
*
|
||||
* @param translatableMessage <p>The translatable message to format</p>
|
||||
*/
|
||||
public FormatBuilder(@NotNull TranslatableMessage translatableMessage) {
|
||||
this.toFormat = stringFormatter.getUnFormattedMessage(translatableMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new format builder
|
||||
*
|
||||
* @param toFormat <p>The string to format</p>
|
||||
*/
|
||||
public FormatBuilder(@NotNull String toFormat) {
|
||||
this.toFormat = toFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces placeholders for the current string
|
||||
*
|
||||
* @param placeholders <p>The placeholders to replace</p>
|
||||
* @param replacements <p>The replacements</p>
|
||||
* @return <p>This format builder</p>
|
||||
*/
|
||||
public FormatBuilder replace(@NotNull List<String> placeholders, @NotNull List<String> replacements) {
|
||||
this.toFormat = StringFormatter.replacePlaceholders(this.toFormat, placeholders, replacements);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces placeholders for the current string
|
||||
*
|
||||
* @param placeholder <p>The placeholder to replace</p>
|
||||
* @param replacement <p>The replacement</p>
|
||||
* @return <p>This format builder</p>
|
||||
*/
|
||||
public FormatBuilder replace(@NotNull String placeholder, @NotNull String replacement) {
|
||||
this.toFormat = StringFormatter.replacePlaceholder(this.toFormat, placeholder, replacement);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces placeholders for the current string
|
||||
*
|
||||
* @param placeholders <p>The placeholders to replace</p>
|
||||
* @param replacements <p>The replacements</p>
|
||||
* @return <p>This format builder</p>
|
||||
*/
|
||||
public FormatBuilder replace(@NotNull String[] placeholders, @NotNull String[] replacements) {
|
||||
this.toFormat = StringFormatter.replacePlaceholders(this.toFormat, placeholders, replacements);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces placeholders for the current string
|
||||
*
|
||||
* @param stringReplacer <p>The string replacer used for replacement</p>
|
||||
* @return <p>This format builder</p>
|
||||
*/
|
||||
public FormatBuilder replace(@NotNull StringReplacer stringReplacer) {
|
||||
this.toFormat = stringReplacer.replace(this.toFormat);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts color codes in the current string
|
||||
*
|
||||
* <p>This is performed as part of the success, error and neutral methods, so it's only necessary when displaying
|
||||
* the message through other means.</p>
|
||||
*
|
||||
* @return <p>This format builder</p>
|
||||
*/
|
||||
public FormatBuilder color() {
|
||||
this.toFormat = stringFormatter.getUnFormattedColoredMessage(this.toFormat);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the output of the performed replacements and formatting
|
||||
*
|
||||
* @return <p>The result</p>
|
||||
*/
|
||||
@NotNull
|
||||
public String build() {
|
||||
return this.toFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the result to the specified command sender as a success message
|
||||
*
|
||||
* @param commandSender <p>The recipient</p>
|
||||
*/
|
||||
public void success(@NotNull CommandSender commandSender) {
|
||||
if (FormatBuilder.stringFormatter == null) {
|
||||
throw NOT_SETUP_EXCEPTION;
|
||||
}
|
||||
FormatBuilder.stringFormatter.displaySuccessMessage(commandSender, this.toFormat);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the result to the specified command sender as an error
|
||||
*
|
||||
* @param commandSender <p>The recipient</p>
|
||||
*/
|
||||
public void error(@NotNull CommandSender commandSender) {
|
||||
if (FormatBuilder.stringFormatter == null) {
|
||||
throw NOT_SETUP_EXCEPTION;
|
||||
}
|
||||
FormatBuilder.stringFormatter.displayErrorMessage(commandSender, this.toFormat);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the result to the specified command sender
|
||||
*
|
||||
* @param commandSender <p>The recipient</p>
|
||||
*/
|
||||
public void neutral(@NotNull CommandSender commandSender) {
|
||||
if (FormatBuilder.stringFormatter == null) {
|
||||
throw NOT_SETUP_EXCEPTION;
|
||||
}
|
||||
FormatBuilder.stringFormatter.displayNeutralMessage(commandSender, this.toFormat);
|
||||
}
|
||||
|
||||
}
|
@@ -169,6 +169,16 @@ public final class StringFormatter {
|
||||
this.colorConversion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the message with translated color codes
|
||||
*
|
||||
* @param message <p>The message to get the colored version of</p>
|
||||
* @return <p>The colored raw message</p>
|
||||
*/
|
||||
public @NotNull String getUnFormattedColoredMessage(@NotNull String message) {
|
||||
return ColorHelper.translateColorCodes(message, this.colorConversion);
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces a placeholder in a translatable message
|
||||
*
|
||||
@@ -259,8 +269,8 @@ public final class StringFormatter {
|
||||
*/
|
||||
private String getFormattedMessage(@NotNull String message) {
|
||||
message = ColorHelper.translateColorCodes(message, this.colorConversion);
|
||||
String coloredPrefix = ColorHelper.translateColorCodes(namePrefix + this.pluginName +
|
||||
nameSuffix, this.colorConversion);
|
||||
String coloredPrefix = ColorHelper.translateColorCodes(this.namePrefix + this.pluginName +
|
||||
this.nameSuffix, this.colorConversion);
|
||||
return coloredPrefix + " " + ChatColor.RESET + message;
|
||||
}
|
||||
|
||||
|
@@ -23,6 +23,16 @@ public final class StringReplacer {
|
||||
public StringReplacer() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new string replacer
|
||||
*
|
||||
* @param stringFormatter <p>The string formatter to use for translation</p>
|
||||
* @param translatableMessage <p>The translatable message to replace for</p>
|
||||
*/
|
||||
public StringReplacer(@NotNull StringFormatter stringFormatter, @NotNull TranslatableMessage translatableMessage) {
|
||||
this.replacementInput = stringFormatter.getUnFormattedMessage(translatableMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new string replacer
|
||||
*
|
||||
|
@@ -15,7 +15,8 @@ public interface TranslatableMessage {
|
||||
*
|
||||
* @return <p>The name of this translatable message</p>
|
||||
*/
|
||||
@NotNull String name();
|
||||
@NotNull
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Gets all translatable messages
|
||||
@@ -24,6 +25,7 @@ public interface TranslatableMessage {
|
||||
*
|
||||
* @return <p>All translatable messages</p>
|
||||
*/
|
||||
@NotNull TranslatableMessage[] getAllMessages();
|
||||
@NotNull
|
||||
TranslatableMessage[] getAllMessages();
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user