Files
KauriV3-mirror/src/main/java/dev/brighten/ac/check/Check.java
T
2022-08-16 11:46:39 -04:00

136 lines
5.0 KiB
Java

package dev.brighten.ac.check;
import dev.brighten.ac.Anticheat;
import dev.brighten.ac.data.APlayer;
import dev.brighten.ac.utils.*;
import dev.brighten.ac.utils.timer.Timer;
import dev.brighten.ac.utils.timer.impl.MillisTimer;
import lombok.Getter;
import lombok.val;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import java.util.*;
@Getter
public abstract class Check {
private final APlayer player;
private final CheckData checkData;
private int vl;
private long lastFlagRun;
private final Timer lastAlert = new MillisTimer();
public static List<UUID> alertsEnabled = new ArrayList<>();
public static final Map<String, List<Tuple<UUID, UUID>>> debugInstances = new HashMap<>();
public Check(APlayer player) {
this.player = player;
this.checkData = getClass().getAnnotation(CheckData.class);
}
private String formatAlert(String toFormat, String info) {
return addPlaceHolders(Color.translate(toFormat.replace("%desc%", String.join("\n",
MiscUtils
.splitIntoLine("", 20))))
.replace("%info%", info));
}
private String addPlaceHolders(String string) {
return string.replace("%player%", player.getBukkitPlayer().getName())
.replace("%check%", checkData.name())
.replace("%name%", player.getBukkitPlayer().getName())
.replace("%vl%", String.valueOf(MathUtils.round(vl, 1)));
}
public void cancel() {
if(checkData.type() == CheckType.COMBAT) {
player.hitsToCancel++;
} else {
player.getInfo().getLastCancel().reset();
KLocation fromLoc = player.getInfo().getLastKnownGoodPosition() != null
? player.getInfo().getLastKnownGoodPosition() : player.getMovement().getFrom().getLoc();
player.getBukkitPlayer().teleport(fromLoc.toLocation(player.getBukkitPlayer().getWorld()));
}
}
public void debug(String information, Object... variables) {
if(!Anticheat.allowDebug) return;
if(debugInstances.containsKey(checkData.name())) {
val list = debugInstances.get(checkData.name());
for (Tuple<UUID, UUID> tuple : list) {
UUID toDebug = tuple.one;
if(!toDebug.equals(player.getUuid())) continue;
ComponentBuilder builder = new ComponentBuilder("[DEBUG] ").color(ChatColor.RED);
BaseComponent[] message =
builder.append(String.format(information, variables)).color(ChatColor.GRAY).create();
Anticheat.INSTANCE.getPlayerRegistry().getPlayer(tuple.two)
.ifPresent(player -> player.getBukkitPlayer().spigot().sendMessage(message));
}
}
}
public void flag(String information, Object... variables) {
vl++;
if(System.currentTimeMillis() - lastFlagRun < 50L) return;
Anticheat.INSTANCE.getScheduler().execute(() -> {
if(Anticheat.INSTANCE.getTps() < 18)
vl = 0;
lastFlagRun = System.currentTimeMillis();
final String finalInformation = String.format(information, variables);
boolean dev = Anticheat.INSTANCE.getTps() < 18;
final String info = finalInformation
.replace("%p", String.valueOf(player.getLagInfo().getTransPing()))
.replace("%t", String.valueOf(MathUtils.round(Anticheat.INSTANCE.getTps(), 2)));
//if(vl > 0) Anticheat.INSTANCE.loggerManager.addLog(player, this, info);
//Sending Discord webhook alert
List<TextComponent> components = new ArrayList<>();
if(dev) {
components.add(new TextComponent(createTxt("&8[&cDev&8] ")));
}
val text = createTxt("&8[&4!&8] &f%player% &7flagged &f%check%" +
" &8(&ex%vl%&8)", info);
text.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[] {
createTxt("&eDescription&8: &f%desc%" +
"\n&eInfo: &f%info%\n&r\n&7&oClick to teleport to player.", info)}));
components.add(text);
TextComponent[] toSend = components.toArray(new TextComponent[0]);
for (UUID uuid : alertsEnabled) {
Anticheat.INSTANCE.getPlayerRegistry().getPlayer(uuid)
.ifPresent(apl -> apl.getBukkitPlayer().spigot().sendMessage(toSend));
}
lastAlert.reset();
});
}
private TextComponent createTxt(String txt) {
return createTxt(txt, "");
}
private TextComponent createTxt(String txt, String info) {
return new TextComponent(TextComponent.fromLegacyText(Color.translate(formatAlert(txt, info))));
}
}