Перейти к содержимому

ForkedEnderTweaker

CraftTweaker + интерфейс EnderIO

Forge
Загрузчики
Forge
Скачиваний на Modrinth
187
Подписчиков на Modrinth
0
версии
4
Обновлён
7 июня 20267 июн.
Опубликован
в 2026

Коротко о моде

Работает на Forge
Для Minecraft 1.12.2
Нужен и в игре, и на сервере
Последняя версия — 2.1.3 от 7 июня 2026
Лицензия MIT — бесплатно
Где нужен
В игреобязателенНа сервереобязателен

Нужен и в игре, и на сервере

Версии игры1.12.2
Описание переведено автоматическиПоказать оригинал (EN)

FET - Forked Ender Tweaker

FET — это форк оригинального EnderTweaker от Shadows_of_Fire

Интерфейс между EnderIO и CraftTweaker.

Поддерживает добавление и удаление рецептов для машин EnderIO с помощью ZenScript, позволяя использовать горячую перезагрузку (через ZenRecipeReload) для настройки модпаков.

## ✨ Ключевые улучшения в этом форке - Поддерживается последняя версия EnderIO: Все поддерживаемые механизмы работают и протестированы с последней версией EnderIO для 1.12.2 (v.5.3.72). Некоторые механизмы также могут работать со старыми версиями EnderIO (5.3.67 - 5.3.71), но корректная работа не гарантируется. - Горячая перезагрузка: Добавлена возможность использовать /ct reload и /jeiReload для горячей перезагрузки ваших ZenScript'ов, чтобы применить изменения без полного перезапуска игры.
(Примечание: Требуется ZenRecipeReload). - Улучшенное логирование: Более понятные сообщения об ошибках в crafttweaker.log и внутриигровом чате, помогающие отлаживать ваши скрипты.
---

Поддерживаемые машины:
Плавильня сплавов • Генератор сгорания • Зачаровыватель • SAG Mill • Slice'n'Splice • Связыватель душ • Чан • Бак

📖 Документация

Функция перезагрузки #### Горячая перезагрузка Чтобы включить перезагрузку скриптов, вы должны добавить препроцессор #reloadable самой первой строкой вашего файла ZenScript. ```zenscript #reloadable

// ...Ваши импорты здесь...

// ...Ваш скрипт здесь...

После внесения любых изменений в скрипт (добавления или удаления рецептов) выполните команду `/ct reload` для перезагрузки скриптов и команду `/jeiReload` для обновления рецептов JEI.
Больше полезной информации о перезагрузке в целом можно найти в [вики ZenUtils](https://github.com/friendlyhj/ZenUtils/wiki/ScriptReloading).
---
</details>
<details>
<summary><b id="alloy">Плавильня сплавов</b> (mods.enderio.AlloySmelter)</summary>
Плавильня сплавов — это сложный механизм с собственной системой плавки, который может переплавлять до трёх предметов одновременно и объединять их в сплавы.
#### Добавить рецепт
##### `AlloySmelter.addRecipe(IItemStack output, IItemStack[] inputs, @Optional int energyCost, @Optional xp)`
```zenscript
AlloySmelter.addRecipe(
    <minecraft:diamond>,
    [<minecraft:dirt>, <minecraft:sand>],
    2000,
    0.5
);

Параметры:

  • output (IItemStack) — результат операции крафта.
  • inputs (IIngredient[]) — предметы, необходимые для выплавки сплава.
  • energyCost (int, необязательно) — требуемые µI (по умолчанию: 5000).
  • xp (float, необязательно) — выдаваемый опыт (по умолчанию: 0.0).
Удалить рецепт

(Примечание: вы не можете удалить стандартные рецепты плавки (например, Flour > Bread) с помощью класса AlloySmelter из FET, поскольку они используют систему плавки ванильной печи Minecraft. Для таких рецептов используйте обработчик печи из CraftTweaker). Совет по производительности: Поскольку у плавильни сплавов нет встроенных инструментов для удаления рецептов, FET перестраивает весь список рецептов при удалении. Это «дорогостоящая» операция. Если вам нужно удалить несколько рецептов, лучше использовать форматы множественного удаления, чтобы сделать это за один проход.

1. Удалить по результату
AlloySmelter.removeRecipe(...IItemStack output)
// Удалить один рецепт
AlloySmelter.removeRecipe(<enderio:item_alloy_ingot:0>); // Electrical Steel

// Удалить несколько рецептов (формат VarArgs)
AlloySmelter.removeRecipe(
    <enderio:item_alloy_ingot:0>, // Electrical Steel
    <enderio:item_alloy_ingot:1>, // Energetic Alloy
    <enderio:item_alloy_ingot:2>  // Vibrant Alloy
);

// Удалить несколько рецептов (формат массива)
AlloySmelter.removeRecipe([
    <enderio:item_alloy_ingot:0>, // Electrical Steel
    <enderio:item_alloy_ingot:1>  // Energetic Alloy
]);

Параметры:

  • output (IItemStack или массив/varargs) — результат рецепта(ов), который вы хотите удалить.
2. Удалить по входным предметам

(Примечание: метод removeByInputs требует массив/двумерный массив и не поддерживает VarArgs).

AlloySmelter.removeByInputs(IItemStack[] inputs)
AlloySmelter.removeByInputs(IItemStack[][] inputs)
// Удалить рецепт, использующий именно эти входные предметы
AlloySmelter.removeByInputs(
    [<minecraft:iron_ingot>,
    <enderio:item_material:23>,
    <enderio:item_material:5>]
); //Electrical Steel Ingot

// Удалить несколько конфигураций рецептов сразу (массив массивов)
AlloySmelter.removeByInputs([
    [<minecraft:soul_sand>, <minecraft:gold_ingot>], //Soularium Ingot
    [<minecraft:iron_ingot>, <minecraft:redstone>] //Conductive Ingot
]);

Параметры:

  • inputs (IIngredient[] или IIngredient[][]) — входные предметы рецепта(ов), который вы хотите удалить.

Генератор сгорания (mods.enderio.CombustionGen) Генерирует µI (Micro Infinity Energy), сжигая жидкое топливо и используя жидкий хладагент для охлаждения. (Примечание: эта машина работает по системе смешивания и подбора. Как только вы зарегистрируете топливо, его можно будет использовать с ЛЮБЫМ зарегистрированным хладагентом, и наоборот. В интерфейсе значения отображаются в t/mB (тики на милливедро). Это обозначает длительность).

Логика основана на тепловом балансе. Сгорающее топливо выделяет тепло. Хладагент поглощает это тепло.

Основы механики генератора сгорания:
(Примечание: переменные, помеченные как _variable_ — это переменные, которые вы задаёте в своём скрипте ZenScript.
Переменные, помеченные как **variable** — вычисляются из исходного кода EnderIO).
1. Модификаторы конденсаторов и машин
Множители уровня машины и конденсатора можно настроить как угодно через XML-конфиги рецептов EnderIO. У всех них есть базовое значение и тип масштабирования (который определяет, что математика сделает с базовым значением). Для генератора сгорания обычно получаются следующие итоговые множители:
  • Множитель качества конденсатора (**capQuality**): Базовый конфиг задаёт для обычного и улучшенного генераторов сгорания: ` ` Формула: 1.0 + (CapacitorLevel - 1) * 0.25

    • Базовый конденсатор (ур. 1): 1.00
    • Двухслойный конденсатор (ур. 2): 1.25
    • Октадический конденсатор (ур. 3): 1.50 (Примечание: для кастомных конденсаторов или конденсаторов из аддонов нужно использовать тот же тип масштабирования и соответствующие значения их уровней).
  • Качество машины (**machineQuality**): Базовый конфиг задаёт: ` `

    • Генератор сгорания: 1.00
    • Улучшенный генератор сгорания: 200 * 0.01 = 2.0
2. Выработка энергии (µI/t)
Формула: **energyPerTick** = Math.round(powerPerCycle * **capQuality** * **machineQuality**)
3. Длительность топлива (t/mB)
Определяет, сколько тиков длится 1 mB топлива. Чем выше уровень конденсатора, тем быстрее сгорает топливо для поддержания более высокой выработки энергии.
  • totalBurnTime = всего тиков на 1000 mB (задаётся в скрипте).
  • Формула: ticksPerFuel = Math.max((int)(totalBurnTime / capQuality / 1000.0F), 1)
4. Длительность хладагента (t/mB)
Машина производит тепло в зависимости от выработки энергии. - A. Охлаждающая способность (на mB): Сколько тепла может отвести 1 mB жидкости. cooling = (373.25 - Fluid_Temp_K) \* degreesCoolingPerMB Fluid_Temp_K = температура жидкости, которую можно узнать командой /ct liquids. Все зарегистрированные жидкости и их свойства будут записаны в файл crafttweaker.log. - B. Выделяемое тепло (за тик): Тепло на µI, константа: 0.000115. toCool = energyPerTick \* machineQuality \* 0.000115 - C. Итоговая длительность (t/mB): ticksPerCoolant = Math.max((int)Math.round(cooling / toCool), 1) #### Пример расчёта (что покажет GUI)
// Сценарий: вы добавляете топливо и хладагент. Для примера возьмём Hot Coolant и Coolant из мода IC2:
// Топливо: "Hot Coolant" (температура = 1200K), powerPerCycleRF = 100 µI/t, totalBurnTime = 20000.
// Хладагент: "Coolant" (температура = 300K), degreesCoolingPerMB = 1.0.
//Обычная машина (MQ=1.0) + базовый конденсатор (CQ=1.0)
1. Энергия = 1000 \* 1.0 \* 1.0 = 1000.0 µI/t.
2. Тиков на топливо = 20000 / 1.0 / 1000 = 20.
3. Тиков на хладагент = ((373.25 - 300K) \* 1.0) / (1000.0µI/t \* 1.0 \* 0.000115) = 73.25 / 0.115 = 637 t/mB.
// Случай B: улучшенная машина (MQ=2.0) + октадический конденсатор (CQ=1.5)
1. Энергия = 1000 \* 1.5 \* 2.0 = 3000 µI/t.
2. Тиков на топливо = 300 \* 2.0 \* 0.000115 = 13.
3. Тиков на хладагент = ((373.25 - 300K) \* 1.0) / (1000.0µI/t \* 2.0 \* 0.000115) = 73.25 / 0.69 = 106 t/mB.
#### Добавить топливо ##### CombustionGen.addFuel(ILiquidStack fluid, int powerPerCycle, int totalBurnTime) ```zenscript import mods.enderio.CombustionGen;

CombustionGen.addFuel( <liquid:hooch>, 100, 20000 );

**Параметры:**
- `fluid` ([ILiquidStack](https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack)) — жидкость для сжигания.
- `powerPerCycle` (int) — базовые µI/t (при базовом конденсаторе, обычной машине).
- `totalBurnTime` (int) — всего тиков, которые будет гореть 1000 mB (1 ведро) (при базовом конденсаторе).
#### Добавить хладагент
##### `CombustionGen.addCoolant(ILiquidStack fluid, int powerPerCycle, float degreesCoolingPerMB)`
```zenscript
import mods.enderio.CombustionGen;

CombustionGen.addCoolant(<liquid:xpjuice>, 1.0);

Параметры:

  • fluid (ILiquidStack) — жидкость для сжигания.
  • degreesCoolingPerMB (int) — множитель.
Удалить жидкости
CombustionGen.removeFuel(ILiquidStack fluid)
CombustionGen.removeCoolant(ILiquidStack fluid)
import mods.enderio.CombustionGen;

CombustionGen.removeFuel(<liquid:fire_water>);
CombustionGen.removeCoolant(<liquid:water>);

Параметры:

  • fluid (ILiquidStack) — жидкость, которую нужно удалить.

Enchanter (mods.enderio.Enchanter) Enchanter позволяет создавать зачарованные книги, комбинируя определённый входной предмет с уровнями опыта. Он преобразует физические предметы и опыт игрока в сохранённые зачарования. #### Основы механики Enchanter: - Лазурит подразумевается сам собой: Вам не нужно указывать лазурит как часть input. Машина жёстко запрограммирована всегда требовать его во вторичном слоте. Рецепты в Enchanter определяются для каждого зачарования отдельно. Стоимость создания книги динамическая и линейно масштабируется с уровнем выбранного зачарования. Она основана на стандартной ванильной зачаровываемости и нескольких множителях. (Примечание: переменные, помеченные как _variable_ — это переменные, которые вы задаёте в своём скрипте ZenScript.
Переменные, помеченные как **variable** — производные от исходного кода EnderIO). - Стоимость предметов: Простой расчёт: количество предметов, требуемых за уровень, умножается на целевой уровень. itemsNeeded = targetLevel \* amountPerLevel Пример: если _amountPerLevel_ равно 2, для создания книги уровня V (5) потребуется 10 предметов. (Примечание: будьте осторожны с количеством предметов. Если оно превышает максимальный размер стака требуемого предмета (например, 64 для большинства ресурсов), более высокие уровни зачарования станут недоступными для крафта, даже если максимально возможный уровень этого зачарования не достигнут. Однако это также можно использовать как намеренное ограничение.) - Стоимость опыта: Зависит от природной редкости зачарования, _costMultiplier_, а также **levelCostFactor** и **baseLevelCost** из конфига (ниже псевдокод для лучшего понимания):
min = Math.max(1, minEnchantability);
min = min * costMultiplier;
cost = (int)Math.round(min * levelCostFactor);
cost = cost + (int)baseLevelCost;
return cost;
_(Примечание 1: minEnchantability можно найти, воспользовавшись функцией CraftTweaker getMinEnchantability(int level))._ (Примечание 2: множитель _costMultiplier_ равный 1.0 использует стандартную математику EnderIO. Более высокие значения делают рецепт дороже по уровням.
По умолчанию
**levelCostFactor**= 0.75 и **baseLevelCost** = 2.0). #### Пример расчёта ``` // Сценарий: создание книги Sharpness V из шерсти. // Рецепт: Input=Red Wool, AmountPerLevel=2, CostMultiplier=1.0.
  1. Нужно предметов = 5 * 2 = 10 шерсти.
  2. Стоимость опыта: min = Sharpness V Ench. (45) * 1.0 = 45.0 cost = 45.0 * 0.75 = 34 cost = 34 + 2.0 = 36
#### Добавить рецепт
##### `Enchanter.addRecipe(IEnchantmentDefinition enchantment, IIngredient input, int amountPerLevel, double costMultiplier)`
```zenscript
import mods.enderio.Enchanter;

Enchanter.addRecipe(
    <enchantment:minecraft:sharpness>,
    <minecraft:wool:14>,
    2,
    1.0);

Параметры:

  • enchantment (IEnchantmentDefinition) — определение зачарования (например, <enchantment:minecraft:sharpness>).
  • input (IIngredient) — предмет, используемый как катализатор.
  • amountPerLevel (int) — сколько предметов требуется для уровня 1.
  • costMultiplier (double) — множитель для расчёта стоимости опыта.
Удалить рецепт
Enchanter.removeRecipe(IEnchantmentDefinition enchantment)
import mods.enderio.Enchanter;

// Удалить рецепт для Protection
Enchanter.removeRecipe(<enchantment:minecraft:protection>);

Параметры:

  • enchantment (IEnchantmentDefinition) — зачарование, которое нужно удалить из машины.

SAG Mill (mods.enderio.SagMill) Дробит предметы, производя пыль и побочные продукты. На эту машину сильно влияют Grinding Balls. (Примечание: переменные, помеченные как _variable_ — это переменные, которые вы задаёте в своём скрипте ZenScript.
Переменные, помеченные как **variable** — производные от исходного кода EnderIO). - Поведение типов бонуса: Как Grinding Balls влияют на конкретный рецепт (определяется _bonusType_): - NONE — Grinding Balls не оказывают эффекта. - MULTIPLY_OUTPUT — шар умножает количество основного выхода. - CHANCE_ONLY — шар повышает только шанс вторичного/третичного выхода. #### Добавить рецепт ##### 1. Использование массивов (стандартный способ) SagMill.addRecipe(IItemStack[] outputs, float[] chances, IIngredient input, String bonusType, @Optional int energyCost, @Optional float[] xp); ```zenscript import mods.enderio.SagMill;

SagMill.addRecipe( [<minecraft:flint>, <minecraft:gravel>], [1.0, 0.2], <minecraft:cobblestone>, "CHANCE_ONLY", 2000, [0.0, 0.1] );

**Параметры:**

- `outputs` ([IItemStack[]](https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack)) — массив предметов-результатов.
- `chances` (float[]) — массив вероятностей (от 0.0 до 1.0). Должен совпадать по длине с `outputs`.
- `input` ([IIngredient](https://docs.blamejared.com/1.12/en/Vanilla/Items/IIngredient)) — предмет для дробления.
- `bonusType` (String) — см. `"Bonus Type Behavior"` выше.
- `energyCost` (int, необязательно) — требуемое µI. По умолчанию: 5000.
- `xp` (float[], необязательно) — XP за каждый выходной предмет. По умолчанию: 0.
##### 2. Использование WeightedStacks
`SagMill.addRecipe(WeightedItemStack[] outputs, IIngredient input, String bonusType, @Optional int energyCost, @Optional float[] xp);`
```zenscript
import mods.enderio.SagMill;

SagMill.addRecipe(
    [<minecraft:diamond> % 100, <minecraft:coal> % 50],
    <minecraft:diamond_ore>,
    "MULTIPLY_OUTPUT"
);

Параметры:

  • outputs (WeightedItemStack[]) — пары предмет + шанс (например, ` % 50` для 50%).
  • input, bonusType, energy, xp — то же, что выше.
Удаление рецепта

SagMill.removeRecipe(IItemStack input);

import mods.enderio.SagMill;

SagMill.removeRecipe(<minecraft:cobblestone>);

Параметры:

  • input (IItemStack) — предмет для дробления, который нужно удалить.

Slice'n'Splice (mods.enderio.SliceNSplice) Slice'n'Splice — машина, которая объединяет различные предметы в продвинутые компоненты, такие как Zombie Electrodes или Z-Logic Controllers. Для работы ей уникально требуются топор и ножницы в слотах для инструментов (указывать их не нужно). Важное замечание: эта машина строго следует слотам. Порядок ингредиентов в вашем массиве напрямую соответствует 6 входным слотам машины. Если нужно оставить конкретный слот пустым, используйте null в этой позиции массива. Если хотите оставить пустыми последние слоты, можно просто передать массив короче (например, массив из 4 предметов заполнит первые 4 слота и оставит последние 2 пустыми). #### Добавление рецепта ##### SliceNSplice.addRecipe(IItemStack output, IIngredient[] inputs, @Optional int energyCost, @Optional float xp) ```zenscript import mods.enderio.SliceNSplice;

SliceNSplice.addRecipe( <minecraft:diamond>, [ <minecraft:stick>, null, <minecraft:stick>, // Слоты 0, 1, 2 null, <minecraft:iron_ingot>, null // Слоты 3, 4, 5 ], 5000, 0.5 );

**Параметры:**
- `output` ([IItemStack](https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack)) — результат операции крафта.
- `inputs` ([IIngredient[]](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — массив до 6 ингредиентов, представляющих слоты машины по порядку. Используйте null для пустых слотов.
- `energyCost` (int, необязательно) — требуемое µI (по умолчанию: 5000).
- `xp` (float, необязательно) — выдаваемый опыт (по умолчанию: 0.0).
#### Удаление рецепта
##### SliceNSplice.removeRecipe(IItemStack output)
```zenscript
import mods.enderio.SliceNSplice;

SliceNSplice.removeRecipe(
    <enderio:item_material:41> // Z-Logic Controller
);

Параметры:

  • output (IItemStack) — результат рецепта, который нужно удалить.

Soul Binder (mods.enderio.SoulBinder) Soul Binder используется для привязки души пойманного моба (из заполненной Soul Vial) к базовому предмету, создавая новый магический или механический компонент. Он потребляет как µI (энергию), так и опыт игрока (уровни). #### Базовое понимание механики Soul Binder: - Soul Vial подразумевается: Вам не нужно указывать заполненную Soul Vial как часть input. Машина жёстко запрограммирована всегда требовать её во вторичном слоте. - Массив сущностей: Вместо указания точного предмета флакона вы передаёте массив Entity IDs (например, ["minecraft:zombie", "minecraft:skeleton"]). Рецепт примет Soul Vial, заполненную ЛЮБОЙ из перечисленных в этом массиве сущностей. - Выход пустого флакона: Машина автоматически возвращает пустую Soul Vial по завершении крафта. Вам не нужно прописывать этот побочный продукт в скрипте. #### Добавление рецепта ##### SoulBinder.addRecipe(IItemStack output, IIngredient input, String[] entities, int xp, @Optional int energyCost) ```zenscript import mods.enderio.SoulBinder;

// Пример: привязывает душу зомби или скелета к алмазу, создавая изумруд. // Стоит 5 уровней XP и 100 000 µI. SoulBinder.addRecipe( <minecraft:emerald>, <minecraft:diamond>, ["minecraft:zombie", "minecraft:skeleton"], 5, 100000 );

**Параметры:**
- `output` ([IItemStack](https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack)) — результат операции привязки.
- `input` ([IIngredient[]](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — базовый предмет, к которому будет привязана душа.
- `entities` (String[]) — массив допустимых Resource Locations сущностей (например, `"minecraft:creeper"`).
- `xp` (int) — стоимость в **уровнях** опыта.
- `energyCost` (int, необязательно) — требуемое µI (по умолчанию: 5000).
#### Удаление рецепта
##### SoulBinder.removeRecipe(IItemStack output)
```zenscript
import mods.enderio.SoulBinder;

SoulBinder.removeRecipe(
    <enderio:item_material:17> // Enticing Crystal
);

Параметры:

  • output (IItemStack) — результат рецепта, который нужно удалить.

The Vat (mods.enderio.Vat) The Vat — машина для варки жидкостей. Она ферментирует базовую входную жидкость вместе с двумя твёрдыми ингредиентами, создавая новую выходную жидкость (например, Water + Sugar + Apple = Hootch). #### Базовое понимание механики Soul Binder: - Входные слоты:

У Чана есть два отдельных слота для входных предметов. Рецепт должен определять ингредиент для обоих слотов.

  • Множители слотов: У каждого твёрдого входного предмета и входной жидкости есть свой множитель. Итоговый объём обеих жидкостей вычисляется по следующим формулам: Множитель ингредиента = slot1Mults * slot2Mults Объём входной жидкости = Множитель ингредиента * 1000 Объём выходной жидкости = Множитель ингредиента * inMult * 1000
// Сценарий: вы добавляете рецепт получения лавы из воды. В качестве предметов используете Уголь + Кремень и огниво:
// Входная жидкость: "Water"; множитель входной жидкости = 0.5.
// Предметы левого слота: "Coal", "Charcoal"; множители: [2.0, 1.5];
// Предметы правого слота: "Flint and Steel"; множители: [2.0].
// Уголь (2.0) + Кремень и огниво (2.0)
1. Множитель ингредиента = 2.0 \* 2.0 = 4.0
2. Объём входной жидкости = 4.0 \* 1000 = 4000 mB.
3. Объём выходной жидкости = 4.0 \* 0.5 \* 1000  = 2000 mB.
// Древесный уголь (1.5) + Кремень и огниво (2.0)
1. Множитель ингредиента = 1.5 \* 2.0 = 3.0
2. Объём входной жидкости = 3.0 \* 1000 = 3000 mB.
3. Объём выходной жидкости = 3.0 \* 0.5 \* 1000  = 1500 mB.
(Примечание: будьте осторожны с множителями — если итоговый объём выходной жидкости превысит максимальную вместимость резервуара, вы не сможете создать этот рецепт.). #### Добавление рецепта ##### Vat.addRecipe(ILiquidStack output, float inMult, ILiquidStack input, IIngredient[] slot1Solids, float[] slot1Mults, IIngredient[] slot2Solids, float[] slot2Mults, @Optional int energyCost) ```zenscript import mods.enderio.Vat;

Vat.addRecipe( <liquid:lava>, 0.5, <liquid:water>, [<minecraft:coal>, <minecraft:coal:1>], [2.0, 1.5], [<minecraft:flint_and_steel>], [2.0], 40000 );

**Параметры:**
- `output` ([ILiquidStack](https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack)) — получаемая жидкость.
- `inMult` (float) — множитель для входной жидкости.
- `input` ([ILiquidStack](https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack)) — входная жидкость.
- `slot1Solids` ([IIngredient[]](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — предметы для первого слота.
- `slot1Mults` (float[]) — множители для предметов первого слота.
- `slot2Solids` ([IIngredient[]](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — предметы для второго слота.
- `slot2Mults` (float[]) — множители для предметов второго слота.
- `energyCost` (int, необязательно) — требуемые µI (по умолчанию: 5000).
#### Удаление рецепта
##### SoulBinder.removeRecipe(IItemStack output)
```zenscript
import mods.enderio.Vat;

// Удаляет рецепт, выдающий Hootch
Vat.removeRecipe(<liquid:hootch>);

Параметры:

  • output (ILiquidStack) — результат рецепта, который вы хотите удалить.

Резервуар (mods.enderio.Tank) Жидкостный резервуар предназначен не только для хранения, но и работает как простой обрабатывающий механизм. Он может либо потреблять жидкости из резервуара для изменения предмета (наполнение предмета), либо извлекать жидкости из предмета для заполнения резервуара (опустошение предмета). #### Основы механики резервуара: (Примечание: переменные, помеченные как _variable_ — это переменные, которые вы задаёте в своём скрипте ZenScript.
Переменные, помеченные как **variable** — берутся из исходного кода EnderIO). - **Логическое значение fill:** Этот параметр определяет направление переноса жидкости: - true (Режим наполнения): жидкость потребляется из внутреннего хранилища резервуара для обработки или наполнения входного предмета. - false (Режим опустошения): жидкость извлекается из входного предмета и добавляется во внутреннее хранилище резервуара. - Необязательный выход (расход предмета): Параметр предмета output необязателен. Если вы не указываете выход (или передаёте null), входной предмет будет полностью израсходован/уничтожен в процессе. - Ограничение на нативные контейнеры Forge: Вы не можете добавлять или удалять рецепты, использующие нативные жидкостные контейнеры Forge (такие как ванильные вёдра, капсулы IC2 или портативные резервуары). Резервуар EnderIO обрабатывает такие предметы автоматически через жёстко закодированные механики Forge. #### Добавление рецепта ##### Tank.addRecipe(boolean fill, IIngredient input, ILiquidStack fluid, @Optional IItemStack output) ```zenscript import mods.enderio.Tank;

// Пример 1 (режим наполнения): потребляет 250mB лавы из резервуара, превращая губку во влажную губку. Tank.addRecipe(true, <minecraft:sponge>, <liquid:lava> * 250, <minecraft:sponge:1>);

// Пример 2 (режим опустошения, без выхода): плавит алмаз, добавляя 100mB лавы в резервуар. Алмаз полностью расходуется. Tank.addRecipe(false, <minecraft:diamond>, <liquid:lava> * 100);

**Параметры:**
- `fill` (boolean) — `true`, чтобы потреблять жидкость из резервуара (режим наполнения), `false`, чтобы создавать жидкость в резервуаре (режим опустошения).
- `input` ([IIngredient](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — предмет, помещаемый в слот резервуара.
- `fluid` ([ILiquidStack](https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack")) — требуемая жидкость (если fill = true) или производимая (если fill = false).
- `output` ([IItemStack](https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack), необязательно) — предмет, получаемый после процесса. Оставьте пустым, чтобы предмет расходовался.
#### Удаление рецепта

_Примечание: удаление рецептов происходит строго по **входному предмету** и режиму резервуара, а не по выходному. Если опустить параметр жидкости, будут удалены все рецепты для этого входного предмета в указанном режиме._
##### Tank.removeRecipe(boolean fill, IItemStack input, @Optional ILiquidStack fluid)

import mods.enderio.Tank;

// Пример 1: удалить конкретный рецепт EnderIO, который опустошает мокрую губку для получения воды. Tank.removeRecipe(false, <minecraft:sponge:1>, <liquid:water>);

// Пример 2: удалить ВСЕ рецепты опустошения, связанные с бутылочкой опыта (независимо от того, какую жидкость она производит). Tank.removeRecipe(false, <minecraft:experience_bottle>);

**Параметры:**
- `fill` (boolean) — `true`, чтобы потреблять жидкость из резервуара (режим заполнения), `false`, чтобы производить жидкость в резервуар (режим опустошения).
- `input` ([IIngredient](https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient)) — **входной предмет** рецепта, который нужно удалить.
- `fluid` ([ILiquidStack](https://docs.blamejared.com/1.12/en/Vanilla/Liquids/ILiquidStack"), необязательно) — конкретная жидкость для сопоставления. Если опустить, будут удалены все рецепты для указанного входного предмета.
</details>
<details>
<summary><b id="dumping">Дамп</b></summary>
Вы можете выгрузить все зарегистрированные рецепты машин с помощью команды `/fet dump`. В качестве параметра можно указать машину, рецепты которой нужно выгрузить.
Параметры: `[all|alloy|combustion|enchanter|sagmill|slice|soul|tank|vat]`
Все рецепты будут записаны в файл `latest.log`.
</details>
---
## 🤝 Участие в разработке
Вклад приветствуется! Если вы нашли баг или хотите улучшить существующий функционал, смело открывайте issue или pull request.
**Чтобы настроить среду разработки:**
1. Клонируйте репозиторий
2. Убедитесь, что `JAVA_HOME` указывает на JDK 25 или новее (JDK 8 используется для компиляции автоматически через Gradle toolchains)
3. Запустите `./gradlew runClient` — Gradle скачает все необходимые зависимости при первом запуске

Частые вопросы

Как установить ForkedEnderTweaker?

Установите Forge под свою версию Minecraft, скачайте ForkedEnderTweaker под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть ForkedEnderTweaker?

У ForkedEnderTweaker есть сборки для Minecraft 1.12.2.

Нужен ли ForkedEnderTweaker на сервере?

Нужен и в игре, и на сервере

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее