/
minecraftbackup
/
AnarchyExploitFixes
Обзор
Документация
Войти
/
minecraftbackup
/
AnarchyExploitFixes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
AnarchyExploitFixesFolia/src/main/java/me/xginko/aef/modules/packets/SignLag.java
68 строк
3 KB
Ginko
2.7.2 release (#233)
13 авг 2024, 08:21
Не верифицирован
13 авг 2024, 08:21
d20da6e
Код
Авторство
О чём код?
package me.xginko.aef.modules.packets; import com.github.retrooper.packetevents.event.PacketListenerPriority; import com.github.retrooper.packetevents.event.PacketReceiveEvent; import com.github.retrooper.packetevents.protocol.packettype.PacketType; import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientUpdateSign; import me.xginko.aef.utils.models.ExpiringSet; import java.time.Duration; import java.util.UUID; public class SignLag extends PacketModule { private final ExpiringSet<UUID> cooldowns; private final int line_char_limit, total_char_limit; private final boolean log, kick; public SignLag() { super("patches.sign-lag", PacketListenerPriority.HIGHEST); config.addComment(configPath + ".enable", """ Patches a lag exploit that involves sending specific oversized\s sign edit packets."""); this.cooldowns = new ExpiringSet<>(Duration.ofMillis(Math.max(1, config.getInt(configPath + ".packet-delay-in-ticks", 10, "How many ticks a player needs to wait to be able to send\n" + "another sign update packet (renaming or writing).")) * 50L)); this.line_char_limit = config.getInt(configPath + ".line-character-limit", 80, "Vanilla limit is 384 characters per line, which can be too much."); this.total_char_limit = config.getInt(configPath + ".total-char-limit", 384, "General char limit for all lines combined."); this.log = config.getBoolean(configPath + ".log", false); this.kick = config.getBoolean(configPath + ".kick-player", false); } @Override public boolean shouldEnable() { return config.getBoolean(configPath + ".enable", true); } @Override public void onPacketReceive(PacketReceiveEvent event) { if (event.isCancelled()) return; if (event.getPacketType() != PacketType.Play.Client.UPDATE_SIGN) return; if (cooldowns.contains(event.getUser().getUUID())) return; cooldowns.add(event.getUser().getUUID()); int sum = 0; for (String line : new WrapperPlayClientUpdateSign(event).getTextLines()) { int chars = line.length(); if (chars > line_char_limit) { event.setCancelled(true); onCancel(log, kick, event.getUser()); return; } sum += chars; if (sum > total_char_limit) { event.setCancelled(true); onCancel(log, kick, event.getUser()); return; } } } }