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

"Разработка с нуля" - Направьте на путь истинный

Тема в разделе "Оффтопик", создана пользователем DmTern, 6 май 2017.

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

    DmTern Активный участник Пользователь

    Баллы:
    61
    Доброго времени суток! Обращаюсь наверное с банальными вопросами, но требуется актуальный расширенный ответ, причем в одной теме (потому что вопросы глобальные). Прошу не бить, если что не так. Суть вот в чем:

    Коротко: "Хочу сделать сервер мечты, путем разработки сервера с нуля, написание своих модов\плагинов и прочего. Учусь программировать на Java, какой-то опыт имею. Раньше делал сервер майнкрафта - фактически собирал или перенастраивал готовый сборки. Сейчас хочется научиться делать все капитально, но без понятия с чего начать. Прошу помощь в азах, чтобы понять как это делается со стороны разработчика Java, а не простого школьника, который хочет за 5 минут сделать сервер."

    Длинно: На протяжении последних пары лет, были периоды, когда я пытался сделать сервер майна, на основе MCPC+ и разных модов. В целом ставил обычные моды, настраивал плагины, писал скрипты... Сервер как таковой не успел запуститься "в мир", писал для себя, пробовал разное, и не успел доделать все задуманное. Но это было давно, и долгое время не было возможности заниматься майном, знания и наработки потерялись, теперь непонятно что актуально, как и что сегодня работает... Прошло два года с последней попытки сделать сервер...

    Сейчас изучаю Java, и появилась необходимость в практике. Лучшего варианта для этой самой практики, и для души в рамках хобби, чем разработка майнкрафт сервера - я не придумал. Тем более не угасло желание реализовать все разные задумки касательно сервера. При этом для обучения и реализации задуманного - нужен подход не "Взять готовую сборку, и немного изменить", а научиться разрабатывать сервер и клиент на Java, чтобы сделать то что хочется, и иметь полноценную практику разработки, делая сервер мечты.

    Сейчас я даже не знаю за что хвататься в плане актуальной платформы. Тем более, когда вопрос касается "капитальной" разработки со стороны переписывания ядра, и написания модов и плагинов. Я конечно понимаю, что "мальчик прифигел, и замахнулся на большой кусок", мол кто же сразу кидается писать сервер "с нуля", без добротных знаний той же Java? Но хочу подойти к разработке именно с этой стороны, начать естественно с малого, и потом иметь возможность менять майнкрафт как мне нужно, при наработке знаний и опыта в процессе. Но сейчас, по прошествии 2 лет, я банально не знаю что актуально, и как теперь собираются сборки, ядра, и.т.д. Мне не понятно, есть ли исходники ядра Spigot или CraftBukkit, фришные ли они, можно ли их видоизменять и собирать свои ядра? Не понятен ни процесс, ни лицензионные соглашения, ни специфика разработки. Можно и стоит конечно начать со скачки какой-то сборки, и попыток пилить\отпиливать моды и плагины в ней, это само-собой разумеется, но вместе с этим хотелось бы перенять опыт, и послушать советы и рекомендации от людей, которые этим занимаются. Все-таки с хорошими советами и подсказками - можно выиграть много времени и сохранить нервы. Форум я курю поиском - само собой, но много информации не актуальной, и мало времени на перечитывание всего от корки до корки... Вы понимаете...

    Посему, прошу подсказать мне\направить меня на путь истинный по следующим вопросам:

    1. Подскажите какая сейчас актуальная версия ядра\платформы\клиента, на которой строятся сборки, которую можно править в рамках исходников и доделывания ядра, а также на которую можно повесить основные моды и плагины? Я так понял надо искать Spigot 1.89 и клиент 1.11.2? Я честно говоря, даже путаюсь в номерах версий. Можете меня сориентировать?

    2. Есть ли возможность работать с оригинальными исходниками Spigot'a\CraftBuckita напрямую, тут открытый код, или есть какие либо нюансы лицензии? Где можно скачать, как правильно подготовить код к разработке? Я так понимаю, что еть некая цепочка сборки ядра (сами эмуляторы + Forge, возможно что-то еще. Процесса сборки не знаю, давно когда-то видел информацию что как-то так собирается. Подскажите как с этим всем быть...

    3. Как строится процесс разработки\доработки ядра, модов, плагинов, утилит, в разрезе подхода разработки на Java? Планируется фундаментально подойти к разработке сервера, но я раньше не лазил в ядро, и ничего не менял, разве что один раз спавн железной руды в исходниках (это было давно и не правда). Также помню, что как-то сами исходники собирал в эклипсе по инструкции (MCPC+ вроде), не знаю как этот процесс происходит сейчас, и пока не нашел подробных инструкций о сборке и работе с разработкой на Java. Хотелось бы получить помощь в понимании этого процесса, чтобы иметь возможность дальше разбираться.

    4. Есть ли актуальные материалы, гайды по написанию модов\плагинов\сборке ядра\изменении исходников? На форуме большой разброс тем, и мало конкретики, а как уже писал выше, от корки до корки нет времени вычитывать. Если есть куда тыкнуть меня в плане документации и гайдов, буду благодарен...

    5. Как сейчас обстоят дела с лаунчерами, забагованностью актуального ядра, защитой от ддос, защитой изменения кода клиента? Это конечно второстепенные вопросы, но все равно интересно. Есть ли бесплатные решения, и возможность их настроить обычному юзеру+?

    * * *

    P.S. В общем, буду благодарен за развернутый ответ на выше-озвученные вопросы. Форум естественно читаю, и ищу ответы там, но хотелось бы сэкономить много времени, и получить актуальные ответы от опытных товарищей.
     
  2. TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    ИМХО, если есть желание сделать полностью свои плагины - то можно попробовать Sponge для сервера самой последней версии (1.11.2). Он поддерживает как плагины (Sponge-плагины), так и Forge-моды. Главный минус - отсутствие поддержки Bukkit-плагинов.

    Для Sponge документации хоть и немного, но достаточно для создания как плагинов, так и патчей самого Sponge. Никаких сложных цепочек для сборки там нет, слепил тестовый сервер без плагинов, пишешь плагин - тестируешь, чинишь - тестируешь. Повторить до идеала.

    Основные правило: исходный код Minecraft изменять в крайнем случае и желательно путём наложения патчей после запуска чистого клиента (ASM, Core-моды Forge, либо что-нибудь еще). Любые изменения должны выстраиваться на основе событий (Event'ов): игрок прыгнул, игрок вошел в игру, игрок получил урон и т.д.. Обрабатывая события клиента и сервера можно сделать практически всё, что угодно.

    С плагинами я практически не знаком, а вот по поводу создания Forge-модов могу посоветовать официальный форум, а из русских ресурсов mcmodding.ru . Если нет времени от корки до корки вычитывать, то не стоит заниматься этим. Правда.

    • Лаунчер (имхо) - нужен только для обновления клиента. Пиши свой.
    • Забагованность актуального ядра - не стоит беспокоится, если использовать самую свежую версию. Пусть об этом думают 1.2.5, 1.6.4 - мамонты.
    • Защита от DDoS - не задача сервера игры, это задача администратора. На крайний случай есть сервисы.
    • Защита от изменения клиента - тут всё нехорошо. С одной стороны, этой защиты по сути нет и всегда есть возможность её обойти. С другой стороны, попытаться её сделать - процесс творческий: шифруй, прячь, мониторь процессы.
    И да: мальчик, ты прифигел и замахнулся на большой кусок. Писать сервер с нуля, тем более на Java, это как бороться с мельницами. Лучше делом займись.
     
  3. Автор темы
    DmTern

    DmTern Активный участник Пользователь

    Баллы:
    61
    Нет, ну упарываться "в доску" я тоже не горю желанием. Меня вполне устраивают например плагины многие на бакките. Те же ограничения прав в Permission EX, Essential, WordEdit, и другие. Меня не устраивает то, что для того чтобы сделать сбалансированный сервер с плагинами и модами, нужно применяя плагины, вырезать 50-70% функционала, занимая id и прочее. Или извращаться со скудными возможностями скриптинга через Custom Staff 2 мод, когда можно запилить свой мод(ы), возможно без изысков в графике. Посему я и хочу докопаться до сути того, как работают моды и плагины, как идет просчет данных и взаимосвязи их с Клиент - Сервер - БД.


    Sponge как раз меня пугает "отстраненностью" от общего комьюнити и наработанного материала. Что до "сложных цепочек", на сегодняшний день я не совсем понимаю как происходит подхватывание кодов и функционала плагинов и модов, и их взаимосвязь с сервером и клиентом. Мне бы несколько примеров для начала... Не представляю объемов работы. Например, если 3д модели мобов и их поведение - это очевидно не просто, до 2д интерфейсы, обработка данных, я так понимаю там какой-то относительно стантардный код и Апи... В общем, без примеров - дремучий лес, мне сложно судить об этом. Но насколько я понимаю, тут мало статей, или нет статей именно с примерами разработки плагинов. Когда-то видел мануалы, которые начинались и заканчивались на вступительных статьях.


    Вот именно этот момент мне и интересен. Я же понимаю, что если начать копаться в основном коде, то с банальным приходом новой версии, потом все опять переписывать под нее. Но опять же - моя проблема - отсутствие понимания работы механизма наложения скриптов и кода - на события. Я имел такой опыт в рамках работы с Кастом Стафом, там было апи, но сам мод был прослойкой, и писались скрипты на JS, с Javа такого опыта не имею. Есть реальные примеры кода взаимодействия с Апи?


    За ссылку спасибо. По поводу времени суть в том, чтобы не читать флуд. А на вычитывание конкретных статей - время конечно необходимо будет потратить. Главное, чтобы навели на старт, и по возможности в тупиковых ситуациях тыкали в проблему. Вопрос в нормальных материалах. И да, я понимаю, что готовых статей нет, и надо выискивать суть в том что есть.

    Ну, я в целом не имел в виду переписывание ядра. Выразился я грубо и некорректно видимо. Имелось в виду - написание своих модов, без лишнего, минимальными затратами на решение конфликтов, и трат ресурсов.
    В остальном спасибо за советы. Попробую найти примеры на mcmodding.ru. Если же у вас есть примеры, или можете вкратце обрисовать схему работы взаимодействия модов и сервер\клиента, буду благодарен. Нужна зацепка.

    И вот еще...
    Получается что Sponge Перспектива, а Spigot и прочее - промежуточные-переходные звенья от умершего баккита? Или со спиготом не все так плохо? Или же он держится за счет наработок от баккита и совместимых наработанных скриптов и модов? + какой состояние Спонджа на данный момент? Поддержка модов, плагинов - разработка основных под эту платформу?

    Update: Не сразу понял что то сайт по моддингу, буду изучать пристальнее. Еще раз спасибо. Надеюсь там хорошие гайды :D

    Update 2: Читаю многострадальную тему про Sponge, интересно чем закончиться. Некоторое понимание вопроса ядер уже получил.... http://rubukkit.org/threads/sponge-buduschee-bukkit-i-minecraft-moddinga-v-celom.80994/page-20
     
    Последнее редактирование: 6 май 2017
  4. InterWall

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

    Баллы:
    173
    На sponge пока массового перехода не было. ИМХО: из-за старого доброго правила, работает — не трожь. Ну и отсутствие выбора в плагинах тоже играет роль, тот же PEX выглядит до ужаса странно, но других навалом.
    Зато у спонджа, по моему, есть мощный плюс — у него всё в порядке с документацией. Это не как у спигота/бакита, где знакомство с сервером происходит на 3 года назад созданной статье.
     
  5. TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Попробую "на пальцах" объяснить, как работают Forge, Bukkit и прочие: допустим мы имеем чистый код сервера, допустим метод, обрабатывающий появление игрока на сервере. В этом методе разбирается информация, пришедшая от клиента игры, создаётся новый объект EntityPlayer, ему присваивается имя, UUID, хуё-мое и так далее... В начало кода этого метода вставляется строка типа Forge.Events.LoginPlayerEvent.Action(); И получается что теперь каждое исполнение этого метода на сервере будет вызывать и срабатывание метода из Forge.

    Когда ты пишешь мод, ты говоришь мол "хочу, чтобы при вызове события LoginPlayerEvent выполнялось следующее: UUID игрока переносилось в отдельную MySQL-таблицу для отображения на сайте".

    Когда я пишу другой мод, я говорю "хочу, чтобы при вызове события LoginPlayerEvent в чат зашедшего клиента игры отправлялось сообщение Привет, %username%".

    Forge \ Bukkit, в свою очередь, когда формирует списки модов \ плагинов видит, что ты просишь его выполнить определенный код при вызове события LoginPlayerEvent и исполняет его при появлении нового игрока на сервере.

    Forge \ Bukkit \ Sponge и прочее - это те же самые прослойки как и твой Кастом Стафф. Только кастом стафф это уже прослойка над прослойкой. ИМХО, чем меньше таких вот вложений одного говна в другое, тем проще и быстрее чинить и дополнять код. Именно по этому я стараюсь обходить стороной любые сторонние API (типа api для моделей игроков, api для автоматического создания предметов для аутистов) кроме самого Forge.

    Моё мнение радикально: Bukkit - это та платформа, которую уже давно пора перестать поддерживать, и пора закопать и забыть. Ну или оставить на развлечение 1.5.2 , 1.6.4 - мамонтам, пусть резвятся в своём плиоцене дальше. Но за это высказывание меня на этом ресурсе шапками закидают.

    Тут 2 возможных исхода: либо люди наконец подтянутся к Sponge и начнут делать моды-плагины под него, либо появятся некроманты, которые воскресят Bukkit из мёртвых на Sponge-платформе. А пока и тех и других нет.
     
    Последнее редактирование: 6 май 2017
  6. Автор темы
    DmTern

    DmTern Активный участник Пользователь

    Баллы:
    61
    Это, и то что написано выше - весьма понятное объяснение (спасибо). Сейчас, пока я еще не изучил тот сайт по написанию модов (читаю многострадальную тему про рождение Спонджа), возникает следующий логический вопрос:

    - Я так понимаю, что ловя события в моде или плагине, идет через овверайд базового метода прослойки (баккин\спондж, спигот), и выглядит примерно как:

    Код:
    public class LovimPlayera {
    @Overrade
    public void PlayerEnter_XXXX {
         Делать что-то, если произошло это событие...
    }
    }
    Тобишь фактически Апи прослоек - это набор методов реагирования на какое-либо событие в ядре основного майна. А тальше уже чистая магя джава - извращайся как хочешь? И вопрос в том, что нужно иметь документацию по всем методам апи, как правильно ловить их (названия методов), а структура твоего мода - уже по потребностям самого мода или плагина.

    И соответственно, когда надо например вывести пользователю на экран интерфейс "плагиносундука", то это делается опять же -методами прослойки конкретной реализации СпонджА, баккита, спигота... Как-то так?

    Вот и я не сторонник возвращаться к написанию скриптов на JS Кастом Стафа.... Теперь вопрос в изучении Апи (если я правильно понял схему), и осознания возможностей прослоек нижнего уровня... Я так понял, что например касательно тех же мобов, можно например при "Появлении игрока", вычислять позицию -3 позиции по иксу от него, позицию для спавна моба (ентети с определенной моделью -по адресу, и проигрыванием звука по адресу). Верно? Также перемещать эту сущность хоть кувырком (просчеты математические). И вопрос тут лишь в том, чтобы изначально осуществить подгрузку исходников модельки, и других файлов и кода (В виде мода) до фактической реализации скрипта = правильная подгрузка ресурсов? Как-то так?
     
  7. TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Немного не так. О том, как это работает в Forge можно посмотреть здесь и здесь. В первом примере идёт обработка события, когда игрок поднимает очки опыта с земли PlayerPickupXpEvent. И там автор удваивает количество полученного опыта.

    Конкретно твой пример можно реализовать на всех трех платформах. И да, это можно сделать их методами (читай, событиями). Но, опять же, если твой плагиносундук планируется с 200 ячейками, то его интерфейс в клиенте надо будет пилить уже модом.

    Для подобного моба нужно:
    1. Добавить модель, звуки и текстуры в asset'ы (ресурсы) клиента игры.
    2. Зарегистрировать нового моба как в клиенте, так и на сервере.
    3. Написать логику мышления моба на сервере. Это, на сколько мне известно, можно сделать как модом, так и плагином. Bukkit умеет же менять AI-мобов, не так-ли?
     
  8. Автор темы
    DmTern

    DmTern Активный участник Пользователь

    Баллы:
    61
    По событиям и примерам - надо изучать детально. Из поверхностного просмотра я так понял, что надо создать событие, зарегистрировать его (Насколько я понял - по аналогии с ActionListener из Свинг), и при помощи аннотаций можно писать отмену событий при условиях "если"... + должно это еще как-то хитрожопо располагаться по каталогам классов. В общем надо пробовать на практике. Доберусь до этого, попробую, если что - спрошу еще.



    Насколько это сложно реализуется? Я так понимаю, что в случае с 200-сот ячейковым сунтуком, нужно:
    1. Ресурсы с текстурами такого сундука сделать и зарегистрировать
    2. Сделать разметку ячеек, и зависимость-расположение в GUI исходя из разрешения экрана и разметки
    3. Прописать события на открытие\закрытие, + установку предмета в конкретные координаты
    4. Функции Сохранения\загрузки итемов для каждого уникального сундука.

    То есть - по факту разметка может описываться в классе, и просчеты по предметам. А сохранение в виде структуры данных - файл с id предметов, с разделителями, и уникальным номером сунтука, и его координатами, расположением. То бишь или файл, или таблица в БД (координаты, статус (открыт\закрыт), String формата "3:33;2,35;6,123;22", где первое число кол-во ячеек, остальные ид\кол-во через разделитель. И потом обработка данных сундука сериализация, десериализация или работа с бд по выгрузке данных.

    В общем примерно такая логика? Или например в майне есть апи по работе с контейнерами, через которое можно взимодействовать с кастомными контейнерами? Я так понимаю, там большой простор для извращенных реализаций )))

    Я не работал с этим. Я так понимаю - проще всего или те же примеры найти, или поспрашивать разработчиков модов мобов, как можно извращаться с АИ?
     
  9. TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Берём код сундука из чистого сервера\клиента и меняем количество сохраняемых данных на 200 ячеек. Данные эти хранятся в NBT, поэтому обращаем своё внимание на методы writeToNBT и readFromNBT, они отвечают за сериализацию-десериализацию. И добавляем в клиент нужную графику. Всё.

    Самый простой вариант - найти GitHub с уже готовыми примерами мода с AI.
     
  10. Автор темы
    DmTern

    DmTern Активный участник Пользователь

    Баллы:
    61
    Покопался я с ядрами и настройками, и у меня возник один вопрос: Как поднять сервер на Spigot с одновременной поддержкой модов и плагинов? Это вообще реально? Получается, что для поддержки плагинов - надо запускать ядро Spigot, для модов ядро Forge. Если работает одно (плагины), то не работает другое (моды)... Вижу не один я задавался таким вопросом, но четкого ответа не нашел.

    В итоге, вопросы:

    - Как поднять сервер на Spigot с одновременной поддержкой модов и плагинов?
    - Реально ли поднять сервер на Spigot с одновременной поддержкой модов и плагинов?
    - Что можно поднять в рамках связки плагины + моды - желательно на последних версиях?
    - Как реально прожить без модов или плагинов? Как быть в такой ситуации?
     
  11. Незнайчик

    Незнайчик Активный участник Пользователь

    Баллы:
    76
    - Никак
    - Не реально, пока не перероешь весь код spigot и forge
    - Использовать Thermos/Kcauldron, последяя версия 1.7.10. Либо смотри sponge, в основном свежие версии, но плагины реализованы как моды.
    - Мазахизм
     
  12. TaoGunner

    TaoGunner Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    1. Никак, используй Sponge \ воскрешай Cauldron.
    2. Нереально, используй Sponge \ воскрешай Cauldron.
    3. Sponge \ Cauldron.
    4. Классику никто не отменял, Minecraft Realms жив и будет жить.

    Кстати говоря, любой Bukkit \ Sponge - плагин можно реализовать Forge-модом. Моды > Плагины.
     
  13. Незнайчик

    Незнайчик Активный участник Пользователь

    Баллы:
    76
    Без плагинов разнесут все)
     
  14. svk

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

    Баллы:
    123
    Имя в Minecraft:
    svk
    Forge работает с помощью хуков и подменяет код, когда тот заходит в память, я так понял.

    Он ставит систему ивентов, вставляя в ваниль строчечки для срабатывания этих самых ивнтов. Заменяет/дополняяет ванильные классы для возможности регестрировать свои предметы/энтити и т.п.
     
  15. ( Aristotrus )

    ( Aristotrus ) Активный участник Пользователь

    Баллы:
    76
    Не парься с модами. Создавай топ проект на самописных плагинах и не только. VimeWorld начинал с обычного сервера, Хайпиксель и сейчас без модов работает.
     
  16. svk

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

    Баллы:
    123
    Имя в Minecraft:
    svk
    Если интересует только доход, но не качество, ты забыл дописать.
     
  17. ( Aristotrus )

    ( Aristotrus ) Активный участник Пользователь

    Баллы:
    76
    Можно сделать качество и на плагинах.
     
  18. Will Orion Z

    Will Orion Z Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    willorion
    Хайпиксель вообще то использует модификации.
    Нельзя, плагинами не получится реализовать глобальные модификации, изменяющие механику игры и добавляющие новую, кастомный интерфейс и прочее.
     
  19. InterVi

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

    Баллы:
    173
    Если у кого-то не получилось это не значит, что у тебя не получится. Но сервер с плагинами - это уже часы работы + огромные усилия по обслуживанию. Только одни фиксы лишат тебя личной жизни, и всё равно всё будет работать через жопу. Станешь рабом своего сервера 24/7, получив что-то годное только через несколько лет тяжкого труда.
     
  20. alexandrage

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

    Баллы:
    173
    Донат не не слышал? Покупаем - заказываем плагины готовые и все.
    Совсем не обязательно все писать самому.
     
    Последнее редактирование: 15 май 2017

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