====== Введение в RecipeTypes ====== ===== Что такое RecipeType? ===== RecipeType отличается от самого рецепта. Давайте посмотрим пример рецепта, чтобы лучше понять его: { "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 с нуля). ===== Подробные гайды ===== * [[ru:tutorial:recipe_type|Добавление типа рецепта]] * [[ru:tutorial:cooking_recipe_type|Создание рецепта приготовления]] * [[ru:tutorial:cutting_recipe_type|Создание рецепта камнереза]]