Core/src/main/java/eu/univento/core/listeners/Chat.java

114 lines
4.3 KiB
Java

/*
* Copyright (c) 2017 univento.eu - All rights reserved
* You are not allowed to use, distribute or modify this code
*/
package eu.univento.core.listeners;
import eu.univento.commons.player.rank.Rank;
import eu.univento.commons.player.warn.WarnReason;
import eu.univento.core.Core;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.core.api.server.ServerSettings;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* manages chat
*
* @author joethei
* @version 1.0
*/
public class Chat implements Listener {
private List<CustomPlayer> players = new LinkedList<>();
private Map<CustomPlayer, Long> spam = new LinkedHashMap<>();
private Map<CustomPlayer, Integer> spamPlayers = new LinkedHashMap<>();
@EventHandler
public void onChat(AsyncPlayerChatEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer().getName());
String message = e.getMessage();
if (p.getDatabasePlayer().isMuted()) {
e.setCancelled(true);
}
if (ServerSettings.isMute()) {
if (!p.getDatabasePlayer().isAllowed(Rank.Sound)) {
e.setCancelled(true);
p.sendMessage("Der Server ist stumm");
}
}
if (players.contains(p)) {
e.setCancelled(true);
p.sendMessage("§cDu musst dich bewegen bevor du chatten kannst");
}
if (System.currentTimeMillis() - spam.get(p) < 5 * 20L) {
e.setCancelled(true);
p.sendMessage("Nicht spammen");
spamPlayers.put(p, spamPlayers.get(p) + 1);
}
if (spamPlayers.get(p) > 100) {
p.warn(WarnReason.SPAM, null, "https://players.univento.eu/" + p.getUniqueId().toString() + "/chatlog");
}
char[] parts = e.getMessage().toCharArray();
int sum = 0;
for (char part : parts) {
sum += part;
}
double ratio = sum / parts.length;
int percent = (int) (100.0D * ratio);
if (percent < 50) {
e.setCancelled(true);
p.sendMessage("§cKeine Caps verwenden");
}
if (message.contains("%")) message = message.replace("%", "%%");
if (p.getDatabasePlayer().isAllowed(Rank.VIP)) {
if (p.getDatabasePlayer().getSettings().isNicked() && !ServerSettings.isLobby()) {
e.setFormat(p.getDatabasePlayer().getRank().getPrefix() + p.getDatabasePlayer().getRank().getColor() + p.getDisplayName() + p.getDatabasePlayer().getRank().getSuffix() + ChatColor.translateAlternateColorCodes('&', message));
} else {
e.setFormat(p.getDatabasePlayer().getRank().getPrefix() + p.getDisplayName() + p.getDatabasePlayer().getRank().getSuffix() + ChatColor.translateAlternateColorCodes('&', message));
}
} else {
e.setFormat(p.getDatabasePlayer().getRank().getPrefix() + p.getDisplayName() + p.getDatabasePlayer().getRank().getSuffix() + message);
Core.getOnlinePlayers().stream().filter(player -> e.getMessage().toLowerCase().contains(player.getDisplayName().toLowerCase()) || e.getMessage().toLowerCase().contains(player.getName().toLowerCase())).forEach(player -> player.playSound(p.getEyeLocation(), Sound.BLOCK_NOTE_PLING, 100.0F, 1.0F));
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
players.add(p);
spamPlayers.put(p, 0);
spam.put(p, System.currentTimeMillis());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (players.contains(p)) players.remove(p);
if (spam.containsKey(p)) spam.remove(p);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (players.contains(p)) players.remove(p);
}
}