Table of Contents

Введение в RecipeTypes

Что такое RecipeType?

RecipeType отличается от самого рецепта. Давайте посмотрим пример рецепта, чтобы лучше понять его:

my_recipe.json
{
  "type": "minecraft:smelting",
  "ingredient": {
    "tag": "minecraft:logs_that_burn"
  },
  "result": "minecraft:charcoal",
  "experience": 0.15,
  "cookingtime": 200
}

Сам файл определяет рецепт получения древесного угля, тип этого рецепта - плавка. RecipeType может быть определен как группа рецептов. Этот RecipeType используется блоком печи, но вы можете создать другую печь, которая также использует этот тип рецепта, но с другой статистикой.

Как работает RecipeType?

Для работы RecipeType необходимы две вещи: класс Recipe и класс RecipeSerializer.

Класс Recipe определяет входные данные, выходные данные, способы их обработки и другие вещи. При создании рецепта, подобного примеру с древесным углем, создается экземпляр вашего класса Recipe, который используется для регистрации в RecipeType.

RecipeSerializer используется для сериализации объекта (здесь это экземпляр вашего класса Recipe, который определяет рецепт) в пакет и для десериализации из пакета или объекта json в экземпляр вашего класса Recipe. RecipeSerializer помогает нам быстрее создавать рецепты без необходимости создавать собственный класс Recipe для каждого нужного нам рецепта.

Как использовать RecipeType?

Чтобы проверить, работают ли разные предметы в инвентаре как входные данные рецепта, и получить ожидаемый результат, мы используем класс RecipeManager. У него есть некоторый полезный метод, такой как getAllOfType, возвращающий карту всех рецептов определенного типа с их идентификатором, или getAllMatches, возвращающий список рецептов, которые можно использовать с помощью инвентаря обработчика экрана.

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

Подробные гайды