Add chat MiniMessage support + add support for color downsampling
This commit is contained in:
parent
e2506d5d53
commit
8f31ea54d1
@ -38,6 +38,11 @@
|
|||||||
<artifactId>adventure-text-serializer-plain</artifactId>
|
<artifactId>adventure-text-serializer-plain</artifactId>
|
||||||
<version>4.14.0</version>
|
<version>4.14.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-text-minimessage</artifactId>
|
||||||
|
<version>4.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
package fr.pandacube.lib.chat;
|
package fr.pandacube.lib.chat;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.UnaryOperator;
|
|
||||||
|
|
||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentBuilder;
|
import net.kyori.adventure.text.ComponentBuilder;
|
||||||
@ -18,13 +13,20 @@ import net.kyori.adventure.text.format.Style;
|
|||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.kyori.adventure.text.format.TextDecoration;
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
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.bungeecord.BungeeComponentSerializer;
|
||||||
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.UnaryOperator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A builder for chat components.
|
* A builder for chat components.
|
||||||
* <p>
|
* <p>
|
||||||
@ -118,6 +120,19 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
|||||||
return getAdv();
|
return getAdv();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Component getAsDownsampledColorsComponent() {
|
||||||
|
String json = GsonComponentSerializer.colorDownsamplingGson().serialize(getAdv());
|
||||||
|
return GsonComponentSerializer.gson().deserialize(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Chat getAsDownsampledColors() {
|
||||||
|
return chatComponent(getAsDownsampledColorsComponent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMiniMessage() {
|
||||||
|
return MiniMessage.miniMessage().serialize(getAdv());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -270,12 +285,26 @@ public abstract sealed class Chat extends ChatStatic implements HoverEventSource
|
|||||||
public Chat thenNewLine() { return then(Component.newline()); }
|
public Chat thenNewLine() { return then(Component.newline()); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends a component with the provided legacy text as its content.
|
* Appends a component with the provided legacy text as its content, using the section {@code "§"} character.
|
||||||
* @param legacyText the legacy text.
|
* @param legacyText the legacy text that uses the {@code "§"} character.
|
||||||
* @return this.
|
* @return this.
|
||||||
*/
|
*/
|
||||||
public Chat thenLegacyText(Object legacyText) { return then(legacyText(legacyText)); }
|
public Chat thenLegacyText(Object legacyText) { return then(legacyText(legacyText)); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends a component with the provided legacy text as its content, using the ampersand {@code "&"} character.
|
||||||
|
* @param legacyText the legacy text that uses the {@code "&"} character.
|
||||||
|
* @return this.
|
||||||
|
*/
|
||||||
|
public Chat thenLegacyAmpersandText(Object legacyText) { return then(legacyAmpersandText(legacyText)); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends a component with the provided MiniMessage text as its content.
|
||||||
|
* @param miniMessageText the MiniMessage text.
|
||||||
|
* @return this.
|
||||||
|
*/
|
||||||
|
public Chat thenMiniMessage(String miniMessageText) { return then(miniMessageText(miniMessageText)); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends a component with the provided translation key and parameters.
|
* Appends a component with the provided translation key and parameters.
|
||||||
* @param key the translation key.
|
* @param key the translation key.
|
||||||
|
@ -16,6 +16,7 @@ import net.kyori.adventure.text.TranslatableComponent;
|
|||||||
import net.kyori.adventure.text.event.HoverEventSource;
|
import net.kyori.adventure.text.event.HoverEventSource;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
|
||||||
@ -91,18 +92,58 @@ public abstract class ChatStatic {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link FormatableChat} with the provided legacy text as its content.
|
* Creates a {@link FormatableChat} with the provided legacy text as its content, using the section {@code "§"}
|
||||||
* @param legacyText the legacy text to use as the content.
|
* character.
|
||||||
|
* @param legacyText the legacy text to use as the content, that uses the {@code "§"} character.
|
||||||
* @return a new {@link FormatableChat} with the provided text as its content.
|
* @return a new {@link FormatableChat} with the provided text as its content.
|
||||||
* @throws IllegalArgumentException If the {@code plainText} parameter is instance of {@link Chat} or
|
* @throws IllegalArgumentException If the {@code legacyText} parameter is instance of {@link Chat} or
|
||||||
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
||||||
* instead.
|
* instead.
|
||||||
*/
|
*/
|
||||||
public static FormatableChat legacyText(Object legacyText) {
|
public static FormatableChat legacyText(Object legacyText) {
|
||||||
|
return legacyText(legacyText, LegacyComponentSerializer.SECTION_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FormatableChat} with the provided legacy text as its content, using the ampersand {@code "&"}
|
||||||
|
* character.
|
||||||
|
* @param legacyText the legacy text to use as the content, that uses the {@code "&"} character.
|
||||||
|
* @return a new {@link FormatableChat} with the provided text as its content.
|
||||||
|
* @throws IllegalArgumentException If the {@code legacyText} parameter is instance of {@link Chat} or
|
||||||
|
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
||||||
|
* instead.
|
||||||
|
*/
|
||||||
|
public static FormatableChat legacyAmpersandText(Object legacyText) {
|
||||||
|
return legacyText(legacyText, LegacyComponentSerializer.AMPERSAND_CHAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FormatableChat} with the provided legacy text as its content, using the specified
|
||||||
|
* legacyCharacter.
|
||||||
|
* @param legacyText the legacy text to use as the content.
|
||||||
|
* @param legacyCharacter the character used in the provided text to prefix color and format code.
|
||||||
|
* @return a new {@link FormatableChat} with the provided text as its content.
|
||||||
|
* @throws IllegalArgumentException If the {@code legacyText} parameter is instance of {@link Chat} or
|
||||||
|
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
||||||
|
* instead.
|
||||||
|
*/
|
||||||
|
private static FormatableChat legacyText(Object legacyText, char legacyCharacter) {
|
||||||
if (legacyText instanceof ComponentLike) {
|
if (legacyText instanceof ComponentLike) {
|
||||||
throw new IllegalArgumentException("Expected any object except instance of " + ComponentLike.class + ". Received " + legacyText + ". Please use ChatStatic.chatComponent(ComponentLike) instead.");
|
throw new IllegalArgumentException("Expected any object except instance of " + ComponentLike.class + ". Received " + legacyText + ". Please use ChatStatic.chatComponent(ComponentLike) instead.");
|
||||||
}
|
}
|
||||||
return chatComponent(LegacyComponentSerializer.legacySection().deserialize(Objects.toString(legacyText)));
|
return chatComponent(LegacyComponentSerializer.legacy(legacyCharacter).deserialize(Objects.toString(legacyText)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FormatableChat} with the provided MiniMessage text as its content.
|
||||||
|
* @param miniMessageText the MiniMessage text to use as the content.
|
||||||
|
* @return a new {@link FormatableChat} with the provided text as its content.
|
||||||
|
*/
|
||||||
|
public static FormatableChat miniMessageText(String miniMessageText) {
|
||||||
|
return chatComponent(MiniMessage.miniMessage().deserialize(miniMessageText));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user