Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
8c2ee03
Added fix for when invalid regex is provided in realname/username
OllieMartin Mar 13, 2019
5bdf126
Fixed a bug that prevented freezechat from working
OllieMartin Mar 21, 2019
305f4ee
Fixed a bug with path separators on unix systems (also 1.7.2)
OllieMartin Mar 21, 2019
ba5920a
Added a couple more debug messages
OllieMartin Mar 21, 2019
5709170
Implemented checks for nickname duplication and impersonation
OllieMartin Mar 26, 2019
16f0272
Fixed issue with players being able to use same nick in dif. colours
OllieMartin Mar 26, 2019
c519c4b
Added QOL checks if it is YOUR duplicated nickname or real name
OllieMartin Mar 26, 2019
0c2d648
Revoked duplicate ignore perm from nicknames as this is just bad
OllieMartin Mar 26, 2019
efae74c
Updated config files to contain new nickname options
OllieMartin Apr 2, 2019
5df6512
MultiChatSpigot now reads the nickname stuff from config
OllieMartin Apr 2, 2019
d5c730e
First attempt to read values on sponge
OllieMartin Apr 2, 2019
c6f261f
Added a debug message for the read nicknames.
OllieMartin Apr 2, 2019
5777e8c
Removed sponge debug message as blacklist does load correctly!
OllieMartin Apr 2, 2019
a08ca44
Potentially added the nickname prefix character on spigot
OllieMartin Apr 2, 2019
fcec708
Fixed a bug where spigot tried to refer to sponge class
OllieMartin Apr 2, 2019
b473484
Fixed the nickname prefix showing in /realname
OllieMartin Apr 2, 2019
b0516fa
Implemented nickname prefix char on sponge
OllieMartin Apr 2, 2019
897aa72
Fixed bug that made nickname prefix appear before real names on sponge
OllieMartin Apr 2, 2019
5aafc23
Attempt to implement blacklist on spigot AND sponge
OllieMartin Apr 2, 2019
a230f32
Updated default configs for spigot and sponge
OllieMartin Apr 2, 2019
af47c3c
Added barebones link replacement in chat
OllieMartin Apr 2, 2019
2ec6598
Added link setting to chatcontrol config
OllieMartin Apr 2, 2019
d1435f8
Plugin should now read and use the chat control config info for links
OllieMartin Apr 2, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion multichat/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>xyz.olivermartin.multichat</groupId>
<artifactId>multichat</artifactId>
<version>1.7.1</version>
<version>1.7.2</version>

<repositories>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ public static void onPluginMessage(PluginMessageEvent ev) {
}

if (ev.getTag().equals("multichat:chat")) {

DebugManager.log("{multichat:chat} Got a plugin message");

ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData());
Expand All @@ -212,14 +212,19 @@ public static void onPluginMessage(PluginMessageEvent ev) {
DebugManager.log("{multichat:chat} Message = " + message);
String format = in.readUTF();

DebugManager.log("{multichat:chat} Format (before removal of double chars) = " + format);

format = format.replace("%%","%");

DebugManager.log("{multichat:chat} Format = " + format);

ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);

if (player == null) return;

if (player == null) {
DebugManager.log("{multichat:chat} Could not get player! Abandoning chat message...");
return;
}

DebugManager.log("{multichat:chat} Got player successfully! Name = " + player.getName());

synchronized (player) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ public class ChatControl {
private static Set<UUID> mutedPlayers;
private static Map<UUID, Set<UUID>> ignoreMap;
private static Map<UUID, PlayerSpamInfo> spamMap;

public static boolean controlLinks = false;
public static String linkMessage = "[LINK REMOVED]";

public static Set<UUID> getMutedPlayers() {
return mutedPlayers;
Expand Down Expand Up @@ -280,6 +283,11 @@ public static void reload() {
}

}

public static String replaceLinks(String message) {
if (!controlLinks) return message;
return message.replaceAll("((https|http):\\/\\/)?(www\\.)?([-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.)+[a-zA-Z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)", linkMessage);
}

public static void spamPardonPlayer(UUID uuid) {
spamMap.remove(uuid);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,11 @@ public void onChat(ChatEvent event) {
event.setCancelled(true);
return;
}

if (!player.hasPermission("multichat.chat.link")) {
message = ChatControl.replaceLinks(message);
event.setMessage(message);
}

// Let server know players channel preference
BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")));
Expand All @@ -362,6 +367,7 @@ public void onChat(ChatEvent event) {

} else {
MessageManager.sendMessage(player, "freezechat_frozen");
event.setCancelled(true);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,12 @@
*/
public class MultiChat extends Plugin implements Listener {

public static final String LATEST_VERSION = "1.7.1";
public static final String LATEST_VERSION = "1.7.2";

public static final String[] ALLOWED_VERSIONS = new String[] {

LATEST_VERSION,
"1.7.1",
"1.7",
"1.6.2",
"1.6.1",
Expand Down Expand Up @@ -234,8 +235,8 @@ public void onEnable() {
System.out.println("[MultiChat] Creating plugin directory!");
getDataFolder().mkdirs();
}
String translationsDir = configDir.toString() + "\\translations";

String translationsDir = configDir.toString() + File.separator + "translations";
if (!new File(translationsDir).exists()) {
System.out.println("[MultiChat] Creating translations directory!");
new File(translationsDir).mkdirs();
Expand Down Expand Up @@ -292,6 +293,12 @@ public void onEnable() {
// Run start-up routines
Startup();
UUIDNameManager.Startup();

// Set up chat control stuff
if (chatcontrolYML.contains("link_control")) {
ChatControl.controlLinks = chatcontrolYML.getBoolean("link_control");
ChatControl.linkMessage = chatcontrolYML.getString("link_removal_message");
}

// Set default channel
defaultChannel = configYML.getString("default_channel");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,12 @@ public void execute(CommandSender sender, String[] args) {
ChatControl.reload();

System.out.println("VERSION LOADED: " + MultiChat.configversion);

// Set up chat control stuff
if (ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().contains("link_control")) {
ChatControl.controlLinks = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getBoolean("link_control");
ChatControl.linkMessage = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getString("link_removal_message");
}

// Set default channel
MultiChat.defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
Expand Down Expand Up @@ -80,6 +82,10 @@ public static boolean hookedPAPI() {
public static String localChatFormat = "&7&lLOCAL &f> &f%DISPLAYNAME%&f: ";
public static boolean setLocalFormat = false;
public static boolean forceMultiChatFormat = false;

public static boolean showNicknamePrefix = false;
public static String nicknamePrefix = "~";
public static List<String> nicknameBlacklist = new ArrayList<String>();

@SuppressWarnings("unchecked")
public void onEnable() {
Expand Down Expand Up @@ -114,6 +120,12 @@ public void onEnable() {
}

}

if (config.contains("show_nickname_prefix")) {
showNicknamePrefix = config.getBoolean("show_nickname_prefix");
nicknamePrefix = config.getString("nickname_prefix");
nicknameBlacklist = config.getStringList("nickname_blacklist");
}

File f = new File(configDir, nameDataFile);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -72,18 +73,33 @@ private void setDefaultData() {
mapNameFormatted = new HashMap<String,String>();

}

/**
* Returns the FORMATTED NICKNAME of a player if they have one set, otherwise returns their username
*
* @param uuid The Unique ID of the player to lookup
* @return The NICKNAME of the player if it is set, otherwise their username
*/
public String getCurrentName(UUID uuid) {
return getCurrentName(uuid, true);
}

/**
* Returns the FORMATTED NICKNAME of a player if they have one set, otherwise returns their username
*
* @param uuid The Unique ID of the player to lookup
* @param withPrefix Should the nickname prefix also be returned if it is set?
* @return The NICKNAME of the player if it is set, otherwise their username
*/
public String getCurrentName(UUID uuid, boolean withPrefix) {

synchronized (mapUUIDNick) {
if (mapUUIDNick.containsKey(uuid)) {
return mapNickFormatted.get(mapUUIDNick.get(uuid));
if (MultiChatSpigot.showNicknamePrefix && withPrefix) {
return MultiChatSpigot.nicknamePrefix + mapNickFormatted.get(mapUUIDNick.get(uuid));
} else {
return mapNickFormatted.get(mapUUIDNick.get(uuid));
}
}
}

Expand Down Expand Up @@ -211,7 +227,7 @@ public Optional<String> getCurrentNameFromName(String username) {
return Optional.of(getCurrentName(uuid));

}

/**
* Gets a player's formatted name from their username
*
Expand Down Expand Up @@ -409,20 +425,26 @@ public Optional<Set<UUID>> getPartialNicknameMatches(String nickname) {

if (!uuidSet.isEmpty()) return Optional.of(uuidSet);

for (String nick : nickSet) {
try {
for (String nick : nickSet) {

if (nick.matches(nickname)) {
uuidSet.add(mapNickUUID.get(nick));
}
if (nick.matches(nickname)) {
uuidSet.add(mapNickUUID.get(nick));
}

}
} catch (PatternSyntaxException e) {
/*
* Its not a valid regex, so we will just say there are no matches!
*/
}

if (!uuidSet.isEmpty()) return Optional.of(uuidSet);

return Optional.empty();

}

/**
* Return the UUIDs of players who have names containing characters provided in the name argument
* @param name The characters of the name to check
Expand Down Expand Up @@ -454,12 +476,18 @@ public Optional<Set<UUID>> getPartialNameMatches(String name) {

if (!uuidSet.isEmpty()) return Optional.of(uuidSet);

for (String n : nameSet) {
try {
for (String n : nameSet) {

if (n.matches(name)) {
uuidSet.add(mapNameUUID.get(n));
}
if (n.matches(name)) {
uuidSet.add(mapNameUUID.get(n));
}

}
} catch (PatternSyntaxException e) {
/*
* Its not a valid regex, so we will just say there are no matches!
*/
}

if (!uuidSet.isEmpty()) return Optional.of(uuidSet);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label,

}

if (config.contains("show_nickname_prefix")) {
MultiChatSpigot.showNicknamePrefix = config.getBoolean("show_nickname_prefix");
MultiChatSpigot.nicknamePrefix = config.getString("nickname_prefix");
MultiChatSpigot.nicknameBlacklist = config.getStringList("nickname_blacklist");
}

commandSender.sendMessage(ChatColor.GREEN + "The plugin has been reloaded!");

return true;
Expand Down Expand Up @@ -138,6 +144,35 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label,

}

String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID));
String targetName = NameManager.getInstance().getName(targetUUID);

if (NameManager.getInstance().existsNickname(args[0]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!");
return true;

}

if (NameManager.getInstance().existsPlayer(args[0]) && !targetName.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.impersonate")) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!");
return true;

}

boolean blacklisted = false;
for (String bl : MultiChatSpigot.nicknameBlacklist) {
if (NameManager.getInstance().stripAllFormattingCodes(args[0]).matches(bl)) blacklisted = true;
}

if (blacklisted) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, this name is not allowed!");
return true;

}

NameManager.getInstance().setNickname(targetUUID, args[0]);
MetaManager.getInstance().updatePlayerMeta(sender.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal);

Expand Down Expand Up @@ -193,6 +228,35 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label,

}

String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID));
String targetName = NameManager.getInstance().getName(targetUUID);

if (NameManager.getInstance().existsNickname(args[1]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!");
return true;

}

if (NameManager.getInstance().existsPlayer(args[1]) && !targetName.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.impersonate")) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!");
return true;

}

boolean blacklisted = false;
for (String bl : MultiChatSpigot.nicknameBlacklist) {
if (NameManager.getInstance().stripAllFormattingCodes(args[1]).matches(bl)) blacklisted = true;
}

if (blacklisted) {

sender.sendMessage(ChatColor.DARK_RED + "Sorry, this name is not allowed!");
return true;

}

NameManager.getInstance().setNickname(targetUUID, args[1]);
MetaManager.getInstance().updatePlayerMeta(target.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal);

Expand Down Expand Up @@ -247,7 +311,7 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label,
for (UUID uuid : matches.get()) {

if (limit > 0 || sender.hasPermission("multichatspigot.realname.nolimit")) {
sender.sendMessage(ChatColor.GREEN + "Nickname: '" + NameManager.getInstance().getCurrentName(uuid) + "' Belongs to player: '" + NameManager.getInstance().getName(uuid) + "'");
sender.sendMessage(ChatColor.GREEN + "Nickname: '" + NameManager.getInstance().getCurrentName(uuid, false) + "' Belongs to player: '" + NameManager.getInstance().getName(uuid) + "'");
limit--;
} else {
sender.sendMessage(ChatColor.DARK_GREEN + "Only the first 10 results have been shown, please try a more specific query!");
Expand Down
Loading