Skip to content

Instantly share code, notes, and snippets.

@Kamillaova
Created November 10, 2021 00:16
Show Gist options
  • Save Kamillaova/a3b54d4a26317d4801ee6c3097d79631 to your computer and use it in GitHub Desktop.
Save Kamillaova/a3b54d4a26317d4801ee6c3097d79631 to your computer and use it in GitHub Desktop.
package kamillaova.botscommand;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.scheduler.ScheduledTask;
import java.util.concurrent.TimeUnit;
@SuppressWarnings("unused") // Убрать предупреждение Class 'BotsProtection' is never used
public class BotsProtection extends Plugin {
private int lastJoinedPlayers = 0; // Сколько зашло игроков в пред. проверке (Строка 31)
private int joinedPlayers = 0; // Сколько игроков зашло за 30 сек (Строка 30)
private ScheduledTask checkTask; // Скорее всего не нужно, но пусть будет. Для остановки таска проверки при отключении плагина (Чек —
// строку 56
private boolean isProtectionOn = false; // Статус защиты
// Проверка - защита от ботов (bf protection)
@Override
public void onEnable() { // Запускается при включении сервера
CommandSender console = getProxy().getConsole(); // Получает отправителя команд "КОНСОЛЬ", можно заинлайнить, делаю так чтоб —
// строки 37 и 44 были короче
checkTask = getProxy().getScheduler()
.schedule(this, () -> { // Таск который запускается каждые 30 (30L, SECONDS) секунд, в нем собственно и идут все проверки.
joinedPlayers = getProxy().getOnlineCount() - lastJoinedPlayers; // Сколько игроков зашло с пред. проверки
lastJoinedPlayers = getProxy().getOnlineCount(); // Установка текущ кол ва игроков для след. проверки
if (joinedPlayers > 70) { // Если кол во зашедших игроков больше 70 - то
if (!isProtectionOn) { // Проверить включеня ли щас проверка, если нет - то
isProtectionOn = true; // Устанавливается статус что проверка включена
getProxy().getPluginManager()
.dispatchCommand(console, "bf protection on"); // Отправляет команду от имени консоли
getProxy().getScheduler()
.schedule(this, () -> { // Запускает таск на отключение проверки через 5 минут (5L, MINUTES)
if (joinedPlayers < 70) { // Если кол во зашедших игроков было меньше 70 - отключить проверку
isProtectionOn = false; // Устанавливается статус проверки - отключена
getProxy().getPluginManager()
.dispatchCommand(console, "bf protection off"); // Отправляет команду от имени консоли
} // Если больше - ничего не делать, если что, след такой же таск запустится через 30 секунд
}, 5L, TimeUnit.MINUTES); // 5L (задержка) через сколько TimeUnit (Тут - минуты) он запустится
} // Если проверка включена - ниччего не делать
} // Если кол во зашедших игроков меньше 70 - ничего не делать
}, 0L, 30L, TimeUnit.SECONDS); // 30L (период) раз в сколько TimeUnit (Тут - секунды) таск будет запускаться
}
// Если что, L на конце числа означает то, что тип числа - long (по умолчанию - int)
@Override
public void onDisable() {
checkTask.cancel(); // Отключение таска на проверку, не знаю зачем.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment