Update everything around chat component + some other improvement
This commit is contained in:
parent
304faa072e
commit
f4642e22a1
@ -39,6 +39,11 @@
|
||||
<artifactId>adventure-platform-bungeecord</artifactId>
|
||||
<version>4.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.kyori</groupId>
|
||||
<artifactId>adventure-text-serializer-plain</artifactId>
|
||||
<version>4.7.0</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
|
@ -20,6 +20,7 @@ import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
||||
@ -28,7 +29,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
protected Component component;
|
||||
protected boolean console = false;
|
||||
|
||||
public Chat(Component c) {
|
||||
protected Chat(Component c) {
|
||||
Objects.requireNonNull(c, "Provided component must not be null");
|
||||
component = c;
|
||||
}
|
||||
@ -50,6 +51,10 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
return LegacyComponentSerializer.legacySection().serializeOr(component, "");
|
||||
}
|
||||
|
||||
public String getPlainText() {
|
||||
return PlainComponentSerializer.plain().serializeOr(component, "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@ -142,7 +147,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
* @return this, for method chaining
|
||||
*/
|
||||
public Chat thenLeftTextCharLine(Chat leftText) {
|
||||
return then(ChatUtil.leftText(chat().decorationColor().thenText(" ").then(leftText).thenText(" ").get(), config.decorationChar,
|
||||
return then(ChatUtil.leftText(chat().decorationColor().thenText(" ").then(leftText).thenText(" "), config.decorationChar,
|
||||
config.decorationColor, config.nbCharMargin, console));
|
||||
}
|
||||
/**
|
||||
@ -161,7 +166,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
* @return this, for method chaining
|
||||
*/
|
||||
public Chat thenRightTextCharLine(Chat rightText) {
|
||||
return then(ChatUtil.rightText(chat().decorationColor().thenText(" ").then(rightText).thenText(" ").get(), config.decorationChar,
|
||||
return then(ChatUtil.rightText(chat().decorationColor().thenText(" ").then(rightText).thenText(" "), config.decorationChar,
|
||||
config.decorationColor, config.nbCharMargin, console));
|
||||
}
|
||||
/**
|
||||
@ -180,7 +185,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
* @return this, for method chaining
|
||||
*/
|
||||
public Chat thenCenterTextCharLine(Chat centerText) {
|
||||
return then(ChatUtil.centerText(chat().decorationColor().thenText(" ").then(centerText).thenText(" ").get(), config.decorationChar,
|
||||
return then(ChatUtil.centerText(chat().decorationColor().thenText(" ").then(centerText).thenText(" "), config.decorationChar,
|
||||
config.decorationColor, console));
|
||||
}
|
||||
/**
|
||||
@ -205,7 +210,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
|
||||
|
||||
public static class FormatableChat extends Chat {
|
||||
public FormatableChat(Component c) {
|
||||
/* package */ FormatableChat(Component c) {
|
||||
super(c);
|
||||
}
|
||||
|
||||
@ -213,7 +218,7 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
|
||||
public FormatableChat color(TextColor c) { component.color(c); return this; }
|
||||
public FormatableChat color(ChatColor c) { return color(TextColor.color(c.getColor().getRGB())); }
|
||||
public FormatableChat color(Color c) { return color(ChatColor.of(c)); }
|
||||
public FormatableChat color(Color c) { return color(TextColor.color(c.getRGB())); }
|
||||
public FormatableChat color(String c) { return color(ChatColor.of(c)); }
|
||||
|
||||
public FormatableChat black() { return color(ChatColor.BLACK); }
|
||||
@ -279,13 +284,6 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
public FormatableChat hover(BaseComponent[] v) { return hover(toAdventure(v)); }
|
||||
public FormatableChat hover(String legacyText) { return hover(legacyText(legacyText)); }
|
||||
|
||||
@Deprecated
|
||||
public FormatableChat hoverText(BaseComponent v) { return hover(v); }
|
||||
@Deprecated
|
||||
public FormatableChat hoverText(Chat v) { return hover(v); }
|
||||
@Deprecated
|
||||
public FormatableChat hoverText(String legacyText) { return hover(legacyText); }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -341,17 +339,17 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
||||
}
|
||||
|
||||
|
||||
/* package */ static Component toAdventure(BaseComponent[] components) {
|
||||
public static Component toAdventure(BaseComponent[] components) {
|
||||
return BungeeComponentSerializer.get().deserialize(components);
|
||||
}
|
||||
/* package */ static Component toAdventure(BaseComponent component) {
|
||||
public static Component toAdventure(BaseComponent component) {
|
||||
return toAdventure(new BaseComponent[] { component });
|
||||
}
|
||||
|
||||
/* package */ static BaseComponent[] toBungeeArray(Component component) {
|
||||
public static BaseComponent[] toBungeeArray(Component component) {
|
||||
return BungeeComponentSerializer.get().serialize(component);
|
||||
}
|
||||
/* package */ static BaseComponent toBungee(Component component) {
|
||||
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);
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package fr.pandacube.lib.core.chat;
|
||||
|
||||
import static fr.pandacube.lib.core.chat.ChatStatic.chat;
|
||||
import static fr.pandacube.lib.core.chat.ChatStatic.chatComponent;
|
||||
import static fr.pandacube.lib.core.chat.ChatStatic.legacyText;
|
||||
import static fr.pandacube.lib.core.chat.ChatStatic.text;
|
||||
|
||||
@ -11,6 +10,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
@ -47,24 +47,23 @@ public class ChatUtil {
|
||||
|
||||
|
||||
|
||||
public static BaseComponent createURLLink(String text, String url) {
|
||||
public static FormatableChat createURLLink(String text, String url) {
|
||||
return createURLLink(legacyText(text), url, null);
|
||||
}
|
||||
|
||||
public static BaseComponent createURLLink(String text, String url, String hoverText) {
|
||||
public static FormatableChat createURLLink(String text, String url, String hoverText) {
|
||||
return createURLLink(legacyText(text), url, hoverText != null ? legacyText(hoverText) : null);
|
||||
}
|
||||
|
||||
/* package */ static BaseComponent createURLLink(Chat element, String url, Chat hover) {
|
||||
/* package */ static FormatableChat createURLLink(Chat element, String url, Chat hover) {
|
||||
String dispURL = (url.length() > 50) ? (url.substring(0, 48) + "...") : url;
|
||||
return chat()
|
||||
return (FormatableChat) chat()
|
||||
.clickURL(url)
|
||||
.color(Chat.getConfig().urlColor)
|
||||
.hover(
|
||||
hover != null ? hover : Chat.text(dispURL)
|
||||
)
|
||||
.then(element)
|
||||
.get();
|
||||
.then(element);
|
||||
}
|
||||
|
||||
|
||||
@ -74,20 +73,20 @@ public class ChatUtil {
|
||||
|
||||
|
||||
|
||||
public static BaseComponent createCommandLink(String text, String commandWithSlash, String hoverText) {
|
||||
public static FormatableChat createCommandLink(String text, String commandWithSlash, String hoverText) {
|
||||
return createCommandLink(text, commandWithSlash, hoverText == null ? null : legacyText(hoverText));
|
||||
}
|
||||
public static BaseComponent createCommandLink(String text, String commandWithSlash, Chat hoverText) {
|
||||
public static FormatableChat createCommandLink(String text, String commandWithSlash, Chat hoverText) {
|
||||
return createCommandLink(legacyText(text), commandWithSlash, hoverText);
|
||||
}
|
||||
|
||||
/* package */ static BaseComponent createCommandLink(Chat d, String commandWithSlash, Chat hoverText) {
|
||||
/* package */ static FormatableChat createCommandLink(Chat d, String commandWithSlash, Chat hoverText) {
|
||||
FormatableChat c = chat()
|
||||
.clickCommand(commandWithSlash)
|
||||
.color(Chat.getConfig().commandColor);
|
||||
if (hoverText != null)
|
||||
c.hover(hoverText);
|
||||
return c.then(d).get();
|
||||
return (FormatableChat) c.then(d);
|
||||
}
|
||||
|
||||
|
||||
@ -99,20 +98,20 @@ public class ChatUtil {
|
||||
|
||||
|
||||
|
||||
public static BaseComponent createCommandSuggest(String text, String commandWithSlash, String hoverText) {
|
||||
public static FormatableChat createCommandSuggest(String text, String commandWithSlash, String hoverText) {
|
||||
return createCommandSuggest(text, commandWithSlash, hoverText == null ? null : legacyText(hoverText));
|
||||
}
|
||||
public static BaseComponent createCommandSuggest(String text, String commandWithSlash, Chat hoverText) {
|
||||
public static FormatableChat createCommandSuggest(String text, String commandWithSlash, Chat hoverText) {
|
||||
return createCommandSuggest(legacyText(text), commandWithSlash, hoverText);
|
||||
}
|
||||
|
||||
/* package */ static BaseComponent createCommandSuggest(Chat d, String commandWithSlash, Chat hoverText) {
|
||||
/* package */ static FormatableChat createCommandSuggest(Chat d, String commandWithSlash, Chat hoverText) {
|
||||
FormatableChat c = chat()
|
||||
.clickSuggest(commandWithSlash)
|
||||
.color(Chat.getConfig().commandColor);
|
||||
if (hoverText != null)
|
||||
c.hover(hoverText);
|
||||
return c.then(d).get();
|
||||
return (FormatableChat) c.then(d);
|
||||
}
|
||||
|
||||
|
||||
@ -125,7 +124,7 @@ public class ChatUtil {
|
||||
/**
|
||||
* @param cmdFormat the command with %d inside to be replaced with the page number (must start with slash)
|
||||
*/
|
||||
public static BaseComponent createPagination(String prefix, String cmdFormat, int currentPage, int nbPages, int nbPagesToDisplay) {
|
||||
public static Chat createPagination(String prefix, String cmdFormat, int currentPage, int nbPages, int nbPagesToDisplay) {
|
||||
Set<Integer> pagesToDisplay = new TreeSet<>();
|
||||
|
||||
for (int i = 0; i < nbPagesToDisplay && i < nbPages && nbPages - i > 0; i++) {
|
||||
@ -160,7 +159,7 @@ public class ChatUtil {
|
||||
else
|
||||
first = false;
|
||||
|
||||
FormatableChat pDisp = chatComponent(createCommandLink(Integer.toString(page), String.format(cmdFormat, page), "Aller à la page " + page));
|
||||
FormatableChat pDisp = (FormatableChat) createCommandLink(Integer.toString(page), String.format(cmdFormat, page), "Aller à la page " + page);
|
||||
if (page == currentPage) {
|
||||
pDisp.color(Chat.getConfig().highlightedCommandColor);
|
||||
}
|
||||
@ -170,7 +169,7 @@ public class ChatUtil {
|
||||
}
|
||||
|
||||
|
||||
return d.get();
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
@ -182,10 +181,10 @@ public class ChatUtil {
|
||||
|
||||
|
||||
|
||||
public static BaseComponent centerText(BaseComponent text, char repeatedChar, ChatColor decorationColor,
|
||||
public static Chat centerText(Chat text, char repeatedChar, ChatColor decorationColor,
|
||||
boolean console) {
|
||||
|
||||
int textWidth = componentWidth(text, console);
|
||||
int textWidth = componentWidth(text.get(), console);
|
||||
int maxWidth = (console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH;
|
||||
|
||||
if (textWidth > maxWidth)
|
||||
@ -206,14 +205,14 @@ public class ChatUtil {
|
||||
if (repeatedChar != ' ')
|
||||
d.then(text(sideChars).color(decorationColor));
|
||||
|
||||
return d.get();
|
||||
return d;
|
||||
|
||||
}
|
||||
|
||||
public static BaseComponent leftText(BaseComponent text, char repeatedChar, ChatColor decorationColor, int nbLeft,
|
||||
public static Chat leftText(Chat text, char repeatedChar, ChatColor decorationColor, int nbLeft,
|
||||
boolean console) {
|
||||
|
||||
int textWidth = componentWidth(text, console);
|
||||
int textWidth = componentWidth(text.get(), console);
|
||||
int maxWidth = (console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH;
|
||||
int repeatedCharWidth = charW(repeatedChar, console, false);
|
||||
int leftWidth = nbLeft * repeatedCharWidth;
|
||||
@ -229,14 +228,14 @@ public class ChatUtil {
|
||||
if (repeatedChar != ' ') {
|
||||
d.then(text(repeatedChar(repeatedChar, rightNbChar)).color(decorationColor));
|
||||
}
|
||||
return d.get();
|
||||
return d;
|
||||
|
||||
}
|
||||
|
||||
public static BaseComponent rightText(BaseComponent text, char repeatedChar, ChatColor decorationColor, int nbRight,
|
||||
public static Chat rightText(Chat text, char repeatedChar, ChatColor decorationColor, int nbRight,
|
||||
boolean console) {
|
||||
|
||||
int textWidth = componentWidth(text, console);
|
||||
int textWidth = componentWidth(text.get(), console);
|
||||
int maxWidth = (console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH;
|
||||
int repeatedCharWidth = charW(repeatedChar, console, false);
|
||||
int rightWidth = nbRight * repeatedCharWidth;
|
||||
@ -252,13 +251,13 @@ public class ChatUtil {
|
||||
if (repeatedChar != ' ') {
|
||||
d.then(text(repeatedChar(repeatedChar, nbRight)).color(decorationColor));
|
||||
}
|
||||
return d.get();
|
||||
return d;
|
||||
|
||||
}
|
||||
|
||||
public static BaseComponent emptyLine(char repeatedChar, ChatColor decorationColor, boolean console) {
|
||||
public static Chat emptyLine(char repeatedChar, ChatColor decorationColor, boolean console) {
|
||||
int count = ((console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH) / charW(repeatedChar, console, false);
|
||||
return text(repeatedChar(repeatedChar, count)).color(decorationColor).get();
|
||||
return text(repeatedChar(repeatedChar, count)).color(decorationColor);
|
||||
}
|
||||
|
||||
private static String repeatedChar(char repeatedChar, int count) {
|
||||
@ -329,6 +328,12 @@ public class ChatUtil {
|
||||
|
||||
|
||||
|
||||
public static List<Chat> wrapInLimitedPixelsToChat(String legacyText, int pixelWidth) {
|
||||
return wrapInLimitedPixels(legacyText, pixelWidth).stream()
|
||||
.map(t -> legacyText(t))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static List<String> wrapInLimitedPixels(String legacyText, int pixelWidth) {
|
||||
List<String> lines = new ArrayList<>();
|
||||
|
||||
@ -341,7 +346,7 @@ public class ChatUtil {
|
||||
String currentWord = "";
|
||||
int currentWordSize = 0;
|
||||
boolean bold = false;
|
||||
boolean firstCharCurrentWorldBold = false;
|
||||
boolean firstCharCurrentWordBold = false;
|
||||
|
||||
do {
|
||||
char c = legacyText.charAt(index);
|
||||
@ -366,7 +371,7 @@ public class ChatUtil {
|
||||
String lastStyle = ChatColorUtil.getLastColors(currentLine);
|
||||
if (currentWord.charAt(0) == ' ') {
|
||||
currentWord = currentWord.substring(1);
|
||||
currentWordSize -= charW(' ', false, firstCharCurrentWorldBold);
|
||||
currentWordSize -= charW(' ', false, firstCharCurrentWordBold);
|
||||
}
|
||||
currentLine = (lastStyle.equals("§r") ? "" : lastStyle) + currentWord;
|
||||
currentLineSize = currentWordSize;
|
||||
@ -377,7 +382,7 @@ public class ChatUtil {
|
||||
}
|
||||
currentWord = ""+c;
|
||||
currentWordSize = charW(c, false, bold);
|
||||
firstCharCurrentWorldBold = bold;
|
||||
firstCharCurrentWordBold = bold;
|
||||
}
|
||||
else if (c == '\n') {
|
||||
if (currentLineSize + currentWordSize > pixelWidth && currentLineSize > 0) { // wrap before word
|
||||
@ -385,7 +390,7 @@ public class ChatUtil {
|
||||
String lastStyle = ChatColorUtil.getLastColors(currentLine);
|
||||
if (currentWord.charAt(0) == ' ') {
|
||||
currentWord = currentWord.substring(1);
|
||||
currentWordSize -= charW(' ', false, firstCharCurrentWorldBold);
|
||||
currentWordSize -= charW(' ', false, firstCharCurrentWordBold);
|
||||
}
|
||||
currentLine = (lastStyle.equals("§r") ? "" : lastStyle) + currentWord;
|
||||
currentLineSize = currentWordSize;
|
||||
@ -402,7 +407,7 @@ public class ChatUtil {
|
||||
currentLineSize = 0;
|
||||
currentWord = "";
|
||||
currentWordSize = 0;
|
||||
firstCharCurrentWorldBold = bold;
|
||||
firstCharCurrentWordBold = bold;
|
||||
}
|
||||
else {
|
||||
currentWord += c;
|
||||
|
@ -5,6 +5,10 @@ import java.util.UUID;
|
||||
|
||||
import fr.pandacube.lib.core.chat.Chat;
|
||||
import fr.pandacube.lib.core.db.DBException;
|
||||
import net.kyori.adventure.identity.Identified;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
||||
public interface IOnlinePlayer extends IOffPlayer {
|
||||
@ -113,7 +117,24 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* the chat is activated.
|
||||
* @param message the message to display.
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract void sendMessage(BaseComponent message);
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* the chat is activated.
|
||||
* @param message the message to display.
|
||||
*/
|
||||
public abstract void sendMessage(Component message);
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* the chat is activated.
|
||||
* @param message the message to display.
|
||||
*/
|
||||
public default void sendMessage(ComponentLike message) {
|
||||
sendMessage(message.asComponent());
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
@ -121,7 +142,7 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* @param message the message to display
|
||||
*/
|
||||
public default void sendMessage(Chat message) {
|
||||
sendMessage(message.get());
|
||||
sendMessage(message.getAdv());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -134,8 +155,46 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* the sender. This parameter is only there to be transmitted to the client, so client side filtering can
|
||||
* be processed.
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract void sendMessage(BaseComponent message, UUID sender);
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* they allows to display CHAT messages
|
||||
* @param message the message to display.
|
||||
* @param sender the player causing the send of this message. Client side filtering may occur.
|
||||
* May be null if we don’t want client filtering, but still consider the message as CHAT message.
|
||||
* @implNote implementation of this method should not filter the send of the message, based on
|
||||
* the sender. This parameter is only there to be transmitted to the client, so client side filtering can
|
||||
* be processed.
|
||||
*/
|
||||
public default void sendMessage(Component message, UUID sender) {
|
||||
sendMessage(message, () -> sender == null ? Identity.nil() : Identity.identity(sender));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* they allows to display CHAT messages
|
||||
* @param message the message to display.
|
||||
* @param sender the player causing the send of this message. Client side filtering may occur.
|
||||
* May be null if we don’t want client filtering, but still consider the message as CHAT message.
|
||||
* @implNote implementation of this method should not filter the send of the message, based on
|
||||
* the sender. This parameter is only there to be transmitted to the client, so client side filtering can
|
||||
* be processed.
|
||||
*/
|
||||
public abstract void sendMessage(Component message, Identified sender);
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* they allows to display CHAT messages
|
||||
* @param message the message to display
|
||||
* @param sender the player causing the send of this message. Client side filtering may occur.
|
||||
* May be null if we don’t want client filtering, but still consider the message as CHAT message.
|
||||
*/
|
||||
public default void sendMessage(ComponentLike message, UUID sender) {
|
||||
sendMessage(message.asComponent(), sender);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if
|
||||
* they allows to display CHAT messages
|
||||
@ -144,7 +203,7 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* May be null if we don’t want client filtering, but still consider the message as CHAT message.
|
||||
*/
|
||||
public default void sendMessage(Chat message, UUID sender) {
|
||||
sendMessage(message.get(), sender);
|
||||
sendMessage(message.getAdv(), sender);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -152,6 +211,16 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* activated, prepended with the server prefix.
|
||||
* @param message the message to display
|
||||
*/
|
||||
public default void sendPrefixedMessage(Component message) {
|
||||
sendMessage(IPlayerManager.prefixedAndColored(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the provided message in the player’s chat, if the chat is
|
||||
* activated, prepended with the server prefix.
|
||||
* @param message the message to display
|
||||
*/
|
||||
@Deprecated
|
||||
public default void sendPrefixedMessage(BaseComponent message) {
|
||||
sendMessage(IPlayerManager.prefixedAndColored(message));
|
||||
}
|
||||
@ -162,7 +231,7 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* @param message the message to display
|
||||
*/
|
||||
public default void sendPrefixedMessage(Chat message) {
|
||||
sendPrefixedMessage(message.get());
|
||||
sendPrefixedMessage(message.getAdv());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -173,8 +242,19 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* @param stay Stay time in tick
|
||||
* @param fadeOut Fade out time in tick
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract void sendTitle(BaseComponent title, BaseComponent subtitle, int fadeIn, int stay, int fadeOut);
|
||||
|
||||
/**
|
||||
* Display a title in the middle of the screen.
|
||||
* @param title The big text
|
||||
* @param subtitle The less big text
|
||||
* @param fadeIn Fade in time in tick
|
||||
* @param stay Stay time in tick
|
||||
* @param fadeOut Fade out time in tick
|
||||
*/
|
||||
public abstract void sendTitle(Component title, Component subtitle, int fadeIn, int stay, int fadeOut);
|
||||
|
||||
/**
|
||||
* Display a title in the middle of the screen.
|
||||
* @param title The big text
|
||||
@ -184,7 +264,7 @@ public interface IOnlinePlayer extends IOffPlayer {
|
||||
* @param fadeOut Fade out time in tick
|
||||
*/
|
||||
public default void sendTitle(Chat title, Chat subtitle, int fadeIn, int stay, int fadeOut) {
|
||||
sendTitle(title.get(), subtitle.get(), fadeIn, stay, fadeOut);
|
||||
sendTitle(title.getAdv(), subtitle.getAdv(), fadeIn, stay, fadeOut);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -17,6 +17,7 @@ import fr.pandacube.lib.core.chat.Chat;
|
||||
import fr.pandacube.lib.core.db.DB;
|
||||
import fr.pandacube.lib.core.db.DBInitTableException;
|
||||
import fr.pandacube.lib.core.util.Log;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
||||
public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPlayer> {
|
||||
@ -98,9 +99,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
|
||||
protected abstract OF newOffPlayerInstance(UUID p);
|
||||
|
||||
protected abstract void sendMessageToConsole(BaseComponent message);
|
||||
|
||||
|
||||
protected abstract void sendMessageToConsole(Component message);
|
||||
|
||||
|
||||
|
||||
@ -114,12 +113,20 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
|
||||
|
||||
|
||||
@Deprecated
|
||||
public static BaseComponent prefixedAndColored(BaseComponent message) {
|
||||
return prefixedAndColored(Chat.chatComponent(message)).get();
|
||||
}
|
||||
|
||||
public static Component prefixedAndColored(Component message) {
|
||||
return prefixedAndColored(Chat.chatComponent(message)).getAdv();
|
||||
}
|
||||
|
||||
public static Chat prefixedAndColored(Chat message) {
|
||||
return Chat.chat()
|
||||
.color(Chat.getConfig().broadcastColor)
|
||||
.then(Chat.getConfig().prefix.get())
|
||||
.then(message)
|
||||
.get();
|
||||
.then(message);
|
||||
}
|
||||
|
||||
|
||||
@ -150,7 +157,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
*
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix, boolean console, String permission, UUID sourcePlayer) {
|
||||
public static void broadcast(Component message, boolean prefix, boolean console, String permission, UUID sourcePlayer) {
|
||||
Objects.requireNonNull(message, "message cannot be null");
|
||||
|
||||
IOffPlayer oSourcePlayer = getInstance().getOffline(sourcePlayer);
|
||||
@ -168,7 +175,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
op.sendMessage(message, sourcePlayer); // CHAT message with UUID
|
||||
}
|
||||
else {
|
||||
op.sendMessage(message, null); // CHAT message without UUID
|
||||
op.sendMessage(message, new UUID(0, 0)); // CHAT message without UUID
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -191,7 +198,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* @param permission if not null, the message is only sent to player with this permission.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix, boolean console, String permission) {
|
||||
public static void broadcast(Component message, boolean prefix, boolean console, String permission) {
|
||||
broadcast(message, prefix, console, permission, null);
|
||||
}
|
||||
|
||||
@ -210,7 +217,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* to players ignoring the provided player.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix, boolean console, UUID sourcePlayer) {
|
||||
public static void broadcast(Component message, boolean prefix, boolean console, UUID sourcePlayer) {
|
||||
broadcast(message, prefix, console, null, sourcePlayer);
|
||||
}
|
||||
|
||||
@ -228,7 +235,26 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* @param console if the message must be displayed in the console.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
@Deprecated
|
||||
public static void broadcast(BaseComponent message, boolean prefix, boolean console) {
|
||||
broadcast(Chat.toAdventure(message), prefix, console, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Broadcast a message to all players, and eventually to the console.
|
||||
* <p>
|
||||
* This method does not restrict the reception of the message to a specific permission. If you
|
||||
* want to specify a permission, use {@link #broadcast(BaseComponent, boolean, boolean, String)}.
|
||||
* <p>
|
||||
* This method assumes this message is not caused by a specific player. To specify the source player, use
|
||||
* {@link #broadcast(BaseComponent, boolean, boolean, UUID)}.
|
||||
*
|
||||
* @param message the message to send.
|
||||
* @param prefix if the server prefix will be prepended to the message.
|
||||
* @param console if the message must be displayed in the console.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(Component message, boolean prefix, boolean console) {
|
||||
broadcast(message, prefix, console, null, null);
|
||||
}
|
||||
|
||||
@ -248,7 +274,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* If null, the message will be sent to all players and to console.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix, String permission) {
|
||||
public static void broadcast(Component message, boolean prefix, String permission) {
|
||||
broadcast(message, prefix, (permission == null), permission, null);
|
||||
}
|
||||
|
||||
@ -269,7 +295,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* to players ignoring the provided player.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix, UUID sourcePlayer) {
|
||||
public static void broadcast(Component message, boolean prefix, UUID sourcePlayer) {
|
||||
broadcast(message, prefix, true, null, sourcePlayer);
|
||||
}
|
||||
|
||||
@ -289,7 +315,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
* @param prefix if the server prefix will be prepended to the message.
|
||||
* @throws IllegalArgumentException if message is null.
|
||||
*/
|
||||
public static void broadcast(BaseComponent message, boolean prefix) {
|
||||
public static void broadcast(Component message, boolean prefix) {
|
||||
broadcast(message, prefix, true, null, null);
|
||||
}
|
||||
|
||||
@ -311,7 +337,7 @@ public abstract class IPlayerManager<OP extends IOnlinePlayer, OF extends IOffPl
|
||||
*/
|
||||
public static void broadcast(Chat message, boolean prefix, boolean console, String permission, UUID sourcePlayer) {
|
||||
Objects.requireNonNull(message, "message cannot be null");
|
||||
broadcast(message.get(), prefix, console, permission, sourcePlayer);
|
||||
broadcast(message.getAdv(), prefix, console, permission, sourcePlayer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -34,6 +34,10 @@
|
||||
<groupId>net.kyori</groupId>
|
||||
<artifactId>adventure-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>net.kyori</groupId>
|
||||
<artifactId>adventure-text-serializer-plain</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package fr.pandacube.lib.paper.util;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -21,12 +22,41 @@ import net.kyori.adventure.text.format.TextDecoration.State;
|
||||
|
||||
public class ItemStackBuilder {
|
||||
|
||||
/**
|
||||
* Create a builder with a clone of the provided ItemStack.
|
||||
*
|
||||
* The returned builder will not alter the provided ItemStack.
|
||||
* IF you want to modify the ItemStack with the builder, please use {@link #wrap(ItemStack)}.
|
||||
*
|
||||
* @param base the original ItemStack.
|
||||
* @return the builder
|
||||
*/
|
||||
public static ItemStackBuilder of(ItemStack base) {
|
||||
return new ItemStackBuilder(base.clone());
|
||||
return wrap(base.clone());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a builder of a new ItemStack with the specified Material.
|
||||
*
|
||||
* @param mat the material of the new builded ItemStack
|
||||
* @return the builder
|
||||
*/
|
||||
public static ItemStackBuilder of(Material mat) {
|
||||
return new ItemStackBuilder(new ItemStack(mat));
|
||||
return wrap(new ItemStack(mat));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a builder that will alter the data of the provided ItemStack.
|
||||
*
|
||||
* The {@link #build()} method of thez returned builder will return the same instance
|
||||
* of ItemStack as the parameter of this method.
|
||||
*
|
||||
* To create a builder that doesn’t modify the provided ItemStack, use {@link #of(ItemStack)}.
|
||||
* @param stack
|
||||
* @return the builder
|
||||
*/
|
||||
public static ItemStackBuilder wrap(ItemStack stack) {
|
||||
return new ItemStackBuilder(stack);
|
||||
}
|
||||
|
||||
|
||||
@ -95,14 +125,14 @@ public class ItemStackBuilder {
|
||||
return rawLore(Collections.emptyList());
|
||||
}
|
||||
|
||||
public ItemStackBuilder addLoreAfter(List<Chat> lore) {
|
||||
if (lore != null) {
|
||||
public ItemStackBuilder addLoreAfter(List<Chat> lores) {
|
||||
if (lores != null) {
|
||||
List<Component> baseLore = getOrInitMeta().lore();
|
||||
if (baseLore == null) baseLore = Collections.emptyList();
|
||||
return rawLore(
|
||||
Streams.concat(
|
||||
baseLore.stream(),
|
||||
lore.stream()
|
||||
lores.stream()
|
||||
.map(line -> Chat.italicFalseIfNotSet(line).getAdv())
|
||||
)
|
||||
.collect(Collectors.toList()));
|
||||
@ -111,6 +141,12 @@ public class ItemStackBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemStackBuilder addLoreAfter(Chat... lores) {
|
||||
if (lores == null || lores.length == 0)
|
||||
return this;
|
||||
return addLoreAfter(Arrays.asList(lores));
|
||||
}
|
||||
|
||||
public ItemStackBuilder enchant(Enchantment ench, int level) {
|
||||
getOrInitMeta().addEnchant(ench, level, true);
|
||||
updateMeta();
|
||||
|
Loading…
Reference in New Issue
Block a user