Segmented ChatProcessing and added test!
This commit is contained in:
parent
441e9a4eaf
commit
758332faf6
2 changed files with 299 additions and 235 deletions
|
@ -45,6 +45,7 @@ public class ChatProcessing {
|
||||||
private static boolean pingedconsole = false;
|
private static boolean pingedconsole = false;
|
||||||
|
|
||||||
private static ArrayList<ChatFormatter> commonFormatters = new ArrayList<>();
|
private static ArrayList<ChatFormatter> commonFormatters = new ArrayList<>();
|
||||||
|
private static Gson gson;
|
||||||
|
|
||||||
public static final ChatFormatter ESCAPE_FORMATTER = new ChatFormatterBuilder().setRegex(ESCAPE_PATTERN).build();
|
public static final ChatFormatter ESCAPE_FORMATTER = new ChatFormatterBuilder().setRegex(ESCAPE_PATTERN).build();
|
||||||
|
|
||||||
|
@ -75,6 +76,11 @@ public class ChatProcessing {
|
||||||
commonFormatters.add(new ChatFormatterBuilder().setRegex(HASHTAG_PATTERN).setColor(Color.Blue)
|
commonFormatters.add(new ChatFormatterBuilder().setRegex(HASHTAG_PATTERN).setColor(Color.Blue)
|
||||||
.setOpenlink("https://twitter.com/hashtag/$1").setPriority(Priority.High).build());
|
.setOpenlink("https://twitter.com/hashtag/$1").setPriority(Priority.High).build());
|
||||||
commonFormatters.add(new ChatFormatterBuilder().setRegex(CYAN_PATTERN).setColor(Color.Aqua).build()); // #55
|
commonFormatters.add(new ChatFormatterBuilder().setRegex(CYAN_PATTERN).setColor(Color.Aqua).build()); // #55
|
||||||
|
gson = new GsonBuilder()
|
||||||
|
.registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum())
|
||||||
|
.registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection())
|
||||||
|
.registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool())
|
||||||
|
.registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns e.setCancelled for custom event
|
// Returns e.setCancelled for custom event
|
||||||
|
@ -87,32 +93,13 @@ public class ChatProcessing {
|
||||||
if (player != null && PluginMain.essentials.getUser(player).isMuted())
|
if (player != null && PluginMain.essentials.getUser(player).isMuted())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (PlayerListener.ActiveF && !PlayerListener.Fs.contains(sender) && message.equalsIgnoreCase("F"))
|
doFunStuff(sender, message);
|
||||||
PlayerListener.Fs.add(sender);
|
|
||||||
|
|
||||||
ChatPlayer mp = null;
|
ChatPlayer mp = null;
|
||||||
if (player != null)
|
if (player != null)
|
||||||
mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class);
|
mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class);
|
||||||
|
|
||||||
String msg = message.toLowerCase();
|
Color colormode = channel.color;
|
||||||
if (msg.contains("lol")) {
|
|
||||||
UnlolCommand.Lastlolornot = true;
|
|
||||||
UnlolCommand.Lastlol = sender;
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < PlayerListener.LaughStrings.length; i++) {
|
|
||||||
if (msg.contains(PlayerListener.LaughStrings[i])) {
|
|
||||||
UnlolCommand.Lastlol = sender;
|
|
||||||
UnlolCommand.Lastlolornot = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Channel currentchannel = channel;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
ArrayList<ChatFormatter> formatters = (ArrayList<ChatFormatter>) commonFormatters.clone();
|
|
||||||
|
|
||||||
Color colormode = currentchannel.color;
|
|
||||||
if (mp != null && mp.OtherColorMode != null)
|
if (mp != null && mp.OtherColorMode != null)
|
||||||
colormode = mp.OtherColorMode;
|
colormode = mp.OtherColorMode;
|
||||||
if (mp != null && mp.RainbowPresserColorMode)
|
if (mp != null && mp.RainbowPresserColorMode)
|
||||||
|
@ -121,39 +108,246 @@ public class ChatProcessing {
|
||||||
colormode = Color.Green;
|
colormode = Color.Green;
|
||||||
// If greentext, ignore channel or player colors
|
// If greentext, ignore channel or player colors
|
||||||
|
|
||||||
|
ArrayList<ChatFormatter> formatters = addFormatters(colormode);
|
||||||
|
pingedconsole = false; // Will set it to true onmatch (static constructor)
|
||||||
|
final String channelidentifier = getChannelID(channel, sender, mp);
|
||||||
|
|
||||||
|
TellrawPart json = createTellraw(sender, message, player, mp, channelidentifier);
|
||||||
|
long combinetime = System.nanoTime();
|
||||||
|
ChatFormatter.Combine(formatters, message, json);
|
||||||
|
combinetime = System.nanoTime() - combinetime;
|
||||||
|
String jsonstr = toJson(json);
|
||||||
|
if (jsonstr.length() >= 32767) {
|
||||||
|
sender.sendMessage(
|
||||||
|
"§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
DebugCommand.SendDebugMessage(jsonstr);
|
||||||
|
if (channel.equals(Channel.TownChat) || channel.equals(Channel.NationChat)) {
|
||||||
|
if (player == null) {
|
||||||
|
sender.sendMessage("§cYou are not a player!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
try {
|
||||||
|
Resident resident = PluginMain.Instance.TU.getResidentMap().get(p.getName().toLowerCase());
|
||||||
|
if (resident != null && !resident.getName().equals(player.getName())
|
||||||
|
&& resident.getModes().contains("spy"))
|
||||||
|
Bukkit.getPlayer(resident.getName()).sendMessage(String.format("[SPY-%s] - %s: %s",
|
||||||
|
channel.DisplayName, player.getDisplayName(), message));
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (channel.equals(Channel.TownChat)) {
|
||||||
|
Town town = null;
|
||||||
|
try {
|
||||||
|
final Resident resident = PluginMain.Instance.TU.getResidentMap()
|
||||||
|
.get(player.getName().toLowerCase());
|
||||||
|
if (resident != null && resident.hasTown())
|
||||||
|
town = resident.getTown();
|
||||||
|
} catch (NotRegisteredException e) {
|
||||||
|
}
|
||||||
|
if (town == null) {
|
||||||
|
player.sendMessage("§cYou aren't in a town or an error occured.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int index = PluginMain.Instance.Towns.indexOf(town);
|
||||||
|
if (index < 0) {
|
||||||
|
PluginMain.Instance.Towns.add(town);
|
||||||
|
index = PluginMain.Instance.Towns.size() - 1;
|
||||||
|
}
|
||||||
|
Objective obj = PluginMain.SB.getObjective("town");
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
try {
|
||||||
|
if (town.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName())))
|
||||||
|
obj.getScore(p.getName()).setScore(index);
|
||||||
|
else
|
||||||
|
obj.getScore(p.getName()).setScore(-1);
|
||||||
|
} catch (Exception e) {
|
||||||
|
obj.getScore(p.getName()).setScore(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
||||||
|
String.format("tellraw @a[score_town=%d,score_town_min=%d] %s", index, index, jsonstr));
|
||||||
|
} else if (channel.equals(Channel.NationChat)) {
|
||||||
|
Town town = null;
|
||||||
|
try {
|
||||||
|
final Resident resident = PluginMain.Instance.TU.getResidentMap()
|
||||||
|
.get(player.getName().toLowerCase());
|
||||||
|
if (resident != null && resident.hasTown())
|
||||||
|
town = resident.getTown();
|
||||||
|
} catch (NotRegisteredException e) {
|
||||||
|
}
|
||||||
|
if (town == null) {
|
||||||
|
player.sendMessage("§cYou aren't in a town or an error occured.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Nation nation = null;
|
||||||
|
try {
|
||||||
|
nation = town.getNation();
|
||||||
|
} catch (NotRegisteredException e) {
|
||||||
|
}
|
||||||
|
if (nation == null) {
|
||||||
|
player.sendMessage("§cYour town isn't in a nation or an error occured.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int index = PluginMain.Instance.Nations.indexOf(nation);
|
||||||
|
if (index < 0) {
|
||||||
|
PluginMain.Instance.Nations.add(nation);
|
||||||
|
index = PluginMain.Instance.Nations.size() - 1;
|
||||||
|
}
|
||||||
|
Objective obj = PluginMain.SB.getObjective("nation");
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
try {
|
||||||
|
if (nation.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName())))
|
||||||
|
obj.getScore(p.getName()).setScore(index);
|
||||||
|
else
|
||||||
|
obj.getScore(p.getName()).setScore(-1);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
||||||
|
String.format("tellraw @a[score_nation=%d,score_nation_min=%d] %s", index, index, jsonstr));
|
||||||
|
} else if (channel.equals(Channel.AdminChat)) {
|
||||||
|
if (player != null && !player.isOp()) {
|
||||||
|
player.sendMessage("§cYou need to be an OP to use this channel.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Objective obj = PluginMain.SB.getObjective("admin");
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (p.isOp())
|
||||||
|
obj.getScore(p.getName()).setScore(1);
|
||||||
|
else
|
||||||
|
obj.getScore(p.getName()).setScore(0);
|
||||||
|
}
|
||||||
|
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
||||||
|
String.format("tellraw @a[score_admin=%d,score_admin_min=%d] %s", 1, 1, jsonstr));
|
||||||
|
} else if (channel.equals(Channel.ModChat)) {
|
||||||
|
if (player != null && !PluginMain.permission.playerInGroup(player, "mod")) {
|
||||||
|
player.sendMessage("§cYou need to be a mod to use this channel.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Objective obj = PluginMain.SB.getObjective("mod");
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (PluginMain.permission.playerInGroup(p, "mod"))
|
||||||
|
obj.getScore(p.getName()).setScore(1);
|
||||||
|
else
|
||||||
|
obj.getScore(p.getName()).setScore(0);
|
||||||
|
}
|
||||||
|
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
||||||
|
String.format("tellraw @a[score_mod=%d,score_mod_min=%d] %s", 1, 1, jsonstr));
|
||||||
|
} else
|
||||||
|
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
||||||
|
String.format("tellraw @a %s", jsonstr));
|
||||||
|
} catch (Exception e) {
|
||||||
|
TBMCCoreAPI.SendException("An error occured while sending a chat message!", e);
|
||||||
|
player.sendMessage("§cAn error occured while sending the message.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PluginMain.Instance.getServer().getConsoleSender().sendMessage(String.format("%s <%s> %s", channelidentifier,
|
||||||
|
(player != null ? player.getDisplayName() : sender.getName()), message));
|
||||||
|
DebugCommand.SendDebugMessage(
|
||||||
|
"-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms");
|
||||||
|
DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String toJson(TellrawPart json) {
|
||||||
|
String jsonstr = gson.toJson(json);
|
||||||
|
return jsonstr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static TellrawPart createTellraw(CommandSender sender, String message, Player player, ChatPlayer mp,
|
||||||
|
final String channelidentifier) {
|
||||||
|
TellrawPart json = new TellrawPart("");
|
||||||
|
if (mp != null && mp.ChatOnly) {
|
||||||
|
json.addExtra(new TellrawPart("[C]").setHoverEvent(
|
||||||
|
TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, "Chat only")));
|
||||||
|
}
|
||||||
|
json.addExtra(
|
||||||
|
new TellrawPart(channelidentifier)
|
||||||
|
.setHoverEvent(
|
||||||
|
TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT,
|
||||||
|
new TellrawPart((sender instanceof IDiscordSender ? "From Discord\n" : "")
|
||||||
|
+ "Copy message").setColor(Color.Blue)))
|
||||||
|
.setClickEvent(TellrawEvent.create(TellrawEvent.ClickAC,
|
||||||
|
TellrawEvent.ClickAction.SUGGEST_COMMAND, message)));
|
||||||
|
json.addExtra(new TellrawPart(" <"));
|
||||||
|
json.addExtra(
|
||||||
|
new TellrawPart(
|
||||||
|
(player != null ? player.getDisplayName() : sender.getName()))
|
||||||
|
.setHoverEvent(
|
||||||
|
TellrawEvent
|
||||||
|
.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT,
|
||||||
|
new TellrawPart("")
|
||||||
|
.addExtra(new TellrawPart(String.format("Flair: %s",
|
||||||
|
(mp != null ? mp.GetFormattedFlair() : "-"))))
|
||||||
|
.addExtra(new TellrawPart(
|
||||||
|
String.format("\nPlayername: %s\n",
|
||||||
|
(player != null ? player.getName()
|
||||||
|
: sender.getName())))
|
||||||
|
.setColor(Color.Aqua))
|
||||||
|
.addExtra(new TellrawPart(String.format("World: %s\n",
|
||||||
|
(player != null ? player.getWorld().getName()
|
||||||
|
: "-"))))
|
||||||
|
.addExtra(new TellrawPart(String.format(
|
||||||
|
"Respect: %s%s%s",
|
||||||
|
(mp != null ? (mp.FCount().getOrDefault(0)
|
||||||
|
/ (double) mp.FDeaths().getOrDefault(0))
|
||||||
|
: "Infinite"),
|
||||||
|
(mp != null && mp.UserName().get() != null
|
||||||
|
&& !mp.UserName().get().isEmpty()
|
||||||
|
? "\nUserName: "
|
||||||
|
+ mp.UserName().get()
|
||||||
|
: ""),
|
||||||
|
(mp != null && mp.PlayerName().get()
|
||||||
|
.equals("\nAlpha_Bacca44")
|
||||||
|
? "\nDeaths: "
|
||||||
|
+ PlayerListener.AlphaDeaths
|
||||||
|
: ""))))
|
||||||
|
.addExtra(new TellrawPart("\nFor more, do /u info "
|
||||||
|
+ sender.getName())))));
|
||||||
|
json.addExtra(new TellrawPart("> "));
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String getChannelID(Channel channel, CommandSender sender, ChatPlayer mp) {
|
||||||
|
final String channelidentifier = ("[" + (sender instanceof IDiscordSender ? "d|" : "") + channel.DisplayName)
|
||||||
|
+ "]" + (mp != null && !mp.RPMode ? "[OOC]" : "");
|
||||||
|
return channelidentifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ArrayList<ChatFormatter> addFormatters(Color colormode) {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
ArrayList<ChatFormatter> formatters = (ArrayList<ChatFormatter>) commonFormatters.clone();
|
||||||
|
|
||||||
formatters.add(new ChatFormatterBuilder().setRegex(ENTIRE_MESSAGE_PATTERN).setColor(colormode)
|
formatters.add(new ChatFormatterBuilder().setRegex(ENTIRE_MESSAGE_PATTERN).setColor(colormode)
|
||||||
.setPriority(Priority.Low).build());
|
.setPriority(Priority.Low).build());
|
||||||
|
|
||||||
String formattedmessage = message;
|
|
||||||
|
|
||||||
String suggestmsg = formattedmessage;
|
|
||||||
|
|
||||||
if (Bukkit.getOnlinePlayers().size() > 0) {
|
if (Bukkit.getOnlinePlayers().size() > 0) {
|
||||||
StringBuilder namesb = new StringBuilder();
|
StringBuilder namesb = new StringBuilder("(?i)(");
|
||||||
namesb.append("(?i)(");
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers())
|
for (Player p : Bukkit.getOnlinePlayers())
|
||||||
namesb.append(p.getName()).append("|");
|
namesb.append(p.getName()).append("|");
|
||||||
namesb.deleteCharAt(namesb.length() - 1);
|
namesb.deleteCharAt(namesb.length() - 1);
|
||||||
namesb.append(")");
|
namesb.append(")");
|
||||||
StringBuilder nicksb = new StringBuilder();
|
StringBuilder nicksb = new StringBuilder("(?i)(");
|
||||||
nicksb.append("(?i)(");
|
|
||||||
boolean addNickFormatter = false;
|
boolean addNickFormatter = false;
|
||||||
{
|
final int size = Bukkit.getOnlinePlayers().size();
|
||||||
final int size = Bukkit.getOnlinePlayers().size();
|
int index = 0;
|
||||||
int index = 0;
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId());
|
||||||
final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId());
|
if (nick != null) {
|
||||||
if (nick != null) {
|
nicksb.append(nick);
|
||||||
nicksb.append(nick);
|
if (index < size - 1) {
|
||||||
if (index < size - 1) {
|
nicksb.append("|");
|
||||||
nicksb.append("|");
|
addNickFormatter = true;
|
||||||
addNickFormatter = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
index++;
|
|
||||||
}
|
}
|
||||||
nicksb.append(")");
|
index++;
|
||||||
}
|
}
|
||||||
|
nicksb.append(")");
|
||||||
|
|
||||||
formatters.add(new ChatFormatterBuilder().setRegex(Pattern.compile(namesb.toString())).setColor(Color.Aqua)
|
formatters.add(new ChatFormatterBuilder().setRegex(Pattern.compile(namesb.toString())).setColor(Color.Aqua)
|
||||||
.setOnmatch((String match) -> {
|
.setOnmatch((String match) -> {
|
||||||
|
@ -195,203 +389,25 @@ public class ChatProcessing {
|
||||||
return "§c" + match + "§r";
|
return "§c" + match + "§r";
|
||||||
}).setPriority(Priority.High).build());
|
}).setPriority(Priority.High).build());
|
||||||
}
|
}
|
||||||
|
return formatters;
|
||||||
|
}
|
||||||
|
|
||||||
pingedconsole = false; // Will set it to true onmatch (static constructor)
|
static void doFunStuff(CommandSender sender, String message) {
|
||||||
|
if (PlayerListener.ActiveF && !PlayerListener.Fs.contains(sender) && message.equalsIgnoreCase("F"))
|
||||||
|
PlayerListener.Fs.add(sender);
|
||||||
|
|
||||||
TellrawPart json = new TellrawPart("");
|
String msg = message.toLowerCase();
|
||||||
if (mp != null && mp.ChatOnly) {
|
if (msg.contains("lol")) {
|
||||||
json.addExtra(new TellrawPart("[C]").setHoverEvent(
|
UnlolCommand.Lastlolornot = true;
|
||||||
TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, "Chat only")));
|
UnlolCommand.Lastlol = sender;
|
||||||
}
|
} else {
|
||||||
final String channelidentifier = ("[" + (sender instanceof IDiscordSender ? "d|" : "")
|
for (int i = 0; i < PlayerListener.LaughStrings.length; i++) {
|
||||||
+ currentchannel.DisplayName) + "]" + (mp != null && !mp.RPMode ? "[OOC]" : "");
|
if (msg.contains(PlayerListener.LaughStrings[i])) {
|
||||||
json.addExtra(
|
UnlolCommand.Lastlol = sender;
|
||||||
new TellrawPart(channelidentifier)
|
UnlolCommand.Lastlolornot = false;
|
||||||
.setHoverEvent(
|
break;
|
||||||
TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT,
|
|
||||||
new TellrawPart((sender instanceof IDiscordSender ? "From Discord\n" : "")
|
|
||||||
+ "Copy message").setColor(Color.Blue)))
|
|
||||||
.setClickEvent(TellrawEvent.create(TellrawEvent.ClickAC,
|
|
||||||
TellrawEvent.ClickAction.SUGGEST_COMMAND, suggestmsg)));
|
|
||||||
json.addExtra(new TellrawPart(" <"));
|
|
||||||
json.addExtra(
|
|
||||||
new TellrawPart(
|
|
||||||
(player != null ? player.getDisplayName() : sender.getName()))
|
|
||||||
.setHoverEvent(
|
|
||||||
TellrawEvent
|
|
||||||
.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT,
|
|
||||||
new TellrawPart("")
|
|
||||||
.addExtra(new TellrawPart(String.format("Flair: %s",
|
|
||||||
(mp != null ? mp.GetFormattedFlair() : "-"))))
|
|
||||||
.addExtra(new TellrawPart(
|
|
||||||
String.format("\nPlayername: %s\n",
|
|
||||||
(player != null ? player.getName()
|
|
||||||
: sender.getName())))
|
|
||||||
.setColor(Color.Aqua))
|
|
||||||
.addExtra(new TellrawPart(String.format("World: %s\n",
|
|
||||||
(player != null ? player.getWorld().getName()
|
|
||||||
: "-"))))
|
|
||||||
.addExtra(new TellrawPart(String.format(
|
|
||||||
"Respect: %s%s%s",
|
|
||||||
(mp != null ? (mp.FCount().getOrDefault(0)
|
|
||||||
/ (double) mp.FDeaths().getOrDefault(0))
|
|
||||||
: "Infinite"),
|
|
||||||
(mp != null && mp.UserName().get() != null
|
|
||||||
&& !mp.UserName().get().isEmpty()
|
|
||||||
? "\nUserName: "
|
|
||||||
+ mp.UserName().get()
|
|
||||||
: ""),
|
|
||||||
(mp != null && mp.PlayerName().get()
|
|
||||||
.equals("\nAlpha_Bacca44")
|
|
||||||
? "\nDeaths: "
|
|
||||||
+ PlayerListener.AlphaDeaths
|
|
||||||
: ""))))
|
|
||||||
.addExtra(new TellrawPart("\nFor more, do /u info "
|
|
||||||
+ sender.getName())))));
|
|
||||||
json.addExtra(new TellrawPart("> "));
|
|
||||||
long combinetime = System.nanoTime();
|
|
||||||
ChatFormatter.Combine(formatters, formattedmessage, json);
|
|
||||||
combinetime = System.nanoTime() - combinetime;
|
|
||||||
Gson gson = new GsonBuilder()
|
|
||||||
.registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum())
|
|
||||||
.registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection())
|
|
||||||
.registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool())
|
|
||||||
.registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create();
|
|
||||||
String jsonstr = gson.toJson(json);
|
|
||||||
if (jsonstr.length() >= 32767) {
|
|
||||||
sender.sendMessage(
|
|
||||||
"§cError: Message too long. Try shortening it, or remove hashtags and other formatting.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
DebugCommand.SendDebugMessage(jsonstr);
|
|
||||||
if (currentchannel.equals(Channel.TownChat) || currentchannel.equals(Channel.NationChat)) {
|
|
||||||
if (player == null) {
|
|
||||||
sender.sendMessage("§cYou are not a player!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
try {
|
|
||||||
Resident resident = PluginMain.Instance.TU.getResidentMap().get(p.getName().toLowerCase());
|
|
||||||
if (resident != null && !resident.getName().equals(player.getName())
|
|
||||||
&& resident.getModes().contains("spy"))
|
|
||||||
Bukkit.getPlayer(resident.getName()).sendMessage(String.format("[SPY-%s] - %s: %s",
|
|
||||||
currentchannel.DisplayName, player.getDisplayName(), message));
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
if (currentchannel.equals(Channel.TownChat)) {
|
|
||||||
Town town = null;
|
|
||||||
try {
|
|
||||||
final Resident resident = PluginMain.Instance.TU.getResidentMap()
|
|
||||||
.get(player.getName().toLowerCase());
|
|
||||||
if (resident != null && resident.hasTown())
|
|
||||||
town = resident.getTown();
|
|
||||||
} catch (NotRegisteredException e) {
|
|
||||||
}
|
|
||||||
if (town == null) {
|
|
||||||
player.sendMessage("§cYou aren't in a town or an error occured.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
int index = PluginMain.Instance.Towns.indexOf(town);
|
|
||||||
if (index < 0) {
|
|
||||||
PluginMain.Instance.Towns.add(town);
|
|
||||||
index = PluginMain.Instance.Towns.size() - 1;
|
|
||||||
}
|
|
||||||
Objective obj = PluginMain.SB.getObjective("town");
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
try {
|
|
||||||
if (town.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName())))
|
|
||||||
obj.getScore(p.getName()).setScore(index);
|
|
||||||
else
|
|
||||||
obj.getScore(p.getName()).setScore(-1);
|
|
||||||
} catch (Exception e) {
|
|
||||||
obj.getScore(p.getName()).setScore(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
|
||||||
String.format("tellraw @a[score_town=%d,score_town_min=%d] %s", index, index, jsonstr));
|
|
||||||
} else if (currentchannel.equals(Channel.NationChat)) {
|
|
||||||
Town town = null;
|
|
||||||
try {
|
|
||||||
final Resident resident = PluginMain.Instance.TU.getResidentMap()
|
|
||||||
.get(player.getName().toLowerCase());
|
|
||||||
if (resident != null && resident.hasTown())
|
|
||||||
town = resident.getTown();
|
|
||||||
} catch (NotRegisteredException e) {
|
|
||||||
}
|
|
||||||
if (town == null) {
|
|
||||||
player.sendMessage("§cYou aren't in a town or an error occured.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Nation nation = null;
|
|
||||||
try {
|
|
||||||
nation = town.getNation();
|
|
||||||
} catch (NotRegisteredException e) {
|
|
||||||
}
|
|
||||||
if (nation == null) {
|
|
||||||
player.sendMessage("§cYour town isn't in a nation or an error occured.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
int index = PluginMain.Instance.Nations.indexOf(nation);
|
|
||||||
if (index < 0) {
|
|
||||||
PluginMain.Instance.Nations.add(nation);
|
|
||||||
index = PluginMain.Instance.Nations.size() - 1;
|
|
||||||
}
|
|
||||||
Objective obj = PluginMain.SB.getObjective("nation");
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
try {
|
|
||||||
if (nation.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName())))
|
|
||||||
obj.getScore(p.getName()).setScore(index);
|
|
||||||
else
|
|
||||||
obj.getScore(p.getName()).setScore(-1);
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
|
||||||
String.format("tellraw @a[score_nation=%d,score_nation_min=%d] %s", index, index, jsonstr));
|
|
||||||
} else if (currentchannel.equals(Channel.AdminChat)) {
|
|
||||||
if (player != null && !player.isOp()) {
|
|
||||||
player.sendMessage("§cYou need to be an OP to use this channel.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Objective obj = PluginMain.SB.getObjective("admin");
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
if (p.isOp())
|
|
||||||
obj.getScore(p.getName()).setScore(1);
|
|
||||||
else
|
|
||||||
obj.getScore(p.getName()).setScore(0);
|
|
||||||
}
|
|
||||||
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
|
||||||
String.format("tellraw @a[score_admin=%d,score_admin_min=%d] %s", 1, 1, jsonstr));
|
|
||||||
} else if (currentchannel.equals(Channel.ModChat)) {
|
|
||||||
if (player != null && !PluginMain.permission.playerInGroup(player, "mod")) {
|
|
||||||
player.sendMessage("§cYou need to be a mod to use this channel.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Objective obj = PluginMain.SB.getObjective("mod");
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
|
||||||
if (PluginMain.permission.playerInGroup(p, "mod"))
|
|
||||||
obj.getScore(p.getName()).setScore(1);
|
|
||||||
else
|
|
||||||
obj.getScore(p.getName()).setScore(0);
|
|
||||||
}
|
|
||||||
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
|
||||||
String.format("tellraw @a[score_mod=%d,score_mod_min=%d] %s", 1, 1, jsonstr));
|
|
||||||
} else
|
|
||||||
PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console,
|
|
||||||
String.format("tellraw @a %s", jsonstr));
|
|
||||||
} catch (Exception e) {
|
|
||||||
TBMCCoreAPI.SendException("An error occured while sending a chat message!", e);
|
|
||||||
player.sendMessage("§cAn error occured while sending the message.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PluginMain.Instance.getServer().getConsoleSender().sendMessage(String.format("%s <%s> %s", channelidentifier,
|
|
||||||
(player != null ? player.getDisplayName() : sender.getName()), message));
|
|
||||||
DebugCommand.SendDebugMessage(
|
|
||||||
"-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms");
|
|
||||||
DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms");
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
48
src/test/java/buttondevteam/chat/ChatFormatTest.java
Normal file
48
src/test/java/buttondevteam/chat/ChatFormatTest.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package buttondevteam.chat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
import buttondevteam.chat.formatting.ChatFormatter;
|
||||||
|
import buttondevteam.chat.formatting.TellrawPart;
|
||||||
|
import buttondevteam.core.TestPrepare;
|
||||||
|
import buttondevteam.lib.chat.Channel;
|
||||||
|
import buttondevteam.lib.chat.Color;
|
||||||
|
import buttondevteam.lib.chat.Format;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class ChatFormatTest extends TestCase {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
// fail("Not yet implemented");
|
||||||
|
TestPrepare.PrepareServer();
|
||||||
|
final CommandSender sender = Mockito.mock(CommandSender.class);
|
||||||
|
testMessage(sender, "*test*", new TellrawPart("test").setFormat(Format.Italic.getFlag()).setColor(Color.White));
|
||||||
|
testMessage(sender, "**test**", new TellrawPart("test").setFormat(Format.Bold.getFlag()).setColor(Color.White));
|
||||||
|
testMessage(sender, "***test***", new TellrawPart("test")
|
||||||
|
.setFormat(Format.Bold.getFlag() | Format.Italic.getFlag()).setColor(Color.White));
|
||||||
|
testMessage(sender, "***_test_***",
|
||||||
|
new TellrawPart("test")
|
||||||
|
.setFormat(Format.Bold.getFlag() | Format.Italic.getFlag() | Format.Underlined.getFlag())
|
||||||
|
.setColor(Color.White));
|
||||||
|
testMessage(sender, "***_~~test~~_***",
|
||||||
|
new TellrawPart("test").setFormat(Format.Bold.getFlag() | Format.Italic.getFlag()
|
||||||
|
| Format.Underlined.getFlag() | Format.Strikethrough.getFlag()).setColor(Color.White));
|
||||||
|
}
|
||||||
|
|
||||||
|
void testMessage(final CommandSender sender, final String message, TellrawPart... extras) {
|
||||||
|
ArrayList<ChatFormatter> cfs = ChatProcessing.addFormatters(Color.White);
|
||||||
|
final String chid = ChatProcessing.getChannelID(Channel.GlobalChat, sender, null);
|
||||||
|
final TellrawPart tp = ChatProcessing.createTellraw(sender, message, null, null, chid);
|
||||||
|
ChatFormatter.Combine(cfs, message, tp);
|
||||||
|
System.out.println("Testing: " + message);
|
||||||
|
// System.out.println(ChatProcessing.toJson(tp));
|
||||||
|
final TellrawPart expectedtp = ChatProcessing.createTellraw(sender, message, null, null, chid);
|
||||||
|
// System.out.println("Raw: " + ChatProcessing.toJson(expectedtp));
|
||||||
|
for (TellrawPart extra : extras)
|
||||||
|
expectedtp.addExtra(extra);
|
||||||
|
assertEquals(ChatProcessing.toJson(expectedtp), ChatProcessing.toJson(tp));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue