О перспективах использования сервера на Fabric вместо привычного Bukkit

q20w26a

Разработчик
Инструктор
Пользователь
Сообщения
580
Решения
27
Другие ядра
  1. Другое
Bukkit головного мозга
Сервер Minecraft у многих ассоциируется с Bukkit API, плагинами и YAML-конфигурацией; с цветным информированным ТАБом и блевотно мигающим скорбордом; с игроками, донатом и разными плюшками; с техническими ограничениями или возможностями; с удачными и не очень форками; с лагами на новых версиях, а у разработчиков может быть еще и с пакетом net.minecraft.server. Но почему именно так? Что заставляет при слове "сервера" создавать ассоциативные цепи именно с этим всем? Существует ли монополия Bukkit?

А с чем у Вас ассоциируется словосочетание "сервер с модами"? Лично у меня это обычно что-то старое, гарантированно использующее лаунчер, сайт, сервер с относительно небольшим онлайном. Типичный Hi-Tech 1.7.10. Ну или 3D-оружия, зомби, аптечки... понятно к чему я клоню. То есть обычный "сервер с модами" обязательно должен загружать что-то игроку дополнительно, обычно это моды, пару ресурспаков и конфигурации. Но фактически, сервера с модами могут иметь только серверные моды и совершенно не взаимодействовать с клиентом. Неожиданно, правда:ROFLMAO:?

Bukkit существует уже очень давно — 8 или 9 лет. За это время он очень хорошо успел обрасти плагинами, аудиторией, бесконечными туториалами по настройке, уроками по написанию плагинов и просто получить репутацию хорошего ядра. Единственного хорошего ядра. Какие есть конкуренты у Bukkit? API, заточенные чисто под сервера:

Но давайте посмотрим правде в глаза: единственный адекватный сервер тут это Glowstone. Разработка Sponge идет вялым ходом, Cuberite довольно сыроват, да и версии там тоже старые. Minestom это вообще другое, это даже не сервер, это API для создания сервера, тут даже ванильный функционал писать нужно отдельно, хоть это имеет свои плюсы, речь не о Minestom.

Так или иначе, мы видим что кроме Bukkit у нас ничего особо и нет. Мы говорим что Bukkit плохой, что md5 творит бред в коде, что сервера тормозят, особенно на новых версиях, что API инвалидное и некоторые вещи можно переделать, но мы продолжаем использовать Bukkit. Даже наш форум ориентирован на Spigot (тот же Bukkit, вид сбоку). Мыши плакали, кололись, но продолжали жрать кактус.

Вам необходимо зарегистрироваться для просмотра изображений-вложений

md5, что ты творишь?

Но что тогда?
Существуют API для моддинга, и использовать моды вместо плагинов не такая уж и плохая идея, ибо плагины и являются модификациями для серверов. Вот только с самими API есть некоторые проблемы. Как минимум, они не привычны в использовании.

Forge. Одно из старых, но проверенных API. Все, что делается в Bukkit, можно сделать и в Forge, ибо оба API так или иначе всего лишь слой над ванильной игрой, упрощающий взаимодействие с ней. Вместе с этим, Forge сложнее все таки сложнее, тяжелее в плане понимания, на одни только сервера особо не ориентирован. Лично я не вижу смысла писать на более сложном API, требующем немало вычислительных ресурсов какой-нибудь плагин авторизации или что-то вроде того. Это еще больший мазохизм.

Тогда можно использовать Fabric. В чем преимущества Fabric перед Forge? Ну, как минимум:

  • Не сильно требовательно использует ресурсы. Fabric сам по себе легкий, ибо является просто загрузчиком модов
  • Легкость в написании модификаций, так как тут нет никаких дополнительных прослоек, поэтому если знаешь как работает игра, можно легко и просто реализовать что-то свое. Даже если не знаешь, ответ почти всегда в ванильных классах - множество модов так и пишутся
  • Использование Mixins. Можно легко и просто решить множество проблем с помощью миксинов, начиная от оптимизации, и заканчивая изменением поведения игры
  • Можно держать сервер на последней версии игры, даже на снапшотах
Тут же немало минусов, которые затмевают множество возможных плюсов:
  • Несмотря на второй пункт - бедное API. Событий мало, и основную часть придется реализовать через Mixins, ну или вовсе избегать системы событий и инжектится в методы
  • Миксины не так уж и удобны. Обычно использовать их просто, но если я захочу сделать PlayerJoinEvent, то вызов события лучше всего поместить в конструктор PlayerLoginListener (ибо именно в нем происходит вся магия входа), вот только вход игрока находится где-то в середине конструктора, а конструктор этот растянут на ~200 строк. Придется полностью скопировать код конструктора ради пары жалких строчек вызова события в середине
  • Система событий не самая удобная. Нет привычных геттеров и сеттеров там, где они могут ожидаться, например getPlayer в каком-нибудь событии чата (которого нет, ха-ха)
  • Fabric не имеет и части тех вещей, что есть в Bukkit - таймингов, системы прав, флагов Aikar и прочего
Поэтому у меня было свое API для Fabric, однако оно не менее сырое и простое. У меня были как YAML (такие же удобные как в Bukkit), так и JSON конфигурации; попытка реализации части Bukkit-овских функций API (dispatchCommand, обертки для некоторых методов), список доступных модов и "плагинов", использующих мое API, пара событий, попытка реализации фейковых игроков и API для работы с инвентарями (тоже как в Bukkit), я даже пытался провести некоторые базовые оптимизации сервера (не успешно).

И все же, я считаю Fabric достойным кандидатом. Нужно лишь упростить работу с некоторыми вещами, добавить привычные события (не в плане реализации, а сами события - BlockInteractEvent например), поработать с некоторыми особенностями. Не нужно делать вещей для облегченного создания совершенно новых предметов или блоков, самое важное - сделать переход потенциального разработчика с Bukkit на Fabric более мягким и плавным.


И какие тут преимущества?
На самом деле, их они довольно малы и сомнительны. И в основном они подойдут только разработчикам.

Во-первых, это многообразие API. Когда есть выбор - это хорошо.
.
Во-вторых, это миксины. Ради них я готов сделать немало. И пусть в некоторых моментах они жутко не удобны, мне чаще кажется что хорошо, что они существуют, ибо эти штуки способны изменить поведение любого класса в игре как нам угодно, а это дает больший контроль над игрой. В Bukkit нам приходится довольствоваться лишь тем, что у нас есть.
В-третьих, больший простор для развития геймплея. Вот тут уже поподробнее.

Допустим, можно написать аналог WorldGuard и использовать его с модами. Получаются приваты и моды, и это не на каком-то там Cauldron на древней версии. Да и банально попробовать Lithium и Phosphor на серверах, т.к. они созданы для наилучшей оптимизации. И это не какие-то форки, зависящие друг от друга, это отдельные моды которые можно в любой момент удалить или установить при необходимости.

Ну и в какой-то степени, это может подойти не столько для привычных сборок серверов которые мы привыкли видеть в интернете, сколько начинающим проектам которые могут написать что-то свое.


Итоги
Что мы имеем?
1) Bukkit сейчас практически нечем заменить, но никто особо и не пытается, и это несмотря на все недовольства ядром. Переписывать его тоже никто не собирается, ибо это тоже не так уж и просто - система хоть и старая, но выглядит стабильно, что-то менять - себе дороже.
2) Помимо Bukkit существуют полумертвые или сырые ядра, которые всерьез использовать пока или уже не стоит.
3) Под рукой мы имеем отличные инструменты, которые было бы неплохо взять на вооружение, но это никому не надо.

Даже если кто-то (может даже с форума) создаст что-то приемлемое и будет поддерживать, надо будет создать аналоги самых необходимых плагинов, затем ждать пока разработчики портируют свои плагины с Bukkit (что может не произойти если ядро не выстрелит), иначе получится что API есть, а оно никому не нужно.

Мне интересно Ваше мнение по этому поводу. А еще мне интересно, чего Вам не хватает в Bukkit, что бы Вы в нем изменили, и что бы Вы хотели видеть в возможном новом ядре?
 
Мне жалко время, которое я потратил на прочтение этого.

q20w26a написал(а):
md5 творит бред в коде
Монументальное заявление. Джун, с едва ли работающим плагином - имеющим ужасный код, ругает сеньора, который успешно поддерживает гигантские проекты и смог построить целое комьюнити вокруг них. Забавно и довольно иронично.

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

Тут ещё можно написать тонну текста про то, что существует очень узкий круг лиц и групп этих лиц, которые смогут потянуть такой проект - "написание нового ядра с нуля", но это вообще другая история.
 
Последнее редактирование:
Если бы на старте майнкрафта было создано сразу несколько ядер которые бы развивались параллельно - возможно, мы бы получили конкуренцию и все её приемущества, как потребители
offtop Вот к примеру в MCBE очень много ядер, и они конкурируют.А у нас форки.Даже грустно стало

Авто объединение сообщений:

Я думаю что новое ядро возможно, если ты заплатишь команде опытных разрабов пару десятков миллионов рублей.
 
в 2023 году нужно ли использовать fabric с плагинами и двумя модами для сервера 1.19.3? Или есть варианты лучше и стабильнее?
 
в 2023 году нужно ли использовать fabric с плагинами и двумя модами для сервера 1.19.3? Или есть варианты лучше и стабильнее?
Для нормального сервера - только ветка баккита. Для поиграться в компании с полной ваниллой - фабрик
 
Bukkit головного мозга
Сервер Minecraft у многих ассоциируется с Bukkit API, плагинами и YAML-конфигурацией; с цветным информированным ТАБом и блевотно мигающим скорбордом; с игроками, донатом и разными плюшками; с техническими ограничениями или возможностями; с удачными и не очень форками; с лагами на новых версиях, а у разработчиков может быть еще и с пакетом net.minecraft.server. Но почему именно так? Что заставляет при слове "сервера" создавать ассоциативные цепи именно с этим всем? Существует ли монополия Bukkit?

А с чем у Вас ассоциируется словосочетание "сервер с модами"? Лично у меня это обычно что-то старое, гарантированно использующее лаунчер, сайт, сервер с относительно небольшим онлайном. Типичный Hi-Tech 1.7.10. Ну или 3D-оружия, зомби, аптечки... понятно к чему я клоню. То есть обычный "сервер с модами" обязательно должен загружать что-то игроку дополнительно, обычно это моды, пару ресурспаков и конфигурации. Но фактически, сервера с модами могут иметь только серверные моды и совершенно не взаимодействовать с клиентом. Неожиданно, правда:ROFLMAO:?

Bukkit существует уже очень давно — 8 или 9 лет. За это время он очень хорошо успел обрасти плагинами, аудиторией, бесконечными туториалами по настройке, уроками по написанию плагинов и просто получить репутацию хорошего ядра. Единственного хорошего ядра. Какие есть конкуренты у Bukkit? API, заточенные чисто под сервера:

Но давайте посмотрим правде в глаза: единственный адекватный сервер тут это Glowstone. Разработка Sponge идет вялым ходом, Cuberite довольно сыроват, да и версии там тоже старые. Minestom это вообще другое, это даже не сервер, это API для создания сервера, тут даже ванильный функционал писать нужно отдельно, хоть это имеет свои плюсы, речь не о Minestom.

Так или иначе, мы видим что кроме Bukkit у нас ничего особо и нет. Мы говорим что Bukkit плохой, что md5 творит бред в коде, что сервера тормозят, особенно на новых версиях, что API инвалидное и некоторые вещи можно переделать, но мы продолжаем использовать Bukkit. Даже наш форум ориентирован на Spigot (тот же Bukkit, вид сбоку). Мыши плакали, кололись, но продолжали жрать кактус.

Вам необходимо зарегистрироваться для просмотра изображений-вложений

md5, что ты творишь?

Но что тогда?
Существуют API для моддинга, и использовать моды вместо плагинов не такая уж и плохая идея, ибо плагины и являются модификациями для серверов. Вот только с самими API есть некоторые проблемы. Как минимум, они не привычны в использовании.

Forge. Одно из старых, но проверенных API. Все, что делается в Bukkit, можно сделать и в Forge, ибо оба API так или иначе всего лишь слой над ванильной игрой, упрощающий взаимодействие с ней. Вместе с этим, Forge сложнее все таки сложнее, тяжелее в плане понимания, на одни только сервера особо не ориентирован. Лично я не вижу смысла писать на более сложном API, требующем немало вычислительных ресурсов какой-нибудь плагин авторизации или что-то вроде того. Это еще больший мазохизм.

Тогда можно использовать Fabric. В чем преимущества Fabric перед Forge? Ну, как минимум:

  • Не сильно требовательно использует ресурсы. Fabric сам по себе легкий, ибо является просто загрузчиком модов
  • Легкость в написании модификаций, так как тут нет никаких дополнительных прослоек, поэтому если знаешь как работает игра, можно легко и просто реализовать что-то свое. Даже если не знаешь, ответ почти всегда в ванильных классах - множество модов так и пишутся
  • Использование Mixins. Можно легко и просто решить множество проблем с помощью миксинов, начиная от оптимизации, и заканчивая изменением поведения игры
  • Можно держать сервер на последней версии игры, даже на снапшотах
Тут же немало минусов, которые затмевают множество возможных плюсов:
  • Несмотря на второй пункт - бедное API. Событий мало, и основную часть придется реализовать через Mixins, ну или вовсе избегать системы событий и инжектится в методы
  • Миксины не так уж и удобны. Обычно использовать их просто, но если я захочу сделать PlayerJoinEvent, то вызов события лучше всего поместить в конструктор PlayerLoginListener (ибо именно в нем происходит вся магия входа), вот только вход игрока находится где-то в середине конструктора, а конструктор этот растянут на ~200 строк. Придется полностью скопировать код конструктора ради пары жалких строчек вызова события в середине
  • Система событий не самая удобная. Нет привычных геттеров и сеттеров там, где они могут ожидаться, например getPlayer в каком-нибудь событии чата (которого нет, ха-ха)
  • Fabric не имеет и части тех вещей, что есть в Bukkit - таймингов, системы прав, флагов Aikar и прочего
Поэтому у меня было свое API для Fabric, однако оно не менее сырое и простое. У меня были как YAML (такие же удобные как в Bukkit), так и JSON конфигурации; попытка реализации части Bukkit-овских функций API (dispatchCommand, обертки для некоторых методов), список доступных модов и "плагинов", использующих мое API, пара событий, попытка реализации фейковых игроков и API для работы с инвентарями (тоже как в Bukkit), я даже пытался провести некоторые базовые оптимизации сервера (не успешно).

И все же, я считаю Fabric достойным кандидатом. Нужно лишь упростить работу с некоторыми вещами, добавить привычные события (не в плане реализации, а сами события - BlockInteractEvent например), поработать с некоторыми особенностями. Не нужно делать вещей для облегченного создания совершенно новых предметов или блоков, самое важное - сделать переход потенциального разработчика с Bukkit на Fabric более мягким и плавным.


И какие тут преимущества?
На самом деле, их они довольно малы и сомнительны. И в основном они подойдут только разработчикам.

Во-первых, это многообразие API. Когда есть выбор - это хорошо.
.
Во-вторых, это миксины. Ради них я готов сделать немало. И пусть в некоторых моментах они жутко не удобны, мне чаще кажется что хорошо, что они существуют, ибо эти штуки способны изменить поведение любого класса в игре как нам угодно, а это дает больший контроль над игрой. В Bukkit нам приходится довольствоваться лишь тем, что у нас есть.
В-третьих, больший простор для развития геймплея. Вот тут уже поподробнее.

Допустим, можно написать аналог WorldGuard и использовать его с модами. Получаются приваты и моды, и это не на каком-то там Cauldron на древней версии. Да и банально попробовать Lithium и Phosphor на серверах, т.к. они созданы для наилучшей оптимизации. И это не какие-то форки, зависящие друг от друга, это отдельные моды которые можно в любой момент удалить или установить при необходимости.

Ну и в какой-то степени, это может подойти не столько для привычных сборок серверов которые мы привыкли видеть в интернете, сколько начинающим проектам которые могут написать что-то свое.


Итоги
Что мы имеем?
1) Bukkit сейчас практически нечем заменить, но никто особо и не пытается, и это несмотря на все недовольства ядром. Переписывать его тоже никто не собирается, ибо это тоже не так уж и просто - система хоть и старая, но выглядит стабильно, что-то менять - себе дороже.
2) Помимо Bukkit существуют полумертвые или сырые ядра, которые всерьез использовать пока или уже не стоит.
3) Под рукой мы имеем отличные инструменты, которые было бы неплохо взять на вооружение, но это никому не надо.

Даже если кто-то (может даже с форума) создаст что-то приемлемое и будет поддерживать, надо будет создать аналоги самых необходимых плагинов, затем ждать пока разработчики портируют свои плагины с Bukkit (что может не произойти если ядро не выстрелит), иначе получится что API есть, а оно никому не нужно.

Мне интересно Ваше мнение по этому поводу. А еще мне интересно, чего Вам не хватает в Bukkit, что бы Вы в нем изменили, и что бы Вы хотели видеть в возможном новом ядре?
Вот уж не надо ныть на апи баккита и продвигать соевое лобби. Апи баккита предоставляет всё, что нужно для разработки плагинов, в сравнении с тем же форджом - это небо и земля, где на последнем каждую версию ломается обратная совместимость, потому что криворукие разработчики решают поменять переменную thePlayer на player (и, что самое главное, не хотят документировать список поломок обратной совместимости, чтобы хотя бы перенести мод на новую версию можно было, не перечитывая все форумы по моддингу, как изменился тесцеллятор в 1.12.2!), а чтобы узнать, имеет ли человек опку, надо вводить строку длиной в 200 символов и цепь методов из 10 вызовов.

Если бы md_5 решил поломать обратную совместимость - разрушилась бы идиллия баккита, когда плагины могут работать на нескольких версиях сразу без особых проблем, и многие бы сервера застыли на старых версиях, а из-за застывших серверов застыли бы и плагины, что и произошло с форджом на версии 1.7.10. А соевое лобби регулярно грешит поломкой обратной совместимости - идеальный пример - папер ограничили запуск своего ядра на версии 1.16.5 на версиях джавы выше 16. Зачем? Одному глобалисту понятно. Вне зависимости от причин, из-за этого всем разработчикам сколько-нибудь популярных плагинов приходится работать с Java 11, потому что плагин, написанный на 17 джаве не заработает на сервере на версии 1.16.5. На md_5 молится нужно за то, что он столько лет поддерживает в сохранности и стабильности API уже давно мёртвого баккита, будучи окружённым соевыми говношлёпами с обоих сторон - со стороны моджанга и со стороны папера, когда даже сам net.minecraft.server меняет свой апи по 100 раз на дню, и когда net.kyori решает удалить префикс get у всех геттеров, а не предъявлять ему за какой-то там плохой код в ядре, который мы и так не видим. md_5 - это антипод cpw, это единственный борец сил добра среди полчищ нечисти, это мессия для майнкрафта. Вы просто представьте, что бы было бы, если бы мы, как на фордже, не могли запустить плагины с 1.12.1 на 1.12.2.

Если что-то не нравится в объёме предоставляемых API-методов - всегда, благодаря опять же, продуманности баккита, можно сделать надстройку над API, как сделал я с AncapFramework. Задача API ядра - не дать тебе кнопку "сделать всё классно", а дать тебе возможность сделать всё, что ты хочешь. Это подход Java, это подход Spigot. Это не подход Mojang, Sponge и Paper, которые только проблемы создают. Их подход - потратить 500 часов на перенос гигантской легаси базы на новое апи, чтобы потом сэкономить по 15 секунд на написании каждого нового плагина.
 
Последнее редактирование:
Вот уж не надо ныть на апи баккита и продвигать соевое лобби. Апи баккита предоставляет всё, что нужно для разработки плагинов, в сравнении с тем же форджом - это небо и земля, где на последнем каждую версию ломается обратная совместимость, потому что криворукие разработчики решают поменять переменную thePlayer на player (и, что самое главное, не хотят документировать список поломок обратной совместимости, чтобы хотя бы перенести мод на новую версию можно было, не перечитывая все форумы по моддингу, как изменился тесцеллятор в 1.12.2!), а чтобы узнать, имеет ли человек опку, надо вводить строку длиной в 200 символов и цепь методов из 10 вызовов.

Если бы md_5 решил поломать обратную совместимость - разрушилась бы идиллия баккита, когда плагины могут работать на нескольких версиях сразу без особых проблем, и многие бы сервера застыли на старых версиях, а из-за застывших серверов застыли бы и плагины, что и произошло с форджом на версии 1.7.10. А соевое лобби регулярно грешит поломкой обратной совместимости - идеальный пример - папер ограничили запуск своего ядра на версии 1.16.5 на версиях джавы выше 16. Зачем? Одному глобалисту понятно. Вне зависимости от причин, из-за этого всем разработчикам сколько-нибудь популярных плагинов приходится работать с Java 11, потому что плагин, написанный на 17 джаве не заработает на сервере на версии 1.16.5. На md_5 молится нужно за то, что он столько лет поддерживает в сохранности и стабильности API уже давно мёртвого баккита, будучи окружённым соевыми говношлёпами с обоих сторон - со стороны моджанга и со стороны папера, когда даже сам net.minecraft.server меняет свой апи по 100 раз на дню, и когда net.kyori решает удалить префикс get у всех геттеров, а не предъявлять ему за какой-то там плохой код в ядре, который мы и так не видим. md_5 - это антипод cpw, это единственный борец сил добра среди полчищ нечисти, это мессия для майнкрафта. Вы просто представьте, что бы было бы, если бы мы, как на фордже, не могли запустить плагины с 1.12.1 на 1.12.2.

Если что-то не нравится в объёме предоставляемых API-методов - всегда, благодаря опять же, продуманности баккита, можно сделать надстройку над API, как сделал я с AncapFramework. Задача API ядра - не дать тебе кнопку "сделать всё классно", а дать тебе возможность сделать всё, что ты хочешь. Это подход Java, это подход Spigot. Это не подход Mojang, Sponge и Paper, которые только проблемы создают. Их подход - потратить 500 часов на перенос гигантской легаси базы на новое апи, чтобы потом сэкономить по 15 секунд на написании каждого нового плагина.
В целом база, но автор уже давно ушел с форума)
 
offtop
идеальный пример - папер ограничили запуск своего ядра на версии 1.16.5 на версиях джавы выше 16. Зачем? Одному глобалисту понятно.
когда net.kyori решает удалить префикс get у всех геттеров
Мне хочется плакать (но момент с папером решается установкой флага, пусть для клиента это не всегда очевидно)

Говоришь по делу, так-то, поддержка старого апи - прекрасная идея, особенно учитывая, что сейчас до сих пор кому то нужен 1.8, из-за чего плагин должен работать на апи 1.8/1.12, если хочет иметь широкую аудиторию

Но всё таки баккит это не лучший апи, у него есть много плохих решений, которые теперь с нами навечно. С другой стороны, баккит писался сообществом и хорошо, что он вообще существует, ведь у нас могли бы быть только поделки вроде форджа
 
Будьте осторожны с рекомендациями этого пользователя.
dinnerbone
Авто объединение сообщений:

блин почему в кс го нет ядерного оружия. что за монополия? я требую чтобы в матчмейкинге были моды
>dinnerbone
Позже присоединился к моджангу и сейчас вместе со всеми пошлёпывает поломки обратной совместимости в net.minecraft.server. До этого всего пару лет поруководил баккитом и в общем то создал тот апи, за который баккиту и предъявляют пиар менеджеры спонжа и папера.
 
Назад
Сверху Снизу