
PlayerCulling
Плагин/мод PlayerCulling для Paper, Folia и Fabric, который скрывает игроков за стенами, чтобы читеры не видели их через текстуры. Асинхронный рейкастинг, поддержка 1.21, настраиваемая производительность.
PlayerCulling - это античит-решение для серверов Майнкрафт, которое решает старую проблему: игроки с читами могут видеть других игроков сквозь стены, используя ESP или подобные хаки. Вместо того чтобы бороться с каждым читом по отдельности, PlayerCulling просто не даёт клиенту знать о существовании других игроков за препятствиями. Работает как плагин для Paper/Folia и как мод для Fabric.
Как это работает
В основе лежит собственный алгоритм воксельного рейкастинга (voxel stepping-faced-ray-casting) без аллокаций - то есть без лишней нагрузки на сборщик мусора. Всё выполняется асинхронно, в несколько потоков. Система сама решает, сколько потоков запускать, и динамически подстраивается под нагрузку сервера. Если на сервере 10 игроков - будет один поток, если 100 - система сама масштабируется.
Возможности
- Асинхронное скрытие - не лагает сервер, работает в фоне
- Умный планировщик - сам запускает и останавливает потоки по необходимости
- Поддержка видимости табличек с никами - можно настроить дистанцию, на которой они появляются
- Зелья, свечение и режим наблюдения - всё учитывается
- Воксельная окклюзия 2x2x2 - корректно обрабатывает неполные блоки (плиты, ступени)
- Мгновенное обновление блоков - как только блок поставили или сломали, система пересчитывает видимость
- Глобальное и по-игроковое включение/отключение - можно выдать ивнуль-байпас определённым игрокам
Поддерживаемые версии и софт
| Версия сервера | Paper | Folia | Fabric |
|---|---|---|---|
| 1.21.11 | ✅ | ✅ | ✅ |
| 1.21.10 | ✅ | ✅ | ✅ |
| 1.21.9 | ✅ | ✅ | ✅ |
| 1.21.8 | ✅ | ✅ | ✅ |
| 1.21.7 | ✅ | ✅ | ✅ |
| 1.21.6 | ✅ | ✅ | ✅ |
| 1.21.5 | ✅ | ✅ | ✅ |
| 1.21.4 | ✅ | ✅ | ✅ |
| 1.21.3 | ✅ | ❌ | ❌ |
| 1.21.2 | ✅ | ❌ | ❌ |
| 1.21.1 | ✅ | ❌ | ❌ |
| 1.21 | ✅ | ❌ | ❌ |
Для Fabric требуется Fabric API.
Установка и настройка
Всё стандартно: кидаешь jar в plugins/ (Paper/Folia) или в mods/ (Fabric), перезапускаешь сервер. После первого запуска создаётся конфиг:
- На Paper:
plugins/PlayerCulling/config.yml - На Fabric:
config/playerculling.yml
Основные опции конфига
scheduler.max-threads- максимальное количество потоков (по умолчанию число ядер CPU / 3)scheduler.cleanup-interval- как часто проверять, не пора ли остановить лишние потоки (в секундах)scheduler.container-ttl- время жизни неиспользуемого потока (в секундах)scheduler.max-cull-time- максимальное время на один цикл скрытия (в миллисекундах)culling.nametag-visibility-distance- дистанция, на которой видны ники (0 - отключить)culling.blacklisted_worlds- миры, где PlayerCulling не работаетwaypoint-mode- режим работы локаторной панели (см. ниже)
Если не уверен, что делает опция - лучше оставь значение по умолчанию.
Локаторная панель (Locator Bar / Waypoints)
Начиная с Minecraft 1.21.6, в игре появилась панель, показывающая направление на других игроков. PlayerCulling по умолчанию отключает все связанные с игроками waypoint'ы, иначе смысл плагина теряется. Но если хочешь оставить частичную функциональность, есть режимы:
| Режим | Описание |
|---|---|
HIDDEN | Полностью отключает все waypoint'ы игроков (по умолчанию) |
AZIMUTH | Показывает угол между игроками, но не точное направление |
CULLED_AZIMUTH | Показывает угол только если другой игрок виден |
VANILLA | Не вмешивается в локаторную панель - делает PlayerCulling бесполезным |
Важно: Даже в режиме AZIMUTH игроки могут триангулировать реальные координаты, так что HIDDEN - самый безопасный вариант.
Права (Permissions)
playerculling.update-notify- получать уведомления об обновленияхplayerculling.bypass- игнорироваться PlayerCulling (видеть всех всегда). Лучше использовать команду/playerculling toggleили API вместо этого права, если можно
Команды
| Команда | Описание | Право |
|---|---|---|
/playerculling blockdebug [raw] [block] | Проверяет, перекрывает ли блок обзор | playerculling.command.blockdebug |
/playerculling chunkcache | Информация о закэшированных чанках | playerculling.command.chunkcache |
/playerculling chunksizes | Размер каждого чанка в байтах (можно кликнуть для телепорта) | playerculling.command.chunksizes |
/playerculling cleancontainers [force] | Принудительная очистка потоков | playerculling.command.cleancontainers |
/playerculling viewcontainers | Показывает статус планировщика (нагрузка, количество игроков) | playerculling.command.viewcontainers |
/playerculling hidden | Показывает список скрытых игроков | playerculling.command.hidden |
/playerculling performance | Показывает производительность, размер кэша, количество скрытых игроков | playerculling.command.performance |
/playerculling raycastdebug <target> [showRay] [blocks] | Проверяет, видит ли игрок цель (с частицами и списком блоков) | playerculling.command.raycastdebug |
/playerculling reloadconfig | Перезагружает конфиг | playerculling.command.reloadconfig |
/playerculling toggle global [enabled] | Включает/выключает PlayerCulling глобально | playerculling.command.toggle.global |
/playerculling toggle player <player-list> [enabled] | Включает/выключает для конкретных игроков | playerculling.command.toggle.player |
Команды работают через brigadier, так что их можно использовать в командных блоках и датапаках, а также с /execute.
API для разработчиков
Если ты пишешь плагин или мод и хочешь взаимодействовать с PlayerCulling, подключи API:
Maven:
<repository>
<id>minceraft</id>
<url>https://repo.minceraft.dev/releases/</url>
</repository>
<dependency>
<groupId>de.pianoman911</groupId>
<artifactId>playerculling-api</artifactId>
<version>2.1.4-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
Gradle (groovy):
repositories {
maven { url 'https://repo.minceraft.dev/releases/' }
}
dependencies {
compileOnly 'de.pianoman911:playerculling-api:2.1.4-SNAPSHOT'
}
Gradle (kotlin):
repositories {
maven("https://repo.minceraft.dev/releases/")
}
dependencies {
compileOnly("de.pianoman911:playerculling-api:2.1.4-SNAPSHOT")
}
Пример использования в плагине Paper:
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
PlayerCullingApi api = Bukkit.getServicesManager().load(PlayerCullingApi.class);
Player player = Bukkit.getPlayer("Notch");
if (player != null) {
api.setCullingEnabled(player.getUniqueId(), false);
}
}
}
Пример для Fabric:
public class ExampleMod implements ModInitializer {
@Override
public void onInitialize() {
FabricLoader.getInstance().getObjectShare().whenAvailable("playerculling:api", (__, obj) -> {
if (!(obj instanceof PlayerCullingApi api)) return;
api.setCullingEnabled(false);
});
}
}
Сборка из исходников
Если хочешь собрать сам:
- Клонируешь репозиторий:
git clone https://github.com/MinceraftMC/PlayerCulling.git - Переходишь в папку:
cd PlayerCulling - Собираешь:
./gradlew build(Linux/Mac) илиgradlew build(Windows)
Готовые jar'ники будут в build/libs.
Итог
PlayerCulling - это must-have для любого сервера, где есть PvP или просто много игроков. Он не блокирует читы напрямую, но делает бесполезными ESP-хаки, которые показывают игроков сквозь стены. Работает быстро, не жрёт ресурсы, легко настраивается. Если собираешь сервер на 1.21 - однозначно стоит поставить.
