Перейти к содержимому

PlayerCulling

Плагин для Paper/Folia и мод для Fabric, созданные для того, чтобы игроки не могли видеть друг друга через стены с помощью читов (Anti-ESP).

FabricPaperPurpurFolia
Загрузчики
FabricPaperPurpurFolia
Скачиваний на Modrinth
22,9 тыс.
Подписчиков на Modrinth
57
версии
22
Обновлён
29 сентября 202629 сент.
Опубликован
в 2025
PlayerCulling Example — An example where all players get hidden from the viewer as soon as after the viewer looks away · свайп

Коротко о моде

Работает на Fabric, Paper, Purpur и Folia
Для Minecraft 1.21–26.3
Ставится только на сервер; игрокам ставить не нужно
Последняя версия — 2.1.6+fabric от 29 сентября 2026
Лицензия AGPL-3.0-or-later — бесплатно
Где нужен
В игрене нуженНа сервереобязателен

Ставится только на сервер; игрокам ставить не нужно

Версии игры1.21–26.3
Описание переведено автоматическиПоказать оригинал (EN)

PlayerCulling

logo

GitHub tag (latest by date) AGPLv3 License Status Beta Discord

Описание

PlayerCulling — это античит-плагин и мод для серверов Minecraft. Он не даёт игрокам видеть других игроков сквозь стены с помощью читов. В нём используется уникальный асинхронный алгоритм трассировки лучей по вокселям с обходом граней, не создающий лишних аллокаций.

Возможности

  • Асинхронный многопоточный отсев
  • Алгоритм трассировки лучей по вокселям без аллокаций
  • Продвинутая система планировщика
  • Поддержка видимости ников, зелий, свечения и режима наблюдателя
  • Воксельная окклюзия в масштабе 2x2x2 для неполных блоков
  • Эффективное хранение данных о блоках окклюзии
  • Почти мгновенные обновления блоков
  • Лёгкое включение/отключение отсева глобально и для отдельных игроков
Обзор планировщика PlayerCulling использует собственную многопоточную систему выполнения отсева. Благодаря ей PlayerCulling умеет масштабироваться под нагрузку сервера и справляется как с очень малым, так и с очень большим числом игроков, если хватает мощности CPU. Планировщик динамически запускает и останавливает потоки («контейнеры») в зависимости от того, сколько потоков нужно.

Чтобы ограничить ресурсы, которые может использовать PlayerCulling, смотрите лимит потоков в конфигурации плагина. По умолчанию он ограничивается значением (число потоков CPU / 3).

Вот несколько примеров того, как работает планировщик PlayerCulling. Следующие примеры тестировались в окружении рабочего стола Arch Linux на CPU AMD Ryzen 5 3600X:

  • Один контейнер Один контейнер справляется с нагрузкой в 42 игрока без особых проблем.

    Один контейнер отсева с несколькими игроками
  • Два контейнера Если нагрузка растёт, планировщик автоматически создаёт второй контейнер и распределяет игроков, чтобы сохранить запас. В этом примере в одной области собрано 55 игроков.

    Два контейнера отсева с чуть большим числом игроков
  • Очистка контейнеров Если контейнер больше не используется из-за снижения нагрузки, сначала он переводится в режим ожидания. После истечения его времени жизни (TTL), если нагрузка снова не выросла, он автоматически очищается.

    Один контейнер отсева, который очищается после истечения его TTL
  • Высокая нагрузка Теоретически система планирования способна масштабироваться до бесконечного числа контейнеров. Пока нагрузка растёт (и лимит контейнеров ещё не достигнут), планировщик автоматически продолжает добавлять новые контейнеры. В этом примере в одной области собрано 112 игроков.

    Множество контейнеров отсева с большим числом игроков
  • Объединение контейнеров Если нагрузка нескольких контейнеров слишком низкая, через несколько секунд они объединяются в один.

    Несколько контейнеров отсева с низкой нагрузкой объединяются в один контейнер отсева
Обзор производительности С помощью этого представления вы можете следить за производительностью PlayerCulling.

Первый боссбар показывает информацию о контейнере с наибольшей нагрузкой и общую статистику планирования контейнеров:

  • Количество Rаботающих контейнеров
  • Количество Pриостановленных контейнеров
  • Общее количество Tредов контейнеров
  • Общее количество Raysteps за тик отсечения

Второй боссбар показывает нагрузку на кэш мира окклюзии, рабочие потоки, количество Cзавершённых задач, количество Sохранённых чанков и размер кэша чанков в байтах.

Третий боссбар показывает информацию об отсечённых игроках. Максимальное количество отсечённых игроков можно вычислить как (количество игроков) * (количество игроков - 1).

В этом примере всего 112 игроков находятся вместе на одной территории. Сервер работал в окружении рабочего стола Arch Linux с процессором AMD Ryzen 5 3600X.

Обзор производительности с 42 игроками

Поддерживаемое ПО

Версия сервераPaperFoliaFabric
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, чтобы предотвратить это

Доступны следующие режимы:

РежимОписание
HIDDENPlayerCulling отключает все путевые точки, связанные с игроками (по умолчанию)
AZIMUTHPlayerCulling отправляет наблюдателю угол между игроками
CULLED_AZIMUTHPlayerCulling отправляет наблюдателю угол между игроками, если другой игрок виден наблюдателю
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);
        });
    }
}

Сборка

  1. Клонируй проект (git clone https://github.com/MinceraftMC/PlayerCulling.git)
  2. Перейди в склонированную папку (cd PlayerCulling)
  3. Собери 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 на сервере?

Ставится только на сервер; игрокам ставить не нужно

Лицензия и источник
GNU Affero General Public License v3.0 or laterможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее