Привет, Хабр! В этой статье я хочу затронуть тему аддонов. Многим чего-то не хватало в игре, и они скачивали аддоны с интернета. Когда вы понимаете, что скачанный аддон настолько безполезный, удаляете его. Я, допустим, хочу сделать аддон в minecraft bedrock. Если я сделаю достойный аддон, он может попасть на рынок. Заманчиво? Давайте попробуем сделать что-нибудь своё. Пригодится базовое знание json и в некоторых случаях javascript.  Первым делом, создадим папку myaddon по пути android/data/com.mojang.../files//games/com.mojang/behaivor_packs                                                если у вас другое сохранение файлов, используйте games/com.mojang.../...                      Название папки, которую вы создали, никак не влияет на название аддона. За это отвечает manifest.json, который находится в нашей папке. Отредакиируем его Если что, uuid это уникальный id, который используется для сохранения аддона. Уникальный айди можно сгенерировать, например, на сайте uuidgener*tor.net, я не хочу оставлять точную ссылку поэтому вместо "а" поставил "*". Чтобы создать иконку нашему аддону, создайте в папке аддона файл pack_icon.jpg или pack_icon.png. Теперь сохраняем наши файлы, заходим в майнкрафт и проверям - теперь во вкладке создание мира в "наборы параметров" есть пустой аддон, который ещё бесполезный.  Function - так называется функция аддона, которая может выполнять несколько команд одновременно. Например, если вы в чат введёте команду /function myfunction, вам дадут и яблоко, и дерево. Так можно создавать на function даже нормальные античиты, но для этого требуется знание команд minecraft bedrock. Чтобы сделать функции в аддона, создайте в папке аддона папку functions. В ней создадите myfunction.mcfunction, ваша функция будет называться myfunction. Отредактируйте код. Функция может не отображаться при вводе /function ****. Теперь, если вы введёте /function myfunction, всем игрокам в мире дадут яблоко и дерево, а ещё создадится новый скорборд. Чтобы функция работала каждый тик непрерывно, не вводя её в чат или командный блок, создадим в папке function файл tick.json. Он будет отвечать за автоматическое выполнение функций каждый тик. Введём небольшой json код теперь функция myfunction будет выполняться каждый тик. Если что, одна секунда это 20 тиков.  Идём всё дальше - чат. Вы, наверное, давно хотели оптимизировать чат, сделать ранги, антиспам. Тут всё в одном аддона - антиспам, ранги в чате и тд. Для начала нам придётся изменить manifest.json, чтобы указать в нём содержание javascript.  Если хотите, пробелы можете убрать. Вы наверное заметили, что здесь используется 5 уникальных айди. Это может быть для кого-то странно. Также мы указали путь к индексу. Вы уже наверное понимаете структуру.  В папке аддона создадим папку scripts, в ней хранятся скрипты (тоже очевидно). Создадим в папке scripts папку main. В ней файл index.js, языка javascript. Это наш индекс. Введите туда этот код Думаю, вы поняли, что это отображение того, сколько тиках загружался мир. Ну, базовых знаний js достаточно, чтобы тут не объяснять. Далее в папке main создадим папку misc, а в ней файл chat.js, это будет отвечать за спам и ранги.  Чтобы создать себе ранг, нужно вписать tag @s add rank:ВАШ_РАНГ. Например, rank:§l§cADMIN, это будет красным ADMIN, а по умолчанию ранг зелёным Player. Но пока что всё равно ранги и анти-спам не будут работать, нужно в misc создать ещё один файл second.js, по названию всё понятно.  Это тоже небольшой js код, который импортирует секунды.Теперь заходим в майнкрафт, создаём мир с этим аддоном, в настройках мира включаем gametest и education edition. Внимание: поддерживаемая версия рангов и антиспама - 1.19.11 и выше. На других, более старых версиях, есть небольшой баг с командой tellraw. Далее - кастомные команды в чате. Это звучит необычно, но, если вы в чат например ввели     .mycommand, выполнится команда. Она будет доступна всем игрокам. Создайте в папке scripts файл commands.js Вы можете указать много команд в строке player.runCommand("команда"). Далее, необходимо создать файл main.js Всего лишь одна строка, импортирующая скрипт. Давайте отредактируем команды в прошлом коде и в майнкрафте введём в чат .mycommand, выполнятся введённые команды.  Как поставить авторские права на аддон? Легко. Если аддон не был скачан, вы можете создать в нём файл LICENSE.md или LICENSE.txt, в них всё указать. Вот пример Лицензия может быть очень длинная, всё на ваш вкус.  Мы только что говорили о аддонах. Теперь поговорим о текстурах. Создадим папку mytextures по пути android/data/com.mojang.../files/games/com.mojang/resource_packs, опять же название папки не влияет на название ресурспака. В папке ресурспака создадим наш manifest.json. Вот собственно его код Опять же, как и в аддоне, уникальный айди можно сгенерировать на любом сайте, например, uuidgener*tor.net. Вместо "а" я также поставил "*", чтобы ничего не нарушать. Для создания иконки создайте файл pack_icon.jpg или pack_icon.png. Чтобы создать текстуры блоков, нужно в папке текстурпака создать папку textures. В ней папку blocks. В blocks запихиваем файл diamond_block.jpg (или .png). Теперь в игре алмазный блок будет выглядеть так, как в diamond_block.jpg. Чтобы создать текстуры предметов, которые у вас в руках, необходимо в textures создать папку items. В неё запихивайте item.jpg, тоесть у меня например stick.jpg, в игре палка будет выглядеть по другому, тоесть так, как выглядит изображение stick.png. Субпаки. Subpacks - это паки, использующие json код, который что-то определяет. Например, так можно сделать отображение хитбоксов игрока. Вот манифест для субпаков По манифесту видно, что будет очень сложно. Но всё таки придётся сделать отображение хитбоксов.  Создайте в папке текстурпака папка subpacks. В ней ещё три папки - default, no_ray, opaque_model_collision. Сразу говорю, если вы не знакомы с субпаками и json, ознакомьтесь с ними, потому что сдесь вам без базовых знаний о субпаках вам не будет понятно. Дальше в папке default создаём папку animations, в которой содержатся все анимации. В ней hitboxrot.json. В ней отредактируем код анимации Небольшой код в 30 строк для анимаций. Теперь если игрок подвижится, текстуры будут с ним поворачиваться. Далее в subpack/default создаём папку entity, естественно, там сущности, на которых действуют текстуры. В entity необходимо создать файл player.entity.json, это сущность игрока. Вот код Это очень сложно понять без хотя бы базовых знаний json. Тут применяются математические примеры, рендер контроллеры, целых 118 строк. rotation'ы и всё подобное. Можете создать много сущностей для отображения хитбоксов, например, для иссушителя или волка. Но лучше не надо, а то если на многих сущностях будут действовать текстуры, будет лагать. Далее нам нужны материалы - создаём в default папку materials. В ней entity.material (без json), расширение material. Думаю, здесь объяснять ничего не надо. Функция будет работать всегда. Дальше ещё сложнее - в default создайте папку models, в ней entity. А в entity 3 файла - первый hitbox.json В этом файле мы указали размер хитбокса и сами хитбоксы. Второй файл - ray.json Здесь тоже, думаю, объяснять ничего не надо - мы создали рэй. И третий файл - hitboxhitbox_swimming.json Здесь мы указали отображение хитбоксов в режиме плавания. Это не будет выглядеть странно, как без этого файла. Если этого файла не будет, при плавании у игрока будет хитбокс, как будто он стоя ходит.  Теперь возвращаемся в папку default. В ней нужно создать папку render_controllers - в ней тоже hitbox.json и ray.json. Вот hitbox.json Тут мы также не забыли указать про плавание. Теперь ray.json Да да, опять указали swimming. Это рендер контроллеры. И создаём последнюю папку в папке default - textures. Как же без текстур хитбокса? Закидываем туда models/hitboxoverlay.png,ray.png Вот вам hitboxoverlay И вот ray.png Да, они находятся в models. Вы, наверное, не видите тут модели, но они есть. На этом с папкой default мы закончили Ну что, с папкой default закончили. В ней мы указали модели, материалы, плаванье и отображение хитбоксов, также модели хитбоксов. Теперь переходим в папку subpacks, в которой и содержался default. В subpacks создаём папку no_ray. Вы наверное уже представляете, насколько это будет долго. В no_ray создадим несколько папок - animations, entity, materials, models, render_controllers, textures.  В папке animations создайте файл hitboxrot.json hitboxrot - hitboxrotation. Это небольшое сокращение, но файл называется именно hitboxrot.json.  Тут есть body_rotation и всё в этом роде, тоесть анимации без ray, это подтверждает папка no_ray. Далее в no_ray в materials создайте папку entity.material, тоесть с расширением material. Опять анимации в материалах. Ладно, дальше в models создаём папку entity, в которой hitbox_swimming.json и hitbox.json. Вот hitbox.json Здесь размер хитбокса в json. Дальше hitbox_swimming.json - плавающий хитбокс Здесь хитбокс в режиме плавания. Кого не смущает стоячий хитбокс плавающего игрока? Ладно, вот hitbox.json в render_controllers Дальше в папке no_ray/textures/models вставляем hitboxoverlay.png, как же без него На этом с no_ray мы закончили. Но это ещё не всё - в субпаках есть папка opaque_model_collision. Напоминаю, мы делаем текстурпак с хитбоксами только для ознакомления с субпаками и json. Теперь, в opaque_model_collision создаём папки animations, entity, models, render_controllers, textures. Давайте немного от редактируем -сначалa папка animations. В ней hitboxrot.json. Вот hitboxrot.json Мы указали кружение объекта, луп и хитбоксы. Далее указываем сущности - entity/player.entity.json Ууу, тоже 118 строк. Одни вариаблы и контроллеры. Ну ладно, дальше в папке models создайте папку entity. В ней hitbox.json, hitbox_swimming.json, ray.json, вот hitbox Указали размер. Теперь в плаванью хитбокса - hitbox_swimming.json ЗдесьЗдесь используется функция geometry.hitbox.swimming, остался ray.json А здесь функция minecraft:geometry. Странно, но всё же так. Далее переходим в render_controllers, там 2 файла - hitbox.json и ray.json. Отредактируем hitbox.json Здесь используется функция render_controllers. Дальше ray.json И опять функция render_controllers. Ладно, что нам осталось? Правильно, textures, в котором models. В models опять 2 файла - hitboxoverlay.png, ray.png. Вот hitboxoverlay.png Прошлые картинки ray.png, смотрите на них.  На этом всё. Импортируем аддон и заходим в майнкрафт. Запускаем и проверяем - у всех игроков есть хитбоксы.  На этом всё. Теперь перевод. Чтобы в ресурспаке сделать название предметов американцу stick, а русскому палка-копалка, создайте в папке ресурспака папку texts, в ней ru_RU.lang. Далее строка На этом всё. Я рассказал про наборы параметров, ресурспаки и субпаки в текстурпаках, отображение хитбокса, перевод и анти-спам с рангами чата. Надеюсь, это статья была полезной.   Программист