Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Руководства, инструкции, утилиты' started by broelik, Feb 23, 2016.

  1. Автор темы
    broelik

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

    Trophy Points:
    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 и ниже):
    Code:
    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. Хостинг MineCraft
    <
  3. ProMortred

    ProMortred Участник

    Trophy Points:
    31
    Имя в Minecraft:
    ProMortred
    Кто настроит Session за 100 руб?)))) JCR
     
  4. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Ты реально решил юзать такой динозаврокод?
     
  5. ProMortred

    ProMortred Участник

    Trophy Points:
    31
    Имя в Minecraft:
    ProMortred
    есть другие предложения?
     

Share This Page