201 lines
6.8 KiB
Java
201 lines
6.8 KiB
Java
package fr.pandacube.lib.chat;
|
|
|
|
import java.util.Objects;
|
|
|
|
import net.kyori.adventure.text.Component;
|
|
import net.kyori.adventure.text.ComponentLike;
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
|
|
import fr.pandacube.lib.chat.Chat.FormatableChat;
|
|
|
|
public abstract class ChatStatic {
|
|
|
|
|
|
|
|
private static FormatableChat chatComponent(Component c) {
|
|
return new FormatableChat(Chat.componentToBuilder(c));
|
|
}
|
|
|
|
public static FormatableChat chatComponent(BaseComponent c) {
|
|
return new FormatableChat(Chat.componentToBuilder(Chat.toAdventure(c)));
|
|
}
|
|
|
|
public static FormatableChat chatComponent(ComponentLike c) {
|
|
return chatComponent(c.asComponent());
|
|
}
|
|
|
|
public static FormatableChat chat() {
|
|
return new FormatableChat(Component.text());
|
|
}
|
|
|
|
public static FormatableChat chatComponent(BaseComponent[] c) {
|
|
return chatComponent(Chat.toAdventure(c));
|
|
}
|
|
|
|
|
|
/**
|
|
* Create a Chat instance with the provided plain text as its main text content.
|
|
*
|
|
* @param plainText the text to use as he content of the new Chat instance.
|
|
* @return a Chat instance with the provided text as its main text content.
|
|
* @throws IllegalArgumentException if the {@code plainText} parameter is instance of {@link Chat} or
|
|
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
|
* instead.
|
|
*/
|
|
public static FormatableChat text(Object plainText) {
|
|
if (plainText instanceof ComponentLike) {
|
|
throw new IllegalArgumentException("Expected any object except instance of " + ComponentLike.class + ". Received " + plainText + ". Please use ChatStatic.chatComponent(ComponentLike) instead.");
|
|
}
|
|
return new FormatableChat(Component.text().content(Objects.toString(plainText)));
|
|
}
|
|
|
|
|
|
/**
|
|
* Create a Chat instance with the provided legacy text as its main text content.
|
|
*
|
|
* @param legacyText the text to use as he content of the new Chat instance.
|
|
* @return a Chat instance with the provided text as its main text content.
|
|
* @throws IllegalArgumentException If the {@code plainText} parameter is instance of {@link Chat} or
|
|
* {@link Component}. The caller should use {@link #chatComponent(ComponentLike)}
|
|
* instead.
|
|
*/
|
|
public static FormatableChat legacyText(Object legacyText) {
|
|
if (legacyText instanceof ComponentLike) {
|
|
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)));
|
|
}
|
|
|
|
public static FormatableChat infoText(Object plainText) {
|
|
return text(plainText).infoColor();
|
|
}
|
|
|
|
public static FormatableChat warningText(Object plainText) {
|
|
return text(plainText).warningColor();
|
|
}
|
|
|
|
public static FormatableChat dataText(Object plainText) {
|
|
return text(plainText).dataColor();
|
|
}
|
|
|
|
public static FormatableChat decorationText(Object plainText) {
|
|
return text(plainText).decorationColor();
|
|
}
|
|
|
|
public static FormatableChat successText(Object plainText) {
|
|
return text(plainText).successColor();
|
|
}
|
|
|
|
public static FormatableChat failureText(Object plainText) {
|
|
return text(plainText).failureColor();
|
|
}
|
|
|
|
public static FormatableChat playerNameText(String legacyText) {
|
|
FormatableChat fc = legacyText(legacyText);
|
|
fc.builder.colorIfAbsent(NamedTextColor.WHITE);
|
|
return fc;
|
|
}
|
|
|
|
public static FormatableChat playerNameComponent(Component c) {
|
|
FormatableChat fc = chatComponent(c);
|
|
fc.builder.colorIfAbsent(NamedTextColor.WHITE);
|
|
return fc;
|
|
}
|
|
|
|
public static FormatableChat translation(String key, Object... with) {
|
|
return new FormatableChat(Component.translatable().key(key).args(Chat.filterObjToComponentLike(with)));
|
|
}
|
|
|
|
public static FormatableChat keybind(String key) {
|
|
return new FormatableChat(Component.keybind().keybind(key));
|
|
}
|
|
|
|
public static FormatableChat score(String name, String objective) {
|
|
return new FormatableChat(Component.score().name(name).objective(objective));
|
|
}
|
|
|
|
public static FormatableChat clickableURL(Chat inner, String url, Chat hover) {
|
|
Objects.requireNonNull(url, "url");
|
|
if (inner == null)
|
|
inner = text(url);
|
|
if (hover == null)
|
|
hover = text(ChatUtil.wrapInLimitedPixels(url, 240));
|
|
return (FormatableChat) chat().clickURL(url).urlColor().hover(hover).then(inner);
|
|
}
|
|
|
|
public static FormatableChat clickableURL(Chat inner, String url) {
|
|
return clickableURL(inner, url, null);
|
|
}
|
|
|
|
public static FormatableChat clickableURL(String url, Chat hover) {
|
|
return clickableURL(null, url, hover);
|
|
}
|
|
|
|
public static FormatableChat clickableURL(String url) {
|
|
return clickableURL(null, url, null);
|
|
}
|
|
|
|
public static FormatableChat clickableCommand(Chat inner, String commandWithSlash, Chat hover) {
|
|
Objects.requireNonNull(commandWithSlash, "commandWithSlash");
|
|
if (!commandWithSlash.startsWith("/"))
|
|
throw new IllegalArgumentException("commandWithSlash must start with a '/' character.");
|
|
if (inner == null)
|
|
inner = text(commandWithSlash);
|
|
if (hover == null)
|
|
hover = text(ChatUtil.wrapInLimitedPixels(commandWithSlash, 240));
|
|
return (FormatableChat) chat().clickCommand(commandWithSlash).commandColor().hover(hover).then(inner);
|
|
}
|
|
|
|
public static FormatableChat clickableCommand(Chat inner, String commandWithSlash) {
|
|
return clickableCommand(inner, commandWithSlash, null);
|
|
}
|
|
|
|
public static FormatableChat clickableCommand(String commandWithSlash, Chat hover) {
|
|
return clickableCommand(null, commandWithSlash, hover);
|
|
}
|
|
|
|
public static FormatableChat clickableCommand(String commandWithSlash) {
|
|
return clickableCommand(null, commandWithSlash, null);
|
|
}
|
|
|
|
public static FormatableChat clickableSuggest(Chat inner, String commandWithSlash, Chat hover) {
|
|
Objects.requireNonNull(commandWithSlash, "commandWithSlash");
|
|
if (!commandWithSlash.startsWith("/"))
|
|
throw new IllegalArgumentException("commandWithSlash must start with a '/' character.");
|
|
if (inner == null)
|
|
inner = text(commandWithSlash);
|
|
if (hover == null)
|
|
hover = text(ChatUtil.wrapInLimitedPixels(commandWithSlash, 240));
|
|
return (FormatableChat) chat().clickSuggest(commandWithSlash).commandColor().hover(hover).then(inner);
|
|
}
|
|
|
|
public static FormatableChat clickableSuggest(Chat inner, String commandWithSlash) {
|
|
return clickableSuggest(inner, commandWithSlash, null);
|
|
}
|
|
|
|
public static FormatableChat clickableSuggest(String commandWithSlash, Chat hover) {
|
|
return clickableSuggest(null, commandWithSlash, hover);
|
|
}
|
|
|
|
public static FormatableChat clickableSuggest(String commandWithSlash) {
|
|
return clickableSuggest(null, commandWithSlash, null);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static Chat prefixedAndColored(ComponentLike message) {
|
|
return Chat.chat()
|
|
.broadcastColor()
|
|
.then(Chat.getConfig().prefix.get())
|
|
.then(message);
|
|
}
|
|
|
|
|
|
|
|
}
|