> For the complete documentation index, see [llms.txt](https://wiki.aegis-mine.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.aegis-mine.ru/modifications/sozdanie-kontenta/crafttweaker/minecraft-1.19.2/repleiser.md).

# Реплейсер

Перед объяснением работы <mark style="color:blue;">**Replacer**</mark>, Вам стоит знать следующее, чтобы избежать возможных проблем с производительностью: Старайтесь использовать как можно меньше <mark style="color:blue;">**Replacer**</mark> и объединять все <mark style="color:blue;">**Replacer**</mark> в один!

В начале Вам стоит правильным образом портировать <mark style="color:blue;">**crafttweaker.api.recipe.replacement.Replacer**</mark>.

После чего создайте `Replacer.create()`.

```java
import crafttweaker.api.recipe.replacement.Replacer;
Replacer.create();
```

***

## <mark style="color:blue;">filter</mark>

Теперь разберём ряд методов. Первым будет `filter` Он отвечает, при каких условиях будет происходить замена предмета. Список того, какие условия есть на момент написания статьи:

* ComponentFilteringRule
* CustomFilteringRule
* ManagerFilteringRule
* ModsFilteringRule
* NameFilteringRule
* NotFilteringRule

В качестве примера мы разберём `ManagerFilteringRule`, `ModsFilteringRule` и `NameFilteringRule`.

***

## <mark style="color:blue;">**ManagerFilteringRule**</mark>

Начнём с `ManagerFilteringRule`. Он отвечает за то, в каком `<recypestype:` будет происходить замена.

Для того, чтобы получить список всех `recypesType` нужно написать команду `/ct dump recipetype`.

Допустим, мы хотим изменить рецепты только в верстаке. Для этого нужно написать следующее:

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.ManagerFilteringRule;

Replacer.create().filter(ManagerFilteringRule.of([<recipetype:minecraft:crafting>]));
```

В таком случае `Replacer` будет работать только с верстаком.

***

## <mark style="color:blue;">**ModsFilteringRule**</mark>

Также существует фильтр `ModsFilteringRule`, который работает с рецептами из определённого мода.

Для примера изменим рецепты только из <mark style="color:blue;">**Divine RPG**</mark>

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.ModsFilteringRule;

Replacer.create().filter(ModsFilteringRule.of(["divinerpg"]));
```

Теперь Replacer будет работать только ко всем предметам из Divine RPG.

***

## <mark style="color:blue;">**NameFilteringRule**</mark>

Фильтр, который работает в ситуации, когда у предмета есть что-то в названии, например `hoe` или `axe`, тогда он будет производить замену.

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.NameFilteringRule;

Replacer.create().filter(NameFilteringRule.anyOf(["stone_axe", "wodden_hoe", "iron_block"]));
```

Здесь фильтр работает в соответствии с перечисленными наименованиями, не отклоняясь от этой траектории.

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.NameFilteringRule;

Replacer.create().filter(NameFilteringRule.containing("axe"));
```

Функционирует с предметами, в названии которых есть вышеперечисленное слово `pump == minecraft:pumpkin_pie`. Не учитывает регистр.

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.NameFilteringRule;

Replacer.create().filter(NameFilteringRule.regex("\\D{3}"));
```

Фильтр на основе заданного регулярного выражения. Для лучшего понимания этого прочитайте Регулярные выражения в Java replace.

Данный метод выполняет всю логику нашего Replacer. У него есть ряд параметров, рассмотрим же их.

```java
Replacer.replace<T : Object>(component as IRecipeComponent<T>, toReplace as T, with as T) as Replacer
```

`replace<T : Object>` - нужна чтобы сказать `Replacer` какой тип нужно изменять. Всегда это `IIngredient`, кроме случаев когда заменяем рецепт в модовом `recipeType`

`component as IRecipeComponent<T>` - отвечает к какому предмету в рецепте он будет применять изменение. Чтобы узнать все `IRecipeComponent` пропишите команду `/ct dump recipecomponent`.

`toReplace` - предмет который необходимо заменить. `with` - на что необходимо заменить.

***

## <mark style="color:blue;">execute</mark>

Заключительный метод, который обозначает конец нашего `Replacer` Replacer.

Теперь, для примера, создадим простой `Replacer`. Заменим все палки в рецептах из мода <mark style="color:blue;">**Divine RPG**</mark> на огненные стержни.

```java
import crafttweaker.api.recipe.replacement.Replacer;
import crafttweaker.api.recipe.replacement.type.ManagerFilteringRule;
import crafttweaker.api.recipe.replacement.type.ModsFilteringRule;
import crafttweaker.api.ingredient.IIngredient;

Replacer.create().filter(ModsFilteringRule.of(["divinerpg"])).filter(ManagerFilteringRule.of([<recipetype:minecraft:crafting>])).replace<IIngredient>(<recipecomponent:crafttweaker:output/items>, <item:minecraft:stick>, <item:minecraft:blaze_rod>).execute();
```
