Почти обогнали Firefox!
Исходники Поддерживаемый форк №1 Поддерживаемый форк №2Разработка лаунчера была прекращена. Используйте один из поддерживаемых форков.
Лаунчер написан на Java 8 с использованием технологии JavaFX и Nashorn, за счёт чего обладает широкими возможностями кастомизации и безупречной производительностью. С помощью умной обвязки, Вы можете скачать клиенты и настроить сервера всего в несколько команд, не компилируя исходники и не меняя классы клиента!
Новый функционал можно добавить через JS API, возможно так же добавление функционала в стандартную конфигурацию по запросу.
Запустите скрипт установки в удобной для Вас директории (для работы скрипта нужен curl):
curl -s https://launcher.sashok724.net/download/setup.sh | sh
Запустите лаунчсервер как любое другое Java-приложение:
java -Xmx256M -jar LaunchServer.jar
Для работы лаунчера и лаунчсервера нужна Java 8 и выше
При первом запуске Вас попросят указать адрес VDS (IP или домен), на котором находится лаунчсервер - лаунчеры будут подключаться именно по этому адресу. После этого будет создан основной файл конфигурации - LaunchServer.cfg - в нём настраивается авторизация, обработка UUID, система скинов и сборка EXE-файла через Launch4J. Вы можете использовать локальный адрес для тестирования (localhost):
address: "localhost"; # Адрес VDS (IP или домен)
port: 7240; # Порт лаунчсервера
По умолчанию используется способ авторизации accept, который принимает любые пары логин-пароль за верные, и имя пользователя соответствует логину. Такой способ хорошо подходит для тестирования, но для использования в production рекомендуется сменить его на один из других: reject, file, request, или mysql. В отличие от accept, все эти способы требуют дополнительной конфигурации в блоке authProviderConfig:
authProvider: "accept"; # Название способа авторизации
authProviderConfig: {
# Конфигурация способа авторизации
};
Этот способ авторизации - полная противоположность accept - он принимает любые пары логин-пароль за неверные. Этот способ можно использовать во время проведения технических работ. Пример конфигурации:
message: "Технические работы, приходите позже!"; # Сообщение, которое будет использовано в качестве ошибки
Для проверки правильности логина и пароля, этот способ обращается к указанному файлу. Этот способ рекомендуется для приватных серверов с небольшим количеством игроков. Пример конфигурации:
file: "users.txt"; # Имя файла, в котором будут пары "логин: пароль"
digest: "SHA-256"; # Алгоритм хеширования пароля. Поддерживаются plain, MD5, SHA-1, SHA-224, SHA-256, SHA-512
Для проверки правильности логина и пароля, этот способ обращается к указанному URL. Этот способ рекомендуется для больших проектов с CMS, которые используют нестандартные алгоритмы хеширования. Пример конфигурации:
url: "https://myserver.tld/auth.php?login=%login%&password=%password%"; # URL, к которому будет обращаться лаунчсервер. %login% и %password% заменяются на указанные логин и пароль, соответственно
response: "OK:(?<username>.+)"; # Маска ответа успешной авторизации. В capture-группе <username> должно быть имя пользователя. В случае, если ответ отличается, он выводится в качестве ошибки
Вы можете загрузить уже готовые скрипты авторизации для WordPress, XenForo, IPB и PHPBB (Они должны находиться в корне сайта)
Для проверки правильности логина и пароля, этот способ обращается к MySQL-базе данных. Этот способ рекомендуется для больших проектов со стандартными алгоритмами хеширования. Пример конфигурации (DLE):
address: "mysqlserver.tld"; # Адрес MySQL-сервера
port: 3306; # Порт MySQL-сервера (по умолчанию 3306)
username: "root"; # Имя пользователя MySQL-сервера
password: "PSP1004"; # Пароль пользователя
database: "dle"; # База данных
query: "SELECT name FROM dle_users WHERE (email=? OR name=?) AND password=MD5(MD5(?)) LIMIT 1"; # Запрос. Он должен быть
SELECT и возвращать имя пользователя в правильном регистре. ? заменяются на параметры ниже:
queryParams: [ "%login%", "%login%", "%password%" ]; # Параметры к запросу. %login% и %password% заменяются на имя
пользователя и пароль соответственно
Проверить авторизацию можно с помощью команды auth:
auth "username" "password"
Для управления авторизациями (joinServer, checkServer) и UUID игроков существуют несколько возможных обработчиков. Пока что их всего три, отличающихся только местом хранения: binaryFile, textFile и mysql.
Этот обработчик хранит все данные об авторизациях в текстовом файле, генерирует случайные UUID, но есть опция для генерации UUID из MD5 имени пользователя. Этот обработчик рекомендуется использовать небольшим проектам. Пример конфигурации:
fileName: "authHandler.cfg"; # Имя файла, в котором будут сохранены данные об авторизациях
offlineUUIDs: false; # Использовать генерацию UUID из MD5 имени пользователя
Этот обработчик хранит все данные об авторизациях в бинарном файле, в остальном идентичен обработчику textFile. Этот обработчик существует для обратной совместимости и будет удалён в следующей версии.
Этот обработчик хранит все данные об авторизациях в MySQL-базе данных, использует UUID готовые. Этот обработчик рекомендуется использовать всем проектам по мере возможности. Пример конфигурации:
fetchAll: true; # Загрузить всю базу в кэш при запуске
address: "mysqlserver.tld"; # Адрес MySQL-сервера
port: 3306; # Порт MySQL-сервера (по умолчанию 3306)
username: "root"; # Имя пользователя MySQL-сервера
password: "PSP1004"; # Пароль пользователя
database: "minecraft"; # База данных
table: "users"; # Таблица
uuidColumn: "uuid"; # Поле с UUID пользователей
usernameColumn: "username"; # Поле с именами пользователей
accessTokenColumn: "accessToken"; # Поле с accessToken
serverIDColumn: "serverID"; # Поле с serverID
Для того чтобы добавить недостающие поля и сгеренерировать UUID, можно использовать SQL-запрос:
-- Добавляет недостающие поля в таблицу
ALTER TABLE users
ADD COLUMN uuid CHAR(36) UNIQUE DEFAULT NULL,
ADD COLUMN accessToken CHAR(32) DEFAULT NULL,
ADD COLUMN serverID VARCHAR(41) DEFAULT NULL;
-- Создаёт триггер на генерацию UUID для новых пользователей
DELIMITER //
CREATE TRIGGER setUUID BEFORE INSERT ON users
FOR EACH ROW BEGIN
IF NEW.uuid IS NULL THEN
SET NEW.uuid = UUID();
END IF;
END; //
DELIMITER ;
-- Генерирует UUID для уже существующих пользователей
UPDATE users SET uuid=(SELECT UUID()) WHERE uuid IS NULL;
Скины и плащи настраиваются всего двумя параметрами - маской URL на PNG-файл. Пример конфигурации:
skinsURL: "http://skins.minecraft.net/MinecraftSkins/%username%.png"; # Маска URL скинов
cloaksURL: "http://skins.minecraft.net/MinecraftCloaks/%username%.png"; # Маска URL плащей
%username%, %uuid%, %hash% заменяются на имя пользователя, UUID и UUID без тире соответственно
Не забудьте поменять textureProvider с mojang на request
Лаунчсервер так же может автоматически собирать EXE из JAR-файла - для этого требуется поставить параметр launch4J на true. Для того чтобы у EXE-файла была иконка, положите файл favicon.ico рядом с лаунчсервером. Пример конфигурации:
launch4J: true; # Включить сборку EXE через Launch4J
В случае возникновения ошибок на 64-битных системах, может помочь установка 32-битного пакета glibc (Debian: lib32z1 | CentOS: glibc.i686).
Клиенты, ресурсы и другие файлы для загрузки лаунчером хранятся в виде субдиректорий в директории updates, а профили, в которых указываются имя директорий, адрес сервера для автозахода, исключения при обновлении и другие сведения, необходимые для запуска клиента хранятся в директории profiles
Для загрузки ресурсов существует команда downloadAsset. Первым аргументом передаётся версия клиента, для которого загружаются ресурсы, вторым аргументом имя субдиректории в updates:
downloadAsset 1.7.10 "asset1.7.10"
Синхронизация (см. ниже) сделается автоматически, отдельно набирать команду не требуется
Для загрузки клиентов существует команда downloadClient. Первым аргументом передаётся версия клиента, вторым аргументом имя субдиректории в updates:
downloadClient 1.7.10 "HiTech"
Эта команда так же автоматически создаст файл профиля в директории profiles. Пример файла profile.cfg:
version: "x.x.x"; # Версия клиента
assetIndex: "x.x.x"; # Индекс ресурсов (имя файла в indexes), 1.7.10+
# Runtime-dependent params
dir: "XXXXX"; # Директория клиента
assetDir: "XXXXX"; # Директория ресурсов
# Client params
sortIndex: 0; # Индекс для сортировки профилей в списке
title: "XXXXX"; # Заголовок профиля в лаунчере
serverAddress: "server.tld"; # Имя сервера для автозахода
serverPort: 25565; # Порт сервера для автозахода
# Updater and client watch service
updateFastCheck: true; # Менее надёжная, но намного более быстрая проверка файлов
update: []; # Файлы и директории, которые будут обновлены, но не будут проверяться во время игры
updateVerify: [ # Файлы и директории, которые должны быть обязательно проверены. \\ Нужно для экранизации точки (Regexp)
"libraries", "natives", "mods",
"minecraft\\.jar", "forge\\.jar"
];
updateExclusions: [ # Исключения из файлов и директорий выше
# ...
];
# Client launcher params
mainClass: "net.minecraft.launchwrapper.Launch"; # Главный класс клиента
classPath: [ "libraries", "minecraft.jar", "forge.jar" ]; # Classpath клиента
jvmArgs: [ # Дополнительные аргументы JVM
"-Dfml.ignorePatchDiscrepancies=true", # Игнорировать различия в патчах
"-Dfml.ignoreInvalidMinecraftCertificates=true", # Игнорировать отсутствие сертификатов
"-Dorg.lwjgl.opengl.Display.allowSoftwareOpenGL=true" # (Не)обладатели драйверов на видеокарту тоже смогут играть
];
clientArgs: [ # Дополнительные аргументы клиента
"--tweakClass", "cpw.mods.fml.common.launcher.FMLTweaker" # Если используете Forge
];
Синхронизация (см. ниже) сделается автоматически, отдельно набирать команду не требуется
Для обеспечения высокой производительности, лаунчсервер кэширует содержимое директорий updates и profiles. При внесении изменений в эти директории, лаунчсервер о них не осведомлён, и при следующем обновлении скорее всего будет ошибка. Для того чтобы синхронизировать содержимое этих директорий, существует две команды - syncUpdates и syncProfiles:
syncUpdates # Синхронизирует содержимое директории updates
syncProfiles # Синхронизирует содержимое директории profiles
Эти команды надо обязательно выполнять после изменений! Иначе у Вас и Ваших игроков будут ошибки при обновлениях!
Перед сборкой рекомендуется настроить стандартный интерфейс лаунчера в файле runtime/config.js:
var config = {
dir: "sashok724", // Директория, в которой лаунчер будет хранить файлы (%user.home%/dir)
title: "sashok724's Launcher", // Заголовок окна лаунчера
icons: [ "favicon.png" ], // Путь к иконкам лаунчера (относительно runtime)
// Настройка окна авторизации
newsURL: "https://launcher.sashok724.net/", // URL новостей, которые будут показаны в главном окне
linkText: "Бесплатные окна", // Текст ссылки под кнопкой "Авторизация"
linkURL: new java.net.URL("http://bit.ly/1SP0Rl8"), // URL ссылки под кнопкой "Авторизация"
// Стандартные значения настроек
settingsMagic: 0xBEEF, // Древняя магия, не трогать
autoLoginDefault: false, // Автологин
fullScreenDefault: false, // Полный экран
ramDefault: 1024, // Количество памяти
// Имена директорий с JRE, если не знаете, зачем это нужно - не трогайте
jreMustdie32Dir: "jre-8u202-win32", jreMustdie64Dir: "jre-8u202-win64",
jreLinux32Dir: "jre-8u202-linux32", jreLinux64Dir: "jre-8u202-linux64",
jreMacOSXDir: "jre-8u202-macosx", jreUnknownDir: "jre-8u202-unknown"
}
Настройки находятся только в этой части файла, остальная часть используется самим лаунчером и менять её не нужно!
Для сборки лаунчера существует команда build. Она автоматически упакует runtime, запишет Launcher.jar, соберёт Launcher.exe (если включена интеграция с Launch4J), и автоматически их синхронизирует. Данная команда используется после модификации директории runtime:
build # Собирает Launcher.jar и Launcher.exe
Сразу после сборки, лаунчер можно отправлять игрокам. Если сайт и лаунчсервер на одной VDS, можно сделать symlink на лаунчер с сайта:
ln -s "/opt/launchserver/Launcher.jar" "/opt/webserver/Launcher.jar"
ln -s "/opt/launchserver/Launcher.exe" "/opt/webserver/Launcher.exe"
На данный момент поддерживаются MCPC 1.5.2, Cauldron 1.6.4, Cauldron 1.7.2, KCauldron 1.7.10, Thermos 1.7.10, Spigot 1.8.8, Spigot 1.9.4, Spigot 1.10.2, Spigot 1.11.2, Spigot 1.12.2 и Sponge 1.12.2. Патчи на авторизацию в них уже добавлены, и всё, что Вам требуется сделать, это заменить Launcher.jar.
Доступны патченные серверы BungeeCord (1.8.9-1.13.2, #afef0ec), его legacy-версия (1.7.2-1.8.9, #219819b), Waterfall (1.8.9-1.13.2, #bea8aac), Waterfall-Old (1.7.2-1.9.4, #f62f290). Патчи на авторизацию в них уже добавлены, и всё, что Вам требуется сделать, это заменить Launcher.jar. Не забудьте включить ip-forwarding и bungeecord в файлах config.yml и spigot.yml, соответственно. На серверы, стоящие ЗА BungeeCord патчи НЕ ставятся и online-mode НЕ включается. Желательно поставить server-ip на localhost
A: Если на них можно запускать сторонние Java-приложения, то да, но найти такой Послотовый/Игровой/Shared-хостинг - большая удача. Лаунчер гарантированно поддерживает любые VDS и Dedicated-серверы с возможностью установки Java 8 и открытым 7240 портом.