/
minecraftbackup
/
AnarchyExploitFixes
Обзор
Документация
Войти
/
minecraftbackup
/
AnarchyExploitFixes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
AnarchyExploitFixesFolia/src/main/java/me/xginko/aef/modules/packets/WindowClickCrash.java
85 строк
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.WrapperPlayClientClickWindow; import org.bukkit.entity.HumanEntity; public class WindowClickCrash extends PacketModule { private final boolean log, kick; public WindowClickCrash() { super("patches.window-click-crash-patch", PacketListenerPriority.HIGHEST); config.addComment(configPath + ".enable", """ Patches a variety of different lag and crash methods that work\s by sending invalid Window Click packets, causing the server to\s dump error logs until it runs out of memory."""); 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.CLICK_WINDOW) return; WrapperPlayClientClickWindow packet = new WrapperPlayClientClickWindow(event); int button = packet.getButton(); if (button < 0 || button > 10 && button != 40 && button != 99) { event.setCancelled(true); onCancel(log, kick, event.getUser()); return; } int slot = packet.getSlot(); if (event.getPlayer() != null) { if (((HumanEntity) event.getPlayer()).getOpenInventory().countSlots() < slot) { event.setCancelled(true); onCancel(log, kick, event.getUser()); return; } } if (slot != -999 && slot != -1) { if (slot < 0) { event.setCancelled(true); onCancel(log, kick, event.getUser()); } return; } if (button == 40) { event.setCancelled(true); onCancel(log, kick, event.getUser()); return; } switch (packet.getWindowClickType()) { case SWAP, PICKUP_ALL -> { event.setCancelled(true); onCancel(log, kick, event.getUser()); } case THROW -> { if (slot == -1) { event.setCancelled(true); onCancel(log, kick, event.getUser()); } } case QUICK_MOVE -> { if (slot == -999) { event.setCancelled(true); onCancel(log, kick, event.getUser()); } } } } }