TF-Marriage/src/main/java/com/lenis0012/bukkit/marriage2/listeners/ChatListener.java

114 lines
4.5 KiB
Java
Raw Normal View History

2015-07-10 15:02:50 +00:00
package com.lenis0012.bukkit.marriage2.listeners;
import com.lenis0012.bukkit.marriage2.MPlayer;
2016-02-23 22:02:24 +00:00
import com.lenis0012.bukkit.marriage2.config.Settings;
2015-07-10 15:02:50 +00:00
import com.lenis0012.bukkit.marriage2.internal.MarriageCore;
2016-02-23 22:02:24 +00:00
import org.bukkit.Bukkit;
2015-07-10 15:02:50 +00:00
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
2016-02-23 22:02:24 +00:00
import org.bukkit.event.EventPriority;
2015-07-10 15:02:50 +00:00
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class ChatListener implements Listener {
private final MarriageCore core;
public ChatListener(MarriageCore core) {
this.core = core;
}
2016-02-23 22:02:24 +00:00
@EventHandler(priority = EventPriority.LOWEST)
2015-07-10 15:02:50 +00:00
public void onPlayerChat(AsyncPlayerChatEvent event) {
final Player player = event.getPlayer();
MPlayer mp = core.getMPlayer(player.getUniqueId());
2016-02-23 22:02:24 +00:00
if(mp.isInChat()) {
2016-04-20 20:28:33 +00:00
// Private chat
if(!mp.isMarried() || !isOnline(mp.getPartner())) {
2016-02-23 22:02:24 +00:00
mp.setInChat(false);
return;
}
event.setCancelled(true);
String message = Settings.PM_FORMAT.value()
.replace("{name}", player.getDisplayName())
.replace("{message}", event.getMessage())
.replace("{heart}", "\u2764");
2016-03-19 16:18:43 +00:00
message = formatIcons(message);
2016-02-23 22:02:24 +00:00
message = ChatColor.translateAlternateColorCodes('&', message);
Player partner = Bukkit.getPlayer(mp.getPartner().getUniqueId());
player.sendMessage(message);
partner.sendMessage(message);
2016-04-20 20:28:33 +00:00
// Admin chat spy
String adminMessage = null; // No need to format message if we're not going to send it.
for(Player admin : Bukkit.getOnlinePlayers()) {
if(admin.equals(player) || admin.equals(partner)) continue;
final MPlayer mAdmin = core.getMPlayer(admin.getUniqueId());
if(!mAdmin.isChatSpy()) continue;
if(adminMessage == null) {
// Format message
adminMessage = Settings.CHATSPY_FORMAT.value()
.replace("{sender}", player.getDisplayName())
.replace("{receiver}", partner.getDisplayName());
adminMessage = formatIcons(adminMessage);
adminMessage = ChatColor.translateAlternateColorCodes('&', adminMessage)
.replace("{message}", event.getMessage());
}
admin.sendMessage(adminMessage);
}
2016-02-23 22:02:24 +00:00
return;
}
}
2016-03-01 10:22:14 +00:00
@EventHandler(priority = EventPriority.HIGHEST)
2016-02-23 22:02:24 +00:00
public void onPlayerChatLate(AsyncPlayerChatEvent event) {
2016-03-19 16:30:51 +00:00
String format = event.getFormat();
2016-02-27 23:57:54 +00:00
final Player player = event.getPlayer();
final MPlayer mplayer = core.getMPlayer(player.getUniqueId());
2016-03-01 10:22:14 +00:00
2016-03-19 16:23:24 +00:00
if(Settings.FORCE_FORMAT.value()) {
2016-03-19 16:30:51 +00:00
format = "{marriage_status}" + event.getFormat(); // Enforce marriage format
2016-03-19 16:23:24 +00:00
}
2016-03-01 10:22:14 +00:00
2016-03-19 16:18:43 +00:00
// Marriage status
2016-02-28 14:27:03 +00:00
if(format.contains("{marriage_status}")) {
String status = "";
if(mplayer.isMarried()) {
2016-02-28 14:55:57 +00:00
String partner = player.hasMetadata("marriedTo") ? player.getMetadata("marriedTo").get(0).asString() : "";
status = Settings.CHAT_FORMAT.value()
.replace("{heart}", "\u2764")
.replace("{partner}", partner);
2016-03-19 16:18:43 +00:00
status = formatIcons(status);
2016-02-28 14:55:57 +00:00
2016-02-28 14:27:03 +00:00
status = ChatColor.translateAlternateColorCodes('&', status);
}
2016-02-25 09:44:54 +00:00
event.setFormat(format.replace("{marriage_status}", status));
}
2016-02-23 22:02:24 +00:00
2016-03-19 16:18:43 +00:00
// Gender format
if(format.contains("{marriage_gender}")) {
String gender = mplayer.getGender().getChatPrefix();
gender = formatIcons(gender);
gender = ChatColor.translateAlternateColorCodes('&', gender);
event.setFormat(format.replace("{marriage_gender}", gender));
2015-07-10 15:02:50 +00:00
}
2016-03-19 16:18:43 +00:00
}
2016-02-23 22:02:24 +00:00
2016-03-19 16:18:43 +00:00
private String formatIcons(String text) {
return text.replace("{heart}", "\u2764")
.replace("{icon:heart}", "\u2764")
.replace("{icon:male}", "\u2642")
.replace("{icon:female}", "\u2640")
.replace("{icon:genderless}", "\u26B2");
2016-02-23 22:02:24 +00:00
}
private boolean isOnline(MPlayer mp) {
if(mp == null) return false;
Player player = Bukkit.getPlayer(mp.getUniqueId());
return player != null && player.isOnline();
2015-07-10 15:02:50 +00:00
}
}