Added minimum hex value for nick colors

This commit is contained in:
Teriuihi 2023-08-11 22:30:23 +02:00
parent 4b930e62c3
commit 3e29fc7d17
2 changed files with 82 additions and 34 deletions

View File

@ -249,6 +249,47 @@ public class Utility {
: Utility.parseMiniMessage(stringBuilder.toString());
}
public static boolean checkNickBrightEnough(String nickname) {
if (!nickname.matches(".*" + stringRegen + ".*")) {
return true;
}
Pattern pattern = Pattern.compile(stringRegen);
Matcher matcher = pattern.matcher(nickname);
while (matcher.find()) {
String hexColor = matcher.group();
if (!checkHexHighEnough(hexColor)) {
return false;
}
}
return true;
}
private static boolean checkHexHighEnough(String hexColor) {
// Remove the leading "#" if present
if (hexColor.startsWith("{")) {
hexColor = hexColor.substring(1);
}
if (hexColor.startsWith("#")) {
hexColor = hexColor.substring(1);
}
// Extract the color parts
String redPart = hexColor.substring(0, 2);
String greenPart = hexColor.substring(2, 4);
String bluePart = hexColor.substring(4, 6);
// Convert the color parts to integers
int red = Integer.parseInt(redPart, 16);
int green = Integer.parseInt(greenPart, 16);
int blue = Integer.parseInt(bluePart, 16);
// Check if any part is over 30 in hexadecimal
return red > 0x30 || green > 0x30 || blue > 0x30;
}
public static String formatText(String message) {
/*
.match(pattern)

View File

@ -4,6 +4,7 @@ import com.alttd.chat.ChatPlugin;
import com.alttd.chat.config.Config;
import com.alttd.chat.database.Queries;
import com.alttd.chat.objects.Nick;
import com.alttd.chat.util.Utility;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import net.kyori.adventure.text.TextComponent;
@ -147,42 +148,48 @@ public class NickUtilities
}
public static boolean validNick(Player sender, OfflinePlayer target, String nickName) {
if (noBlockedCodes(nickName)) {
String cleanNick = NickUtilities.removeAllColors(nickName);
if (cleanNick.length() >= 3 && cleanNick.length() <= 16) {
if (cleanNick.matches("[a-zA-Z0-9_]*") && nickName.length()<=192) {//192 is if someone puts {#xxxxxx<>} in front of every letter
if (!cleanNick.equalsIgnoreCase(target.getName())){
for (Nick nick : Nicknames.getInstance().NickCache.values()){
if (!nick.getUuid().equals(target.getUniqueId())
&& ((nick.getCurrentNickNoColor() != null && nick.getCurrentNickNoColor().equalsIgnoreCase(cleanNick))
|| (nick.getNewNickNoColor() != null && nick.getNewNickNoColor().equalsIgnoreCase(cleanNick)))){
UUID uuid = nick.getUuid();
UUID uniqueId = target.getUniqueId();
if (uniqueId.equals(uuid)){
ChatPlugin.getInstance().getLogger().info(uuid + " " + uniqueId);
}
sender.sendMiniMessage(Config.NICK_TAKEN, null);
return false;
}
}
}
return true;
} else {
sender.sendMiniMessage(Config.NICK_INVALID_CHARACTERS, null);
}
} else {
sender.sendMiniMessage(Config.NICK_INVALID_LENGTH, null);
}
} else {
if (!noBlockedCodes(nickName)) {
sender.sendMiniMessage(Config.NICK_BLOCKED_COLOR_CODES, null);
return false;
}
return false;
if (!Utility.checkNickBrightEnough(nickName)) {
sender.sendMiniMessage("<red>At least one color must be brighter than 30 for each color</red>", null);
return false;
}
String cleanNick = NickUtilities.removeAllColors(nickName);
if (cleanNick.length() < 3 || cleanNick.length() > 16) {
sender.sendMiniMessage(Config.NICK_INVALID_LENGTH, null);
return false;
}
if (!cleanNick.matches("[a-zA-Z0-9_]*") || nickName.length() > 192) { //192 is if someone puts {#xxxxxx<>} in front of every letter
sender.sendMiniMessage(Config.NICK_INVALID_CHARACTERS, null);
return false;
}
if (cleanNick.equalsIgnoreCase(target.getName())) {
return true;
}
for (Nick nick : Nicknames.getInstance().NickCache.values()){
if (!nick.getUuid().equals(target.getUniqueId())
&& ((nick.getCurrentNickNoColor() != null && nick.getCurrentNickNoColor().equalsIgnoreCase(cleanNick))
|| (nick.getNewNickNoColor() != null && nick.getNewNickNoColor().equalsIgnoreCase(cleanNick)))){
UUID uuid = nick.getUuid();
UUID uniqueId = target.getUniqueId();
if (uniqueId.equals(uuid)){
ChatPlugin.getInstance().getLogger().info(uuid + " " + uniqueId);
}
sender.sendMiniMessage(Config.NICK_TAKEN, null);
return false;
}
}
return true;
}
public static boolean noBlockedCodes(final String getNick) {