Как установить ресурс-пак на сервер

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

  1. Авторизуйтесь в панели proxify.cloud
    Откройте https://proxify.cloud и войдите в личный кабинет. Перейдите в раздел «Мои серверы» и выберите выделенный сервер с Ubuntu, на котором развернут Minecraft-сервер.

  2. Откройте консоль или подключитесь по SSH
    В панели proxify.cloud нажмите кнопку «Консоль» (VNC/NoVNC) для прямого доступа к терминалу Ubuntu.
    Альтернативно — подключитесь с локальной машины:

    ssh root@<IP-адрес_сервера>
    

    Замените <IP-адрес_сервера> на публичный IP, указанный в панели proxify.cloud.

  3. Перейдите в директорию сервера
    Обычно сервер находится в /opt/minecraft, /home/minecraft или /var/lib/minecraft. Уточните путь в панели proxify.cloud (вкладка «Файлы» или настройки контейнера/VM).

    cd /opt/minecraft
    

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

  1. Получите прямую ссылку на .zip архив ресурс-пака
    Ресурс-пак должен быть доступен по прямому HTTP/HTTPS-ссылке (не страница загрузки, а сам файл). Подходят:

    • GitHub Releases (Raw URL)
    • Свой веб-сервер / CDN
    • Файловые хостинги с прямой выдачей (Dropbox с dl=1, Google Drive через uc?export=download&id=...)

    Пример корректной ссылки:

    https://github.com/Author/Pack/releases/download/v1.2.3/MyResourcePack.zip
    
  2. Проверьте совместимость версии
    Откройте pack.mcmeta внутри архива (не распаковывая) и убедитесь, что pack_format соответствует версии ядра сервера:

    • 1.20.4–1.20.6 → pack_format: 15
    • 1.21–1.21.1 → pack_format: 18
    • 1.21.2–1.21.3 → pack_format: 22
      Команда для быстрой проверки без распаковки:
    unzip -p MyResourcePack.zip pack.mcmeta | jq .pack.pack_format
    

    Если jq не установлен: apt update && apt install -y jq.

  3. Вычислите SHA-1 хеш пака
    Хеш обязателен для server.properties (поле resource-pack-sha1). Клиенты будут отклонять пак без совпадения хеша.

    sha1sum MyResourcePack.zip
    

    Пример вывода:

    a1b2c3d4e5f67890123456789abcdef012345678  MyResourcePack.zip
    

    Скопируйте первые 40 символов (хеш).

Размещение файла ресурс-пака

Вариант А: Хостинг на том же сервере (через веб-сервер)

  1. Установите и настройте Nginx (если ещё не установлен):

    apt update && apt install -y nginx
    systemctl enable --now nginx
    
  2. Создайте директорию для статики и положите пак:

    mkdir -p /var/www/resources
    cp MyResourcePack.zip /var/www/resources/
    chown -R www-data:www-data /var/www/resources
    chmod 644 /var/www/resources/MyResourcePack.zip
    
  3. Настройте конфиг Nginx для отдачи файла с правильными заголовками:

    cat > /etc/nginx/sites-available/resources <<'EOF'
    server {
        listen 80;
        server_name _;
    
        location /packs/ {
            alias /var/www/resources/;
            add_header Content-Type "application/zip";
            add_header Access-Control-Allow-Origin "*";
            add_header Cache-Control "public, max-age=31536000, immutable";
        }
    }
    EOF
    ln -sf /etc/nginx/sites-available/resources /etc/nginx/sites-enabled/
    nginx -t && systemctl reload nginx
    
  4. Проверьте доступность (замените IP на свой):

    curl -I http://<IP-сервера>/packs/MyResourcePack.zip
    

    Ожидаемый ответ: 200 OK, Content-Type: application/zip.

    Итоговая ссылка для конфига:

    http://<IP-сервера>/packs/MyResourcePack.zip
    

Вариант Б: Внешний хостинг (GitHub, CDN, свой домен)

  1. Загрузите пак на выбранный хостинг и получите прямую ссылку.
    Для GitHub Releases: перейдите в репозиторий → Releases → Create new release → Attach binaries → скопируйте ссылку на .zip (кнопка «Copy link address»).

  2. Убедитесь, что хостинг отдаёт Content-Type: application/zip и CORS-заголовки (Access-Control-Allow-Origin: *). Без CORS некоторые лаунчеры (Prism, ATLauncher) не скачают пак.

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

  1. Остановите Minecraft-сервер через панель proxify.cloud (кнопка «Stop») или командой:

    systemctl stop minecraft
    # или, если запущен в screen/tmux:
    screen -S mc -X stuff "stop\n"
    
  2. Отредактируйте server.properties:

    nano server.properties
    

    Найдите или добавьте строки:

    resource-pack=http://<IP-сервера>/packs/MyResourcePack.zip
    resource-pack-sha1=a1b2c3d4e5f67890123456789abcdef012345678
    resource-pack-prompt={"text":"Для игры на сервере требуется ресурс-пак. Нажмите \"Скачать\"","color":"gold"}
    require-resource-pack=true
    

    Пояснения:

    • resource-pack — прямая ссылка на .zip.
    • resource-pack-sha1 — хеш из шага 6 (без пробелов, нижний регистр).
    • resource-pack-prompt — JSON-текст в диалоге загрузки (поддерживает форматирование).
    • require-resource-pack=true — кикает игроков, отказавших в загрузке.
  3. Сохраните и выйдите (Ctrl+O, Enter, Ctrl+X).

Запуск и проверка

  1. Запустите сервер через панель proxify.cloud («Start») или:

    systemctl start minecraft
    
  2. Проверьте логи на наличие ошибок загрузки пака:

    tail -f logs/latest.log | grep -i "resource.pack"
    

    Успешная запись выглядит так:

    [Server thread/INFO]: Resource pack: http://.../MyResourcePack.zip (sha1: a1b2c3d4...)
    
  3. Подключитесь клиентом и подтвердите загрузку. При успешном совпадении хеша пак применится мгновенно.

Автоматизация обновлений (опционально)

  1. Создайте скрипт автообновления /opt/minecraft/update_pack.sh:

    cat > /opt/minecraft/update_pack.sh <<'EOF'
    #!/bin/bash
    set -e
    PACK_URL="https://github.com/Author/Pack/releases/latest/download/MyResourcePack.zip"
    DEST="/var/www/resources/MyResourcePack.zip"
    PROPS="/opt/minecraft/server.properties"
    
    echo "Скачивание новой версии..."
    curl -L -o "$DEST.tmp" "$PACK_URL"
    NEW_SHA1=$(sha1sum "$DEST.tmp" | awk '{print $1}')
    mv "$DEST.tmp" "$DEST"
    chown www-data:www-data "$DEST"
    chmod 644 "$DEST"
    
    echo "Обновление server.properties..."
    sed -i "s/^resource-pack-sha1=.*/resource-pack-sha1=$NEW_SHA1/" "$PROPS"
    systemctl reload minecraft
    echo "Готов. Новый хеш: $NEW_SHA1"
    EOF
    chmod +x /opt/minecraft/update_pack.sh
    
  2. Добавьте в cron (ежедневно в 04:00):

    (crontab -l 2>/dev/null; echo "0 4 * * * /opt/minecraft/update_pack.sh >> /var/log/pack_update.log 2>&1") | crontab -
    

Возможные проблемы и решения

Проблема Причина Решение
Клиент пишет «Invalid resource pack» / «Failed to download» Неверная ссылка (страница, не файл), блокировка брандмауэром, нет CORS Проверьте curl -I <ссылка>: должен быть 200 OK, Content-Type: application/zip. Откройте порт 80/443 в панели proxify.cloud (вкладка «Сеть» → «Firewall»). Добавьте заголовок Access-Control-Allow-Origin: * в Nginx/CDN.
Хеш не совпадает (кейс «Resource pack rejected») Файл изменился после прописывания хеша, или скачался не тот файл Пересчитайте sha1sum актуального файла и обновите resource-pack-sha1 в server.properties. Перезагрузите сервер.
Пак скачивается, но не применяется (текстуры стандартные) Несовпадение pack_format версии клиента/сервера Сравните pack_format в pack.mcmeta с таблицей в шаге 5. Пересоберите пак под нужный формат или обновите ядро сервера.
Игроков кикает сразу после входа require-resource-pack=true, но клиент не смог загрузить пак (таймаут, размер > 250 Мб) Увеличьте resource-pack-sizes (Paper/Purpur: paper-world.ymlresource-pack-sizes), проверьте скорость отдачи файла, сократите вес пака.
В логах «Could not load resource pack» Ошибка внутри архива (битый zip, неверная структура) Распакуйте локально: unzip -l MyResourcePack.zip. Должны быть pack.mcmeta, папка assets/. Перепакуйте: cd pack_folder && zip -r ../fixed.zip .
Nginx отдаёт text/plain вместо application/zip Отсутствует mime-тип Добавьте в /etc/nginx/mime.types: application/zip zip; и перезагрузите nginx.
Панель proxify.cloud не даёт доступ к файлам / консоль не открывается Контейнер/VM в статусе «Error», нет прав у пользователя В панели proxify.cloud проверьте вкладку «Логи» сервера. При необходимости — перезагрузите VPS кнопкой «Reboot» или обратитесь в поддержку хостинга