1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал Пишем серверную часть для вашего проекта

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем broelik, 23 фев 2016.

Статус темы:
Закрыта.
  1. Автор темы
    broelik

    broelik Активный участник

    Баллы:
    63
    Skype:
    elik.aliev1
    Теория:
    Что нужно знать для написания:

    • Азы PHP
    • Азы работы с БД Mysql
    Что нужно иметь для написание:
    • Хостинг с поддержкой PHP и Mysql
    • Клиент Minecraft
    • In Class Translator
    • Блокнот (желательно Notepad++)
    Как работает серверная часть:
    Серверная часть использует два файла - для клиента joinserver.php, а для сервера checkserver.php.
    joinserver.php передаёт серверу 3 GET параметра - имя пользователя (user), ключ сервера (serverid), сессия юзера (sessionid).

    • user передаёт имя пользователя, чтобы найти его в БД.
    • serverid случайный ключ сервера, совпадает с ключом в checkserver.php
    • sessionid сессия которую юзер получает при авторизации, об это позже
    checkserver.php передаёт серверу 2 GET параметра - имя пользователя (user), ключ сервера (serverid)
    • user передаёт имя пользователя, чтобы найти его в БД.
    • serverid случайный ключ сервера,совпадает с ключом в joinserver.php
    При подключение к серверу, сначала joinserver.php генерирует serverid, потом проверяет sessionid у пользователя, которого находит с помощью user, если sessionid проходит проверку, то у пользователя обновляется serverid и файл выводит "OK", что для клиента означает что всё нормально. Далее checkserver.php передаёт серверу такой же serverid как и joinserver.php, проверяет его у пользователя, которого находит с помощью user и если serverid такой-же как и в БД, то checkserver.php выводит "YES", что для клиента означает, что всё прошло нормально.

    Подготовка:
    Начнём с клиента. Если вы хотите клиент с модами, то сначала устанавливаем Forge,Optifine и тому подобное, так как они заменяют некоторые файлы в minecraft.jar, и клиент будет работать не правильно. Если вы пишите серверную часть для чистого клиента, то переходим к написанию.
    Перейдем к серверу. Если вы хотите сервер с модами, то вам потребуется mcpc+ (Cauldron).
    Написание:
    Наконец перейдем к написанию. Сначала создадим базу данных.
    бд.PNG
    Создадим в блокноте три файла: joinserver.php,dbconnect.php и checkserver.php.
    Подключение к базе данных. Меняем хост, имя БД, юзера и пароль на свои.
    PHP:
    $dbhost='';
    $dbname='';
    $dbuser='';
    $dbpass='';
    $dblink=mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db($dbname,$dblink);
    Если у вас другая таблица то меняем users на имя вашей таблицы. Если у вас другие колонки, то меняем login на колонку с именем юзера, session меняем на колонку с сессией, id на колонку с номером юзера, а serverid соответственно на колонку с номером сервера.
    PHP:
    require_once('./dbconnect.php');
    $user=$_GET['user'];
    $serverid=$_GET['serverId'];
    $sessionid=$_GET['sessionId'];
    if(!empty(
    $user) and !empty($serverid) and !empty($sessionid))
    {
    $userquery=mysql_query('SELECT * FROM `'.$dbname.'`.`users` WHERE `session`="'.$sessionid.'" AND `login`="'.$user.'"');
    $checkuser=mysql_num_rows($userquery);
    if(
    $checkuser==1)
    {
    $userrow=mysql_fetch_array($userquery);
    mysql_query('UPDATE `'.$dbname.'`.`users` SET `serverid`="'.$serverid.'" WHERE `id`="'.$userrow['id'].'"');
        exit(
    'OK');
    }
    else{
        exit(
    'User not found!');
    }
    }
    else{
        exit(
    'EMPTY');
    }

    PHP:
    require_once('./dbconnect.php');
    $user=$_GET['user'];
    $serverid=$_GET['serverId'];
    if(!empty(
    $user) and !empty($serverid))
    {
    $userquery=mysql_query('SELECT * FROM `'.$dbname.'`.`users` WHERE `login`="'.$user.'" AND `serverid`="'.$serverid.'"');
    $checkuser=mysql_num_rows($userquery);
    if(
    $checkuser==1)
    {
        exit(
    'YES');
    }
    else{
        exit(
    'NO');
    }
    }
    else{
        exit(
    'NO');
    }
    Со скриптами всё, теперь перейдём к клиенту. Нам понадобиться имена классов для вашей версии клиента. Их вы можете найти в этой теме. Например, для 1.5.2 имя класса для клиента bdk.class, а для сервера vanila или mcpc+ jg.class. Для всех версий CraftBukkit класс один и тот же ThreadLoginVerifier.class.
    Теперь нам понадобиться вытащить эти классы. Я буду делать всё на чистом клиенте 1.5.2 и craftbukkit 1.5.2. Открываем minecraft.jar с помощью WinRar или другого архиватора и ищем там файл bdk.class в моём случае.Вытаскиваем его в любую папку, открываем с помощью In Class Translator и ищем там http://session.minecraft.net/game/joinserver.jsp?user=, заменяем на вашу ссылку, при этом оставляя ?user=, в моём случае это http://mctest.loc/joinserver.php?user= и сохраняем.
    бдк.PNG bdkeidt.PNG .
    Кидаем файл обратно в minecraft.jar. Далее открываем craftbukkit.jar и ищем там ThreadLoginVerifier.class ,также открываем его в In Class Translator и заменяем http://session.minecraft.net/game/checkserver.jsp?user= на ваш путь, в моём случае http://mctest.loc/checkserver.php?user=. Сохраняем и закрываем. Кидаем файл обратно в craftbukkit.jar.
    Теперь самое интересное, проверка. Если у вас уже есть лаунчер, который после авторизации передаёт в бд сессию, то можете пропустить этот шаг.
    И так, проверять мы будем с помощью запуска через BAT. Чтобы запустить клиент через BAT, нам нужно создать *.bat в любой папке и записать в нём следующее (для версии 1.5.2 и ниже):
    Код:
    echo @off
    java -Xms1024m -Xmx1024m -cp "%APPDATA%\.minecraft\bin\*" -Djava.library.path="%APPDATA%\.minecraft\bin\natives" net.minecraft.client.Minecraft "nick" "session"
    pause
    Создадим тестового юзера. В phpMyAdmin нажмём вставить, и заполним все данные.
    nick заменяем на свой ник,который у вас храниться в бд, а session заменяем на сессию которая храниться у вас в бд.
    Если вы всё сделали правильно, но при запуске выдаётся ошибка,то удалите META-INF из minecraft.jar.
    Попробуйте зайти на сервер, если у вас получилось, измените сессию и попробуйте ещё раз, если вы всё ровно смогли зайти на сервер, то вы что-то сделали не так!
    На этом всё, задавайте ваши вопросы в этой теме!
     
  2. ProMortred

    ProMortred Активный участник

    Баллы:
    61
    Имя в Minecraft:
    ProMortred
    Кто настроит Session за 100 руб?)))) JCR
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ты реально решил юзать такой динозаврокод?
     
  4. ProMortred

    ProMortred Активный участник

    Баллы:
    61
    Имя в Minecraft:
    ProMortred
    есть другие предложения?
     
Статус темы:
Закрыта.

Поделиться этой страницей