Jump to content

Search Results

There were 1 results tagged with bukkit plugins плагины

By content type

By section

Sort by                Order  
  1. Плагины, говоришь?.. Хех!

    Прежде чем перейти к сути вопроса, зададимся предварительным вопросом "А зачем оно все нужно?". Ну вроде можно перейти в креатив, поставить или убрать любые блоки, что еще нужно для полного счастья, кроме стака алмазных блоков? Однако рано или поздно наступает момент, когда одной возможности что-то строить уже не хватает, хочется строить много и быстро. - Ну так поставь WorldEdit, там все это есть! - Ну так о нем и речь, собственно, WorldEdit ведь тоже является плагином. - А зачем изобретать велосипед, все ведь уже написано? - Тогда вам, пожалуй, не сюда, дальше читать смысла нет. Как бы много не было написано плагинов, в любом случае они не покрывают 100% потребностей. Особенно, если вы содержите свой сервер, причем не для себя и двух своих друзей, а для нескольких десятков ежедневных игроков, причем никогда не известно, что эти самые игроки устроят у вас на сервере через 5 минут.

    Для начала прежде всего следует задать себе вопрос "А для чего нужны плагины [в майнкрафте, конечно же]?". Казалось бы, разработчики майна предоставили богатый инструментарий для того, чтобы в самой игре можно было реализовать любой каприз клиента: тут тебе и редстоун-схемы, работающие по принципу аналоговых и логических электронных элементов, здесь вам и командные блоки, позволяющие выполнить любую (почти) консольную команду, а функционал консольных команд в майне очень и очень серьезен. Ваяй не хочу. Так и хочется спросить "Что же тебе, собака, надобно?! Женись, князь ее отпускает!". Однако же раз за разом народ то и дело ваяет плагины и плагинчики, подчас выполняющие крохотные узкоспециализированные задачки.

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

    Во вторых, и это, пожалуй, главное: и редстоун-схемы и комблоки довольно жестко завязаны на свои интерфейсы, первый - на механизм работы редстоун-схем, второй - на движок консольных команд. Другими словами, что тот что другой вариант позволяют вам реализовать только то, что заложили в их работу разработчики майна. Все что вправо-влево - табу, поскольку нет соответствующего механизма. Как пример: если нет в майне консольной команды для работы со свойствами сущности (мобы, вагонетки, игроки, неписи), то хоть ты разбейся - ничего ты с этим не сделаешь ни комблоками ни компараторами. PowerNBT не предлагать, мы пока говорим о чистом майне.

    Есть еще одна причина, не совсем очевидная, но для меня немаловажная: для работы с редстоун-схемами на серьезном уровне нужно иметь особо извращенный склад ума, заточенный под электронную схемотехнику. Казалось бы, для программиста ("тыжпрограммист!") не должно составить особой проблемы освоить схемотехнику и принципы ее работы, но вот поди ж ты, меня эти логические элементы, повторители, факелы и принципы распространения редстоун-сигнала чем дальше тем больше выводят из себя. Особенно бесит то, что все это требует изрядно места. Уже не говоря о том, что, как правило, работает все это через одно место и сыпется от малейшего чиха лага сервера. С консольными командами тоже не все так просто, их использование требует извращенных специфических навыков, связанных с линуксоподобными операционными системами и, как правило, отсутствующих у нормальных людей [сарка-а-азм]. Плюс консоль сама по себе накладывает определенные ограничения на параметры, а в совокупности с комблоками поиск работающего варианта превращается порой в пытку.

    Я ни в коей мере не хочу сказать, что создание плагинов - работа простая и непыльная. Нет, спотыкаться и ошибаться приходится ежечасно, ошибки выискиваются и фиксятся долгими дождливыми вечерами. Кроме того, написание плагинов требует более-менее внятного понимания явы вообще и работы майнкрафт-сервера под управлением виртуальной ява-машины в частности. Однако если вы освоите это на достаточном уровне и подкопите какой-никакой багаж вспомогательных инструментов (я имею в виду самостоятельно написанные классы-утилиты для работы со специфическими функциями майнкрафт-сервера), это позволит вам создавать такие вещи, которые даже в теории нельзя реализовать с помощью каких бы то ни было редстоун-схем и/или командных блоков.

    Самое главное отличие плагинов от всего вышеописанного в том, что с помощью плагина вы можете дотянуться не только туда, куда вам позволят разработчики, а туда, куда вы сами сможете дотянуться. И поверьте, слово "сможете" здесь не преувеличение, даже используя штатные средства баккита можно творить вещи, в корне меняющие логику работы майнкрафт-сервера, а если ко всему к этому научиться еще дозированно применять методы рефлексного (отраженного) программирования, получая доступ ко всем [да, почти] низкоуровневым объектам сервера, можно почувствовать, как над головой образуется нимб, а под лопатками начинают чесаться растущие крылья [сарка-а-азм].

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

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

    Также средствами плагина можно получить доступ к любым консольным командам сервера, изменить механизм их работы, ввести собственные команды. Поскольку подавляющая часть административных действий на сервере выполняется с помощью именно консольных команд (даже если они выполняются через GUI (графический интерфейс) клиента, все равно, как правило, конечные действия производятся через механизм серверных консольных команд). К слову, все существующие серверные плагины взаимодействуют с пользователем в основном именно через серверные консольные команды. Исключение составляют лишь немногие плагины, которые имеют собственные клиентские компоненты и взаимодействующие с ними путем прямой посылки управляющих пакетов.

    И, в заключение, один уточняющий вопрос: что же считать плагином и чем он отличается от мода (модификации)? Если не залазить в дебри терминологии и не заниматься софистикой, я бы для себя определил это различие так: "мод" - это некая общая модификация майнкрафта, применяющаяся как на серверной так и на клиентской стороне (синхронно), меняющая логику игры в целом. "Плагин" же применительно к майнкрафту - это все-таки чисто серверное расширение, с клиентской частью взаимодействующее [как правило] только через консольные команды, то есть, не требующее установки специальной клиентской сборки. Однако повлиять на логику работы сервера плагин может так же значительно, как и модификация.

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

    Я долго ждал. А потом Бог сказал:
    «Садись на коня и возьми сам, что хочешь, если ты храбрый и сильный!»
    к/ф "Белое солнце пустыни"

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

    • 24.11.2015 14:22
    • by vasco