mirror of
https://github.com/PaperMC/Velocity.git
synced 2024-12-09 07:01:19 +08:00
Remove LegacyChatColorUtils
In most cases, you should only work with legacy text to deserialize or serialize it for backwards compatibility or user configurations only.
This commit is contained in:
parent
fc48db62b5
commit
a60c55007a
@ -1,66 +0,0 @@
|
||||
package com.velocitypowered.api.util;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* LegacyChatColorUtils contains utilities for handling legacy Minecraft color codes. Generally, you should prefer
|
||||
* JSON-based components, but for convenience Velocity provides a limited set of tools to handle Minecraft color codes.
|
||||
*/
|
||||
public class LegacyChatColorUtils {
|
||||
private LegacyChatColorUtils() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the legacy Minecraft format character, the section symbol.
|
||||
*/
|
||||
public static final char FORMAT_CHAR = '\u00a7';
|
||||
|
||||
/**
|
||||
* Translates a string with Minecraft color codes prefixed with a different character than the section symbol into
|
||||
* a string that uses the section symbol.
|
||||
* @param originalChar the char the color codes are prefixed by
|
||||
* @param text the text to translate
|
||||
* @return the translated text
|
||||
*/
|
||||
public static String translate(char originalChar, @NonNull String text) {
|
||||
Preconditions.checkNotNull(text, "text");
|
||||
char[] textChars = text.toCharArray();
|
||||
int foundSectionIdx = -1;
|
||||
for (int i = 0; i < textChars.length; i++) {
|
||||
char textChar = textChars[i];
|
||||
if (textChar == originalChar) {
|
||||
foundSectionIdx = i;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (foundSectionIdx >= 0) {
|
||||
textChar = Character.toLowerCase(textChar);
|
||||
if ((textChar >= 'a' && textChar <= 'f') || (textChar >= '0' && textChar <= '9') ||
|
||||
(textChar >= 'l' && textChar <= 'o' || textChar == 'r')) {
|
||||
textChars[foundSectionIdx] = FORMAT_CHAR;
|
||||
}
|
||||
foundSectionIdx = -1;
|
||||
}
|
||||
}
|
||||
return new String(textChars);
|
||||
}
|
||||
|
||||
/**
|
||||
* A regex that matches all Minecraft color codes and removes them.
|
||||
*/
|
||||
private static final Pattern CHAT_COLOR_MATCHER = Pattern.compile("(?i)" + Character.toString(FORMAT_CHAR) + "[0-9A-FL-OR]");
|
||||
|
||||
/**
|
||||
* Removes all Minecraft color codes from the string.
|
||||
* @param text the text to remove color codes from
|
||||
* @return a new String without Minecraft color codes
|
||||
*/
|
||||
public static String removeFormatting(@NonNull String text) {
|
||||
Preconditions.checkNotNull(text, "text");
|
||||
return CHAT_COLOR_MATCHER.matcher(text).replaceAll("");
|
||||
}
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
package com.velocitypowered.api.util;
|
||||
|
||||
import com.velocitypowered.api.util.LegacyChatColorUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class LegacyChatColorUtilsTest {
|
||||
private static final String NON_FORMATTED = "Velocity";
|
||||
private static final String FORMATTED = "\u00a7cVelocity";
|
||||
private static final String FORMATTED_MULTIPLE = "\u00a7c\u00a7lVelocity";
|
||||
private static final String FORMATTED_MULTIPLE_VARIED = "\u00a7c\u00a7lVelo\u00a7a\u00a7mcity";
|
||||
private static final String INVALID = "\u00a7gVelocity";
|
||||
private static final String RAW_SECTION = "\u00a7";
|
||||
|
||||
@Test
|
||||
void removeFormattingNonFormatted() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(NON_FORMATTED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormatted() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormattedMultiple() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED_MULTIPLE));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingFormattedMultipleVaried() {
|
||||
assertEquals(NON_FORMATTED, LegacyChatColorUtils.removeFormatting(FORMATTED_MULTIPLE_VARIED));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingInvalidFormat() {
|
||||
assertEquals(INVALID, LegacyChatColorUtils.removeFormatting(INVALID));
|
||||
}
|
||||
|
||||
@Test
|
||||
void removeFormattingRawSection() {
|
||||
assertEquals(RAW_SECTION, LegacyChatColorUtils.removeFormatting(RAW_SECTION));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translate() {
|
||||
assertEquals(FORMATTED, LegacyChatColorUtils.translate('&', "&cVelocity"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translateMultiple() {
|
||||
assertEquals(FORMATTED_MULTIPLE, LegacyChatColorUtils.translate('&', "&c&lVelocity"));
|
||||
assertEquals(FORMATTED_MULTIPLE_VARIED, LegacyChatColorUtils.translate('&', "&c&lVelo&a&mcity"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void translateDifferentChar() {
|
||||
assertEquals(FORMATTED, LegacyChatColorUtils.translate('$', "$cVelocity"));
|
||||
assertEquals(FORMATTED_MULTIPLE_VARIED, LegacyChatColorUtils.translate('$', "$c$lVelo$a$mcity"));
|
||||
}
|
||||
}
|
@ -5,8 +5,6 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.moandjiezana.toml.Toml;
|
||||
import com.velocitypowered.api.util.Favicon;
|
||||
import com.velocitypowered.proxy.util.AddressUtil;
|
||||
import com.velocitypowered.api.util.LegacyChatColorUtils;
|
||||
import io.netty.buffer.ByteBufUtil;
|
||||
import net.kyori.text.Component;
|
||||
import net.kyori.text.serializer.ComponentSerializers;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user