Менеджеры рецептов

Link to менеджеры-рецептов

Менеджеры рецептов — это системы крафта, такие как верстак, печь или костер, поддерживающие стандартную систему наборо данных JSON
Большинство менеджеров рецептов имеют аналогичные методы удаления, но разные методы для добавления рецептов.

Менеджеры рецептов — это то, что вы в основном будете использовать для взаимодействия с рецептами в игре, однако некоторые моды не используют систему наборов данных, и для них придется добавлять и отключать рецепты иным образом.

Получение менеджера рецептов

Link to получение-менеджера-рецептов

Обычно к менеджерам рецептов обращаются через обработчик скобок (за исключением стандартных менеджеров рецептов, доступных через глобальное значение).
Формат менеджера рецептов такой:

ZenScript
Copy
<recipetype:id_мода:имя>

Некоторые примеры:

ZenScript
Copy
<recipetype:minecraft:smoking> // Возвращает менеджер рецептов коптильни
<recipetype:botania:mana_infusion> // Возвращает менеджер рецептов наполнения маной Botania
<recipetype:thermal:pulverizer> // Возвращает менеджер рецептов в измельчителе из Thermal Expansion

Менеджеры стандартных рецептов особенны тем, что для них есть глобальные переменные, позволяющие ссылаться на них без обработчика скобок.

Менеджеры рецептов в обычной игре такие:

Менеджер рецептовОбработчик скобокГлобальная переменная
Менеджер рецептов
Выплавка в плавильной печи
Обработчик скобок
<recipetype:minecraft:blasting>
Глобальная переменная
blastFurnace
Менеджер рецептов
Готовка на костре
Обработчик скобок
<recipetype:minecraft:campfire_cooking>
Глобальная переменная
campfire
Менеджер рецептов
Крафт
Обработчик скобок
<recipetype:minecraft:crafting>
Глобальная переменная
craftingTable
Менеджер рецептов
Выплавка в обычной печи
Обработчик скобок
<recipetype:minecraft:smelting>
Глобальная переменная
furnace
Менеджер рецептов
Использование кузнечного стола
Обработчик скобок
<recipetype:minecraft:smithing>
Глобальная переменная
smithing
Менеджер рецептов
Копчение
Обработчик скобок
<recipetype:minecraft:smoking>
Глобальная переменная
smoker
Менеджер рецептов
Камнерезание
Обработчик скобок
<recipetype:minecraft:stonecutting>
Глобальная переменная
stoneCutter

На них можно ссылаться либо по обработчику скобок, либо через глобальную переменную. Например:

ZenScript
Copy
<recipetype:minecraft:blasting>.removeAll() // Удаляет все рецепты плавильной печи

Что равносильно следующему:

ZenScript
Copy
blastFurnace.removeAll() // Удаляет все рецепты плавильной печи

Глобальные переменные просто упрощают обращение к менеджерам рецептов.

Причина, почему не для всех менеджеров рецептов создаются глобальные переменные в том, что могут случиться конфликты, если разные моды добавят машины с одинаковым именем — дробилку, например.

Name: getRecipeByName

Этот метод получает рецепт по имени и возвращает объект Recipe.

ZenScript
Copy
getRecipeByName(String name);

Можно применить его, чтобы получить ингредиенты рецепта и вывести commandString для каждого из них.

ZenScript
Copy
for ingredient in craftingTable.getRecipeByName("minecraft:arrow").ingredients {
    println(ingredient.commandString);
}

Link to getRecipesByOutput

Name: getRecipesByOutput

Этот метод получает список рецептов на основании его выхода и возвращает список объектов Recipe.

ZenScript
Copy
getRecipesByOutput(IIngredient name);

Можно использовать этот метод, чтобы получить ингредиенты всех рецептов с данным выходом и вывести commandString для каждого.

ZenScript
Copy
for recipe in craftingTable.getRecipesByOutput(<item:minecraft:stick>) {
    println("> " + recipe.id);
    for ingredient in recipe.ingredients {
        println(ingredient.commandString);
    }
}

Name: getAllRecipes

Этот метод получает список всех рецептов для данного менеджера рецептов и возвращает список объектов Recipe.

ZenScript
Copy
getAllRecipes();

Можно использовать этот метод, чтобы получить ингредиенты всех рецептов и вывести commandString для каждого:

ZenScript
Copy
for recipe in furnace.getAllRecipes() {
    println("> " + recipe.id);
    for ingredient in recipe.ingredients {
        println(ingredient.commandString);
    }
}

Name: remove

Позволяет удалять рецепты из менеджера рецепта по выходному предмету.

ZenScript
Copy
remove(IItemStack output);

Пример использования — удаление рецепта палки в верстаке.

ZenScript
Copy
craftingTable.remove(<item:minecraft:stick>);

Еще пример — удаление выплавки алмаза из алмазной руды в печи:

ZenScript
Copy
furnace.remove(<item:minecraft:diamond>);

Name: removeByName

Позволяет удалять рецепты из менеджера рецептов по имени рецепта.

ZenScript
Copy
removeByName(String name);

Пример использования — удаление рецепта стрелы в верстаке:

ZenScript
Copy
craftingTable.removeByName("minecraft:arrow");

Name: removeByModid

This method allows you to remove recipes from this Recipe Manager based on the the recipe name's modid.
There is an optional parameter that is used to exclude recipes from being removed.
Note: The name given to the RecipeFilter is just the path of the recipe id.
For example, if the recipe id is minecraft:orange_wool, the name given will be orange_wool. Еще пример — ID рецепта id_мода:путь/имя, именем будет только часть путь/имя.

ZenScript
Copy
removeByModid(String modid);

или

removeByModid(String modid, RecipeFilter exclude);

Пример использования — удаление всех рецептов из верстака на minecraft:

ZenScript
Copy
craftingTable.removeByModid("minecraft");

Еще пример — удаление всех рецептов на minecraft кроме рецепта оранжевой шерсти.

ZenScript
Copy
craftingTable.removeByModid("minecraft", (name as string) => {
    return name == "orange_wool";
});

Name: removeByRegex

Позволяет удалять рецепты из менеджера рецептов, проверяя ID рецепта по регулярному выражению.

ZenScript
Copy
removeByRegex(String regex);

Пример использования — удаление всех рецептов, ID которых соответствует шаблону .*wool.* (то есть, все, которые содержат wool где угодно в названии).

ZenScript
Copy
craftingTable.removeByRegex(".*wool.*");

Name: removeAll

Позволяет удалять все рецепты из менеджера рецептов.

ZenScript
Copy
removeAll(String regex);

Пример — удаление всех рецептов в плавильной печи.

ZenScript
Copy
blastFurnace.removeAll();