LINUX.ORG.RU

WEB авторизатор minecraft написанный на gambas, php и bash

 , , , ,


0

1

Сперва представлю того кто помог мне с PHP частью www.linux.org.ru/people/xtraeft/profile

Ссылка на скачивание моего поделия: https://dl.dropboxusercontent.com/u/86123252/minecraft-web-gambas-login/minec... в комплекте исходные коды.

Как это работает, конечно это описано в readme.txt но покажу это в виде графической схемы.

http://www.imageup.ru/img228/1431248/sxema-raboty.png

Как вы видите, PHP форма записывает введённые в неё данные в output.txt . Раз в секунду minecraft-login.gambas читает output.txt и если там появились новые данные (новизну данных определяет по временной метке), то просматривает users.txt и посылает команду в mine-output.pipe

Например авторизация строиться на той особенности работы minecraft, что после удаления пользователя из белого листа, пользователь может продолжать играть пока не разорвёт текущую сессию, то есть белый лист проверяется только при подключении к серверу. Это значит что можно сначала включить пользователя в белый лист, а через пол минуты удалить его оттуда. Пользователю всего надо успеть войти на сервер в течении 30 секунд после web авторизации.

При помощи команды

 cat mine-output.pipe | java -Xmx512M -Xms512M -jar minecraft_server.jar nogui & 
Minecraft начинает читать читать стандартный ввод из mine-output.pipe , а при помощи
cat > mine-output.pipe 
со стандартного ввода можно посылать команды на консоль minecraft. Минус такого подхода, это необходимость после остановки minecraft сервера использовать Ctrl+C для остановки cat > mine-output.pipe .

Сам авторизатор формирует команды консоли minecrfat. Их список можно найти в wiki майнкрафта. В текущей версии используются следующие.

whitelist add username
whitelist remove username
kick username
op admin-name
deop admin-name

Как я это установил: Для начала я разместил содержимое scripts в каталоге minecraft сервера ~/server пользователя minecraft, а содержимое каталоге web положил в каталог web сервера /var/www-html/

Потом изменил хозяина output.txt и для простоты создал на него символическую ссылку дабы не модифицировать пути скриптах

chown minecraft  /var/www-html/login-minecraft/output.txt 
cp -s "/var/www-html/login-minecraft/output.txt" ~/server 
И ввёл output.txt в группу www-data

Установил требуемый софт изменил права на output.txt

apt-get install gambas3-runtime
apt-get install screen
chmod 720 /var/www-html/login-minecraft/output.txt

Затем создал screen сессию mine

screen -S mine
Временно отключиться от screen сессии можно (Ctrl+A потом D), подключиться обратно
 screen -x mine 
Просмотреть список сессий
 screen -list 

Внутри screen сессии mine, я ввёл последовательно команды:

Для перехода в каталог сервера minecraft

cd ~/server/

Для очистки output.txt

./clear-output.sh

Для создания mine-output.pipe если он ещё не создан

./create-fifo.sh

Старт авторизатора, если не отпустит консоль сразу, то нажми Enter, ибо он запускаться через &

./start-output-login.sh

Старт самого сервера minecraft

./start-minecraft-server.sh

Список зарегистрированных пользователей можно редактировать через users.txt

login=user
password=123
level=1 
next

login=admin
password=123456
level=100 
next
Думаю нет необходимости объяснять принцип организации файла и то как добавлять в него записи.

В версии 0.6 я починил ведение протокола работы. Он записывается в log-mine.log . Там можно найти записи про различные попытки аутенфикации.

Если на введённые в форму данные авторизатор не реагирует, то есть не пишет в лог и не подаёт команды на консоль minecraft, значит web форма и авторизатор используют разные output.txt проверь пути или создай символическую ссылку.

Если авторизатор вываливается с ошибкой, значит скорее всего либо неправильно указанны пути, либо указанные в путях файлы не доступны.

Если авторизатор исправно пишет в свой лог, а в консоль minecraft команды не подаёт (их видно если подключиться к screen сессии в которой minecraft запущен), значит скорее всего либо mine-output.pipe не создан как pipe. Или пути к нему указаны неправильно.

Преимущества этой системы авторизации в том что она не зависит от используемой версии так же как системы авторизации для bukkit.

Прошу не бейте меня за использование сочетания BASIC и PHP

Треш, угар и содомия. Нафига столько сложностей?

Прошу не бейте меня за использование сочетания BASIC и PHP

Бить не надо, нужно просто убивать.

Всё это заменяется небольшим скриптом и горсткой кода на Java.

derlafff ★★★★★ ()
Ответ на: комментарий от derlafff

Всё это заменяется небольшим скриптом и горсткой кода на Java.

Никто не изъявил желание написать это по моему реквесту, пришлось программисту-любителю браться за дело.

rezedent12 ☆☆☆ ()
Ответ на: комментарий от rezedent12

Какие же кроме плагинов для bukkit ?

любой сторонний мастер-сервер

более того, даже свои костыли пишутся намного проще, без бейзиков (SH~~!) и прочих. Более того, ты используешь для запуска screen, а команды посылаешь через пайп, зачем так?

Убивать, короче.

derlafff ★★★★★ ()
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от derlafff

Более того, ты используешь для запуска screen, а команды посылаешь через пайп, зачем так?

Можно и без screen если имеешь доступ к серверу не через ssh а прямой. Но если по ssh, то лучше завернуть это всё это в screen.

rezedent12 ☆☆☆ ()

Minecraft начинает читать читать стандартный ввод из mine-output.pipe

Команды можно просто отправлять в screen сессию майна.

Список зарегистрированных пользователей можно редактировать через users.txt

Для таких вещей есть базы данных.


А чем не подошла стандартная авторизация майнкрафта? Там же только несколько ссылок в class файлах поменять и написать скриптик на php

TDrive ★★★★★ ()
Ответ на: комментарий от TDrive

Для таких вещей есть базы данных.

Но я же не знаю как с ними работать, да и сервер небольшой.

А чем не подошла стандартная авторизация майнкрафта? Там же только несколько ссылок в class файлах поменять и написать скриптик на php

Код PHP формы я выпросил здесь, так как сам на PHP не понимаю как писать. Java я тоже не знаю.

rezedent12 ☆☆☆ ()
Ответ на: комментарий от rezedent12

Код PHP формы я выпросил здесь, так как сам на PHP не понимаю как писать. Java я тоже не знаю.

Так вот нужно самому учиться, а не выпрашивать.)

TDrive ★★★★★ ()
Ответ на: комментарий от TDrive

Работает. Видимо следующую версию можно будет сделать попроще. А screen будет уже в обязательных зависимостях.

rezedent12 ☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.