Even more Chat API update
This commit is contained in:
parent
d1b58c4771
commit
489b81e55f
@ -23,12 +23,14 @@ import net.kyori.adventure.text.TranslatableComponent;
|
|||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
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.Style;
|
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.serializer.bungeecord.BungeeComponentSerializer;
|
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||||
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.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;
|
||||||
|
|
||||||
@ -63,9 +65,8 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
|||||||
return LEGACY_SERIALIZER_BUNGEE_FIENDLY.serialize(getAdv());
|
return LEGACY_SERIALIZER_BUNGEE_FIENDLY.serialize(getAdv());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public String getPlainText() {
|
public String getPlainText() {
|
||||||
return net.kyori.adventure.text.serializer.plain.PlainComponentSerializer.plain().serializeOr(getAdv(), "");
|
return PlainTextComponentSerializer.plainText().serializeOr(getAdv(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -437,17 +438,17 @@ public abstract class Chat extends ChatStatic implements HoverEventSource<Compon
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class Config {
|
public static class Config {
|
||||||
public ChatColor decorationColor = ChatColor.YELLOW;
|
public TextColor decorationColor = NamedTextColor.YELLOW;
|
||||||
public char decorationChar = '-';
|
public char decorationChar = '-';
|
||||||
public int nbCharMargin = 1;
|
public int nbCharMargin = 1;
|
||||||
public ChatColor successColor = ChatColor.GREEN;
|
public TextColor successColor = NamedTextColor.GREEN;
|
||||||
public ChatColor failureColor = ChatColor.RED;
|
public TextColor failureColor = NamedTextColor.RED;
|
||||||
public ChatColor infoColor = ChatColor.GOLD;
|
public TextColor infoColor = NamedTextColor.GOLD;
|
||||||
public ChatColor dataColor = ChatColor.GRAY;
|
public TextColor dataColor = NamedTextColor.GRAY;
|
||||||
public ChatColor urlColor = ChatColor.GREEN;
|
public TextColor urlColor = NamedTextColor.GREEN;
|
||||||
public ChatColor commandColor = ChatColor.GRAY;
|
public TextColor commandColor = NamedTextColor.GRAY;
|
||||||
public ChatColor highlightedCommandColor = ChatColor.WHITE;
|
public TextColor highlightedCommandColor = NamedTextColor.WHITE;
|
||||||
public ChatColor broadcastColor = ChatColor.YELLOW;
|
public TextColor broadcastColor = NamedTextColor.YELLOW;
|
||||||
public Supplier<Chat> prefix;
|
public Supplier<Chat> prefix;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package fr.pandacube.lib.core.chat;
|
package fr.pandacube.lib.core.chat;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
public class ChatColorUtil {
|
public class ChatColorUtil {
|
||||||
@ -235,17 +236,29 @@ public class ChatColorUtil {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static ChatColor interpolateColor(float v0, float v1, float v, ChatColor cc0, ChatColor cc1) {
|
|
||||||
Color c0 = cc0.getColor(), c1 = cc1.getColor();
|
|
||||||
int r0 = c0.getRed(), g0 = c0.getGreen(), b0 = c0.getBlue(),
|
public static TextColor interpolateColor(float v0, float v1, float v, TextColor cc0, TextColor cc1) {
|
||||||
r1 = c1.getRed(), g1 = c1.getGreen(), b1 = c1.getBlue();
|
|
||||||
float normV = (v - v0) / (v1 - v0);
|
float normV = (v - v0) / (v1 - v0);
|
||||||
return ChatColor.of(new Color(
|
return TextColor.lerp(normV, cc0, cc1);
|
||||||
(int) (r0 + (r1 - r0) * normV),
|
|
||||||
(int) (g0 + (g1 - g0) * normV),
|
|
||||||
(int) (b0 + (b1 - b0) * normV)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -258,22 +271,22 @@ public class ChatColorUtil {
|
|||||||
//private record GradientValueColor(float value, ChatColor color) { } // Java 16
|
//private record GradientValueColor(float value, ChatColor color) { } // Java 16
|
||||||
private static class GradientValueColor {
|
private static class GradientValueColor {
|
||||||
private final float value;
|
private final float value;
|
||||||
private final ChatColor color;
|
private final TextColor color;
|
||||||
public GradientValueColor(float value, ChatColor color) {
|
public GradientValueColor(float value, TextColor color) {
|
||||||
this.value = value; this.color = color;
|
this.value = value; this.color = color;
|
||||||
}
|
}
|
||||||
public float value() { return value; }
|
public float value() { return value; }
|
||||||
public ChatColor color() { return color; }
|
public TextColor color() { return color; }
|
||||||
}
|
}
|
||||||
|
|
||||||
List<GradientValueColor> colors = new ArrayList<>();
|
List<GradientValueColor> colors = new ArrayList<>();
|
||||||
|
|
||||||
public synchronized ChatValueGradient add(float v, ChatColor col) {
|
public synchronized ChatValueGradient add(float v, TextColor col) {
|
||||||
colors.add(new GradientValueColor(v, col));
|
colors.add(new GradientValueColor(v, col));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized ChatColor pickColorAt(float v) {
|
public synchronized TextColor pickColorAt(float v) {
|
||||||
if (colors.isEmpty())
|
if (colors.isEmpty())
|
||||||
throw new IllegalStateException("Must define at least one color in this ChatValueGradient instance.");
|
throw new IllegalStateException("Must define at least one color in this ChatValueGradient instance.");
|
||||||
if (colors.size() == 1)
|
if (colors.size() == 1)
|
||||||
@ -293,8 +306,7 @@ public class ChatColorUtil {
|
|||||||
}
|
}
|
||||||
int p0 = p1 - 1;
|
int p0 = p1 - 1;
|
||||||
float v0 = colors.get(p0).value(), v1 = colors.get(p1).value();
|
float v0 = colors.get(p0).value(), v1 = colors.get(p1).value();
|
||||||
ChatColor cc0 = colors.get(p0).color(), cc1 = colors.get(p1).color();
|
TextColor cc0 = colors.get(p0).color(), cc1 = colors.get(p1).color();
|
||||||
|
|
||||||
return interpolateColor(v0, v1, v, cc0, cc1);
|
return interpolateColor(v0, v1, v, cc0, cc1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@ import fr.pandacube.lib.core.chat.Chat.FormatableChat;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.TranslatableComponent;
|
import net.kyori.adventure.text.TranslatableComponent;
|
||||||
|
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;
|
||||||
import net.kyori.adventure.text.format.TextDecoration.State;
|
import net.kyori.adventure.text.format.TextDecoration.State;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
@ -183,7 +185,7 @@ public class ChatUtil {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static Chat centerText(Chat text, char repeatedChar, ChatColor decorationColor,
|
public static Chat centerText(Chat text, char repeatedChar, TextColor decorationColor,
|
||||||
boolean console) {
|
boolean console) {
|
||||||
|
|
||||||
int textWidth = componentWidth(text.getAdv(), console);
|
int textWidth = componentWidth(text.getAdv(), console);
|
||||||
@ -211,7 +213,7 @@ public class ChatUtil {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Chat leftText(Chat text, char repeatedChar, ChatColor decorationColor, int nbLeft,
|
public static Chat leftText(Chat text, char repeatedChar, TextColor decorationColor, int nbLeft,
|
||||||
boolean console) {
|
boolean console) {
|
||||||
|
|
||||||
int textWidth = componentWidth(text.getAdv(), console);
|
int textWidth = componentWidth(text.getAdv(), console);
|
||||||
@ -234,7 +236,7 @@ public class ChatUtil {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Chat rightText(Chat text, char repeatedChar, ChatColor decorationColor, int nbRight,
|
public static Chat rightText(Chat text, char repeatedChar, TextColor decorationColor, int nbRight,
|
||||||
boolean console) {
|
boolean console) {
|
||||||
|
|
||||||
int textWidth = componentWidth(text.getAdv(), console);
|
int textWidth = componentWidth(text.getAdv(), console);
|
||||||
@ -257,7 +259,7 @@ public class ChatUtil {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Chat emptyLine(char repeatedChar, ChatColor decorationColor, boolean console) {
|
public static Chat emptyLine(char repeatedChar, TextColor decorationColor, boolean console) {
|
||||||
int count = ((console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH) / charW(repeatedChar, console, false);
|
int count = ((console) ? CONSOLE_NB_CHAR_DEFAULT : DEFAULT_CHAT_WIDTH) / charW(repeatedChar, console, false);
|
||||||
return text(repeatedChar(repeatedChar, count)).color(decorationColor);
|
return text(repeatedChar(repeatedChar, count)).color(decorationColor);
|
||||||
}
|
}
|
||||||
@ -435,6 +437,68 @@ public class ChatUtil {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static final String PROGRESS_BAR_START = "[";
|
||||||
|
private static final String PROGRESS_BAR_END = "]";
|
||||||
|
private static final TextColor PROGRESS_BAR_EMPTY_COLOR = NamedTextColor.DARK_GRAY;
|
||||||
|
private static final char PROGRESS_BAR_EMPTY_CHAR = '.';
|
||||||
|
private static final char PROGRESS_BAR_FULL_CHAR = '|';
|
||||||
|
|
||||||
|
public static Chat progressBar(double[] values, TextColor[] colors, double total, int pixelWidth, boolean console) {
|
||||||
|
|
||||||
|
// 1. Compute char size for each values
|
||||||
|
int progressPixelWidth = pixelWidth - strWidth(PROGRESS_BAR_START + PROGRESS_BAR_END, console, false);
|
||||||
|
int charPixelWidth = charW(PROGRESS_BAR_EMPTY_CHAR, console, false);
|
||||||
|
|
||||||
|
assert charPixelWidth == charW(PROGRESS_BAR_FULL_CHAR, console, false) : "PROGRESS_BAR_EMPTY_CHAR and PROGRESS_BAR_FULL_CHAR should have the same pixel width according to #charW(...)";
|
||||||
|
|
||||||
|
int progressCharWidth = progressPixelWidth / charPixelWidth;
|
||||||
|
|
||||||
|
int[] sizes = new int[values.length];
|
||||||
|
double sumValuesBefore = 0;
|
||||||
|
int sumSizesBefore = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
sumValuesBefore += values[i];
|
||||||
|
int charPosition = Math.min((int) Math.round(progressCharWidth * sumValuesBefore / total), progressCharWidth);
|
||||||
|
sizes[i] = charPosition - sumSizesBefore;
|
||||||
|
sumSizesBefore += sizes[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Generate rendered text
|
||||||
|
Chat c = text(PROGRESS_BAR_START);
|
||||||
|
|
||||||
|
int sumSizes = 0;
|
||||||
|
for (int i = 0; i < sizes.length; i++) {
|
||||||
|
sumSizes += sizes[i];
|
||||||
|
|
||||||
|
FormatableChat subC = text(repeatedChar(PROGRESS_BAR_FULL_CHAR, sizes[i]));
|
||||||
|
|
||||||
|
if (colors != null && i < colors.length && colors[i] != null)
|
||||||
|
subC.color(colors[i]);
|
||||||
|
|
||||||
|
c.then(subC);
|
||||||
|
}
|
||||||
|
|
||||||
|
return c
|
||||||
|
.then(text(repeatedChar(PROGRESS_BAR_EMPTY_CHAR, progressCharWidth - sumSizes))
|
||||||
|
.color(PROGRESS_BAR_EMPTY_COLOR))
|
||||||
|
.thenText(PROGRESS_BAR_END);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Chat progressBar(double value, TextColor color, double total, int pixelWidth, boolean console) {
|
||||||
|
return progressBar(new double[] { value }, new TextColor[] { color }, total, pixelWidth, console);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
package fr.pandacube.lib.core.chat;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
|
|
||||||
public class TextProgressBar {
|
|
||||||
private static String pattern_start = "[";
|
|
||||||
private static String pattern_end = "]";
|
|
||||||
private static ChatColor color_empty = ChatColor.DARK_GRAY;
|
|
||||||
private static ChatColor color_default = ChatColor.RESET;
|
|
||||||
private static String pattern_empty = ".";
|
|
||||||
private static String pattern_full = "|";
|
|
||||||
|
|
||||||
public static String progressBar(double[] values, ChatColor[] colors, double total, int nbCar) {
|
|
||||||
long[] sizes = new long[values.length];
|
|
||||||
|
|
||||||
int max_size = nbCar - pattern_start.length() - pattern_end.length();
|
|
||||||
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
double sum_values_before = 0;
|
|
||||||
for (int j = i; j >= 0; j--)
|
|
||||||
sum_values_before += values[j];
|
|
||||||
|
|
||||||
long car_position = Math.round(max_size * sum_values_before / total);
|
|
||||||
|
|
||||||
// évite les barre de progressions plus grandes que la taille
|
|
||||||
// demandée
|
|
||||||
if (car_position > max_size) car_position = max_size;
|
|
||||||
|
|
||||||
long sum_sizes_before = 0;
|
|
||||||
for (int j = i - 1; j >= 0; j--)
|
|
||||||
sum_sizes_before += sizes[j];
|
|
||||||
|
|
||||||
sizes[i] = car_position - sum_sizes_before;
|
|
||||||
}
|
|
||||||
int sum_sizes = 0;
|
|
||||||
|
|
||||||
String bar = pattern_start;
|
|
||||||
for (int i = 0; i < sizes.length; i++) {
|
|
||||||
sum_sizes += sizes[i];
|
|
||||||
|
|
||||||
ChatColor color = color_default;
|
|
||||||
if (colors != null && i < colors.length && colors[i] != null) color = colors[i];
|
|
||||||
|
|
||||||
bar = bar + color;
|
|
||||||
|
|
||||||
for (int j = 0; j < sizes[i]; j++)
|
|
||||||
bar = bar + pattern_full;
|
|
||||||
}
|
|
||||||
|
|
||||||
bar = bar + color_empty;
|
|
||||||
for (int j = 0; j < (max_size - sum_sizes); j++)
|
|
||||||
bar = bar + pattern_empty;
|
|
||||||
|
|
||||||
bar = bar + ChatColor.RESET + pattern_end;
|
|
||||||
return bar;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String progressBar(double value, ChatColor color, double max, int nbCar) {
|
|
||||||
return progressBar(new double[] { value }, new ChatColor[] { color }, max, nbCar);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user