habrahabr

Команды, механизмы и основы аддонов — Minecraft

  • вторник, 29 ноября 2022 г. в 01:25:44
https://habr.com/ru/post/702126/
  • JavaScript
  • Игры и игровые консоли


Привет, хабр! Однажды, играя в Minecraft bedrock, я задумался: можно ли попробовать себя в роли разработчика? Ответ был очевиден - да. Режим "творческий" позволяет сделать любой декор для карты - от куска дома до огромной игровой карты с сюжетом и прекрасным декором. Права оператора, которые автоматически выдаются когда вы создаёте мир Minecraft, позволяют добавить некоторые дополнения - скорборд, рекорды, бесконечные эффекты, партиклы, NPC и многое другое.

Если вам чего-то не хватает, или вы не можете сделать что-то с командными блоками, вы всегда можете создать аддон, в котором вы напишете код JSON, JavaScript или просто function от майнкрафт.

Работа с командами и механизмами

Сначала попробуем выполнить свою первую команду. Чтобы сообщение в чате считалось командой, вы должны добавить в начале косую палку, тоесть знак "/". Попробуем выдать себе 2 яблока

/give @s apple 2

Нажимаем enter и готово. Вам выданы 2 яблока. Может, попробуем куда-нибудь телепортироваться? Команда /tp, как телепортироваться к другому игроку - там есть подсказки. А как запомнить место и телепортироваться к нему? В настройках мира включите функцию "показать координаты". Координаты в майнкрафт - это набор цифр, тоесть номер блока, на котором вы находитесь. Координаты могут быть 3х видов - координаты по X, Y, Z. X - право, либо лево, в зависимости от направления вашего экрана. Y - высота. Z - тоже самое, что и X, только в противоположную сторону. Вот так выглядит команда:

/tp @s 0 68 76

Если вы хотите телепортироваться в одну ту кординату, на которой вы стоите, надо использовать знак "~". Например, вы хотите остаться на месте, но и телепортироваться вверх на определённую координату Y.

/tp @s ~ 89 ~

Также существуют отрицательные координаты. Когда вы спускаетесь всё ниже, и доходите до нуля координат Y - вы всё можете идти дальше, но ограничено. Максимальная высота внизу, которую вы можете достигнуть (с версии 1.19), это -60. На некоторых версиях -64. Но не только по Y бывают отрицательные координаты. Логично, что они есть с каждой стороны.

Скорборд - это окно с очками, которые пополняются при определённом действии, заданным в командном блоке. Чтобы получить командный блок, пропишите /give @s command_block 1. Чтобы задать новый скорборд, и включить его отображение, пропишите эти команды:

/scoreboard objectives add money dummy §l§aMONEY
/scoreboard objectives setdisplay sidebar money

Далее поставьте командный блок(цикл, работает всегда), и пропишите в нём это:

/scoreboard players add @a money 0

Вы наверное поняли, что scoreboard имеет 2 модуля - objectives и players. Objectives задаёт скорборды, тоесть цели, а players управляет скорбордами игроков. Теперь в правой части экрана будет отображатся окно с очками, заголовком MONEY (зелёным жирным цветом, т.к. мы написали §l§a). Правда есть одна проблема - если игрок выйдет из игры, вместо его никнейма будет написано "Игрок вне сети". Иногда это очень раздражает - "Игрок вне сети" выше всех в очках. Давайте попробуем это исправить

Чтобы исправить "Игрок вне сети", поставьте командный блок, в котором напишите это:

execute @a ~~~ scoreboard players operation @s money = @s Test

execute - это команда, исполняющая другие команды от лица определённого игрока. Мы указали игрока @a, что означает все игроки. @s означает вы, тоесть игрок, от лица которого выполняется команда. Этот командный блок, который мы добавили, изменим на "цикл", и в его параметрах укажем "работает всегда". Далее, поставим ещё один командный блок, смотрящий наверх

scoreboard objectives remove Test

На него ещё командный блок, тоже смотрящий наверх, только не цикл, а "цепь", " работает всегда"

scoreboard objectives add Test dummy §l§aMONEY

на него ещё цепь

scoreboard objectives setdisplay sidebar Test

и ещё один

scoreboard players add @a Test 0

Наша цель изменилась на Test. Теперь, вам не прибавятся очки, если вы напишете money, но зато прибавятся, когда напишете Test. К тому же, мы это сделали для того, чтобы не появлялась "Игрок вне сети".

Селекторы - это способ указать определённого игрока. @a - все игроки, @s - вы, @r - случайный игрок, @p - ближайший игрок. Вы можете изменить значение селектора, с помощью квадратных скобок [ ]. Давайте попробуем забанить всех игроков с ником Steve:

/kick @a[name="Steve"]

Чтобы забанить всех, кроме значения, используйте "!". Забаним всех игроков, кроме стивов:

/kick @a[name=!"Steve"]

А теперь телепортируем всех с кординат 0,0,0 к вам:

/tp @a[x=0,y=0,z=0,r=2] ~~~

r - это регион, например у меня в двух блоках. Его значение не может быть 0, иначе работать не будет, но регион так же не может отсутствовать, если вы указали x, y или z.

Впринципе, с командами мы разобрались.

Основы аддоно-создания

Без аддонов не может обойтись почти каждый кбшер. Давайте создадим своё дополнение.

Для начала, по пути Android/data/com.mojang.../files/games/com.mojang/behaivor_packs/ создаём папку своего аддона с любым названием, кроме примитивных символов. У некоторых этот путь может быть games/com.mojang.../..., но суть не в этом. Перенесите файл jpg или png в папку с вашим аддоном под названием pack_icon.jpg (png), это будет как иконка аддона. Название и описание указываются в манифесте - создайте файл manifest.json. Запишем и отредактируем этот json код:

{
    "format_version": 1,
    "header": {
        "description": "описание"
        "name": "название",
        "uuid": "Уникальный id",
        "version": [ 1, 0, 5 ],
        "min_engine_version": [ 1, 17, 10 ]
    },
    "modules": [
        {
            "description": "",
            "type": "data",
            "uuid": "Второй уникальный id"
            "version": [1, 0, 0]
        }
    ]
}

Уникальный id можно сгенерировать на любом первом сайте, введя в браузер "uuid generator". Обратите внимание, что все уникальные id в коде должны быть разные, у меня например 2.

Теперь перезайдите в майнкрафт. При создании мира, во вкладке "наборы параметров" появился наш аддон. Он пока-что пустой, и весит 0.1 мб. Это мы будем исправлять.

Функции - это много команд в одной команде (/function). Давайте попробуем создать свою функцию. В папке нашего аддона создайте папку functions, а в ней файл myfunc.mcfunction. Попробуем дать 2 яблока и 3 командных блока

give @a apple 2
give @a command_block 3

Теперь зайдем в майнкрафт и пропишем /function myfunc. Нам выдадут 3 командных блока и 2 яблока. Таким образом, благодаря функциям, создавались некоторые популярные античиты для Minecraft Bedrock.

Чтобы функция выполнялась автоматически, а не по команде, создайте в папке functions файл tick.json. Вот код:

{
  "value": [
    "myfunc.mcfunction"
  ]
}

Чтобы добавить скрипт на JavaScript, создайте папку scripts, в ней файл с названием функции, например, chat.js, index.js, main.js, папка main, папка misc в main и тд. Вот пример:

import { world } from 'mojang-minecraft'
let seconds = 0

export function timer(){
    seconds++
    if(seconds >= 4){
        world.getDimension("overworld").runCommand(`scoreboard players reset * chatsSent`)
        world.getDimension("overworld").runCommand(`scoreboard players set "dummy" chatsSent 1`)
        seconds = 0
        return seconds
    }
}

Это second.js из моего одного аддона.


На этом я закончу статью. Надеюсь, чем-то помог тебе попробовать себя в роли разработчика. В статье было слишком мало команд, так как я написал только про основы. Если вы попросите, могу сделать статью с многими командами.