Перейти к содержанию

Основное#

Начиная с 1.12, система достижений претерпела значительные изменения. Новая система отслеживания, увеличено количество достижений и многое другое, но теперь же у многих, кто пишет моды появился вопрос: "Как же теперь делать достижения? Опять они со своим json...". Всё на много проще чем кажется! Теперь нам достаточно создать root.json и сами достижения в папке с ресурсами игры!

В данной статье вы научитесь делать основу для вкладки достижений.

Перейдём по пути:

└── src    
    └── main
        └── resources
            └── assets
                └── tut
                    └── advancements

В этой папке у нас будут храниться категории (Категории хранятся в папках!). Создадим к примеру категорию craft, в ней будут достижения связанные с крафтом. Далее создадим файл root.json с таким содержимым:

{
    "display": {
        "icon": {
            "item": "minecraft:stone"
        },
        "title": {
            "translate": "advancements.tutorial.root.title"
        },
        "description": {
            "translate": "advancements.tutorial.root.description"
        },
        "background": "tut:textures/gui/advancements/backgrounds/tutorial.png",
        "show_toast": false,
        "announce_to_chat": false
    },
    "criteria": {
        "killed_something": {
            "trigger": "minecraft:player_killed_entity"
        },
        "killed_by_something": {
            "trigger": "minecraft:entity_killed_player"
        }
    },
    "requirements": [["killed_something", "killed_by_something"]]
}

  • icon - этот параметр отвечает за иконку нашей вкладки. Помимо переменной item здесь могут быть переменные data и nbt. data - отвечает за метадату предмета, а nbt за данные которые хранятся в предмете.
  • title - это название вкладки.
  • description - это описание вкладки.
  • background - это фон, не рекомендуется использовать иконки предметов, кастомные gui и т.п. Лучше всего подойдёт текстура блока.
  • show_toast - показывать ли оповещение о том, что открыта вкладка с достижениями.
  • announce_to_chat - будет ли выводится оповещение в чат о том, что открыта вкладка с достижениями.
  • criteria - это критерии, которые будут отслеживаться. Так же там содержаться триггеры. (см. таблицу в конце статьи)
  • requirements - это требования, при выполнении одного из требований будет открыта вкладка. Можно так же не использовать requirements, но тогда больше одного критерия создать нельзя будет. Можно будет потом изменить критерии на такую запись:

    "criteria": {
      "crafting_table": {
          "trigger": "minecraft:inventory_changed",
          "conditions": {
                "items": [
                      {
                         "item": "minecraft:crafting_table"
                      }
                ]
          }
      }
    }
    

  • conditions - это условие при котором будет открыта данная вкладка. В данном случае, если предмет верстак лежит в инвентаре, то открывается вкладка story.

  • items - массив предметов, можно добавить не только верстак, но и другие предметы. Вот так добавлять:
    "items": [
          {
             "item": "minecraft:crafting_table"
          },
          {
             "item": "minecraft:stone"
          },
          {
             "item": "minecraft:dye",
             "data": 5
          }
    ]
    
    Можно так же использовать nbt и data. Теперь можете зайти в игру и выполнить один из ранее добавленных критериев!

Таблица критериев:

Критерий Описание
impossible Невозможный критерий. Применяется только в root рецептах Minecraft.
player_killed_entity Критерий который выполняется при убийстве сущности игроком.
entity_killed_player Критерий который выполняется при убийстве игрока сущностью.
enter_block Критерий который выполняется при входе в блок (также при телепортации с помощью жемчуга Эндера). Проверяет каждый тик по 8 блоков (максимум блоков, в которых одновременно может находиться игрок). Например: касание жемчугом блока, телепортирующего на дальние острова в Энде.
inventory_changed Критерий который выполняется при добавлении предмета в инвентарь.
recipe_unlocked Критерий который выполняется при открытии нового рецепта.
player_hurt_entity Критерий который выполняется при ударе сущности игроком.
entity_hurt_player Критерий который выполняется при ударе игрока сущностью.
enchanted_item Критерий который выполняется при зачаровывании предмета.
brewed_potion Критерий который выполняется при окончании варки зелья.
construct_beacon Критерий который выполняется при постройке структуры. Например: сделать маяк и установить его.
used_ender_eye Критерий который выполняется при использовании ока эндера.
summoned_entity Критерий который выполняется при призыве голема, возрождении дракона или иссушителя.
bred_animals Критерий который выполняется при скрещивании двух животных.
location Критерий который выполняется при перемещении в другую локацию. Например: найти замок в аду.
slept_in_bed Критерий который выполняется после сна в кровати.
cured_zombie_villager Критерий который выполняется при исцелении зомби жителя.
villager_trade Критерий который выполняется при торговле с жителем.
item_durability_changed Критерий который выполняется при изменении прочности предмета.
levitation Критерий который выполняется при левитации.
changed_dimension Критерий который выполняется при изменении измерения.
tick Критерий который выполняется через определённое количество тиков.
tame_animal Критерий который выполняется при приручении животного.
placed_block Критерий который выполняется при установки блока.
consume_item Критерий который выполняется при потреблении предмета.
effects_changed Критерий который выполняется при изменении эффектов зелий.
used_totem Критерий который выполняется при использовании тотема.
nether_travel Критерий который выполняется при переходе в ад.