/* * Copyright (C) 2014 cnaude * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.cnaude.purpleirc.Utilities; import com.cnaude.purpleirc.PlayerList; import com.cnaude.purpleirc.PurpleBot; import com.cnaude.purpleirc.PurpleIRC; import com.cnaude.purpleirc.TemplateName; import com.gmail.nossr50.util.player.UserManager; import com.nyancraft.reportrts.data.Ticket; import com.palmergames.bukkit.TownyChat.channels.Channel; import github.scarsz.discordsrv.DiscordSRV; import java.awt.Color; import java.util.Set; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.pircbotx.User; /** * Main class containing all message template token expanding methods * * @author Chris Naude */ public class ChatTokenizer { PurpleIRC plugin; /** * Class initializer * * @param plugin the PurpleIRC plugin */ public ChatTokenizer(PurpleIRC plugin) { this.plugin = plugin; } /** * IRC to game chat tokenizer without a message * * @param ircBot * @param user * @param channel * @param template * @return */ public String chatIRCTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template) { return plugin.colorConverter.ircColorsToGame( ircUserTokenizer(template, user, ircBot) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%CHANNEL%", channel.getName()) ); } /** * * @param template * @param user * @param ircBot * @return */ public String ircUserTokenizer(String template, User user, PurpleBot ircBot) { String host = user.getHostmask(); String server = user.getServer(); String away = user.getAwayMessage(); String ircNick = user.getNick(); String customPrefix = ircBot.defaultCustomPrefix; if (host == null) { host = ""; } if (server == null) { server = ""; } if (away == null) { away = ""; } plugin.logDebug("customPrefix before: " + customPrefix); if (!ircBot.userPrefixes.isEmpty()) { for (String key : ircBot.userPrefixes.keySet()) { if (key.equalsIgnoreCase(user.getNick()) || ircBot.checkUserMask(user, key)) { customPrefix = ircBot.userPrefixes.get(key); break; } } } plugin.logDebug("customPrefix after: " + customPrefix); return template.replace("%HOST%", host) .replace("%CUSTOMPREFIX%", customPrefix) .replace("%NAME%", ircNick) .replace("%SERVER%", server) .replace("%AWAY%", away); } /** * * @param user * @param oldNick * @param newNick * @param channelName * @param ircBot * @return */ public String ircNickChangeTokenizer(User user, String oldNick, String newNick, String channelName, PurpleBot ircBot) { String template = plugin.getMessageTemplate(ircBot.botNick, channelName, TemplateName.IRC_NICK_CHANGE); String message = template.replace("%NEWNICK%", newNick) .replace("%OLDNICK%", oldNick) .replace("%CHANNEL%", channelName); message = plugin.colorConverter.ircColorsToGame(ircUserTokenizer(message, user, ircBot)); return plugin.colorConverter.ircColorsToGame(message); } /** * * @param template * @param recipient * @param kicker * @param ircBot * @return */ public String ircUserTokenizer(String template, User recipient, User kicker, PurpleBot ircBot) { String host = kicker.getHostmask(); String server = kicker.getServer(); String away = kicker.getAwayMessage(); String ircNick = kicker.getNick(); if (host == null) { host = ""; } if (server == null) { server = ""; } if (away == null) { away = ""; } return ircUserTokenizer(template, recipient, ircBot) .replace("%KICKERHOST%", host) .replace("%KICKER%", ircNick) .replace("%KICKERSERVER%", server) .replace("%KICKERAWAY%", away); } /** * IRC to Hero chat tokenizer without a message * * @param ircBot * @param user * @param channel * @param template * @param heroChannel * @return */ public String ircChatToHeroChatTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String heroChannel) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { plugin.logDebug("ircChatToHeroChatTokenizer: player not null "); tmpl = playerTokenizer(player, template); } else { tmpl = playerTokenizer(ircNick, template); } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%HEROCHANNEL%", heroChannel) .replace("%HERONICK%", plugin.herochatHook.getHeroNick(heroChannel)) .replace("%HEROCOLOR%", plugin.herochatHook.getHeroColor(heroChannel)) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%CHANNEL%", channel.getName())); } /** * Normal IRC to game chat tokenizer * * @param ircBot * @param user * @param channel * @param template * @param message * @return */ public String ircChatToGameTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String message) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { plugin.logDebug("ircChatToGameTokenizer: null player: " + ircNick); tmpl = playerTokenizer(ircNick, template); } String nickPrefix = ircBot.getNickPrefix(user, channel); String channelPrefix = ircBot.getChannelPrefix(channel); if (nickPrefix == null) { nickPrefix = ""; } if (channelPrefix == null) { channelPrefix = ""; } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%NICKPREFIX%", nickPrefix) .replace("%CHANNELPREFIX%", channelPrefix) .replace("%MESSAGE%", message) .replace("%CHANNEL%", channel.getName())); } /** * Normal IRC to game chat tokenizer * * @param ircBot * @param user * @param channel * @param template * @param oldTopic * @param topic * @return */ public String ircTopicToGameTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String oldTopic, String topic) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { plugin.logDebug("ircTopicToGameTokenizer: null player: " + ircNick); tmpl = playerTokenizer(ircNick, template); } String nickPrefix = ircBot.getNickPrefix(user, channel); String channelPrefix = ircBot.getChannelPrefix(channel); if (nickPrefix == null) { nickPrefix = ""; } if (channelPrefix == null) { channelPrefix = ""; } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%NICKPREFIX%", nickPrefix) .replace("%CHANNELPREFIX%", channelPrefix) .replace("%MESSAGE%", topic) .replace("%TOPIC%", topic) .replace("%OLDTOPIC%", oldTopic) .replace("%CHANNEL%", channel.getName())); } /** * IRC to Hero chat channel tokenizer * * @param ircBot * @param user * @param channel * @param template * @param message * @param channelManager * @param hChannel * @return */ public String ircChatToHeroChatTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String message, String hChannel) { String ircNick = user.getNick(); String heroNick = ""; String heroColor = ""; String tmpl; if (!plugin.herochatHook.isValidChannel(hChannel)) { plugin.logError("Herochat channel is invalid: " + hChannel); } else { heroNick = plugin.herochatHook.getHeroNick(hChannel); heroColor = plugin.herochatHook.getHeroColor(hChannel); } Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { tmpl = playerTokenizer(ircNick, template); } plugin.logDebug(message); return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%HEROCHANNEL%", hChannel) .replace("%HERONICK%", heroNick) .replace("%HEROCOLOR%", heroColor) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%MESSAGE%", message) .replace("%CHANNEL%", channel.getName())); } /** * IRC to VentureChat channel tokenizer * * @param ircBot * @param user * @param channel * @param template * @param message * @param hChannel * @return */ public String ircChatToVentureChatTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String message, String hChannel) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { tmpl = playerTokenizer(ircNick, template); } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%MVCHANNEL%", hChannel) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%MESSAGE%", message) .replace("%CHANNEL%", channel.getName())); } /** * IRC to Discord channel tokenizer * * @param ircBot * @param user * @param channel * @param template * @param message * @param hChannel * @return */ public String ircChatToDiscordTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String message, String hChannel) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { tmpl = playerTokenizer(ircNick, template); } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%DISCORDCHANNEL%", hChannel) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%MESSAGE%", message) .replace("%CHANNEL%", channel.getName())); } /** * IRC to Hero chat channel tokenizer * * @param ircBot * @param user * @param channel * @param template * @param message * @param tChannel * @return */ public String ircChatToTownyChatTokenizer(PurpleBot ircBot, User user, org.pircbotx.Channel channel, String template, String message, String tChannel) { String ircNick = user.getNick(); String tmpl; Player player = this.getPlayer(ircNick); if (player != null) { tmpl = playerTokenizer(player, template); } else { tmpl = playerTokenizer(ircNick, template); } return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(tmpl, user, ircBot) .replace("%TOWNYCHANNEL%", tChannel) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%MESSAGE%", message) .replace("%CHANNEL%", channel.getName())); } /** * IRC kick message to game * * @param ircBot * @param recipient * @param kicker * @param reason * @param channel * @param template * @return */ public String ircKickTokenizer(PurpleBot ircBot, User recipient, User kicker, String reason, org.pircbotx.Channel channel, String template) { return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(template, recipient, kicker, ircBot) .replace("%NICKPREFIX%", ircBot.getNickPrefix(kicker, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%REASON%", reason) .replace("%CHANNEL%", channel.getName())); } /** * IRC to hero kick message * * @param ircBot * @param recipient * @param kicker * @param reason * @param channel * @param template * @param hChannel * @return */ public String ircKickToHeroChatTokenizer(PurpleBot ircBot, User recipient, User kicker, String reason, org.pircbotx.Channel channel, String template, String hChannel) { return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(template, recipient, kicker, ircBot) .replace("%HEROCHANNEL%", hChannel) .replace("%HERONICK%", plugin.herochatHook.getHeroNick(hChannel)) .replace("%HEROCOLOR%", plugin.herochatHook.getHeroColor(hChannel)) .replace("%NICKPREFIX%", ircBot.getNickPrefix(kicker, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%REASON%", reason) .replace("%CHANNEL%", channel.getName())); } /** * IRC mode change messages * * @param ircBot * @param user * @param mode * @param channel * @param template * @return */ public String ircModeTokenizer(PurpleBot ircBot, User user, String mode, org.pircbotx.Channel channel, String template) { return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(template, user, ircBot) .replace("%MODE%", mode) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%CHANNEL%", channel.getName())); } /** * IRC notice change messages * * @param ircBot * @param user * @param message * @param notice * @param channel * @param template * @return */ public String ircNoticeTokenizer(PurpleBot ircBot, User user, String message, String notice, org.pircbotx.Channel channel, String template) { return plugin.colorConverter.ircColorsToGame(ircUserTokenizer(template, user, ircBot) .replace("%NICKPREFIX%", ircBot.getNickPrefix(user, channel)) .replace("%CHANNELPREFIX%", ircBot.getChannelPrefix(channel)) .replace("%MESSAGE%", message) .replace("%NOTICE%", notice) .replace("%CHANNEL%", channel.getName())); } /** * Game chat to IRC * * @param pName * @param template * * @param message * @return */ public String gameChatToIRCTokenizer(String pName, String template, String message) { return plugin.colorConverter.gameColorsToIrc(template .replace("%NAME%", pName) .replace("%MESSAGE%", plugin.colorConverter.gameColorsToIrc(message)) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * Game chat to IRC * * @param username * @param nickname * @param effectiveName * @param color * @param discordChannel * @param template * * @param message * @return */ public String discordChatToIRCTokenizer(String template, String username, String nickname, String effectiveName, Color color, String discordChannel, String message) { String hex = color != null ? Integer.toHexString(color.getRGB()).toUpperCase() : "99AAB5"; if (hex.length() == 8) { hex = hex.substring(2); } if (nickname == null) { nickname = ""; } if (effectiveName == null) { effectiveName = ""; } String translatedColor = DiscordSRV.getPlugin().getColors().get(hex); String colorCode; try { colorCode = ChatColor.translateAlternateColorCodes('&', translatedColor); } catch (Exception ex) { colorCode = ""; plugin.logDebug(ex.getMessage()); } if (colorCode == null) { colorCode = ""; } return plugin.colorConverter.gameColorsToIrc(template .replace("%NAME%", username) .replace("%NICKNAME%", nickname) .replace("%EFFNAME%", effectiveName) .replace("%COLOR%", colorCode) .replace("%CHANNEL%", discordChannel) .replace("%MESSAGE%", plugin.colorConverter.gameColorsToIrc(message)) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * Game chat to game (private messages) * * @param sender * @param target * @param template * @param message * @return */ public String gameChatTokenizer(CommandSender sender, String target, String template, String message) { if (sender instanceof Player) { return playerTokenizer((Player) sender, template) .replace("%TARGET%", target) .replace("%MESSAGE%", message); } else { return template.replace("%NAME%", sender.getName()) .replace("%TARGET%", target) .replace("%MESSAGE%", message); } } /** * Game chat to IRC * * @param player * @param template * @param message * @return */ public String gameChatToIRCTokenizer(Player player, String template, String message) { if (message == null) { message = ""; } return plugin.colorConverter.gameColorsToIrc( playerTokenizer(player, template) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * Game chat to IRC * * @param ircBot * @param channelName * @param player * @param template * @param message * @return */ public String gameChatToIRCTokenizer(PurpleBot ircBot, String channelName, Player player, String template, String message) { if (message == null) { message = ""; } PlayerList pl = plugin.getMCPlayerList(ircBot, channelName); return plugin.colorConverter.gameColorsToIrc(playerTokenizer(player, template) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) .replace("%COUNT%", Integer.toString(pl.count)) .replace("%MAX%", Integer.toString(pl.max)) .replace("%PLAYERS%", pl.list) ); } /** * Dynmap web chat to IRC * * @param source * @param name * @param template * @param message * @return */ public String dynmapWebChatToIRCTokenizer(String source, String name, String template, String message) { if (message == null) { message = ""; } return plugin.colorConverter.gameColorsToIrc( playerTokenizer(name, template) .replace("%SOURCE%", source) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * Game player AFK to IRC * * @param player * @param template * * @return */ public String gamePlayerAFKTokenizer(Player player, String template) { return plugin.colorConverter.gameColorsToIrc(playerTokenizer(player, template)); } /** * mcMMO chat to IRC * * @param player * @param template * * @param message * @param partyName * @return */ public String mcMMOPartyChatToIRCTokenizer(Player player, String template, String message, String partyName) { return mcMMOChatToIRCTokenizer(player, template, message) .replace("%PARTY%", partyName); } /** * mcMMO chat to IRC * * @param player * @param template * @param message * @return */ public String mcMMOChatToIRCTokenizer(Player player, String template, String message) { int powerLevel = UserManager.getPlayer(player).getPowerLevel(); return gameChatToIRCTokenizer(player, template, message) .replace("%POWERLEVEL%", Integer.toString(powerLevel)); } /** * FactionChat to IRC * * @param player * @param botNick * @param message * @param chatTag * @param chatMode * @return */ public String chatFactionTokenizer(Player player, String botNick, String message, String chatTag, String chatMode) { String template; switch (chatMode) { case "public": template = plugin.getMessageTemplate(botNick, "", TemplateName.FACTION_PUBLIC_CHAT); break; case "ally": template = plugin.getMessageTemplate(botNick, "", TemplateName.FACTION_ALLY_CHAT); break; case "enemy": template = plugin.getMessageTemplate(botNick, "", TemplateName.FACTION_ENEMY_CHAT); break; default: return ""; } return plugin.colorConverter.gameColorsToIrc( gameChatToIRCTokenizer(player, template, message) .replace("%FACTIONTAG%", chatTag) .replace("%FACTIONMODE%", chatMode)); } /** * Herochat to IRC * * @param player * @param message * @param hColor * @param hChannel * @param hNick * @param template * @return */ public String chatHeroTokenizer(Player player, String message, String hColor, String hChannel, String hNick, String template) { return gameChatToIRCTokenizer(player, template, message) .replace("%HEROCHANNEL%", hChannel) .replace("%HERONICK%", hNick) .replace("%HEROCOLOR%", plugin.colorConverter.gameColorsToIrc(hColor)) .replace("%CHANNEL%", hChannel); } /** * * @param player * @param townyChannel * @param message * @param template * @return */ public String chatTownyChannelTokenizer(Player player, Channel townyChannel, String message, String template) { return gameChatToIRCTokenizer(player, template, message) .replace("%TOWNYCHANNEL%", ChatColor.translateAlternateColorCodes('&', townyChannel.getName())) .replace("%TOWNYCHANNELTAG%", ChatColor.translateAlternateColorCodes('&', townyChannel.getChannelTag())) .replace("%TOWNYMSGCOLOR%", ChatColor.translateAlternateColorCodes('&', townyChannel.getMessageColour())); } /** * TitanChat to IRC * * @param player * @param tChannel * @param tColor * @param message * @param template * @return */ public String titanChatTokenizer(Player player, String tChannel, String tColor, String message, String template) { return gameChatToIRCTokenizer(player, template, message) .replace("%TITANCHANNEL%", tChannel) .replace("%TITANCOLOR%", plugin.colorConverter.gameColorsToIrc(tColor)) .replace("%CHANNEL%", tChannel); } /** * UltimateChat to IRC * * @param player * @param uChannel * @param uColor * @param message * @param template * @return */ public String ultimateChatTokenizer(Player player, String uChannel, String uColor, String message, String template) { return gameChatToIRCTokenizer(player, template, message) .replace("%UCHATCHANNEL%", uChannel) .replace("%UCHATCOLOR%", plugin.colorConverter.gameColorsToIrc(uColor)) .replace("%CHANNEL%", uChannel); } /** * VentureChat to IRC * * @param player * @param vcChannel * @param vcColor * @param message * @param template * @return */ public String ventureChatTokenizer(Player player, String vcChannel, String vcColor, String message, String template) { return gameChatToIRCTokenizer(player, template, message) .replace("%MVCHANNEL%", vcChannel) .replace("%MVCOLOR%", plugin.colorConverter.gameColorsToIrc(vcColor)) .replace("%CHANNEL%", vcChannel); } /** * Game chat to IRC * * @param template * @param message * @return */ public String gameChatToIRCTokenizer(String template, String message) { return plugin.colorConverter.gameColorsToIrc(template .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * Game kick message to IRC * * @param player * @param template * @param reason * @param message * @return */ public String gameKickTokenizer(Player player, String template, String message, String reason) { return plugin.colorConverter.gameColorsToIrc( gameChatToIRCTokenizer(player, template, message) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) .replace("%REASON%", reason)); } /** * ReportRTS notifications to IRC * * @param pName * @param template * @param ticket * @return */ public String reportRTSTokenizer(String pName, String template, Ticket ticket) { String message = ticket.getMessage(); String modName = ticket.getStaffName(); String displayModName = ""; String name = ticket.getName(); String world = ticket.getWorld(); String modComment = ""; if (!ticket.getComments().isEmpty()) { modComment = ticket.getComments().last().getComment(); } int id = ticket.getId(); if (message == null) { message = ""; } if (modName == null) { modName = ""; } else { Player player = this.getPlayer(modName); if (player != null) { displayModName = player.getDisplayName(); } else { displayModName = modName; } } if (name == null) { name = ""; } if (world == null) { world = ""; } if (modComment == null) { modComment = ""; } return plugin.colorConverter.gameColorsToIrc(playerTokenizer(pName, template) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) .replace("%MODNAME%", modName) .replace("%DISPLAYMODNAME%", displayModName) .replace("%MODCOMMENT%", modComment) .replace("%TICKETNUMBER%", String.valueOf(id)) .replace("%RTSNAME%", name) .replace("%RTSWORLD%", world)); } /** * SimpleTicketManager notifications to IRC * * @param uuid * @param template * @param ticket * @return */ public String simpleTicketTokenizer(UUID uuid, String template, uk.co.joshuawoolley.simpleticketmanager.ticketsystem.Ticket ticket) { Player player = Bukkit.getPlayer(uuid); String playerName; String displayName; if (player == null) { playerName = uuid.toString(); displayName = uuid.toString(); } else { playerName = player.getName(); displayName = player.getCustomName(); } String description = ticket.getDescription(); String reason = ticket.getReason(); String modUUID = ticket.getAssignedTo(); String modName; String displayModName; String name = ticket.getReportingPlayer(); String world = ticket.getWorld(); String modComment = ""; int id = ticket.getTicketId(); if (description == null) { description = ""; } Player modPlayer = null; if (modUUID != null) { modPlayer = Bukkit.getPlayer(UUID.fromString(modUUID)); } if (modPlayer != null) { modName = modPlayer.getName(); displayModName = modPlayer.getDisplayName(); } else { modName = modUUID; displayModName = modName; } if (name == null) { name = ""; } if (world == null) { world = ""; } if (modName == null) { modName = ""; } if (displayModName == null) { displayModName = ""; } return plugin.colorConverter.gameColorsToIrc(playerTokenizer(playerName, template) .replace("%MESSAGE%", description) .replace("%MODNAME%", modName) .replace("%DISPLAYMODNAME%", displayModName) .replace("%MODCOMMENT%", modComment) .replace("%TICKETNUMBER%", String.valueOf(id)) .replace("%NAME%", name) .replace("%DISPLAYNAME%", displayName) .replace("%REASON%", reason) .replace("%WORLD%", world)); } /** * * @param sender * @param message * @param template * @return */ public String reportRTSTokenizer(CommandSender sender, String message, String template) { return gameChatToIRCTokenizer(sender.getName(), template, message); } /** * * @param player * @param message * @return */ public String playerTokenizer(Player player, String message) { String pName; String displayName; if (plugin.pingFixTemplate) { pName = addZeroWidthSpace(player.getName()); displayName = player.getDisplayName().replace(player.getName(), pName); } else { pName = player.getName(); displayName = player.getDisplayName(); } plugin.logDebug("Tokenizing " + pName + "(O: " + player.isOnline() + ")"); String pSuffix = plugin.getPlayerSuffix(player); String pPrefix = plugin.getPlayerPrefix(player); String gPrefix = plugin.getGroupPrefix(player); String gSuffix = plugin.getGroupSuffix(player); String group = plugin.getPlayerGroup(player); UUID uuid = player.getUniqueId(); String playerIP = ""; try { playerIP = player.getAddress().getAddress().getHostAddress(); } catch (Exception ex) { plugin.logDebug(ex.getMessage()); } String host = plugin.getPlayerHost(playerIP); String worldName = ""; String worldAlias = ""; String worldColor = ""; String jobShort = ""; String job = ""; if (pSuffix == null) { pSuffix = ""; } if (pPrefix == null) { pPrefix = ""; } if (gSuffix == null) { gSuffix = ""; } if (gPrefix == null) { gPrefix = ""; } if (group == null) { group = ""; } if (playerIP == null) { playerIP = ""; } if (displayName == null) { displayName = ""; } if (player.getWorld() != null) { worldName = player.getWorld().getName(); worldAlias = plugin.getWorldAlias(worldName); worldColor = plugin.getWorldColor(worldName); } if (message.contains("%JOBS%") || message.contains("%JOBSSHORT%")) { if (plugin.jobsHook != null) { job = plugin.jobsHook.getPlayerJob(player, false); jobShort = plugin.jobsHook.getPlayerJob(player, true); } } plugin.logDebug("[P]Raw message: " + message); if (plugin.placeholderApiHook != null) { message = plugin.placeholderApiHook.setPlaceholders(player, message); } return message.replace("%DISPLAYNAME%", displayName) .replace("%UUID%", uuid.toString()) .replace("%JOBS%", job) .replace("%JOBSSHORT%", jobShort) .replace("%NAME%", pName) .replace("%PLAYERIP%", playerIP) .replace("%HOST%", host) .replace("%GROUP%", group) .replace("%PLAYERPREFIX%", pPrefix) .replace("%PLAYERSUFFIX%", pSuffix) .replace("%GROUPPREFIX%", gPrefix) .replace("%GROUPSUFFIX%", gSuffix) .replace("%WORLDALIAS%", worldAlias) .replace("%WORLDCOLOR%", worldColor) .replace("%WORLD%", worldName); } private String playerTokenizer(String playerName, String message) { Player player = getPlayer(playerName); plugin.logDebug("Tokenizing " + playerName); String worldName = plugin.defaultPlayerWorld; String pSuffix = ""; String pPrefix = ""; String gSuffix = ""; String gPrefix = ""; String group = ""; if (message.contains("%PLAYERSUFFIX%")) { pSuffix = plugin.getPlayerSuffix(worldName, playerName); } if (message.contains("%PLAYERPREFIX%")) { pPrefix = plugin.getPlayerPrefix(worldName, playerName); } if (message.contains("%GROUPSUFFIX%")) { gSuffix = plugin.getGroupSuffix(worldName, playerName); } if (message.contains("%GROUPPREFIX%")) { gPrefix = plugin.getGroupPrefix(worldName, playerName); } if (message.contains("%GROUP%")) { group = plugin.getPlayerGroup(worldName, playerName); } String displayName = plugin.getDisplayName(playerName); String uuid = ""; plugin.logDebug("playerTokenizer: 7 "); String worldAlias = ""; String worldColor = ""; String jobShort = ""; String job = ""; plugin.logDebug("playerTokenizer: 8 "); if (!worldName.isEmpty()) { worldAlias = plugin.getWorldAlias(worldName); worldColor = plugin.getWorldColor(worldName); } plugin.logDebug("playerTokenizer: 9 "); if (pSuffix == null) { pSuffix = plugin.defaultPlayerSuffix; } plugin.logDebug("playerTokenizer: 10 "); if (pPrefix == null) { pPrefix = plugin.defaultPlayerPrefix; } plugin.logDebug("playerTokenizer: 11 "); if (gSuffix == null) { gSuffix = plugin.defaultGroupSuffix; } plugin.logDebug("playerTokenizer: 12 "); if (gPrefix == null) { gPrefix = plugin.defaultGroupPrefix; } plugin.logDebug("playerTokenizer: 13 "); if (group == null) { group = plugin.defaultPlayerGroup; } plugin.logDebug("playerTokenizer: 14 "); if (player != null) { uuid = player.getUniqueId().toString(); if (message.contains("%JOBS%") || message.contains("%JOBSSHORT%")) { if (plugin.jobsHook != null) { job = plugin.jobsHook.getPlayerJob(player, false); jobShort = plugin.jobsHook.getPlayerJob(player, true); } } } if (plugin.placeholderApiHook != null) { message = plugin.placeholderApiHook.setPlaceholders(player, message); } plugin.logDebug("[S]Raw message: " + message); return message.replace("%DISPLAYNAME%", displayName) .replace("%UUID%", uuid) .replace("%JOBS%", job) .replace("%JOBSSHORT%", jobShort) .replace("%NAME%", playerName) .replace("%GROUP%", group) .replace("%PLAYERPREFIX%", pPrefix) .replace("%PLAYERSUFFIX%", pSuffix) .replace("%GROUPSUFFIX%", gSuffix) .replace("%GROUPPREFIX%", gPrefix) .replace("%WORLDALIAS%", worldAlias) .replace("%WORLDCOLOR%", worldColor) .replace("%WORLD%", worldName); } private Player getPlayer(String name) { Player player; if (plugin.exactNickMatch) { plugin.logDebug("Checking for exact player matching " + name); player = plugin.getServer().getPlayerExact(name); } else { plugin.logDebug("Checking for player matching " + name); player = plugin.getServer().getPlayer(name); } return player; } /** * * @param player * @param template * @param cmd * @param params * @return */ public String gameCommandToIRCTokenizer(Player player, String template, String cmd, String params) { return plugin.colorConverter.gameColorsToIrc(playerTokenizer(player, template) .replace("%COMMAND%", cmd) .replace("%PARAMS%", params)); } /** * * @param nick * @param target * @param message * @param template * @return */ public String targetChatResponseTokenizer(String nick, String target, String message, String template) { return plugin.colorConverter.gameColorsToIrc(template .replace("%NICK%", nick) .replace("%TARGET%", target) .replace("%MESSAGE%", message) .replace("%RAWMESSAGE%", ChatColor.stripColor(message)) ); } /** * * @param sender * @param target * @param message * @param template * @return */ public String msgChatResponseTokenizer(CommandSender sender, String target, String message, String template) { if (sender instanceof Player) { return plugin.colorConverter.ircColorsToGame( playerTokenizer((Player) sender, template) .replace("%TARGET%", target) .replace("%MESSAGE%", message) ); } return plugin.colorConverter.ircColorsToGame(template .replace("%NAME%", sender.getName()) .replace("%TARGET%", target) .replace("%MESSAGE%", message) ); } /** * * @param nick * @param target * @param message * @param template * @return */ public String msgChatResponseTokenizer(String nick, String target, String message, String template) { return plugin.colorConverter.ircColorsToGame(template .replace("%NICK%", nick) .replace("%TARGET%", target) .replace("%MESSAGE%", message) ); } /** * * @param command * @return */ public String ircCommandSentTokenizer(String command) { return plugin.colorConverter.gameColorsToIrc( plugin.getMessageTemplate(TemplateName.COMMAND_SENT) .replace("%COMMAND%", command)); } /** * * @param sender * @param targetPlayer * @param message * @param template * @return */ public String msgChatResponseTokenizer(CommandSender sender, Player targetPlayer, String message, String template) { return template.replace("%NAME%", sender.getName()) .replace("%TARGET%", targetPlayer.getName()) .replace("%MESSAGE%", message); } public String logTailerTokenizer(String file, String line, String template) { return plugin.colorConverter.gameColorsToIrc(template .replace("%FILE%", file) .replace("%LINE%", line)); } public String addZeroWidthSpace(String s) { if (s.contains("\u200B")) { plugin.logDebug("Nick already contains ZWS: " + s); return s; } if (s.length() > 1) { String a = s.substring(0, 1); String b = s.substring(1); String n = a + "\u200B" + b; plugin.logDebug("Adding ZWS: " + s + " -> " + n); return n; } plugin.logDebug("Nick too short for ZWS: " + s); return s; } /** * OreBroadcast to IRC * * @param player * @param botNick * @param blockName * @param oreName * @param oreColor * @param vein * @param loc * @return */ public String oreBroadcastTokenizer(Player player, String botNick, String blockName, String oreName, ChatColor oreColor, Set vein, Location loc) { String template = plugin.getMessageTemplate(botNick, "", TemplateName.ORE_BROADCAST); String veinSize = String.valueOf(vein.size()); String plural = ""; if (vein.isEmpty() || vein.size() > 1) { plural = "s"; } return plugin.colorConverter.gameColorsToIrc( playerTokenizer(player, template) .replace("%BLOCKNAME%", blockName) .replace("%ORE%", oreName) .replace("%ORECOLOR%", oreColor.toString()) .replace("%X%", String.valueOf(loc.getX())) .replace("%Y%", String.valueOf(loc.getY())) .replace("%Z%", String.valueOf(loc.getZ())) .replace("%PLURAL%", plural) .replace("%COUNT%", veinSize) ); } }