Перейти к содержанию

InternationalBans — Умная cистема банов


Рекомендуемые сообщения

В теме 5 сообщений

InternationalBans — это современный плагин для централизованного управления наказаниями на серверах Minecraft версии 1.21+. Он позволяет объединить несколько серверов в единую сеть и синхронизировать баны, муты и предупреждения между ними через MySQL. Идеальное решение для проектов с несколькими игровыми режимами или лобби.

🔥 Ключевые возможности

· Синхронизация наказаний. Бан на одном сервере автоматически блокирует вход нарушителю на всех серверах сети, подключенных к общей базе данных.

· Гибкий арсенал команд. Поддерживаются как перманентные, так и временные баны, IP-баны, муты, кики и предупреждения с автобаном (/ban, /tempban, /mute, /warn и др.).

· Двойное хранилище. Вы можете использовать быстрый MySQL для синхронизации или простой YAML для локального использования на одном сервере.

· Причины с ID. Вместо ввода длинного текста модераторы используют короткие ID (например, 1.1), а плагин сам подставляет готовую причину и настройки из конфига.

· Дружелюбный интерфейс. HEX-цвета (&#RRGGBB) в сообщениях, информативный /history, табуляция для всех команд и подробные комментарии в конфигах на русском языке.

🎯 Для кого этот плагин

· Владельцы сетей серверов (MiniGames, RPG, SkyBlock и т.д.), где нужна единая система наказаний.

· Администраторы отдельных проектов, которым нужен мощный, но понятный инструмент для модерации.

· Все, кто ищет альтернативу платным аналогам без потери функциональности.

📥 Установка

1. Поместите .jar-файл в папку plugins каждого сервера сети.

2. Настройте подключение к вашей MySQL базе данных в файле database.yml.

3. Перезапустите серверы или перезагрузите плагин командой /reload.

⚙️ Системные требования

· Minecraft Server: версии 1.21+ (Paper, Purpur).

· Java: 17 или новее для сервера.

· MySQL: версии 5.7+ или 8.0+.

📜 Лицензия

Проект защищен пользовательской лицензией. Вы можете бесплатно использовать плагин на своих серверах, включая коммерческие проекты, и даже изменять код под себя. Однако запрещено выкладывать готовый .jar-файл или исходный код на сторонних ресурсах без разрешения автора.

🔗 Ссылки

· Скачать плагин (Releases): https://github.com/MrDevive/InternationalBans/releases

· Исходный код и документация: https://github.com/MrDevive/InternationalBans

Ссылка на комментарий
Поделиться на другие сайты

  • Devive изменил название на InternationalBans — Умная cистема банов
  • 2 месяца спустя...

А у вас плагин через IDE нейросетевую сделан)

Объяснение:

Комментарий только на одной строке с функцией

public FileConfiguration getPluginConfig() {  // Возвращаем FileConfiguration
        return pluginConfig;
    }

 

Исправление без коммита а чисто комментарием
 

private FileConfiguration pluginConfig;  // Исправлено: FileConfiguration вместо YamlConfiguratio

Возможно притянуто за уши, но форматирование очень похожее на обычный закос под MD
 

getLogger().info("=========================================");
        getLogger().info("InternationalBans успешно загружен!");
        getLogger().info("Версия: " + getDescription().getVersion());
        getLogger().info("База данных: " + (databaseConfig.getBoolean("mysql.enabled") ? "MySQL" : "YAML"));
        getLogger().info("=========================================");


Ну самый весомый аргумент Эмодзи в README.MD
Вишенка Custom License в репозитории GIT. Конкретно под ваш случай вам подходит хммм....ЛЮБАЯ. Лучше всего GNU GPL.
 

Цитата

Если вы используете хоть строчку кода под GPL, свой итоговый проект вы тоже обязаны сделать открытым (публичным) под той же лицензией.

Либо MIT

Цитата

Разрешает делать с кодом всё (даже продавать), нужно лишь сохранить имя автора

 

Ссылка на комментарий
Поделиться на другие сайты

Что касается самого кода, может быть напишу вам issues

Начнем с простого какого-то лешего JoinListener.onPlayerLogin на главном потоке вызывает isBanned...синхронно....на высоком приоритете...
Т.е включаем MySQL и получаем гарантированные лаги из-за блокировки JDBC-запроса.

 

getActiveIpBan -- заглушка

removeActivePunishmentsByIp -- не реализован

 

Кеш? хммм...пусть нейросеть объяснит
 

Цитата

Несогласованность кэша и БД в DatabaseManager. updateCache() при добавлении наказания всегда ставит bannedStatusCache.put(uuid, true), если тип банного — даже если punishment.isActive()==false не проверяется корректно (снятие статуса не отражается локально до вызова invalidateCache), а invalidateCache делает лишний повторный синхронный SQL-запрос сразу после updatePunishmentStatus, увеличивая число блокирующих обращений к БД.

Первых вход после старта сервера будет насиловать вашу систему.
databaseManager.loadAllPunishments().thenRun( грузит асинхронно данные в фоне при этом великий onEnable по какой то причине не ждёт завершения загрузки.
Чем черевато? Ну например тем что если игрок заходит сразу после старта сервера, проверка бана может пройти по неполному кэшу.

 

Это лишь малая часть того что я бегло заметил.

Будьте умнее сер, если используете нейроны IDE, используйте и свои. На крайний случай поставьте дополнительного агента который будет рулить не состыковками кода и безопасности.
Делайте плагин модульно. Помните модель деградирует с каждым запросом из-за того что токен контекстного окна кушает много чисто на память о том что оно сделало раньше.
Новый модуль==новое окно чата.

Как избежать проблем сжирания контекста на изучение структуры? Описывайте файлом IDE например для cursor это .cursor
для TRAE это как не странно .trae
Помещайте туда rules.md
В корне проекта создайте AGENTS.MD где опишите то где находятся файлы документации для игрока, разработчика, администратора.
Если IDE не умеет то пропишите там же правила, что можно что нельзя. 

 

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, BeastMark сказал:

Что касается самого кода, может быть напишу вам issues

Начнем с простого какого-то лешего JoinListener.onPlayerLogin на главном потоке вызывает isBanned...синхронно....на высоком приоритете...
Т.е включаем MySQL и получаем гарантированные лаги из-за блокировки JDBC-запроса.

 

getActiveIpBan -- заглушка

removeActivePunishmentsByIp -- не реализован

 

Кеш? хммм...пусть нейросеть объяснит
 

Первых вход после старта сервера будет насиловать вашу систему.
databaseManager.loadAllPunishments().thenRun( грузит асинхронно данные в фоне при этом великий onEnable по какой то причине не ждёт завершения загрузки.
Чем черевато? Ну например тем что если игрок заходит сразу после старта сервера, проверка бана может пройти по неполному кэшу.

 

Это лишь малая часть того что я бегло заметил.

Будьте умнее сер, если используете нейроны IDE, используйте и свои. На крайний случай поставьте дополнительного агента который будет рулить не состыковками кода и безопасности.
Делайте плагин модульно. Помните модель деградирует с каждым запросом из-за того что токен контекстного окна кушает много чисто на память о том что оно сделало раньше.
Новый модуль==новое окно чата.

Как избежать проблем сжирания контекста на изучение структуры? Описывайте файлом IDE например для cursor это .cursor
для TRAE это как не странно .trae
Помещайте туда rules.md
В корне проекта создайте AGENTS.MD где опишите то где находятся файлы документации для игрока, разработчика, администратора.
Если IDE не умеет то пропишите там же правила, что можно что нельзя. 

 

ахахаххах вот кому-то рил занятся нечем, ноунейм плагины разбирать

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, Shomen сказал:

ахахаххах вот кому-то рил занятся нечем, ноунейм плагины разбирать

))))
Ну блин на форуме тыщу лет не был надо же с чего то начинать

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...