UltraChat/src/me/ryandw11/ultrachat/formatting/ChannelJSON.java

90 lines
3.8 KiB
Java
Raw Normal View History

package me.ryandw11.ultrachat.formatting;
import java.util.HashSet;
2020-06-25 11:47:08 +02:00
import java.util.Objects;
2020-06-25 11:47:08 +02:00
import me.ryandw11.ultrachat.util.ChatUtil;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
2020-06-25 11:47:08 +02:00
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import me.ryandw11.ultrachat.UltraChat;
import me.ryandw11.ultrachat.api.ChatType;
import me.ryandw11.ultrachat.api.events.UltraChatEvent;
import me.ryandw11.ultrachat.api.events.properties.ChannelProperties;
import me.ryandw11.ultrachat.api.managers.JComponentManager;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.TextComponent;
/**
* Handles channels with components enabled.
* @author Ryandw11
2020-06-25 11:47:08 +02:00
* @since 2.5
*
*/
public class ChannelJSON implements Listener {
private UltraChat plugin;
public ChannelJSON() {
this.plugin = UltraChat.plugin;
}
2020-06-25 11:47:08 +02:00
@EventHandler(priority = EventPriority.HIGHEST)
public void onChat(AsyncPlayerChatEvent e){
Player p = e.getPlayer();
PlayerFormatting pf = new PlayerFormatting(p);
String channel = plugin.data.getString(p.getUniqueId() + ".channel");
ChannelProperties cp = new ChannelProperties(true, channel);
if(!plugin.channel.getBoolean(channel + ".always_appear")){
2020-06-25 11:47:08 +02:00
UltraChatEvent uce = new UltraChatEvent(p, e.getMessage(), new HashSet<>(e.getRecipients()), ChatType.CHANNEL, cp);
Bukkit.getServer().getPluginManager().callEvent(uce);
2020-06-25 11:47:08 +02:00
// Remove recipients from main events to prevent double messages.
e.getRecipients().clear();
if(uce.isCancelled()) return;
for(Player pl : uce.getRecipients()){
if(plugin.data.getString(pl.getUniqueId() + ".channel").equals(channel)){
2020-06-25 11:47:08 +02:00
if(pl.hasPermission(Objects.requireNonNull(plugin.channel.getString(channel + ".permission"))) || Objects.requireNonNull(plugin.channel.getString(channel + ".permission")).equalsIgnoreCase("none")){
String format = ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(plugin.channel.getString(channel + ".prefix")))
+ ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(plugin.channel.getString(channel + ".format")))
.replace("%prefix%", pf.getPrefix())
.replace("%suffix%", pf.getSuffix())
.replace("%player%", p.getDisplayName())
+ pf.getColor();
2020-06-25 11:47:08 +02:00
ComponentBuilder cb = new ComponentBuilder("");
2020-06-25 11:47:08 +02:00
cb.append(JComponentManager.formatComponents(format, p));
cb.append(new TextComponent(TextComponent.fromLegacyText(plugin.chatColorUtil.translateChatColor(uce.getMessage(), p), pf.getColor())), ComponentBuilder.FormatRetention.NONE);
pl.spigot().sendMessage(cb.create());
}
}
}
}
else{
2020-06-25 11:47:08 +02:00
UltraChatEvent uce = new UltraChatEvent(p, e.getMessage(), new HashSet<>(e.getRecipients()), ChatType.CHANNEL, cp);
Bukkit.getServer().getPluginManager().callEvent(uce);
2020-06-25 11:47:08 +02:00
e.getRecipients().clear();
if(!uce.isCancelled())
for(Player pl : uce.getRecipients()){
2020-06-25 11:47:08 +02:00
String formats = ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(plugin.channel.getString(channel + ".prefix")))
+ ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(plugin.channel.getString(channel + ".format")))
.replace("%prefix%", pf.getPrefix())
.replace("%suffix%", pf.getSuffix())
.replace("%player%", p.getDisplayName())
+ pf.getColor();
2020-06-25 11:47:08 +02:00
ComponentBuilder cb = new ComponentBuilder("");
2020-06-25 11:47:08 +02:00
cb.append(JComponentManager.formatComponents(formats, p));
cb.append(new TextComponent(TextComponent.fromLegacyText(plugin.chatColorUtil.translateChatColor(uce.getMessage(), p), pf.getColor())), ComponentBuilder.FormatRetention.NONE);
pl.spigot().sendMessage(cb.create());
}
}
}
}