LocalChatListener.java
package dev.aura.bungeechat.listener;
import com.typesafe.config.Config;
import dev.aura.bungeechat.account.BungeecordAccountManager;
import dev.aura.bungeechat.api.account.BungeeChatAccount;
import dev.aura.bungeechat.api.enums.ChannelType;
import dev.aura.bungeechat.api.utils.ChatUtils;
import dev.aura.bungeechat.message.Context;
import dev.aura.bungeechat.message.Messages;
import dev.aura.bungeechat.message.MessagesService;
import dev.aura.bungeechat.module.BungeecordModuleManager;
import java.util.List;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ChatEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority;
public class LocalChatListener implements Listener {
private final boolean passToBackendServer =
BungeecordModuleManager.LOCAL_CHAT_MODULE
.getModuleSection()
.getBoolean("passToBackendServer");
private final boolean passTransparently =
BungeecordModuleManager.LOCAL_CHAT_MODULE.getModuleSection().getBoolean("passTransparently");
private final boolean logTransparentLocal =
BungeecordModuleManager.LOCAL_CHAT_MODULE
.getModuleSection()
.getBoolean("logTransparentLocal");
private final Config passThruServerListSection =
BungeecordModuleManager.LOCAL_CHAT_MODULE.getModuleSection().getConfig("passThruServerList");
private final boolean passThruServerListEnabled = passThruServerListSection.getBoolean("enabled");
private final List<String> passThruServers = passThruServerListSection.getStringList("list");
private final Config globalSymbolSection =
BungeecordModuleManager.GLOBAL_CHAT_MODULE.getModuleSection().getConfig("symbol");
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(ChatEvent e) {
if (e.isCancelled()) return;
if (!(e.getSender() instanceof ProxiedPlayer)) return;
ProxiedPlayer sender = (ProxiedPlayer) e.getSender();
BungeeChatAccount account = BungeecordAccountManager.getAccount(sender).get();
String message = e.getMessage();
if (ChatUtils.isCommand(message)) return;
if (globalSymbolSection.getBoolean("enabled"))
if (message.startsWith(globalSymbolSection.getString("symbol"))) return;
if (account.getChannelType() == ChannelType.LOCAL) {
if (!MessagesService.getLocalPredicate().test(account)) {
MessagesService.sendMessage(sender, Messages.NOT_IN_LOCAL_SERVER.get());
return;
}
final boolean passThruServer =
passTransparently
|| (passThruServerListEnabled && passThruServers.contains(account.getServerName()));
// Cancel event only if we don't want the backend server to receive it
e.setCancelled(!(passToBackendServer || passThruServer));
// Was just cancelled, or we want to process all local chat regardless
if (e.isCancelled() || (passToBackendServer && !passThruServer)) {
MessagesService.sendLocalMessage(sender, message);
}
// still log and spy after transparently sent messages
if (passTransparently && logTransparentLocal) {
MessagesService.sendTransparentMessage(new Context(sender, message));
}
}
}
}