Команда Ex¶
Итак, вы хотите использовать Denizen¶
Если вы читаете эту страницу — скорее всего, вы новичок в Denizen и готовы освоить самые основы. Как вы уже узнали из предыдущих страниц, Denizen — это скриптовый движок. То есть вы будете писать файлы скриптов, набитые всякими командами, да? Ну, в целом да. Технически вы не обязаны писать скрипты отдельным файлом. Чтобы максимально плавно подвести вас к самым основам Denizen, мы покажем одну из самых «продающих» его фич: команды Denizen можно писать прямо в игре — и они будут работать, и всё!
Команды Denizen и команды сервера¶
Прежде чем мы это сделаем, важно уяснить разницу: «команда Denizen» против «команды сервера».
Команда сервера — это команда, которую вы вводите в игровой чат со слэшем
/впереди. Например,/gamemode creative— это команда сервера.Команда Denizen — это команда, которая идёт в скрипт и обрабатывается скриптовым движком Denizen. Например,
- narrate "hi <player.name>"— это команда Denizen. Обратите внимание: в начале у неё стоит-(как и у любой стандартной команды Denizen), и она умеет использовать теги (например,<player.name>), чего серверные команды, разумеется, не умеют.
Главное, что нужно помнить: они не взаимозаменяемы. Вы не можете написать /narrate "hi <player.name>" — вам скажут «unknown command». И не получится сделать - gamemode creative — это приведёт к ошибке скрипта.
Но вы же сказали, что команды Denizen можно писать прямо в игре¶
Да, именно! Кстати, и серверные команды тоже можно использовать в скрипте. Как? А просто: в Denizen есть команда, которая выполняет серверную команду, а в серверной части есть команда, которая выполняет команду Denizen.
Если вы пишете команды в игре и хотите выполнить команду Denizen — просто используйте /ex. Например: /ex narrate "hi <player.name>". Это работает, потому что /ex — это серверная команда, которая просто говорит Denizen обработать всё, что идёт дальше. Выглядит это примерно так:

Аналогично, если вы пишете команды в скрипте и хотите выполнить серверную команду — можно использовать команду - execute, как-то так: - execute as_op "gamemode creative" (можно также as_player, as_server или даже as_npc). Учтите, что в большинстве случаев использовать команду - execute не стоит, потому что почти всё, что можно сделать серверной командой, в Denizen можно сделать лучше через обычную команду (для примера с gamemode: - adjust <player> gamemode:creative). Исключение — это, как правило, команды сторонних плагинов, с которыми вашему скрипту нужно как-то взаимодействовать.
Отдельно просим запомнить: /ex и - execute просто переключают из одного режима в другой. Почти никогда нет причин использовать их оба сразу — это просто бессмысленное «туда-обратно». Сама по себе идея звучит безумно… но, как ни странно, у нас реально бывали пользователи, которые пытались сделать что-то вроде - execute as_server "ex narrate 'hi'". Разумеется, это просто усложнённый и бессмысленный способ записать - narrate 'hi'.
Стоп, narrate? Я думал, мы программируем, а не пишем пьесу!¶
Не переживайте, Denizen — это действительно скриптинг в духе «кода», а не «пьесы». narrate — это самая первая базовая команда Denizen, которую стоит выучить: она выводит текст в чат игрока. (Когда вы используете её через /ex, вы также видите отладочную информацию Denizen, но при реальном использовании в скрипте игроку показывается только нужная строка текста.) Это очень распространённая базовая команда и, разумеется, главный кандидат для простого тестирования. Она будет использоваться для скриптов NPC (всё, что игроку нужно прочитать, но NPC ему не говорит — здесь поможет narrate!), для кастомных серверных команд (ответ, когда игрок запускает вашу кастомную команду /command, как раз будет выдан через narrate) и для многого другого!
Так что мне делать?¶
Если вы ещё не догадались: откройте игровой чат и введите /ex narrate "hi <player.name>". Это будет повторяющаяся идея на протяжении всего руководства: вам будут встречаться примеры, описания того, что они делают и как работают… Вас не всегда будут прямо об этом просить, но пробовать всё самому (на локальном тестовом сервере!) всегда стоит. Когда вы дойдёте до написания настоящих файлов скриптов, в примерах будет специальная цветовая разметка, показывающая, можно ли их просто скопировать. Пожалуйста, откройте в новой вкладке страницу Об этом руководстве — Примеры скриптов и ознакомьтесь с системой цветовой разметки, прежде чем двигаться дальше.
Учтите: вместо тупого копипаста старайтесь по возможности перепечатывать тестируемые скрипты вручную. Это помогает реально прочитать каждую строчку, даёт время подумать и понять, что именно делает каждый кусочек перед запуском, и заодно даёт лёгкую практику написания скриптов. Конечно, тестировать что-то через /ex куда проще, если вы уже набрали руками несколько тестовых команд /ex (а не просто прочитали про идею и скопировали готовый пример).
Куча лишнего вывода¶
Пример выше должен был просто вывести сообщение hi (ваше имя), но, как вы можете видеть и в игровом чате, и в серверной консоли, там куча лишних строк. Это называется отладочный вывод — и, как и следует из названия, он нужен для того, чтобы помочь вам разобраться, что пошло не так, если что-то пойдёт не так. Вы будете видеть его довольно часто, пока работаете с Denizen, но не переживайте: когда вы доведёте скрипты до готового, «пользовательского» вида, вы сможете скрыть весь этот вывод и от игроков, и из консоли. Подробнее об этом мы поговорим через несколько страниц.
Возвращаясь к теме: что умеет /ex?¶
По сути — что угодно! Через /ex можно выполнить любую команду Denizen, а в Denizen есть команды практически для всего. Это настолько мощная штука, что я обязан оговориться: на публичных серверах не давайте доступ к /ex никому, кому вы не доверили бы полный op. Если сомневаетесь в нужном уровне ограничений — учтите, что любой игрок с доступом к /ex запросто сможет сделать /ex adjust <player> is_op:true.
И при чём тут вообще скриптинг?¶
Команды Denizen — это сердце каждого скрипта. Скрипты можно описать как простые конфиг-файлы со списком команд Denizen (а «конфигурационная» часть нужна лишь для того, чтобы указать, в какой именно момент эти команды должны выполняться).
/ex — это очень удобный способ быстро протестировать отдельные команды прямо в игре. Мы будем активно им пользоваться в следующих разделах этого руководства. Это один из нескольких «усилителей мощности» в Denizen, которые делают вашу жизнь проще (и заставляют Java-разработчиков жалеть о выборе Java, увидев, насколько удобнее на стороне Denizen!).