2015-11-15 23:32:04 +00:00
|
|
|
package me.totalfreedom.totalfreedommod;
|
|
|
|
|
2018-06-01 22:39:52 +00:00
|
|
|
import com.google.common.base.Strings;
|
2020-04-08 08:34:08 +00:00
|
|
|
import java.time.LocalDate;
|
|
|
|
import java.time.Period;
|
|
|
|
import java.util.Date;
|
2018-04-19 14:29:19 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
2019-12-10 00:59:17 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
2015-11-15 23:32:04 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
2018-04-19 14:29:19 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
2020-04-08 08:34:08 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.shop.ShopData;
|
2015-11-15 23:32:04 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
|
|
import me.totalfreedom.totalfreedommod.util.FSync;
|
2018-06-02 20:08:35 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
2020-03-27 22:16:28 +00:00
|
|
|
import static me.totalfreedom.totalfreedommod.util.FUtil.playerMsg;
|
2020-01-04 23:35:41 +00:00
|
|
|
import org.bukkit.Bukkit;
|
2015-11-15 23:32:04 +00:00
|
|
|
import org.bukkit.ChatColor;
|
2016-05-12 19:40:39 +00:00
|
|
|
import org.bukkit.command.CommandSender;
|
2015-11-15 23:32:04 +00:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
2019-08-22 21:48:30 +00:00
|
|
|
import org.bukkit.Sound;
|
|
|
|
import org.bukkit.SoundCategory;
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2016-03-01 16:47:01 +00:00
|
|
|
public class ChatManager extends FreedomService
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
public ChatManager(TotalFreedomMod plugin)
|
|
|
|
{
|
|
|
|
super(plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onStart()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onStop()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
|
|
public void onPlayerChatFormat(AsyncPlayerChatEvent event)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
handleChatEvent(event);
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
FLog.severe(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void handleChatEvent(AsyncPlayerChatEvent event)
|
|
|
|
{
|
|
|
|
final Player player = event.getPlayer();
|
|
|
|
String message = event.getMessage().trim();
|
2019-12-11 11:48:06 +00:00
|
|
|
|
|
|
|
// Format colors and strip &k
|
|
|
|
message = FUtil.colorize(message);
|
|
|
|
message = message.replaceAll(ChatColor.MAGIC.toString(), "&k");
|
2020-01-04 06:16:54 +00:00
|
|
|
|
2020-04-08 08:34:08 +00:00
|
|
|
if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean() && !plugin.sh.reactionString.isEmpty() && message.equals(plugin.sh.reactionString))
|
|
|
|
{
|
|
|
|
event.setCancelled(true);
|
|
|
|
ShopData data = plugin.sh.getData(player);
|
|
|
|
data.setCoins(data.getCoins() + plugin.sh.coinsPerReactionWin);
|
|
|
|
plugin.sh.save(data);
|
|
|
|
plugin.sh.reactionString = "";
|
|
|
|
Date currentTime = new Date();
|
|
|
|
long seconds = (currentTime.getTime() - plugin.sh.reactionStartTime.getTime()) / 1000;
|
|
|
|
String reactionMessage = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "
|
|
|
|
+ ChatColor.GREEN + player.getName() + ChatColor.AQUA + " won in " + seconds + " seconds!";
|
|
|
|
FUtil.bcastMsg(reactionMessage, false);
|
|
|
|
player.sendMessage(ChatColor.GREEN + "You have been given " + ChatColor.GOLD + plugin.sh.coinsPerReactionWin + ChatColor.GREEN + " coins!");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-01-11 22:44:13 +00:00
|
|
|
if (!ConfigEntry.TOGGLE_CHAT.getBoolean() && !plugin.al.isAdmin(player))
|
|
|
|
{
|
|
|
|
event.setCancelled(true);
|
|
|
|
playerMsg(player, "Chat is currently disabled.", ChatColor.RED);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-04-08 02:20:01 +00:00
|
|
|
if (message.startsWith("Connected using PickaxeChat for "))
|
2020-03-30 23:43:57 +00:00
|
|
|
{
|
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-06-30 07:41:01 +00:00
|
|
|
// Truncate messages that are too long - 256 characters is vanilla client max
|
|
|
|
if (message.length() > 256)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2017-06-30 07:41:01 +00:00
|
|
|
message = message.substring(0, 256);
|
2015-11-15 23:32:04 +00:00
|
|
|
FSync.playerMsg(player, "Message was shortened because it was too long to send.");
|
|
|
|
}
|
|
|
|
|
2020-04-08 02:20:01 +00:00
|
|
|
|
2016-03-07 20:32:05 +00:00
|
|
|
final FPlayer fPlayer = plugin.pl.getPlayerSync(player);
|
2020-01-04 02:42:23 +00:00
|
|
|
if (fPlayer.isLockedUp())
|
|
|
|
{
|
|
|
|
FSync.playerMsg(player, "You're locked up and cannot talk.");
|
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
2020-04-08 02:20:01 +00:00
|
|
|
|
|
|
|
// Check for adminchat
|
2016-03-07 20:32:05 +00:00
|
|
|
if (fPlayer.inAdminChat())
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2016-03-07 20:32:05 +00:00
|
|
|
FSync.adminChatMessage(player, message);
|
2015-11-15 23:32:04 +00:00
|
|
|
event.setCancelled(true);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-12-10 00:59:17 +00:00
|
|
|
// Check for 4chan trigger
|
|
|
|
Boolean green = ChatColor.stripColor(message).toLowerCase().startsWith(">");
|
|
|
|
Boolean orange = ChatColor.stripColor(message).toLowerCase().endsWith("<");
|
|
|
|
if (ConfigEntry.FOURCHAN_ENABLED.getBoolean())
|
|
|
|
{
|
|
|
|
if (green)
|
|
|
|
{
|
|
|
|
message = ChatColor.GREEN + message;
|
|
|
|
}
|
|
|
|
else if (orange)
|
|
|
|
{
|
|
|
|
message = ChatColor.GOLD + message;
|
|
|
|
}
|
|
|
|
}
|
2020-01-04 06:16:54 +00:00
|
|
|
|
2015-11-15 23:32:04 +00:00
|
|
|
// Finally, set message
|
|
|
|
event.setMessage(message);
|
|
|
|
|
2016-05-12 19:40:39 +00:00
|
|
|
// Make format
|
2020-04-08 02:20:01 +00:00
|
|
|
String format = "%1$s §8\u00BB §f%2$s";
|
2016-05-12 19:40:39 +00:00
|
|
|
|
|
|
|
String tag = fPlayer.getTag();
|
|
|
|
if (tag != null && !tag.isEmpty())
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2016-05-12 19:40:39 +00:00
|
|
|
format = tag.replace("%", "%%") + " " + format;
|
|
|
|
}
|
2019-08-22 21:48:30 +00:00
|
|
|
|
|
|
|
// Check for mentions
|
|
|
|
Boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player);
|
|
|
|
for (Player p : server.getOnlinePlayers())
|
|
|
|
{
|
|
|
|
if (ChatColor.stripColor(message).toLowerCase().contains("@" + p.getName().toLowerCase()) || mentionEveryone)
|
|
|
|
{
|
|
|
|
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F);
|
|
|
|
}
|
|
|
|
}
|
2016-05-12 19:40:39 +00:00
|
|
|
|
|
|
|
// Set format
|
|
|
|
event.setFormat(format);
|
2019-11-28 09:08:36 +00:00
|
|
|
|
|
|
|
// Send to discord
|
2020-01-04 23:35:41 +00:00
|
|
|
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !Bukkit.hasWhitelist())
|
2020-01-04 06:16:54 +00:00
|
|
|
{
|
|
|
|
plugin.dc.messageChatChannel(player.getName() + " \u00BB " + ChatColor.stripColor(message));
|
|
|
|
}
|
2016-05-12 19:40:39 +00:00
|
|
|
}
|
|
|
|
|
2018-06-02 20:45:05 +00:00
|
|
|
public ChatColor getColor(Admin admin, Displayable display)
|
|
|
|
{
|
|
|
|
ChatColor color = display.getColor();
|
|
|
|
if (admin.getOldTags())
|
|
|
|
{
|
|
|
|
|
|
|
|
if (color.equals(ChatColor.AQUA))
|
|
|
|
{
|
|
|
|
color = ChatColor.GOLD;
|
|
|
|
}
|
|
|
|
else if (color.equals(ChatColor.GOLD))
|
|
|
|
{
|
|
|
|
color = ChatColor.LIGHT_PURPLE;
|
|
|
|
}
|
2019-08-19 01:06:47 +00:00
|
|
|
else if (color.equals(ChatColor.DARK_RED))
|
|
|
|
{
|
|
|
|
color = ChatColor.BLUE;
|
|
|
|
}
|
2018-06-02 20:45:05 +00:00
|
|
|
}
|
|
|
|
return color;
|
|
|
|
}
|
|
|
|
|
2018-06-01 22:39:52 +00:00
|
|
|
public String getColoredTag(Admin admin, Displayable display)
|
2018-04-19 14:29:19 +00:00
|
|
|
{
|
|
|
|
ChatColor color = display.getColor();
|
2018-06-02 20:45:05 +00:00
|
|
|
if (admin.getOldTags())
|
2018-04-19 14:29:19 +00:00
|
|
|
{
|
|
|
|
|
2018-06-01 22:39:52 +00:00
|
|
|
if (color.equals(ChatColor.AQUA))
|
|
|
|
{
|
|
|
|
color = ChatColor.GOLD;
|
|
|
|
}
|
|
|
|
else if (color.equals(ChatColor.GOLD))
|
|
|
|
{
|
|
|
|
color = ChatColor.LIGHT_PURPLE;
|
|
|
|
}
|
2019-08-19 01:06:47 +00:00
|
|
|
else if (color.equals(ChatColor.DARK_RED))
|
|
|
|
{
|
|
|
|
color = ChatColor.BLUE;
|
|
|
|
}
|
2018-06-01 22:39:52 +00:00
|
|
|
}
|
|
|
|
return color + display.getAbbr();
|
2018-04-19 14:29:19 +00:00
|
|
|
}
|
|
|
|
|
2016-05-12 19:40:39 +00:00
|
|
|
public void adminChat(CommandSender sender, String message)
|
|
|
|
{
|
2018-04-19 14:29:19 +00:00
|
|
|
Displayable display = plugin.rm.getDisplay(sender);
|
2019-07-28 09:57:10 +00:00
|
|
|
FLog.info("[ADMIN] " + sender.getName() + " " + display.getTag() + ": " + message, true);
|
2016-05-12 19:40:39 +00:00
|
|
|
|
|
|
|
for (Player player : server.getOnlinePlayers())
|
|
|
|
{
|
|
|
|
if (plugin.al.isAdmin(player))
|
|
|
|
{
|
2018-04-19 14:29:19 +00:00
|
|
|
Admin admin = plugin.al.getAdmin(player);
|
2018-06-01 22:39:52 +00:00
|
|
|
if (!Strings.isNullOrEmpty(admin.getAcFormat()))
|
2018-04-19 14:29:19 +00:00
|
|
|
{
|
2018-07-31 06:41:56 +00:00
|
|
|
String format = admin.getAcFormat();
|
|
|
|
ChatColor color = getColor(admin, display);
|
|
|
|
String msg = format.replace("%name%", sender.getName()).replace("%rank%", display.getAbbr()).replace("%rankcolor%", color.toString()).replace("%msg%", message);
|
|
|
|
player.sendMessage(FUtil.colorize(msg));
|
2018-04-19 14:29:19 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-07-19 11:30:08 +00:00
|
|
|
player.sendMessage("[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + sender.getName() + ChatColor.DARK_GRAY + " [" + getColoredTag(admin, display) + ChatColor.DARK_GRAY + "]" + ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(message));
|
2018-04-19 14:29:19 +00:00
|
|
|
}
|
2016-05-12 19:40:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void reportAction(Player reporter, Player reported, String report)
|
|
|
|
{
|
|
|
|
for (Player player : server.getOnlinePlayers())
|
|
|
|
{
|
|
|
|
if (plugin.al.isAdmin(player))
|
|
|
|
{
|
|
|
|
playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + " has reported " + reported.getName() + " for " + report);
|
2020-04-08 02:20:01 +00:00
|
|
|
FLog.info("[REPORTS] " + reporter.getName() + " has reported " + reported.getName() + " for " + report);
|
2016-05-12 19:40:39 +00:00
|
|
|
}
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
}
|
2019-12-11 11:48:06 +00:00
|
|
|
}
|