Согласно описанию на гитхабе: это демонстрация возможностей библиотеки MCProtocolLib и все в этом духе.
Но это все хуйня. На самом деле это гребаный софт для боттинга майнкрафт серверов.
Он создан для уничтожения донатных школосерверов и клонов #СП.
Вот основные фичи:
- Боты могут работать локально и через прокси
- У ботов прописана физика
- Боты могут взаимодействовать с миром (ломать блоки, строить, осмысленно передвигаться) согласно скрипту
- У ботов прописана стандартная физика майнкрафта
- Боты умеют ПВПшиться
- Крайне гибкие настройки
- Встроенный в ботов чит Nuker
- Убогий интерфейс (дада это именно фича. Если не понимаете почему - прочитайте историю создания ниже)
А вот список тех самых "крайне гибких" настроек для ботов:
- Автореконект
- Формат хранения мира для ботов (общий/персональный)
- Будут ли боты ждать сообщения от плагина о том что нужно зарегистрироваться
- Автоудаление бота, если он не может зайти на сервер с X попытки
- Визуализация построения пути при помощи партиклов
- Включение/выключение передвижения ботов
- Следование ботов за конктретным игроком/позицией
- ПВП с определенным игроком/против всех игроков/друг против друга
- Копать ли определенные блоки
- Спам заготовленными пастами
А еще сюда по приколу встроено серверное мини-ядро. Правда запускается оно только из ИДЕшки.
Мотивация для создания
Главным мотиватором послужила моя жажда власти.
Кормили ее нарезки разных стримеров, где они собирали стаю подписчиков и заходили на какой то крупный школосервер, чаттерсы всех пиздили, писали в чат хуйню и грубо говоря ложили довольно крупные проекты. Мне это показалось крайне угарным, но так как своей личной армии подсосов у меня быть не может, в ход пошли мои навыки ботоводства, оставшиеся от рейдов в дискорде.
Изначально я пользовался софтиной, под названием "Fuckbot", которая была популярна в 21 году, поэтому вылезла мне по первому запросу в поисковике. (Правда сейчас очень трудно будет найти ее без вирусни, только если у вас нет моего ССДшника). Но меня крайне бесили ее слабенькие настройки. Работала она только на версии 1.12.2, и все что там можно было поменять это пасты для спама и прокси.
Первый релиз для 1.12.2
Естественно, моих навыков в декомпиляции java программ тогда не хватало на то чтобы вскрыть весь код fuckbot'а, но я успешно смог узнать на чем все это дерьмо работало — MCProtocolLib. Вокруг возможностей этой либры и строился весь мой дальшейший код.
Так как это была моя первая прога на Java, об оптимизации, как гордый петухонист, я тогда не парился вообще. Нахуярил по 2 потока (сеть и тики) на каждого бота и сидел кайфовал. Первый залив кода на гитхаб датируется 7 октябрем 21 года. Тогда боты умели только заходить в мир, собирать данные о чанках, падать согласно самой топорной физике которую только можно придумать, регаться через 2 команды и чучуть спамить.
Скриншот самого сложного и крутого в галактике супералгоритма для обработки физики падения прилагается. (Ах да, для физики создавался третий поток))))
Апгрейдс
Ну тут и понесло меня. Тратил я на эту хуету примерно 80% жизни (остальные 20% это поесть/поспать/шарага). Видимо это и есть то, что в простонародье называют гиперфиксом.
Спустя 2 месяца душения эклипса, мои боты уже умели передвигаться, выстраивая путь алгоритмом A* и ломать доски.
А теперь к подкапотным минусам: принцип передвижения был по строго заданным цифрам, например если боту нужно было перейти на +1 блок по оси x, то он тупо в течении 5 игровых тиков прибавлял к своей позиции 0.2. Никаких расчетов инерции, плавного старта, да блять даже для прыжков позиции были строго прописаны.
А что насчет копания блоков? Нуу просто посылался пакет, что бот начал копать блок, а потом по заранее прописаному таймингу он завершал копание очередным пакетом. При этом анимации добычи и отправки пакетов прогресса небыло.
Естественно такая сырая версия особо в рейдах не учавствовала. И подходила разве что для игры на локалке.
А еще бонус: конченые имена коммитов на гитхабе. Наверно это база всех шизо-девов, которые первый раз в жизни увидели гит, ну или я один такой особенный. (Кто такой SnowFlake2006?)
Переход на 1.16.5
Думаю что популярность версии майнкрафта 1.16.5 в 21 году ни для кого не новость. Это и было причиной ее выбора. А еще тот факт что у нее довольно простой протокол, в целом схожий с 1.12.2 по базовому функционалу. Переход на новую версию много не занял.
За первые 5-7 дней после перехода была реализована система расчета коллизии для ботов. А через еще 10 дней боты умели различать некоторые блоки, их коллизии и время на разрущение с учетом инструметов в руке. Но работало это на костылях. Помимо этого, они уже умели работать с инвентарем, сундуками и верстаком.
Разработка шла семимильными шагами. Сам с себя прошлого досихпор ахуеваю. Через месяц программа начала скидывать с себя оковы строгих скриптованых взаимодействий. Из сурсов майна были спаршены точные коллизии всех блоков, их регистры и правильные тайминги добычи. Полевые испытания показали что боты и вправду относительно реалистично ведут себя в игре. Но зачастую их донимал античит, поскольку физика все еще была скриптованая.
Новые возможности
Тот факт что я смог зареверсить оригинальную майнкрафтовскую физику предал мне лютой мотивации. Пару свободных дней + ctrl c ctrl v = боты имитирующие точь в точь физику падения/ходьбы/плавания майнкрафта. Тут уже началась разработка режима ПВП.
Если обойтись без технических деталей, то в режиме ПВП боты умели:
- Кушать при низком голоде/здоровье
- Дефаться щитом, точно выверяя таймигни ударов
- Одевать броню, выбирая только самую крутую
- Пользоваться инструментами
Пожалуй умение пользоваться щитом стало киллер-фичей ботов, в обеих смыслах этого словосочетания. У игрока буквально небыло шансов пробить щит.
Тогда же я нагло спиздил у одного из конкурентов прокси-парсер, чтобы жизнь малиной не казалась.
Релиз 1
22 мая 22 года. Я попытался почистить код от всяких убогих временных решений, а так же допилить текущие режимы. Для добычи блоков был создан отдельный режим.
Помимо этого было создано GUI окно, через которое можно управлять текущим рейдом. К сожалению фоток гуи у меня не сохранилось, а качать и запускать эту версию мне лень, вот краткий бриф по его возможностям:
- Можно было выборочно отправлять сообщения от имени ботов
- Можно было присоединять/удалять по одному боту по нажатию кнопки
- Можно было динамически обновлять настройки ботов прямо во время рейда
- Можно было по одной кнопке парсить сервера с мониторинга и сразу же их рейдить
- Можно было заставлять ботов выполнять скрипт-алгоритм в духе "иди туда, добудь доски скрафти меч и отпизди какого нибудь игрока". Ну или делать эти действия по отдельности
- Можно было заставить всех ботов одновременно прыгнуть (хз зачем, просто по рофлу)
Еще тогда, при полевых испытаниях, люди путали ботов с реальными игроками изза реалистичности поведения.
Софт был рабочий, но абсолютно не юзабельный для широких масс. Никто не понимал как и что тут вообще устроено, в частности изза конченых кринжовых пояснений. Если хочешь полное представление о том насколько все было плохо, представь бдуто твою бабушку посадили за комп с открытой FL studio, в которой все кнопки переименовал чел с аутизмом и шизофренией. Вот примерно так ощущался экспириенс использования моей проги.
Снизу прикрепил фотки GUI из последних версий. Бонус: очередные ебанутые называния комитов:
Самописный сервер
23 августа 22 года. Листал я однажды исходники MCProtocolLib от скуки и наткнулся на раздел с серверными пакетами. И тут понеслась.
Я создал небольшое серверное ядро. Это все может прозвучать черезчур амбициозно, не дайте себя обмануть. Это ядро даже не умело динамически обновлять чанки для всех игроков, поэтому размер мира был ограничен, а чанки отправлялись все и сразу при входе игрока на сервер.
Еще там были несколько айтемов, создающих красивые узоры из парктиклов. А стержнем блейза можно было перемещать блоки как гравити ганом из халф лайв 2.
Еще я зачем то решил повторить систему банов как в сампе. Тоесть тебя не выкидывает из сервера сразу. Просто мир перестает обновляться для забаненого игрока, пока тот все еще может передвигаться в нем и рассматрвиать его. А при разбане тебя просто возвращает в нормальный мир из статичного. Даже не придется перезаходить.
А когда я решил показать свои наработки челам с ПКССМа, быстро нашлась уязвимость, ложащая сервер: если бесконечно выкидывать айтемы из креатива, они начинают нагружать тикрейт сервера. И до того как эти предметы успеют задеспавниться, их можно накидать целую кучу. После этого я понял что затея с ядром была не самой лучшей и забил на него, оставив его код в проге.
Релиз 2
Далее ничего интересного. Я просто фиксил баги котоыре мог в силу своих навыков. Во время какого то из фиксов досихпор неизестно где я допустил ошибку, изза которой во время рейда рандомно срабатывают звуки ошибки винды. Найти отвечающий за это фрагмент кода так и не удалось.
Перед последним обновлением я исправил имена большинства неадекватно названных переменных. После этого сделал ласт коммит и с тех пор данный проект это публичный архив.
Скрывать код я не стал, поскольку в нем всеравно никто не захочет разбираться. Настолько он ужасен. Ну а о каком качестве может идти речь когда код пишет пубертатный школьник с манией величия.
На последок
Каким бы ужасным не был код, я всеравно горжусь проделаной работой. Было потрачено 2 с лишним года и со вполне себе успешным результатом (по моим личным меркам), ведь свою мечту мне удалось исполнить. А по мимо этого, данный проект дал мне комплексные знания об устройстве игр в целом.
Прогу юзаю переодически досихпор и если разбираться в управлении, то рейды выходят очень даже эффектными.
Естественно с подобным говнокодингом уже покончено. Такой стиль написания кода остался вместе с одной из старых моих личностей, которая носила ник "Pizdec RP". И в отличие от него, я больше никогда не буду относиться с таким пренебрежением к тому что создаю.