▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/PlayerCulling
PlayerCulling

PlayerCulling

Плагин/мод PlayerCulling для Paper, Folia и Fabric, который скрывает игроков за стенами, чтобы читеры не видели их через текстуры. Асинхронный рейкастинг, поддержка 1.21, настраиваемая производительность.

Оцените первым
18.0K
44

PlayerCulling - это античит-решение для серверов Майнкрафт, которое решает старую проблему: игроки с читами могут видеть других игроков сквозь стены, используя ESP или подобные хаки. Вместо того чтобы бороться с каждым читом по отдельности, PlayerCulling просто не даёт клиенту знать о существовании других игроков за препятствиями. Работает как плагин для Paper/Folia и как мод для Fabric.

Как это работает

В основе лежит собственный алгоритм воксельного рейкастинга (voxel stepping-faced-ray-casting) без аллокаций - то есть без лишней нагрузки на сборщик мусора. Всё выполняется асинхронно, в несколько потоков. Система сама решает, сколько потоков запускать, и динамически подстраивается под нагрузку сервера. Если на сервере 10 игроков - будет один поток, если 100 - система сама масштабируется.

Возможности

  • Асинхронное скрытие - не лагает сервер, работает в фоне
  • Умный планировщик - сам запускает и останавливает потоки по необходимости
  • Поддержка видимости табличек с никами - можно настроить дистанцию, на которой они появляются
  • Зелья, свечение и режим наблюдения - всё учитывается
  • Воксельная окклюзия 2x2x2 - корректно обрабатывает неполные блоки (плиты, ступени)
  • Мгновенное обновление блоков - как только блок поставили или сломали, система пересчитывает видимость
  • Глобальное и по-игроковое включение/отключение - можно выдать ивнуль-байпас определённым игрокам

Поддерживаемые версии и софт

Версия сервераPaperFoliaFabric
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);
        });
    }
}

Сборка из исходников

Если хочешь собрать сам:

  1. Клонируешь репозиторий: git clone https://github.com/MinceraftMC/PlayerCulling.git
  2. Переходишь в папку: cd PlayerCulling
  3. Собираешь: ./gradlew build (Linux/Mac) или gradlew build (Windows)

Готовые jar'ники будут в build/libs.

Итог

PlayerCulling - это must-have для любого сервера, где есть PvP или просто много игроков. Он не блокирует читы напрямую, но делает бесполезными ESP-хаки, которые показывают игроков сквозь стены. Работает быстро, не жрёт ресурсы, легко настраивается. Если собираешь сервер на 1.21 - однозначно стоит поставить.

Часто задаваемые вопросы

Совместимость

Minecraft: Java Edition

1.21.x

Платформы

Поддерживаемые окружения

Сервер

Зависимости

Ссылки

Детали

Лицензия:
Опубликован:1 год назад
Обновлён:3 месяца назад
Главная