Do not use bungeecord-chat as a dependency for pandalib-chat anymore
This commit is contained in:
@@ -30,8 +30,13 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.kyori</groupId>
|
||||
<artifactId>adventure-platform-bungeecord</artifactId>
|
||||
<version>4.3.0</version>
|
||||
<artifactId>adventure-text-serializer-gson</artifactId>
|
||||
<version>4.13.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.kyori</groupId>
|
||||
<artifactId>adventure-text-serializer-legacy</artifactId>
|
||||
<version>4.13.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.kyori</groupId>
|
||||
@@ -46,13 +51,6 @@
|
||||
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-chat</artifactId>
|
||||
<version>${bungeecord.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
|
@@ -16,15 +16,13 @@ import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.UnaryOperator;
|
||||
@@ -67,26 +65,10 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* Builds the component into Adventure Component instance.
|
||||
* @return the {@link Component} built from this {@link Chat} component.
|
||||
*/
|
||||
public Component getAdv() {
|
||||
public Component get() {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the component into BungeeCord {@link BaseComponent} instance.
|
||||
* @return the {@link BaseComponent} built from this {@link Chat} component.
|
||||
*/
|
||||
public BaseComponent get() {
|
||||
return toBungee(getAdv());
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the component into BungeeCord {@link BaseComponent} array.
|
||||
* @return the {@link BaseComponent} array built from this {@link Chat} component.
|
||||
*/
|
||||
public BaseComponent[] getAsArray() {
|
||||
return toBungeeArray(getAdv());
|
||||
}
|
||||
|
||||
private static final LegacyComponentSerializer LEGACY_SERIALIZER_BUNGEE_FRIENDLY = LegacyComponentSerializer.builder()
|
||||
.hexColors()
|
||||
.useUnusualXRepeatedCharacterHexFormat()
|
||||
@@ -97,7 +79,7 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return the legacy text. RGB colors are in BungeeCord format.
|
||||
*/
|
||||
public String getLegacyText() {
|
||||
return LEGACY_SERIALIZER_BUNGEE_FRIENDLY.serialize(getAdv());
|
||||
return LEGACY_SERIALIZER_BUNGEE_FRIENDLY.serialize(get());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,12 +87,12 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return the plain text of this component.
|
||||
*/
|
||||
public String getPlainText() {
|
||||
return PlainTextComponentSerializer.plainText().serializeOr(getAdv(), "");
|
||||
return PlainTextComponentSerializer.plainText().serializeOr(get(), "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull HoverEvent<Component> asHoverEvent(@NotNull UnaryOperator<Component> op) {
|
||||
return HoverEvent.showText(op.apply(getAdv()));
|
||||
return HoverEvent.showText(op.apply(get()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,7 +101,7 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
*/
|
||||
@Override
|
||||
public @NotNull Component asComponent() {
|
||||
return getAdv();
|
||||
return get();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,7 +109,7 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return the {@link Component} built from this {@link Chat} component, with down-sampled colors.
|
||||
*/
|
||||
public Component getAsDownSampledColorsComponent() {
|
||||
String json = GsonComponentSerializer.colorDownsamplingGson().serialize(getAdv());
|
||||
String json = GsonComponentSerializer.colorDownsamplingGson().serialize(get());
|
||||
return GsonComponentSerializer.gson().deserialize(json);
|
||||
}
|
||||
|
||||
@@ -144,7 +126,7 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return the MiniMessage representation if this {@link Chat} component.
|
||||
*/
|
||||
public String getMiniMessage() {
|
||||
return MiniMessage.miniMessage().serialize(getAdv());
|
||||
return MiniMessage.miniMessage().serialize(get());
|
||||
}
|
||||
|
||||
|
||||
@@ -184,15 +166,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a BungeeCord {@link BaseComponent} to this component.
|
||||
* @param comp the component to append.
|
||||
* @return this.
|
||||
*/
|
||||
public Chat then(BaseComponent comp) {
|
||||
return then(toAdventure(comp));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a component to this component.
|
||||
* @param comp the component to append.
|
||||
@@ -207,15 +180,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
return then(comp.asComponent());
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a BungeeCord {@link BaseComponent} array to this component.
|
||||
* @param comp the components to append.
|
||||
* @return this.
|
||||
*/
|
||||
public Chat then(BaseComponent[] comp) {
|
||||
return then(toAdventure(comp));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -495,17 +459,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
*/
|
||||
public Chat thenLeftText(ComponentLike leftText) { return then(leftText(leftText, console)); }
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and
|
||||
* color and a left-aligned text.
|
||||
* @param leftText the text aligned to the left.
|
||||
* @return a new {@link FormatableChat} filling a chat line with the configured decoration character
|
||||
* and color and a left-aligned text.
|
||||
* @deprecated uses Bungeecord chat API.
|
||||
*/
|
||||
@Deprecated
|
||||
public Chat thenLeftText(BaseComponent leftText) { return thenLeftText(chatComponent(leftText)); }
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and
|
||||
* color and a right-aligned text.
|
||||
@@ -515,17 +468,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
*/
|
||||
public Chat thenRightText(ComponentLike rightText) { return then(rightText(rightText, console)); }
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and
|
||||
* color and a right-aligned text.
|
||||
* @param rightText the text aligned to the right.
|
||||
* @return a new {@link FormatableChat} filling a chat line with the configured decoration character
|
||||
* and color and a right-aligned text.
|
||||
* @deprecated uses Bungeecord chat API.
|
||||
*/
|
||||
@Deprecated
|
||||
public Chat thenRightText(BaseComponent rightText) { return thenRightText(chatComponent(rightText)); }
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and
|
||||
* color and a centered text.
|
||||
@@ -537,19 +479,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
return then(centerText(centerText, console));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and
|
||||
* color and a centered text.
|
||||
* @param centerText the text aligned to the center.
|
||||
* @return a new {@link FormatableChat} filling a chat line with the configured decoration character
|
||||
* and color and a centered text.
|
||||
* @deprecated uses Bungeecord chat API.
|
||||
*/
|
||||
@Deprecated
|
||||
public Chat thenCenterText(BaseComponent centerText) {
|
||||
return thenCenterText(chatComponent(centerText));
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a component filling a chat line with the configured decoration character and color.
|
||||
* @return a new {@link FormatableChat} filling a chat line with a decoration character and color.
|
||||
@@ -629,12 +558,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat color(TextColor c) { builder.color(c); return this; }
|
||||
/**
|
||||
* Sets the color of this component.
|
||||
* @param c the color.
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat color(ChatColor c) { return color(c == null ? null : TextColor.color(c.getColor().getRGB())); }
|
||||
/**
|
||||
* Sets the color of this component.
|
||||
* @param c the color.
|
||||
@@ -646,7 +569,16 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @param c the color.
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat color(String c) { return color(c == null ? null : ChatColor.of(c)); }
|
||||
public FormatableChat color(String c) {
|
||||
if (c == null)
|
||||
return color((TextColor) null);
|
||||
TextColor tc = c.startsWith("#")
|
||||
? TextColor.fromCSSHexString(c)
|
||||
: NamedTextColor.NAMES.value(c.toLowerCase(Locale.ROOT));
|
||||
if (tc == null)
|
||||
throw new IllegalArgumentException("Invalid color string '" + c + "'.");
|
||||
return color(tc);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@@ -924,18 +856,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat hover(ComponentLike v) { return hover(v.asComponent()); }
|
||||
/**
|
||||
* Configure this component to show the provided component when hovered.
|
||||
* @param v the component to show.
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat hover(BaseComponent v) { return hover(toAdventure(v)); }
|
||||
/**
|
||||
* Configure this component to show the provided component when hovered.
|
||||
* @param v the component to show.
|
||||
* @return this.
|
||||
*/
|
||||
public FormatableChat hover(BaseComponent[] v) { return hover(toAdventure(v)); }
|
||||
/**
|
||||
* Configure this component to show the provided legacy text when hovered.
|
||||
* @param legacyText the legacy text to show.
|
||||
@@ -963,7 +883,7 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return getAdv().hashCode();
|
||||
return get().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -976,8 +896,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
|
||||
/* package */ static ComponentLike filterObjToComponentLike(Object v) {
|
||||
return switch (v) {
|
||||
case BaseComponent[] baseComponents -> toAdventure(baseComponents);
|
||||
case BaseComponent baseComponent -> toAdventure(baseComponent);
|
||||
case ComponentLike componentLike -> componentLike;
|
||||
case null, default -> Component.text(Objects.toString(v));
|
||||
};
|
||||
@@ -1011,40 +929,6 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts the Bungee {@link BaseComponent} array into Adventure {@link Component}.
|
||||
* @param components the Bungee {@link BaseComponent} array.
|
||||
* @return a {@link Component}.
|
||||
*/
|
||||
public static Component toAdventure(BaseComponent[] components) {
|
||||
return BungeeComponentSerializer.get().deserialize(components);
|
||||
}
|
||||
/**
|
||||
* Converts the Bungee {@link BaseComponent} into Adventure {@link Component}.
|
||||
* @param component the Bungee {@link BaseComponent}.
|
||||
* @return a {@link Component}.
|
||||
*/
|
||||
public static Component toAdventure(BaseComponent component) {
|
||||
return toAdventure(new BaseComponent[] { component });
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the Adventure {@link Component} into Bungee {@link BaseComponent} array.
|
||||
* @param component the Adventure {@link Component}.
|
||||
* @return a {@link BaseComponent} array.
|
||||
*/
|
||||
public static BaseComponent[] toBungeeArray(Component component) {
|
||||
return BungeeComponentSerializer.get().serialize(component);
|
||||
}
|
||||
/**
|
||||
* Converts the Adventure {@link Component} into Bungee {@link BaseComponent}.
|
||||
* @param component the Adventure {@link Component}.
|
||||
* @return a {@link BaseComponent}.
|
||||
*/
|
||||
public static BaseComponent toBungee(Component component) {
|
||||
BaseComponent[] arr = toBungeeArray(component);
|
||||
return arr.length == 1 ? arr[0] : new net.md_5.bungee.api.chat.TextComponent(arr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Force the italic formatting to be set to false if it is not explicitly set in the component.
|
||||
|
@@ -1,14 +1,14 @@
|
||||
package fr.pandacube.lib.chat;
|
||||
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextFormat;
|
||||
import net.kyori.adventure.util.RGBLike;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.util.RGBLike;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
/**
|
||||
* Provides methods to manipulate legacy colors and {@link ChatColor} class.
|
||||
* Provides methods to manipulate legacy colors.
|
||||
*/
|
||||
public class ChatColorUtil {
|
||||
|
||||
@@ -38,12 +38,12 @@ public class ChatColorUtil {
|
||||
int length = legacyText.length();
|
||||
|
||||
for (int index = length - 2; index >= 0; index--) {
|
||||
if (legacyText.charAt(index) == ChatColor.COLOR_CHAR) {
|
||||
if (legacyText.charAt(index) == LegacyChatFormat.COLOR_CHAR) {
|
||||
|
||||
// detection of rgb color §x§0§1§2§3§4§5
|
||||
String rgb;
|
||||
if (index > 11
|
||||
&& legacyText.charAt(index - 12) == ChatColor.COLOR_CHAR
|
||||
&& legacyText.charAt(index - 12) == LegacyChatFormat.COLOR_CHAR
|
||||
&& (legacyText.charAt(index - 11) == 'x'
|
||||
|| legacyText.charAt(index - 11) == 'X')
|
||||
&& HEX_COLOR_PATTERN.matcher(rgb = legacyText.substring(index - 12, index + 2)).matches()) {
|
||||
@@ -64,7 +64,7 @@ public class ChatColorUtil {
|
||||
|
||||
// try detect non-rgb format
|
||||
char colorChar = legacyText.charAt(index + 1);
|
||||
ChatColor legacyColor = getChatColorByChar(colorChar);
|
||||
LegacyChatFormat legacyColor = LegacyChatFormat.of(colorChar);
|
||||
|
||||
if (legacyColor != null) {
|
||||
result.insert(0, legacyColor);
|
||||
@@ -83,15 +83,6 @@ public class ChatColorUtil {
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link ChatColor} associated with the provided char, case-insensitive.
|
||||
* @param code the case-insensitive char code.
|
||||
* @return the corresponding {@link ChatColor}.
|
||||
*/
|
||||
public static ChatColor getChatColorByChar(char code) {
|
||||
return ChatColor.getByChar(Character.toLowerCase(code));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -99,7 +90,7 @@ public class ChatColorUtil {
|
||||
* Translate the color code of the provided string, that uses the alt color char, to the {@code §} color code
|
||||
* format.
|
||||
* <p>
|
||||
* This method is the improved version of {@link ChatColor#translateAlternateColorCodes(char, String)},
|
||||
* This method is the improved version of Bukkit’s {@code ChatColor.translateAlternateColorCodes(char, String)},
|
||||
* because it takes into account essentials RGB color code, and {@code altColorChar} escaping (by doubling it).
|
||||
* Essentials RGB color code are converted to Bungee chat RGB format, so the returned string can be converted
|
||||
* to component (see {@link Chat#legacyText(Object)}).
|
||||
@@ -112,7 +103,7 @@ public class ChatColorUtil {
|
||||
*/
|
||||
public static String translateAlternateColorCodes(char altColorChar, String textToTranslate)
|
||||
{
|
||||
char colorChar = ChatColor.COLOR_CHAR;
|
||||
char colorChar = LegacyChatFormat.COLOR_CHAR;
|
||||
StringBuilder acc = new StringBuilder();
|
||||
char[] b = textToTranslate.toCharArray();
|
||||
for ( int i = 0; i < b.length; i++ )
|
||||
@@ -180,7 +171,7 @@ public class ChatColorUtil {
|
||||
* @return the text fully italic.
|
||||
*/
|
||||
public static String forceItalic(String legacyText) {
|
||||
return forceFormat(legacyText, ChatColor.ITALIC);
|
||||
return forceFormat(legacyText, TextDecoration.ITALIC);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -190,7 +181,7 @@ public class ChatColorUtil {
|
||||
* @return the text fully bold.
|
||||
*/
|
||||
public static String forceBold(String legacyText) {
|
||||
return forceFormat(legacyText, ChatColor.BOLD);
|
||||
return forceFormat(legacyText, TextDecoration.BOLD);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,7 +191,7 @@ public class ChatColorUtil {
|
||||
* @return the text fully underlined.
|
||||
*/
|
||||
public static String forceUnderline(String legacyText) {
|
||||
return forceFormat(legacyText, ChatColor.UNDERLINE);
|
||||
return forceFormat(legacyText, TextDecoration.UNDERLINED);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -210,7 +201,7 @@ public class ChatColorUtil {
|
||||
* @return the text fully stroked through.
|
||||
*/
|
||||
public static String forceStrikethrough(String legacyText) {
|
||||
return forceFormat(legacyText, ChatColor.STRIKETHROUGH);
|
||||
return forceFormat(legacyText, TextDecoration.STRIKETHROUGH);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -220,15 +211,16 @@ public class ChatColorUtil {
|
||||
* @return the text fully obfuscated.
|
||||
*/
|
||||
public static String forceObfuscated(String legacyText) {
|
||||
return forceFormat(legacyText, ChatColor.MAGIC);
|
||||
return forceFormat(legacyText, TextDecoration.OBFUSCATED);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static String forceFormat(String legacyText, ChatColor format) {
|
||||
private static String forceFormat(String legacyText, TextFormat format) {
|
||||
String formatStr = LegacyChatFormat.of(format).toString();
|
||||
return format + legacyText
|
||||
.replace(format.toString(), "") // remove previous tag to make the result cleaner
|
||||
.replaceAll("§([a-frA-FR\\d])", "§$1" + format);
|
||||
.replace(formatStr, "") // remove previous tag to make the result cleaner
|
||||
.replaceAll("§([a-frA-FR\\d])", "§$1" + formatStr);
|
||||
}
|
||||
|
||||
|
||||
@@ -243,40 +235,12 @@ public class ChatColorUtil {
|
||||
* @return the resulting text.
|
||||
*/
|
||||
public static String resetToColor(String legacyText, String color) {
|
||||
return legacyText.replace(ChatColor.RESET.toString(), color);
|
||||
return legacyText.replace(LegacyChatFormat.RESET.toString(), color);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Converts the provided {@link ChatColor} to its Adventure counterpart.
|
||||
* @param bungee a BungeeCord {@link ChatColor} instance.
|
||||
* @return the {@link TextColor} equivalent to the provided {@link ChatColor}.
|
||||
*/
|
||||
public static TextColor toAdventure(ChatColor bungee) {
|
||||
if (bungee == null)
|
||||
return null;
|
||||
if (bungee.getColor() == null)
|
||||
throw new IllegalArgumentException("The provided Bungee ChatColor must be an actual color (not format nor reset).");
|
||||
return TextColor.color(bungee.getColor().getRGB());
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the provided {@link TextColor} to its BungeeCord counterpart.
|
||||
* @param col a Adventure {@link TextColor} instance.
|
||||
* @return the {@link ChatColor} equivalent to the provided {@link TextColor}.
|
||||
*/
|
||||
public static ChatColor toBungee(TextColor col) {
|
||||
if (col == null)
|
||||
return null;
|
||||
if (col instanceof NamedTextColor) {
|
||||
return ChatColor.of(((NamedTextColor) col).toString());
|
||||
}
|
||||
return ChatColor.of(col.asHexString());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a color, interpolating between 2 colors.
|
||||
* @param v0 the value corresponding to color {@code cc0}.
|
||||
|
@@ -87,7 +87,7 @@ public class ChatConfig {
|
||||
*/
|
||||
public static int getPrefixWidth(boolean console) {
|
||||
Chat c;
|
||||
return prefix == null ? 0 : (c = prefix.get()) == null ? 0 : ChatUtil.componentWidth(c.getAdv(), console);
|
||||
return prefix == null ? 0 : (c = prefix.get()) == null ? 0 : ChatUtil.componentWidth(c.get(), console);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package fr.pandacube.lib.chat;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import fr.pandacube.lib.chat.Chat.FormatableChat;
|
||||
import net.kyori.adventure.text.BlockNBTComponent;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentBuilder;
|
||||
@@ -18,9 +17,8 @@ import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
||||
import fr.pandacube.lib.chat.Chat.FormatableChat;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* Abstract class holding the publicly accessible methods to create an instance of {@link Chat} component.
|
||||
@@ -33,15 +31,6 @@ public abstract class ChatStatic {
|
||||
return new FormatableChat(componentToBuilder(c));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link FormatableChat} from the provided Bungee {@link BaseComponent}.
|
||||
* @param c the {@link BaseComponent}.
|
||||
* @return a new {@link FormatableChat}.
|
||||
*/
|
||||
public static FormatableChat chatComponent(BaseComponent c) {
|
||||
return new FormatableChat(componentToBuilder(Chat.toAdventure(c)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link FormatableChat} from the provided {@link ComponentLike}.
|
||||
* If the provided component is an instance of {@link Chat}, its content will be duplicated, and the provided one
|
||||
@@ -61,15 +50,6 @@ public abstract class ChatStatic {
|
||||
return new FormatableChat(Component.text());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link FormatableChat} from the provided Bungee {@link BaseComponent BaseComponent[]}.
|
||||
* @param c the array of {@link BaseComponent}.
|
||||
* @return a new {@link FormatableChat}.
|
||||
*/
|
||||
public static FormatableChat chatComponent(BaseComponent[] c) {
|
||||
return chatComponent(Chat.toAdventure(c));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1,5 +1,17 @@
|
||||
package fr.pandacube.lib.chat;
|
||||
|
||||
import fr.pandacube.lib.chat.Chat.FormatableChat;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
import net.kyori.adventure.text.TranslationArgument;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -10,19 +22,6 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
import net.kyori.adventure.text.TranslationArgument;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
import fr.pandacube.lib.chat.Chat.FormatableChat;
|
||||
|
||||
import static fr.pandacube.lib.chat.ChatStatic.chat;
|
||||
|
||||
/**
|
||||
@@ -351,7 +350,7 @@ public class ChatUtil {
|
||||
|
||||
do {
|
||||
char c = legacyText.charAt(index);
|
||||
if (c == ChatColor.COLOR_CHAR && index < legacyText.length() - 1) {
|
||||
if (c == LegacyComponentSerializer.SECTION_CHAR && index < legacyText.length() - 1) {
|
||||
currentWord.append(c);
|
||||
c = legacyText.charAt(++index);
|
||||
currentWord.append(c);
|
||||
@@ -482,7 +481,7 @@ public class ChatUtil {
|
||||
}
|
||||
if (!row.isEmpty())
|
||||
spacedRow.then(row.getLast());
|
||||
spacedRows.add(spacedRow.getAdv());
|
||||
spacedRows.add(spacedRow.get());
|
||||
}
|
||||
|
||||
return spacedRows;
|
||||
@@ -504,14 +503,14 @@ public class ChatUtil {
|
||||
*/
|
||||
public static Component customWidthSpace(int width, boolean console) {
|
||||
if (console)
|
||||
return Chat.text(" ".repeat(width)).getAdv();
|
||||
return Chat.text(" ".repeat(width)).get();
|
||||
return switch (width) {
|
||||
case 0, 1 -> Component.empty();
|
||||
case 2 -> Chat.text(".").black().getAdv();
|
||||
case 3 -> Chat.text("`").black().getAdv();
|
||||
case 6 -> Chat.text(". ").black().getAdv();
|
||||
case 7 -> Chat.text("` ").black().getAdv();
|
||||
case 11 -> Chat.text("` ").black().getAdv();
|
||||
case 2 -> Chat.text(".").black().get();
|
||||
case 3 -> Chat.text("`").black().get();
|
||||
case 6 -> Chat.text(". ").black().get();
|
||||
case 7 -> Chat.text("` ").black().get();
|
||||
case 11 -> Chat.text("` ").black().get();
|
||||
default -> {
|
||||
int nbSpace = width / 4;
|
||||
int nbBold = width % 4;
|
||||
@@ -520,13 +519,13 @@ public class ChatUtil {
|
||||
if (nbBold > 0) {
|
||||
yield Chat.text(" ".repeat(nbNotBold)).bold(false)
|
||||
.then(Chat.text(" ".repeat(nbBold)).bold(true))
|
||||
.getAdv();
|
||||
.get();
|
||||
}
|
||||
else
|
||||
yield Chat.text(" ".repeat(nbNotBold)).bold(false).getAdv();
|
||||
yield Chat.text(" ".repeat(nbNotBold)).bold(false).get();
|
||||
}
|
||||
else if (nbBold > 0) {
|
||||
yield Chat.text(" ".repeat(nbBold)).bold(true).getAdv();
|
||||
yield Chat.text(" ".repeat(nbBold)).bold(true).get();
|
||||
}
|
||||
throw new IllegalStateException("Should not be here (width=" + width + "; nbSpace=" + nbSpace + "; nbBold=" + nbBold + "; nbNotBold=" + nbNotBold + ")");
|
||||
}
|
||||
|
@@ -0,0 +1,122 @@
|
||||
package fr.pandacube.lib.chat;
|
||||
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextFormat;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyFormat;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public enum LegacyChatFormat {
|
||||
|
||||
BLACK('0'),
|
||||
DARK_BLUE('1'),
|
||||
DARK_GREEN('2'),
|
||||
DARK_AQUA('3'),
|
||||
DARK_RED('4'),
|
||||
DARK_PURPLE('5'),
|
||||
GOLD('6'),
|
||||
GRAY('7'),
|
||||
DARK_GRAY('8'),
|
||||
BLUE('9'),
|
||||
GREEN('a'),
|
||||
AQUA('b'),
|
||||
RED('c'),
|
||||
LIGHT_PURPLE('d'),
|
||||
YELLOW('e'),
|
||||
WHITE('f'),
|
||||
MAGIC('k'),
|
||||
BOLD('l'),
|
||||
STRIKETHROUGH('m'),
|
||||
UNDERLINED('n'),
|
||||
ITALIC('o'),
|
||||
RESET('r');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static final char COLOR_CHAR = LegacyComponentSerializer.SECTION_CHAR;
|
||||
public static final String COLOR_STR_PREFIX = Character.toString(COLOR_CHAR);
|
||||
|
||||
private static final Map<Character, LegacyChatFormat> BY_CHAR;
|
||||
private static final Map<TextFormat, LegacyChatFormat> BY_FORMAT;
|
||||
private static final Map<LegacyFormat, LegacyChatFormat> BY_LEGACY;
|
||||
|
||||
|
||||
public static LegacyChatFormat of(char code) {
|
||||
return BY_CHAR.get(Character.toLowerCase(code));
|
||||
}
|
||||
|
||||
public static LegacyChatFormat of(TextFormat format) {
|
||||
LegacyChatFormat colorOrDecoration = BY_FORMAT.get(format);
|
||||
if (colorOrDecoration != null)
|
||||
return colorOrDecoration;
|
||||
if (format.getClass().getSimpleName().equals("Reset")) // an internal class of legacy serializer library
|
||||
return RESET;
|
||||
throw new IllegalArgumentException("Unsupported format of type " + format.getClass());
|
||||
}
|
||||
|
||||
public static LegacyChatFormat of(LegacyFormat advLegacy) {
|
||||
return BY_LEGACY.get(advLegacy);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public final char code;
|
||||
public final LegacyFormat advLegacyFormat;
|
||||
|
||||
LegacyChatFormat(char code) {
|
||||
this.code = code;
|
||||
advLegacyFormat = LegacyComponentSerializer.parseChar(code);
|
||||
}
|
||||
|
||||
public TextColor getTextColor() {
|
||||
return advLegacyFormat.color();
|
||||
}
|
||||
|
||||
public boolean isColor() {
|
||||
return getTextColor() != null;
|
||||
}
|
||||
|
||||
public TextDecoration getTextDecoration() {
|
||||
return advLegacyFormat.decoration();
|
||||
}
|
||||
|
||||
public boolean isDecoration() {
|
||||
return getTextDecoration() != null;
|
||||
}
|
||||
|
||||
public boolean isReset() {
|
||||
return this == RESET;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return COLOR_STR_PREFIX + code;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static {
|
||||
BY_CHAR = Arrays.stream(values()).sequential().collect(Collectors.toMap(e -> e.code, e -> e, (e1, e2) -> e1, LinkedHashMap::new));
|
||||
BY_FORMAT = Arrays.stream(values()).sequential()
|
||||
.filter(e -> e.isColor() || e.isDecoration())
|
||||
.collect(Collectors.toMap(e -> {
|
||||
if (e.isColor())
|
||||
return e.getTextColor();
|
||||
return e.getTextDecoration();
|
||||
}, e -> e, (e1, e2) -> e1, LinkedHashMap::new));
|
||||
BY_LEGACY = Arrays.stream(values()).sequential().collect(Collectors.toMap(e -> e.advLegacyFormat, e -> e, (e1, e2) -> e1, LinkedHashMap::new));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user