package org.arkham.cs.events;
import java.util.ArrayList;
import java.util.List;
import org.arkham.cs.CosmeticSuite;
import org.arkham.cs.cosmetics.Hologram;
import org.arkham.cs.handler.PlayerHandler;
import org.arkham.cs.utils.Rank;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
public class BubbleListener implements Listener {
public BubbleListener() {
Bukkit.getPluginManager().registerEvents(this, CosmeticSuite.getInstance());
}
public static String[] convertStringToBubbleChat(String msg, Player player) {
List<String> lmsg = new ArrayList<>();
Rank rank = PlayerHandler.getRank(player);
ChatColor color = ChatColor.WHITE;
if (rank == Rank.HERO) {
color = ChatColor.AQUA;
}
if (rank == Rank.SUPERHERO) {
color = ChatColor.DARK_RED;
}
lmsg.add(color + player.getName());
ChatColor pColor = CosmeticSuite.getInstance().getChatColorManager().getColor(player);
msg = pColor + msg;
if (msg.length() <= 33) {
lmsg.add(msg);
return lmsg.toArray(new String[lmsg.size()]);
}
String word_batch = "";
for (String word : msg.split(" ")) {
if (word.length() <= 0 || word.length() > 16)
continue;
if (word_batch.length() >= 33) {
if (word_batch.endsWith(" "))
word_batch = word_batch.substring(0, word_batch.length() - 1);
lmsg.add(pColor + word_batch);
word_batch = word + " ";
continue;
}
word_batch += word + " ";
}
if (word_batch.length() > 0) {
lmsg.add(pColor + word_batch);
}
return lmsg.toArray(new String[lmsg.size()]);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = false)
public void onChat(AsyncPlayerChatEvent event) {
Player pl = event.getPlayer();
String msg = event.getMessage();
CosmeticSuite.getInstance().getChatColorManager().sync(pl);
ChatColor pColor = CosmeticSuite.getInstance().getChatColorManager().getColor(pl);
event.setMessage(pColor + msg);
event.setFormat(event.getFormat());
if(!PlayerHandler.isSuperHero(pl)){
// No bubles.
return;
}
final Location loc = pl.getLocation();
final Player fpl = pl;
final String fmsg = msg;
final String[] bubble_msg = convertStringToBubbleChat(fmsg, pl);
final double y_boost = bubble_msg.length * 0.20D;
final int length = fmsg.length();
if (pl.hasMetadata("hologram")) {
CosmeticSuite.getInstance().getServer().getScheduler().runTask(CosmeticSuite.getInstance(), new Runnable() {
@Override
public void run() {
try {
Hologram h = (Hologram) fpl.getMetadata("hologram").get(0).value();
h.destroy();
fpl.removeMetadata("hologram", CosmeticSuite.getInstance());
} catch (ClassCastException e) {
fpl.removeMetadata("hologram", CosmeticSuite.getInstance());
}
}
});
}
CosmeticSuite.getInstance().getServer().getScheduler().runTaskAsynchronously(CosmeticSuite.getInstance(), new Runnable() {
@Override
public void run() {
new Hologram(CosmeticSuite.getInstance(), fpl, bubble_msg).show(loc.add(0, (0.8 + y_boost), 0), ((4 * 20L) + length));
}
});
}
}