Search Записи
0
Плагины, говоришь?.. Хех!
23.11.2015 00:46 |
vasco
in Статьи по плагинам
bukkit plugins плагиныДля начала прежде всего следует задать себе вопрос "А для чего нужны плагины [в майнкрафте, конечно же]?". Казалось бы, разработчики майна предоставили богатый инструментарий для того, чтобы в самой игре можно было реализовать любой каприз клиента: тут тебе и редстоун-схемы, работающие по принципу аналоговых и логических электронных элементов, здесь вам и командные блоки, позволяющие выполнить любую (почти) консольную команду, а функционал консольных команд в майне очень и очень серьезен. Ваяй не хочу. Так и хочется спросить "Что же тебе, собака, надобно?! Женись, князь ее отпускает!". Однако же раз за разом народ то и дело ваяет плагины и плагинчики, подчас выполняющие крохотные узкоспециализированные задачки.
Причин тому несколько. Во-первых, как ты ни извращайся с оптимизацией, что редстоун-схема что команда комблока выполняются практически в режиме интерпретатора: медленно и печально, как правило, в несколько заходов, за несколько тактов обработали состояние схемы, входы-выходы, повторители-компараторы, получили какой-то результат, передали его дальше по кабелю. С комблоками чуть лучше: сработал комблок - интерпретировали команду, загрузили контекст (ближайших игроков, координаты, генератор случайных чисел, нашли нужную сущность и т.д.), применили все это к аргументам, обработали, выдали результат. И в том и в другом случае все это проходит через каскад классов и методов (несколько десятков), а самое главное, жестко лимитировано временем обработки серверного цикла, что не самым лучшим образом сказывается на и так невеликой производительности.
Во вторых, и это, пожалуй, главное: и редстоун-схемы и комблоки довольно жестко завязаны на свои интерфейсы, первый - на механизм работы редстоун-схем, второй - на движок консольных команд. Другими словами, что тот что другой вариант позволяют вам реализовать только то, что заложили в их работу разработчики майна. Все что вправо-влево - табу, поскольку нет соответствующего механизма. Как пример: если нет в майне консольной команды для работы со свойствами сущности (мобы, вагонетки, игроки, неписи), то хоть ты разбейся - ничего ты с этим не сделаешь ни комблоками ни компараторами. PowerNBT не предлагать, мы пока говорим о чистом майне.
Есть еще одна причина, не совсем очевидная, но для меня немаловажная: для работы с редстоун-схемами на серьезном уровне нужно иметь особо извращенный склад ума, заточенный под электронную схемотехнику. Казалось бы, для программиста ("тыжпрограммист!") не должно составить особой проблемы освоить схемотехнику и принципы ее работы, но вот поди ж ты, меня эти логические элементы, повторители, факелы и принципы распространения редстоун-сигнала чем дальше тем больше выводят из себя. Особенно бесит то, что все это требует изрядно места. Уже не говоря о том, что, как правило, работает все это через одно место и сыпется от малейшего
Я ни в коей мере не хочу сказать, что создание плагинов - работа простая и непыльная. Нет, спотыкаться и ошибаться приходится ежечасно, ошибки выискиваются и фиксятся долгими дождливыми вечерами. Кроме того, написание плагинов требует более-менее внятного понимания явы вообще и работы майнкрафт-сервера под управлением виртуальной ява-машины в частности. Однако если вы освоите это на достаточном уровне и подкопите какой-никакой багаж вспомогательных инструментов (я имею в виду самостоятельно написанные классы-утилиты для работы со специфическими функциями майнкрафт-сервера), это позволит вам создавать такие вещи, которые даже в теории нельзя реализовать с помощью каких бы то ни было редстоун-схем и/или командных блоков.
Самое главное отличие плагинов от всего вышеописанного в том, что с помощью плагина вы можете дотянуться не только туда, куда вам позволят разработчики, а туда, куда вы сами сможете дотянуться. И поверьте, слово "сможете" здесь не преувеличение, даже используя штатные средства баккита можно творить вещи, в корне меняющие логику работы майнкрафт-сервера, а если ко всему к этому научиться еще дозированно применять методы рефлексного (отраженного) программирования, получая доступ ко всем [да, почти] низкоуровневым объектам сервера, можно почувствовать, как над головой образуется нимб, а под лопатками начинают чесаться растущие крылья [сарка-а-азм].
Неслабый плюс также заключается в том, что плагин работает с той же скоростью, что и сам сервер, поскольку написан на той же яве и откомпилирован в тот же байт-код. Кроме того, и это, наверное, самое главное - плагин позволяет участвовать в обработке любых событий сервера, будь то загрузка или выгрузка какого-то чанка (или даже мира), взаимодействие сущностей (в том числе - игроков с сущностями), установка блоков и многих-многих других. Получая (и изменяя) информацию о таких событиях, можно воздействовать на логику работы сервера коренным образом. Также можно, наряду с серверными, генерировать собственные события (в том числе и производные от серверных), что дает почти безграничную гибкость в обработке тех или иных ситуаций.
Еще один немаловажный момент: многие действия по обработке данных можно выносить в отдельный поток, что при наличии в распоряжении виртуальной ява-машины (JVM) нескольких доступных процессоров (пусть даже логических) значительно ускоряет работу системы. Правда, время от времени на критичных участках приходится возвращаться в основной серверный поток, например, при изменении блоков в загруженном чанке или при телепортации сущностей, это связано с особенностями работы майн-сервера, этакая защита от рассинхронизации. Но, как правило, выгода от операции распараллеливания компенсирует все затраты на ее реализацию.
Также средствами плагина можно получить доступ к любым консольным командам сервера, изменить механизм их работы, ввести собственные команды. Поскольку подавляющая часть административных действий на сервере выполняется с помощью именно консольных команд (даже если они выполняются через GUI (графический интерфейс) клиента, все равно, как правило, конечные действия производятся через механизм серверных консольных команд). К слову, все существующие серверные плагины взаимодействуют с пользователем в основном именно через серверные консольные команды. Исключение составляют лишь немногие плагины, которые имеют собственные клиентские компоненты и взаимодействующие с ними путем прямой посылки управляющих пакетов.
И, в заключение, один уточняющий вопрос: что же считать плагином и чем он отличается от мода (модификации)? Если не залазить в дебри терминологии и не заниматься софистикой, я бы для себя определил это различие так: "мод" - это некая общая модификация майнкрафта, применяющаяся как на серверной так и на клиентской стороне (синхронно), меняющая логику игры в целом. "Плагин" же применительно к майнкрафту - это все-таки чисто серверное расширение, с клиентской частью взаимодействующее [как правило] только через консольные команды, то есть, не требующее установки специальной клиентской сборки. Однако повлиять на логику работы сервера плагин может так же значительно, как и модификация.
В общем, нет вопроса "трудно или не очень", есть вопрос "а мне слабо?". Никто не говорит, что научиться писать плагины легко, и даже предлагаемые материалы не сделают из вас плагинописателя, если вы сами не наступите на горло собственной лени. Все находится в ваших руках.
Я долго ждал. А потом Бог сказал:
«Садись на коня и возьми сам, что хочешь, если ты храбрый и сильный!»
к/ф "Белое солнце пустыни"
«Садись на коня и возьми сам, что хочешь, если ты храбрый и сильный!»
к/ф "Белое солнце пустыни"
В следующей статье обсудим в самых общих [парламентских] выражениях структуру майнкравтовского сервера, чтобы представлять, в каких тяжелых условиях нам придется работать.
- deoldetrash, Larisa and Frank like this
0 Comments