- Баллы
- 76
- Имя в Minecraft
- witwar
Как написать своё ядро.
Приветствую вас, вы читаете статью о том, где сумасшедший вроде меня будет объяснять вам как написать своё ядро для серверов майнкрафт. Подразумевается, что эта статья - объяснение документации простыми словами.
Начало.
Для начала, нам нужно определиться с языком и некоторыми другими вещами. В этой статье мы будем использовать Python 3, так как он более лёгкий для новичков, а ещё потому, что мне так захотелось. Так же стоит определиться где мы будем писать, а именно в каком IDE. Нет, вы конечно можете использовать удобные Nano и Vim, но не все люди любят терминалы. Я могу предложить вам несколько IDE.
1. Visual Studio Code. Поделка Microsoft. Присутствует версия DEB.
2. PyCharm. Поделка JetBrains. Как по мне его минус - написан он на java. Отсутствует DEB.
3. Sublime Text. Поделка не знаю кого. Это вообще не IDE. DEB присутствует.
Когда мы выбрали IDE, можно приступать к созданию проекта. Лично я буду пользоваться Visual Studio, так как он мне удобнее. Надо бы создать проект. Как делать это, показывать не буду - Вам нечего делать тут если вы не знаете как создавать проект в своей IDE. После того как у нас есть пустая папка, нам надо создать скелет проекта. Первое что мы создадим будет файлом requirements.txt. Он нужен для удобной установки зависимостей. В него мы будем писать названия всех библиотек которые используем. После создания сразу запишем туда строчки.
Код:
quarry
loguru
Это наши две зависимости. Поясню, quarry - библиотека для удобной работы с протоколом майнкрафт, а loguru это просто рай для программиста, она позволяет работать с логами очень удобно. Далее мы создадим виртуальное окружение которое нужно, чтобы не засорять систему разными библиотеками нужными для проекта. Сделать это легко и просто можно командой:
$ virtualenv venv -p python3
У нас создастся как бы "отдельная система" с установленным питоном 3-ей версии. Теперь надо войти в это окружение. Для этого используем команду:
$ source venv/bin/activate
Теперь надо бы установить все наши зависимости, сделаем это через PiP:
$ pip install -r requirements.txt
Нам осталось совсем немного. Создадим лишь файл оболочки в корневой папке для запуска проекта. В моём случае это будет start.sh. Он пока остаётся пустым, так как самой "начинки" у нас ещё нету.
Библиотека Quarry
Как было упомянуто ранее, для работы с протоколом мы будем использовать библиотеку quarry. Более 90% работы она будет выполнять за нас. Первым делом, давайте создадим главную папку, пусть она называется так же как и проект, только с маленькой буквы. В ней мы создадим файл main.py. Он будет служить стартовой точкой для программы, будет разбирать аргументы и запускать сам сервер. Давайте напишем в него примерно такой код:
Код:
from loguru import logger # Логирование
import argparse # Аргументы
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-m", "--motd", default="Test!", type=str, help="Server motd")
args = parser.parse_args()
logger.add("latest.log", rotation="5 MB")
logger.info("All works!")
main()
Этот короткий код-заготовка при запуске вызовет главную функцию, распарсит аргументы и положит их в args. После этого создастя файл latest.log который будет пересоздаваться каждый раз когда будет достигать 5 MB веса и выведется сообщение "All works!". Окей, давайте теперь напишем основную логику. Создадим файл с любым названием. Теперь нам нужно создать для него некоторую заготовку. Для этого импортируем некоторые классы.
Код:
from twisted.internet import reactor
from quarry.net.server import ServerProtocol, ServerFactory
Далее, нам нужно создать классы наследники.
Код:
class ExampleProtocol(ServerProtocol):
def player_joined(self): # Игрок зашёл
ServerProtocol.player_joined(self) # Базовые действия при заходе игрока
self.close("You disconnected because you {0}".format(self.display_name)) # Кикаем игрока по причине "You disconnected because you [имя игрока]"
class ExampleFactory(ServerFactory):
protocol = ExampleProtocol # Устанавливаем протокол
motd = "My shiny test motd!" # Устанавливаем мотд для сервера
На этом и подошла к концу первая часть. Вторую я напишу, если эта часть окажется хоть кому то полезной и/или интересной. Хочу отметить, что созданный проект не дописан и не должен работать.
Последнее редактирование: