PlayerCulling
Плагин для Paper/Folia и мод для Fabric, созданные для того, чтобы игроки не могли видеть друг друга через стены с помощью читов (Anti-ESP).
- Загрузчики
- FabricPaperPurpurFolia
- Скачиваний на Modrinth
- 22,9 тыс.
- Подписчиков на Modrinth
- 57
- версии
- 22
- Обновлён
- 29 сентября 202629 сент.
- Опубликован
- в 2025
Коротко о моде
Ставится только на сервер; игрокам ставить не нужно
PlayerCulling

Описание
PlayerCulling — это античит-плагин и мод для серверов Minecraft. Он не даёт игрокам видеть других игроков сквозь стены с помощью читов. В нём используется уникальный асинхронный алгоритм трассировки лучей по вокселям с обходом граней, не создающий лишних аллокаций.
Возможности
- Асинхронный многопоточный отсев
- Алгоритм трассировки лучей по вокселям без аллокаций
- Продвинутая система планировщика
- Поддержка видимости ников, зелий, свечения и режима наблюдателя
- Воксельная окклюзия в масштабе 2x2x2 для неполных блоков
- Эффективное хранение данных о блоках окклюзии
- Почти мгновенные обновления блоков
- Лёгкое включение/отключение отсева глобально и для отдельных игроков
Обзор планировщика
PlayerCulling использует собственную многопоточную систему выполнения отсева. Благодаря ей PlayerCulling умеет масштабироваться под нагрузку сервера и справляется как с очень малым, так и с очень большим числом игроков, если хватает мощности CPU. Планировщик динамически запускает и останавливает потоки («контейнеры») в зависимости от того, сколько потоков нужно.Чтобы ограничить ресурсы, которые может использовать PlayerCulling, смотрите лимит потоков в конфигурации плагина. По умолчанию он ограничивается значением (число потоков CPU / 3).
Вот несколько примеров того, как работает планировщик PlayerCulling. Следующие примеры тестировались в окружении рабочего стола Arch Linux на CPU AMD Ryzen 5 3600X:
-
Один контейнер
Один контейнер справляется с нагрузкой в 42 игрока без особых проблем.
-
Два контейнера
Если нагрузка растёт, планировщик автоматически создаёт второй контейнер и распределяет игроков, чтобы сохранить запас. В этом примере в одной области собрано 55 игроков.
-
Очистка контейнеров
Если контейнер больше не используется из-за снижения нагрузки, сначала он переводится в режим ожидания. После истечения его времени жизни (TTL), если нагрузка снова не выросла, он автоматически очищается.
-
Высокая нагрузка
Теоретически система планирования способна масштабироваться до бесконечного числа контейнеров. Пока нагрузка растёт (и лимит контейнеров ещё не достигнут), планировщик автоматически продолжает добавлять новые контейнеры. В этом примере в одной области собрано 112 игроков.
-
Объединение контейнеров
Если нагрузка нескольких контейнеров слишком низкая, через несколько секунд они объединяются в один.
Обзор производительности
С помощью этого представления вы можете следить за производительностью PlayerCulling.Первый боссбар показывает информацию о контейнере с наибольшей нагрузкой и общую статистику планирования контейнеров:
- Количество Rаботающих контейнеров
- Количество Pриостановленных контейнеров
- Общее количество Tредов контейнеров
- Общее количество Raysteps за тик отсечения
Второй боссбар показывает нагрузку на кэш мира окклюзии, рабочие потоки, количество Cзавершённых задач, количество Sохранённых чанков и размер кэша чанков в байтах.
Третий боссбар показывает информацию об отсечённых игроках. Максимальное количество отсечённых игроков можно вычислить как (количество игроков) * (количество игроков - 1).
В этом примере всего 112 игроков находятся вместе на одной территории. Сервер работал в окружении рабочего стола Arch Linux с процессором AMD Ryzen 5 3600X.
Поддерживаемое ПО
| Версия сервера | Paper | Folia | Fabric |
|---|---|---|---|
| 26.3.x | ✅ | ❌ | ✅ |
| 26.2.x | ✅ | ✅ | ✅ |
| 26.1.x | ✅ | ✅ | ✅ |
| 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:
Использование
PlayerCulling устанавливается как любой другой плагин для Bukkit. Поместите jar-файл в вашу папку plugins. На Fabric также просто поместите jar-файл и перечисленные выше зависимости в вашу папку mods и перезапустите сервер.
Конфигурация
После первого запуска PlayerCulling автоматически создаст файл конфигурации. На Paper по пути plugins/PlayerCulling/config.yml или на Fabric config/playerculling.yml. Там вы сможете настроить следующие параметры:
config-version: Не трогайте этоscheduler:max-threads: Максимальное количество потоков, разрешённых к использованию (по умолчанию:потоки CPU / 3)cleanup-interval: Интервал проверки на очистку потоков в секундах (по умолчанию:30)container-ttl: Время жизни неиспользуемых потоков (по умолчанию:30)max-cull-time: Максимальное время, разрешённое потоку, в миллисекундах (по умолчанию:45)max-transfer-factor: Если процент нагрузки потока ниже этого коэффициента, ему разрешено принимать больше задач от других перегруженных потоков (по умолчанию:0.7)max-merge-factor: Если суммарный процент нагрузки двух потоков ниже этого коэффициента, этим двум потокам разрешено объединиться (по умолчанию:0.5)
culling:nametag-visibility-distance: Расстояние в блоках, на котором PlayerCulling будет проверять видимость неймтегов. Установите0, чтобы полностью игнорировать неймтеги (по умолчанию:64, ванильное значение)blacklisted_worlds: Список миров, в которых PlayerCulling должен быть отключён (по умолчанию:[])
updater:enabled: Включает/отключает проверку обновлений (по умолчанию:true)notify-admins: Уведомлять ли администраторов о новых релизах PlayerCulling (по умолчанию:true)interval-hours: Интервал проверки обновлений в часах (по умолчанию:24)
waypoint-mode: Режим для системы путевых точек, см. раздел Locator Bar / Waypoints для получения дополнительной информации. (по умолчанию:HIDDEN)
Примечание: если вы не уверены, что делает та или иная опция конфигурации, лучше оставить её значение по умолчанию.
Панель локатора / Путевые точки
Панель локатора была добавлена в Minecraft 1.21.6 и позволяет игрокам видеть направление на других игроков. Поскольку это раскрывало бы реальное местоположение игроков и сводило бы на нет смысл PlayerCulling, PlayerCulling по умолчанию отключает все путевые точки, связанные с игроками. Если вы всё же хотите использовать панель локатора, можете воспользоваться опцией waypoint-mode в файле конфигурации, подробнее см. ниже.
Примечание: игроки всё ещё могут вычислить реальные координаты X и Z других игроков, используйте режим hidden, чтобы предотвратить это
Доступны следующие режимы:
| Режим | Описание |
|---|---|
HIDDEN | PlayerCulling отключает все путевые точки, связанные с игроками (по умолчанию) |
AZIMUTH | PlayerCulling отправляет наблюдателю угол между игроками |
CULLED_AZIMUTH | PlayerCulling отправляет наблюдателю угол между игроками, если другой игрок виден наблюдателю |
VANILLA | Панель локатора не изменяется PlayerCulling, что делает PlayerCulling фактически бесполезным |
Разрешения
| Разрешение | Описание |
|---|---|
playerculling.update-notify | Если не отключено, игроки с этим разрешением будут получать уведомления об обновлениях |
playerculling.bypass | Игроки с этим разрешением игнорируются PlayerCulling и поэтому всегда могут видеть кого угодно. По возможности используйте команды (/playerculling toggle) или API вместо этого разрешения |
Разрешения для команд см. в таблице ниже.
Команды
| Команда | Описание | Разрешение |
|---|---|---|
/playerculling blockdebug [raw] [block] /playerculling blockdebug [block] | Проверяет статус перекрытия блока в поле зрения целевой сущности или указанного аргументом block. Аргумент raw указывает: если true — брать статус из мира Minecraft, если false — брать статус из кэша перекрытий PlayerCulling. | playerculling.command.blockdebug |
/playerculling chunkcache | Выдаёт информацию о сохранённых чанках в кэше перекрытий PlayerCulling. Если исполнитель — сущность, вы получите больше информации о чанке этой сущности. | playerculling.command.chunkcache |
/playerculling chunksizes | Выдаёт размер каждого чанка в байтах в мире исполнителя. Можно нажать на запись чанка, чтобы телепортироваться. | playerculling.command.chunksizes |
/playerculling cleancontainers [force] | Запускает процесс очистки вручную. Аргумент force определяет, проверять ли ttl или нет. | playerculling.command.cleancontainers |
| /playerculling viewcontainers | Переключает отображение планировщика контейнеров. Показывает статус, нагрузку и количество игроков. Обратите внимание: количество босс-баров ограничено размером вашего GUI, Minecraft отрисовывает босс-бары только на трети размера окна. | playerculling.command.viewcontainers | | /playerculling hidden | Показывает скрытый список исполнителя. | playerculling.command.hidden | | /playerculling performance | Переключает отображение производительности PlayerCulling, общего размера кэша окклюзии и количества отсеянных игроков. Обратите внимание: количество босс-баров ограничено размером вашего GUI, Minecraft отрисовывает босс-бары только на трети размера окна. | playerculling.command.performance | | `/playerculling raycastdebug [showRay]`
`/playerculling raycastdebug [blocks]`
`/playerculling raycastdebug [blocks] [showRay]| Проверяет, видит ли исполнительtarget-player, исполнитель должен быть игроком. Аргумент showRayвключает частицы лучей. Аргументblocksвыводит все проверенные блоки в луче. |playerculling.command.raycastdebug |
|/playerculling reloadconfig | Перезагружает конфигурацию. |playerculling.command.reloadconfig |
|/playerculling toggle global [enabled]`
`/playerculling toggle player [enabled] | Переключает PlayerCulling либо дляplayer-list, либо global. Аргумент enabled можно использовать, чтобы всегда включать (true) или отключать (false) PlayerCulling для цели -> без переключения. | playerculling.command.toggle, playerculling.command.toggle.global, playerculling.command.toggle.player` |
Примечание: [...] — необязательный аргумент, <...> — обязательный аргумент
PlayerCulling использует brigadier для команд, а значит командные блоки и датапаки тоже могут использовать эти команды. Кроме того, это также означает, что /execute распознаёт эти команды, и вы можете изменить исполнителя/местоположение выполняемой команды. Например:
/execute as Notch run playerculling hiddenпокажет вам скрытых игроков игрокаNotch, если он в сети/execute as @a run playerculling hiddenпокажет вам скрытых игроков всех, кто в сети
Настройка API
PlayerCulling нужно добавить как зависимость в plugin.yml независимо от используемой системы сборки. На Fabric добавь playerculling в файл fabric.mod.json.
Maven
<repositories>
<repository>
<id>minceraft</id>
<url>https://repo.minceraft.dev/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.pianoman911</groupId>
<artifactId>playerculling-api</artifactId>
<version>2.1.5</version>
<scope>provided</scope>
</dependency>
</dependencies>Gradle (groovy)
repositories {
maven {
url = 'https://repo.minceraft.dev/releases/'
name = 'minceraft'
}
}
dependencies {
compileOnly 'de.pianoman911:playerculling-api:2.1.5'
}Gradle (kotlin)
repositories {
maven("https://repo.minceraft.dev/releases/") {
name = "minceraft"
}
}
dependencies {
compileOnly("de.pianoman911:playerculling-api:2.1.5")
}Использование API
Пример базового плагина для Paper:
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
// this loads the player culling api from bukkit's services manager
PlayerCullingApi api = Bukkit.getServicesManager().load(PlayerCullingApi.class);
// example: disable culling for the player "Notch", if online
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;
}
// Toggle global culling
api.setCullingEnabled(false);
});
}
}Сборка
- Клонируй проект (
git clone https://github.com/MinceraftMC/PlayerCulling.git) - Перейди в склонированную папку (
cd PlayerCulling) - Собери jar (
./gradlew buildна Linux/MacOS,gradlew buildна Windows)
Готовые jar-файлы PlayerCulling можно найти в папке build → libs.
Участие в разработке
Если хочешь внести свой вклад в PlayerCulling — форкай репозиторий и создавай pull request. Пожалуйста, соблюдай стиль кода и соглашения, принятые в проекте. Если есть вопросы или нужна помощь — спрашивай в нашем Discord.
Проверить свои изменения можно, запустив ./gradlew plugin-paper:runServer или ./gradlew platform-fabric:runServer. Это запустит локальный сервер для разработки с автоматически установленным скомпилированным плагином или модом. Можно совместить с отладчиком твоей IDE.
Учти, что проверка обновлений автоматически отключается при запуске в среде разработки.
Частые вопросы
Как установить PlayerCulling?
Установите Fabric под свою версию Minecraft, скачайте PlayerCulling под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть PlayerCulling?
У PlayerCulling есть сборки для Minecraft 1.21–26.3.
Нужен ли PlayerCulling на сервере?
Ставится только на сервер; игрокам ставить не нужно