Files
OpenLPX/src/main/java/it/ytnoos/lpx/alerts/AlertManager.java
T
2026-11-01 21:26:40 -05:00

319 lines
14 KiB
Java

package it.ytnoos.lpx.alerts;
import it.ytnoos.lpx.LPXBukkit;
import it.ytnoos.lpx.api.LPXPlugin;
import it.ytnoos.lpx.api.check.FlagInfo;
import it.ytnoos.lpx.api.check.abstraction.Check;
import it.ytnoos.lpx.api.check.options.PersonalCheckOptions;
import it.ytnoos.lpx.api.event.LPXAlertEvent;
import it.ytnoos.lpx.api.event.LPXPunishEvent;
import it.ytnoos.lpx.api.player.ProtocolPlayer;
import it.ytnoos.lpx.commands.KickCommand;
import it.ytnoos.lpx.config.AlertsOptions;
import it.ytnoos.lpx.config.ConfigManager;
import it.ytnoos.lpx.config.GeneralOptions;
import it.ytnoos.lpx.config.Messages;
import it.ytnoos.lpx.lib.com.github.retrooper.packetevents.util.folia.AsyncScheduler;
import it.ytnoos.lpx.lib.com.github.retrooper.packetevents.util.folia.FoliaScheduler;
import it.ytnoos.lpx.lib.com.github.retrooper.packetevents.util.folia.GlobalRegionScheduler;
import it.ytnoos.lpx.lib.io.github.retrooper.packetevents.PacketEvents;
import it.ytnoos.lpx.lib.io.github.retrooper.packetevents.manager.server.ServerVersion;
import it.ytnoos.lpx.lib.io.github.retrooper.packetevents.manager.server.VersionComparison;
import it.ytnoos.lpx.logging.FileLogger;
import it.ytnoos.lpx.utils.ColorUtils;
import it.ytnoos.lpx.utils.TimeUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.HoverEvent.Action;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import java.util.Collection;
import java.util.Deque;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
public class AlertManager {
private final LPXBukkit lpx;
private final FileLogger fileLogger;
private final DiscordAlertHandler discord;
private final Set<UUID> values;
private long time;
public AlertManager(LPXBukkit lPXBukkit) {
HashSet values2 = new HashSet();
this.values = values2;
this.time = 0L;
this.lpx = lPXBukkit;
FileLogger fileLogger2 = new FileLogger(lPXBukkit);
this.fileLogger = fileLogger2;
DiscordAlertHandler discordAlertHandler = new DiscordAlertHandler(lPXBukkit);
this.discord = discordAlertHandler;
}
public void load() {
this.fileLogger.load();
this.discord.load();
}
public void disable() {
this.fileLogger.close();
}
public void flag(ProtocolPlayer protocolPlayer, Check check, FlagInfo[] flagInfos) {
if (!protocolPlayer.isKicked()) {
this.fileLogger.writeFlag(protocolPlayer, check, flagInfos);
LPXBukkit lPXBukkit = this.lpx;
if (lPXBukkit.getValues().size() >= 360) {
lPXBukkit = this.lpx;
lPXBukkit.getValues().removeLast();
}
lPXBukkit = this.lpx;
Deque values2 = lPXBukkit.getValues();
String username = protocolPlayer.getUsername();
PersonalCheckOptions options = check.getOptions();
long now = System.currentTimeMillis();
ViolationRecord violationRecord =
new ViolationRecord(username, options, now, flagInfos);
values2.addFirst(violationRecord);
Runnable runnable =
() -> {
PluginManager pluginManager = Bukkit.getPluginManager();
LPXAlertEvent result = new LPXAlertEvent(protocolPlayer, check, flagInfos);
pluginManager.callEvent(result);
};
this.callEvent(runnable);
int minVl = check.getOptions().getCheckOptions().getMinVl();
if (minVl != -1 && check.getOptions().getVl() >= minVl) {
lPXBukkit = this.lpx;
ConfigManager configManager = lPXBukkit.getConfigManager();
Messages messages = configManager.getMessages();
AlertsOptions alertsOptions = messages.getAlertsOptions();
String format = alertsOptions.getFormat();
String text = this.replace(format, protocolPlayer, check, flagInfos);
Logger logger = this.lpx.getLogger();
logger.log(Level.INFO, ColorUtils.createText(text));
long lastPunish = protocolPlayer.getLastPunish();
Long value = ((Long) lastPunish);
long value2 = TimeUtils.calculateTime(value);
LPXBukkit lPXBukkit2 = this.lpx;
ConfigManager configManager2 = lPXBukkit2.getConfigManager();
GeneralOptions options2 = configManager2.getOptions();
if (value2 >= options2.getLimit6()) {
StringBuilder stringBuilder = new StringBuilder();
int value3 = 0;
while (true) {
if (value3 >= alertsOptions.getHover().size()) {
Action action = Action.SHOW_TEXT;
String text2 = stringBuilder.toString();
HoverEvent hoverEvent =
new HoverEvent(action, ColorUtils.createBaseComponents(text2));
BaseComponent[] baseComponents = ColorUtils.createBaseComponents(text);
int value4 = baseComponents.length;
for (int index = 0; index < value4; index++) {
baseComponents[index].setHoverEvent(hoverEvent);
}
Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
onlinePlayers.forEach(
result -> {
Object[] result3 = new Object[0];
if (result.hasPermission(alertsOptions.getPermission())
&& !this.values.contains(result.getUniqueId())) {
result.getPlayer().spigot().sendMessage(baseComponents);
}
});
AsyncScheduler asyncScheduler = FoliaScheduler.getAsyncScheduler();
LPXPlugin plugin = this.lpx.getPlugin();
asyncScheduler.runNow(
plugin,
result2 -> {
Check result3 = check;
Check check2 = result3;
this.discord.handleFlagInfos(
protocolPlayer, check2, flagInfos);
});
return;
}
String text3 = (String) alertsOptions.getHover().get(value3);
stringBuilder.append(this.replace(text3, protocolPlayer, check, flagInfos));
if (value3 != alertsOptions.getHover().size() - 1) {
stringBuilder.append('\n');
}
value3++;
}
}
}
}
}
public void punish(ProtocolPlayer protocolPlayer, Check check) {
long lastPunish = protocolPlayer.getLastPunish();
Long value = ((Long) lastPunish);
long value2 = TimeUtils.calculateTime(value);
LPXBukkit lPXBukkit = this.lpx;
ConfigManager configManager = lPXBukkit.getConfigManager();
GeneralOptions options = configManager.getOptions();
if (value2 >= options.getLimit6()) {
Runnable runnable =
() -> {
PluginManager player = Bukkit.getPluginManager();
LPXPunishEvent lPXPunishEvent = new LPXPunishEvent(protocolPlayer, check);
player.callEvent(lPXPunishEvent);
};
this.callEvent(runnable);
protocolPlayer.updateLastPunish();
for (String text : check.getOptions().getCheckOptions().getPunishCommands()) {
String text2 = text;
String text3 = this.createText(text2, protocolPlayer);
text = text3;
if (text3.startsWith("lpx kick")) {
LPXBukkit lPXBukkit2 = this.lpx;
ConsoleCommandSender consoleSender = Bukkit.getConsoleSender();
String[] texts = text.substring(4).split(" ");
CommandSender sender = (CommandSender) consoleSender;
KickCommand.runCommand(lPXBukkit2, sender, texts);
} else {
String text4 = text;
GlobalRegionScheduler globalRegionScheduler =
FoliaScheduler.getGlobalRegionScheduler();
LPXPlugin plugin = this.lpx.getPlugin();
globalRegionScheduler.execute(
plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), text4));
}
}
Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
onlinePlayers.forEach(
result -> {
LPXBukkit lPXBukkit3 = this.lpx;
ConfigManager configManager2 = lPXBukkit3.getConfigManager();
Messages messages = configManager2.getMessages();
AlertsOptions alertsOptions = messages.getAlertsOptions();
if (result.hasPermission(alertsOptions.getPermission())
&& !this.values.contains(result.getUniqueId())) {
Player player = result.getPlayer();
LPXBukkit lPXBukkit4 = this.lpx;
ConfigManager configManager3 = lPXBukkit4.getConfigManager();
Messages messages2 = configManager3.getMessages();
String text5 = messages2.getText();
FlagInfo[] flagInfos = new FlagInfo[0];
String text6 = this.replace(text5, protocolPlayer, check, flagInfos);
Player player2 = player;
player = player2;
Player player3 = player;
ColorUtils.handleText(player3, text6);
}
});
}
}
public String replace(
String text, ProtocolPlayer protocolPlayer, Check check, FlagInfo[] flagInfos) {
String text2 = this.createText(text);
String text3 = this.createText(text2, protocolPlayer);
String text4 = text3;
text3 = text4;
String text5 = text3;
return this.createText(text5, check, flagInfos);
}
public String createText(String text, ProtocolPlayer protocolPlayer) {
return text.replace("%player%", protocolPlayer.getUsername())
.replace("%uuid%", protocolPlayer.getUniqueId().toString());
}
private String createText(String text, Check check, FlagInfo[] flagInfos) {
StringBuilder stringBuilder = new StringBuilder(flagInfos.length == 0 ? ":(" : "\n");
int value = flagInfos.length;
for (int index = 0; index < value; index++) {
FlagInfo flagInfo = flagInfos[index];
LPXBukkit lPXBukkit = this.lpx;
ConfigManager configManager = lPXBukkit.getConfigManager();
Messages messages = configManager.getMessages();
StringBuilder stringBuilder2 =
stringBuilder
.append(messages.getSecondColor())
.append(flagInfo.getName())
.append(": ")
.append(ChatColor.GRAY);
String text2 = String.valueOf(flagInfo.getValue());
stringBuilder2.append(ColorUtils.escapeTags(text2)).append('\n');
}
return text.replace("%check%", check.getType().getCategory().getFormattedName())
.replace("%type%", check.getType().getId().name())
.replace("%vl%", check.getOptions().getVl() + "")
.replace("%infos%", stringBuilder.toString())
.replace("%description%", check.getType().getDescription())
.replace("%max-vl%", check.getOptions().getCheckOptions().getMaxVL() + "");
}
private void callEvent(Runnable runnable) {
if (PacketEvents.getAPI()
.getServerManager()
.getVersion()
.is(VersionComparison.NEWER_THAN_OR_EQUALS, ServerVersion.V_1_13)) {
FoliaScheduler.getGlobalRegionScheduler().execute(this.lpx.getPlugin(), runnable);
} else {
runnable.run();
}
}
private String createText(String text) {
return text.replace("%server%", this.lpx.getServer());
}
public void sendPermissionAlert(String text, String text2) {
Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
onlinePlayers.forEach(
result -> {
if (result.hasPermission(text2)
&& !this.values.contains(result.getUniqueId())) {
Player player = ((Player) result);
ColorUtils.handleText(player, text);
}
});
Logger logger = this.lpx.getLogger();
logger.log(Level.INFO, ColorUtils.createText(text));
}
public boolean testPlayer(Player player) {
UUID uniqueId = player.getUniqueId();
if (this.values.contains(uniqueId)) {
this.values.remove(uniqueId);
return true;
} else {
this.values.add(uniqueId);
return false;
}
}
public void handleValue(Object result) {
this.values.remove(result);
}
public void reload() {
this.discord.load();
}
public FileLogger getFileLogger() {
return this.fileLogger;
}
public Set<UUID> getValues() {
return this.values;
}
}