Fix nicknames and prefixes
This commit is contained in:
+1
-1
@@ -20,7 +20,7 @@
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency><!--TODO update to version 4.0.0-->
|
||||
<dependency>
|
||||
<groupId>org.spongepowered</groupId>
|
||||
<artifactId>configurate-yaml</artifactId>
|
||||
<version>3.7.1</version>
|
||||
|
||||
@@ -13,15 +13,15 @@ public class ChatImplementation implements ChatAPI{
|
||||
private static ChatAPI instance;
|
||||
|
||||
private LuckPerms luckPerms;
|
||||
private DatabaseConnection databaseConnection; // todo this isn't needed can be removed
|
||||
private DatabaseConnection databaseConnection;
|
||||
|
||||
public ChatImplementation() {
|
||||
instance = this;
|
||||
Config.init();
|
||||
|
||||
luckPerms = getLuckPerms();
|
||||
databaseConnection = getDataBase(); // todo fix sql
|
||||
Queries.createTables(); // todo fix sql
|
||||
databaseConnection = getDataBase();
|
||||
Queries.createTables();
|
||||
|
||||
ChatUserManager.initialize(); // loads all the users from the db and adds them.
|
||||
RegexManager.initialize(); // load the filters and regexes from config
|
||||
|
||||
@@ -202,7 +202,7 @@ public final class Config {
|
||||
}
|
||||
|
||||
// TODO prefixes need hovers, this hasn't been setup yet!
|
||||
public static String CHATFORMAT = "<white><light_purple><prefixall></light_purple> <gray><sender>: </gray><message>"; // @teri help with the default formatting?
|
||||
public static String CHATFORMAT = "<white><light_purple><prefixall> <gray><sender>: <message>";
|
||||
private static void Chat() {
|
||||
CHATFORMAT = getString("chat.format", CHATFORMAT);
|
||||
}
|
||||
|
||||
@@ -45,8 +45,6 @@ public class DatabaseConnection {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ALogger.info("jdbc:mysql://" + Config.IP + ":" + Config.PORT + "/" + Config.DATABASE + "?autoReconnect=true"+
|
||||
"&useSSL=false");
|
||||
connection = DriverManager.getConnection(
|
||||
"jdbc:mysql://" + Config.IP + ":" + Config.PORT + "/" + Config.DATABASE + "?autoReconnect=true"+
|
||||
"&useSSL=false",
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.alttd.chat.objects;
|
||||
|
||||
import com.alttd.chat.database.Queries;
|
||||
import com.alttd.chat.util.Utility;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.UUID;
|
||||
@@ -10,10 +11,11 @@ public class ChatUser {
|
||||
private final UUID uuid; // player uuid
|
||||
private final int partyId; // the party they are in
|
||||
private boolean toggledPartyChat; // should chat messages instantly go to party chat when added, idk if this should be saved
|
||||
private String displayName; // the nickname, doesn't need to be saved with the chatuser object, could be saved but we can get it from the nicknamesview
|
||||
private String prefix; // doesn't need saving, we get this from luckperms
|
||||
private String staffPrefix; // doesn't need saving, we get this from luckperms
|
||||
private String prefixAll; // doesn't need saving, we get this from luckperms
|
||||
private String name; // the nickname, doesn't need to be saved with the chatuser object, could be saved but we can get it from the nicknamesview
|
||||
private Component displayName; // the nickname, doesn't need to be saved with the chatuser object, could be saved but we can get it from the nicknamesview
|
||||
private Component prefix; // doesn't need saving, we get this from luckperms
|
||||
private Component staffPrefix; // doesn't need saving, we get this from luckperms
|
||||
private Component prefixAll; // doesn't need saving, we get this from luckperms
|
||||
private boolean toggleGc; // should be saved, this toggles if the player can see and use global chat
|
||||
private String replyTarget; // reply target for use in /msg i don't mind setting this to null on login, feedback?
|
||||
private long gcCooldown; // the time when they last used gc, is used for the cooldown, i wouldn't save this, but setting this to the login time means they can't use gc for 30 seconds after logging in
|
||||
@@ -27,10 +29,11 @@ public class ChatUser {
|
||||
this.partyId = partyId;
|
||||
this.toggledPartyChat = toggledChat;
|
||||
|
||||
displayName = Queries.getNickname(uuid); // todo fix sql
|
||||
if (displayName == null) {
|
||||
displayName = Utility.getDisplayName(uuid);
|
||||
name = Queries.getNickname(uuid);
|
||||
if (name == null) {
|
||||
name = Utility.getDisplayName(uuid);
|
||||
}
|
||||
setDisplayName(name);
|
||||
|
||||
prefix = Utility.getPrefix(uuid, true);
|
||||
staffPrefix = Utility.getStaffPrefix(uuid);
|
||||
@@ -62,38 +65,26 @@ public class ChatUser {
|
||||
Queries.setPartyChatState(toggledPartyChat, uuid); //TODO: Async pls - no CompleteableFuture<>!
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
public Component getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public void setDisplayName(String displayName) {
|
||||
this.displayName = displayName;
|
||||
this.displayName = Utility.applyColor(displayName);
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
public Component getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public String getStaffPrefix() {
|
||||
public Component getStaffPrefix() {
|
||||
return staffPrefix;
|
||||
}
|
||||
|
||||
public void setStaffPrefix(String staffPrefix) {
|
||||
this.staffPrefix = staffPrefix;
|
||||
}
|
||||
|
||||
public String getPrefixAll() {
|
||||
public Component getPrefixAll() {
|
||||
return prefixAll;
|
||||
}
|
||||
|
||||
public void setPrefixAll(String prefixAll) {
|
||||
this.prefixAll = prefixAll;
|
||||
}
|
||||
|
||||
public void toggleGc() {
|
||||
toggleGc = !toggleGc;
|
||||
}
|
||||
|
||||
@@ -2,21 +2,25 @@ package com.alttd.chat.util;
|
||||
|
||||
import com.alttd.chat.ChatAPI;
|
||||
import com.alttd.chat.config.Config;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.model.group.Group;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Utility {
|
||||
|
||||
public static String stringRegen = "\\{#[A-Fa-f0-9]{6}(<)?(>)?}";
|
||||
public static HashMap<String, String> colors;
|
||||
static { // this might be in minimessage already?
|
||||
colors = new HashMap<>(); // todo map all colors to minimessage
|
||||
colors = new HashMap<>();
|
||||
colors.put("&0", "<black>"); // and confirm these are correct
|
||||
colors.put("&1", "<dark_blue>"); // could also add some default hex colors here?
|
||||
colors.put("&2", "<dark_green>");
|
||||
@@ -33,7 +37,6 @@ public class Utility {
|
||||
colors.put("&d", "<light_purple>");
|
||||
colors.put("&e", "<yellow>");
|
||||
colors.put("&f", "<white>");
|
||||
colors.put("&g", "<minecoin_gold>"); // is this a thing?
|
||||
}
|
||||
|
||||
public static String parseColors(String message) {
|
||||
@@ -47,45 +50,123 @@ public class Utility {
|
||||
return message;
|
||||
}
|
||||
|
||||
public static String getPrefix(UUID uuid, boolean highest) {
|
||||
public static Component getPrefix(UUID uuid, boolean single) {
|
||||
StringBuilder prefix = new StringBuilder();
|
||||
LuckPerms luckPerms = ChatAPI.get().getLuckPerms();
|
||||
User user = luckPerms.getUserManager().getUser(uuid);
|
||||
if(user == null) return "";
|
||||
if(!highest) {
|
||||
Collection<Group> inheritedGroups = user.getInheritedGroups(user.getQueryOptions());
|
||||
inheritedGroups.stream()
|
||||
.sorted(Comparator.comparingInt(o -> o.getWeight().orElse(0)))
|
||||
.forEach(group -> {
|
||||
if (Config.PREFIXGROUPS.contains(group.getName())) {
|
||||
prefix.append("<white>[").append(group.getCachedData().getMetaData().getPrefix()).append("]</white>");
|
||||
}
|
||||
});
|
||||
if(user == null) return Component.empty();
|
||||
if(single) {
|
||||
Group group = luckPerms.getGroupManager().getGroup(user.getPrimaryGroup());
|
||||
if(group != null)
|
||||
prefix.append(group.getCachedData().getMetaData().getPrefix());
|
||||
// Collection<Group> inheritedGroups = user.getInheritedGroups(user.getQueryOptions());
|
||||
// inheritedGroups.stream()
|
||||
// .sorted(Comparator.comparingInt(o -> o.getWeight().orElse(0)))
|
||||
// .distinct()
|
||||
// .forEach(group -> {
|
||||
// if (Config.PREFIXGROUPS.contains(group.getName())) {
|
||||
// prefix.append("[").append(group.getCachedData().getMetaData().getPrefix()).append("]");
|
||||
// }
|
||||
// });
|
||||
} else {
|
||||
prefix.append(user.getCachedData().getMetaData().getPrefix());
|
||||
}
|
||||
LegacyComponentSerializer.builder().character('&').hexColors();
|
||||
prefix.append("<white>[").append(user.getCachedData().getMetaData().getPrefix()).append("]</white>");
|
||||
|
||||
return prefix.toString();
|
||||
return LegacyComponentSerializer.builder().character('&').hexColors().build().deserialize(prefix.toString());
|
||||
}
|
||||
|
||||
// @teri you don't reference the plugin instance from the API instance, this creates a circular reference and breaks on compile and will never run
|
||||
public static String getStaffPrefix(UUID uuid) {
|
||||
public static Component getStaffPrefix(UUID uuid) {
|
||||
StringBuilder prefix = new StringBuilder();
|
||||
LuckPerms luckPerms = ChatAPI.get().getLuckPerms();
|
||||
User user = luckPerms.getUserManager().getUser(uuid);
|
||||
if(user == null) return prefix.toString();
|
||||
if(user == null) return Component.empty();
|
||||
if(user.getCachedData().getPermissionData().checkPermission("group." + Config.MINIMIUMSTAFFRANK).asBoolean()) {
|
||||
prefix.append("<white>[").append(user.getCachedData().getMetaData().getPrefix()).append("]</white>");
|
||||
Group group = luckPerms.getGroupManager().getGroup(user.getPrimaryGroup());
|
||||
if(group != null)
|
||||
prefix.append(group.getCachedData().getMetaData().getPrefix());
|
||||
}
|
||||
return prefix.toString();
|
||||
return LegacyComponentSerializer.builder().character('&').hexColors().build().deserialize(prefix.toString());
|
||||
}
|
||||
|
||||
public static String getDisplayName(UUID uuid) {
|
||||
StringBuilder prefix = new StringBuilder();
|
||||
LuckPerms luckPerms = ChatAPI.get().getLuckPerms();
|
||||
User user = luckPerms.getUserManager().getUser(uuid);
|
||||
if(user == null) return "";
|
||||
return user.getUsername();
|
||||
}
|
||||
|
||||
public static Component applyColor(String message) {
|
||||
String hexColor1 = "";
|
||||
String hexColor2 = "";
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
message = parseColors(message);
|
||||
boolean startsWithColor = false;
|
||||
boolean lastColorMatters = false;
|
||||
|
||||
if (message.matches(".*" + stringRegen + ".*")) {
|
||||
String[] split = message.split(stringRegen);
|
||||
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
int nextIndex = 0;
|
||||
if (message.indexOf("}") <= 11) {
|
||||
startsWithColor = true;
|
||||
list.add(message.substring(0, message.indexOf("}") + 1));
|
||||
}
|
||||
for (String s : split) {
|
||||
nextIndex += s.length();
|
||||
int tmp = message.indexOf("}", nextIndex);
|
||||
if (tmp < message.length() && tmp>=0) {
|
||||
list.add(message.substring(nextIndex, tmp + 1));
|
||||
nextIndex = tmp + 1;
|
||||
}
|
||||
}
|
||||
|
||||
int i;
|
||||
boolean firstLoop = true;
|
||||
if (startsWithColor) {
|
||||
i = -1;
|
||||
} else {
|
||||
i = 0;
|
||||
stringBuilder.append(split[i]);
|
||||
}
|
||||
|
||||
for (String s : list) {
|
||||
boolean lesser = s.contains("<");
|
||||
boolean bigger = s.contains(">");
|
||||
|
||||
if (bigger && lesser) {
|
||||
hexColor2 = s.substring(1, s.length() - 3);
|
||||
} else if (bigger || lesser) {
|
||||
hexColor2 = s.substring(1, s.length() - 2);
|
||||
} else {
|
||||
hexColor2 = s.substring(1, s.length() -1);
|
||||
}
|
||||
|
||||
if (firstLoop) {
|
||||
lastColorMatters = bigger;
|
||||
hexColor1 = hexColor2;
|
||||
firstLoop = false;
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (lesser && lastColorMatters) {
|
||||
stringBuilder.append("<gradient:").append(hexColor1).append(":").append(hexColor2).append(">").append(split[i]).append("</gradient>");
|
||||
} else {
|
||||
stringBuilder.append("<").append(hexColor1).append(">").append(split[i]);
|
||||
}
|
||||
|
||||
hexColor1 = hexColor2;
|
||||
lastColorMatters = bigger;
|
||||
i++;
|
||||
}
|
||||
if (split.length > i){
|
||||
stringBuilder.append("<").append(hexColor1).append(">").append(split[i]);
|
||||
}
|
||||
}
|
||||
MiniMessage miniMessage = MiniMessage.get();
|
||||
return stringBuilder.length()==0 ? miniMessage.parse(message)
|
||||
: miniMessage.parse(stringBuilder.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user