Как сделать ресурс-пак обязательным

Подготовка и загрузка ресурс-пака на сервер

  1. Подготовьте файл ресурс-пака
    Убедитесь, что ваш ресурс-пак соответствует требованиям:

    • Формат: .zip (не .rar, не .7z)
    • Внутри архива сразу лежит папка с pack.mcmeta (не вложенная подпапка)
    • Размер файла не превышает 256 Мб (рекомендация Mojang для автоматической загрузки клиентом)
    • Версия pack_format в pack.mcmeta соответствует версии вашего сервера (например, 48 для 1.21, 34 для 1.20.1)
  2. Загрузите ресурс-пак на сервер через панель proxify.cloud

    • Войдите в панель управления proxify.cloud.
    • Перейдите в раздел «Файлы» (File Manager) вашего контейнера/VM с Ubuntu.
    • Создайте директорию для ресурс-паков, если её нет:
      mkdir -p /home/minecraft/resourcepacks
      
    • Перетащите .zip файл в эту папку через веб-интерфейс File Manager или загрузите через SFTP (WinSCP, FileZilla):
      • Хост: IP вашего сервера (указан в панели proxify.cloud)
      • Порт: 22 (или кастомный, если меняли)
      • Пользователь: root или созданный пользователь (например, minecraft)
      • Путь: /home/minecraft/resourcepacks/
  3. Проверьте права доступа к файлу
    Файл должен быть читаем пользователем, от которого запускается сервер.

    chown minecraft:minecraft /home/minecraft/resourcepacks/your_pack.zip
    chmod 644 /home/minecraft/resourcepacks/your_pack.zip
    

Получение прямой ссылки (Direct Download URL)

Ресурс-пак должен быть доступен по прямой HTTPS-ссылке без редиректов, капчи или страниц ожидания.

Вариант А: Использование встроенного веб-сервера панели proxify.cloud (рекомендуется для простоты)

  1. В панели proxify.cloud откройте вкладку «Веб-консоль» (Web Console) или подключитесь по SSH.
  2. Установите легкий веб-сервер для раздачи статики (если не установлен):
    apt update && apt install -y nginx
    
  3. Настройте Nginx для отдачи файлов из папки ресурс-паков. Создайте конфиг:
    nano /etc/nginx/sites-available/resourcepacks
    
    Вставьте конфигурацию (замените your_server_ip на реальный IP из панели proxify.cloud):
    server {
        listen 8080;
        server_name your_server_ip;
    
        location /packs/ {
            alias /home/minecraft/resourcepacks/;
            autoindex off;
            add_header Access-Control-Allow-Origin *;
            add_header Content-Disposition "attachment";
        }
    }
    
  4. Активируйте сайт и перезагрузите Nginx:
    ln -s /etc/nginx/sites-available/resourcepacks /etc/nginx/sites-enabled/
    nginx -t && systemctl reload nginx
    
  5. Прямая ссылка для server.properties: http://ВАШ_IP_ИЗ_PANELI_PROXIFY:8080/packs/your_pack.zip

Важно: Если у вас на сервере уже стоит панель управления игровым сервером (Pterodactyl, Pelican и т.д.) на 80/443 портах, используйте свободный порт (8080, 8081) и откройте его в файрволе Ubuntu (ufw allow 8080/tcp) и в фаерволе панели proxify.cloud (раздел «Сеть» -> «Фаервол» -> «Добавить правило» -> TCP 8080).

Вариант Б: Внешний хостинг (GitHub Releases, Cloudflare R2, S3, Dropbox direct link)

  1. Загрузите файл на GitHub Releases (приватный или публичный репозиторий).
  2. Скопируйте ссылку на файл из раздела Assets релиза. Она выглядит как: https://github.com/User/Repo/releases/download/v1.0/your_pack.zip.
  3. Проверьте прямую загрузку:
    curl -I "https://github.com/User/Repo/releases/download/v1.0/your_pack.zip"
    
    Должен вернуть HTTP/2 200 и Content-Type: application/zip (или application/octet-stream). Никаких text/html.

Вычисление SHA-1 хеша ресурс-пака

Хеш обязателен для проверки целостности на клиенте. Без него клиент будет перескачивать пак при каждом заходе.

  1. Выполните команду на сервере (в SSH консоли proxify.cloud):
    sha1sum /home/minecraft/resourcepacks/your_pack.zip
    
  2. Скопируйте только первые 40 символов (хеш), без имени файла и пробелов. Пример: a1b2c3d4e5f67890123456789abcdef012345678

Настройка server.properties

  1. Откройте конфигурационный файл сервера через File Manager панели proxify.cloud или через консоль:

    nano /home/minecraft/server.properties
    

    (Путь может отличаться: /var/lib/pterodactyl/volumes/.../server.properties если используете Pterodactyl на proxify.cloud. Проверьте рабочую директорию в настройках конкретного игрового сервера на панели).

  2. Найдите или добавьте следующие строки (раскомментируйте, убрав # в начале):

    resource-pack=https://your-domain.com/packs/your_pack.zip
    resource-pack-sha1=a1b2c3d4e5f67890123456789abcdef012345678
    resource-pack-prompt={"text":"Этот сервер требует ресурс-пак для игры","color":"gold"}
    require-resource-pack=true
    resource-pack-id=123e4567-e89b-12d3-a456-426614174000
    resource-pack-version=1
    

    Разбор параметров:

    • resource-pack: Прямая HTTPS/HTTP ссылка (из Варианта А или Б). Обязательно используйте HTTPS, если доступно (настройте Certbot/Let's Encrypt для Nginx на proxify.cloud). Клиенты 1.18+ часто блокируют HTTP.
    • resource-pack-sha1: Хеш из шага 3.
    • resource-pack-prompt: JSON-текст (в одну строку), который увидит игрок в меню загрузки. Поддерживает форматирование.
    • require-resource-pack=true: Ключевой параметр. Если true — игрок не сможет зайти без пака (кнопка «Отмена» отключит кнопку «Подключиться»). Если false — игрок может нажать «Пропустить».
    • resource-pack-id: UUID (версия 4) для кэширования пака клиентом. Сгенерируйте один раз: cat /proc/sys/kernel/random/uuid. Не меняйте его при обновлении пака, меняйте только resource-pack-version.
    • resource-pack-version: Целое число. Увеличивайте на 1 при каждом обновлении файла пака (с тем же ID), чтобы клиенты скачали новую версию.
  3. Сохраните файл (Ctrl+O, Enter, Ctrl+X).

Перезагрузка сервера и проверка

  1. Перезапустите игровой сервер через панель управления proxify.cloud (кнопка «Restart» в консоли сервера) или командой в консоли:
    # Если systemd сервис (стандарт для Ubuntu на proxify.cloud)
    systemctl restart minecraft-server
    # Или если в Docker/Pterodactyl — через панель управления игрой
    
  2. Зайдите на сервер с клиента Minecraft (версия должна совпадать с сервером).
  3. Должно появиться окно «Загрузка ресурс-пака» с вашим текстом из resource-pack-prompt.
  4. После загрузки — вход на сервер. Если require-resource-pack=true, кнопка «Отмена» вернет вас в главное меню.

Настройка прокси (Velocity / BungeeCord) — если используется

Если ваш сервер за прокси (Velocity на том же выделенном сервере proxify.cloud), настройку нужно делать в конфиге прокси, а не бэкенд-серверов.

Для Velocity (velocity.toml)

  1. Откройте конфиг:

    nano /home/minecraft/velocity/velocity.toml
    
  2. Найдите секцию [server] или [servers.<name>] и добавьте/измените:

    # Глобально для всех серверов за прокси (рекомендуется)
    force-resource-pack = true
    resource-pack = "https://your-domain.com/packs/your_pack.zip"
    resource-pack-sha1 = "a1b2c3d4e5f67890123456789abcdef012345678"
    resource-pack-id = "123e4567-e89b-12d3-a456-426614174000"
    resource-pack-version = "1"
    resource-pack-prompt = '{"text":"Требуется ресурс-пак","color":"gold"}'
    

    Или настройте индивидуально для конкретного бэкенда в таблице [servers.lobby] и т.д.

  3. Перезапустите Velocity:

    systemctl restart velocity
    

Для BungeeCord (config.yml)

  1. Откройте config.yml.
  2. Добавьте в корень (не в servers:):
    resource-pack: "https://your-domain.com/packs/your_pack.zip"
    resource-pack-sha1: "a1b2c3d4e5f67890123456789abcdef012345678"
    
    BungeeCord не поддерживает require-resource-pack, prompt, id, version нативно (нужен плагин, например, ResourcePackProxy или BungeeResourcePack). Рекомендуется мигрировать на Velocity.

Автоматизация обновления ресурс-пака (Скрипт)

Чтобы не править конфиги вручную при каждом обновлении, создайте скрипт обновления.

  1. Создайте файл скрипта:
    nano /home/minecraft/update_pack.sh
    
  2. Вставьте содержимое (подставьте свои пути и URL):
    #!/bin/bash
    set -e
    
    PACK_PATH="/home/minecraft/resourcepacks/your_pack.zip"
    PROPERTIES_PATH="/home/minecraft/server.properties"
    # Если Velocity:
    # PROPERTIES_PATH="/home/minecraft/velocity/velocity.toml