Minecraft Wiki
Advertisement
Статья-заготовка. В процессе редактирования
MineTweaker 3
Автор

Stan Hebben

Последняя
версия

3.0.9C/3.0.10B/3.0.10B

Совместимо с

1.6.4/1.7.10/1.8.8

Ссылки

MineTweaker 3 — мод для SSP и SMP режимов игры Minecraft, который позволяет редактировать, менять и удалять рецепты крафтов из оригинальной игры и модификаций.

Является удобным инструментом при создании сборок из различных модификаций, а также для решения проблем с поддержкой крафтов между различными модами.
В папке minecraft, создается папка script в которую можно помещать свои файлы конфигурации с расширением "zs".
Также, в папке minecraft создается файл логов "minetweaker.log" в котором удобно отслеживать названия объектов, группы ore dictionary, и типы сундуков с лутом, для последующего использования в скриптах.

Установка

Описание установки модификации в стандартном лаунчере:

  1. Скачайте рекомендуемую версию инсталлятора Forge.
  2. Запустите скачанный файл, выберите тип установки (для клиента или сервера) подтвердите
  3. Скачайте саму модификацию.
  4. Запустите лаунчер, войдите под своим аккаунтом
  5. Нажмите New Profile
  6. Выберите в резделе Version Selection, в подпункте Use version пропатченную forge версию майнкрафта (длинное название начинающееся с версии minecraft через дефис версия forge)
  7. При желании можете переименовать профиль и/или задать дополнительные настройки
  8. Нажмите Save Profile чтобы сохранить созданный профиль
  9. Запустите игру (кнопка "Play") и закройте её. В директории ".minecraft" появится папка "mods".
  10. Переместите MineTweaker3-версия.jar в папку .minecraft/mods.
  11. Создайте в папке .minecraft/scripts (если папки нет, создайте ее) файл конфигурации "project.zs" (вместо названия project можно использовать свое, набранное латиницей)
  12. Запускайте игру по кнопке "Play" и играйте.
  13. Для внесения изменений в конфигурационный файл "project.zs", желательно использовать программу Notepad++

Описание установки модификации в лаунчере MultiMC:

  1. Скачайте саму модификацию.
  2. Откройте MultiMC
  3. Выберете "Добавить новую сборку" (кнопка в левом верхнем углу в виде листочка со звездочкой), или выберите существующую сборку если есть (в этом случае пропустите следующий пункт)
  4. Задайте логотип, название и группу сборки. Также укажите версию minecraft на которой будете играть
  5. Выберите созданную сборку, нажмите "Редактировать сборку" в меню справа
  6. В пункте "Версия" в меню справа в разделе "Установить" кликнете по кнопке "Установить Forge" и выберите необходимую вам версию (отмеченная звездочкой - рекомендуемая)
  7. В пункте "Список модификаций" перетащите скачанный файл модификации в пустое поле, или нажмите кнопку "Просмотр папки" в правом нижнем углу, откроется папка "mods"
  8. При желании в пункте "Настройки" задайте настройки сборки
  9. Закройте окно редактирования сборки и нажмите в меню справа "Папка сборки"
  10. Создайте в папке "minecraft" папку "scripts". Если она уже существует, откройте ее
  11. В папке scripts создайте файл конфигурации "project.zs" (вместо названия project можно использовать свое, набранное латиницей)
  12. Запускайте игру по кнопке "Играть" или "Играть в автономном режиме" и играйте.
  13. Для внесения изменений в конфигурационный файл "project.zs", желательно использовать программу Notepad++

Команды консоли

/mt names - вывести в minetweaker.log список всех игровых названий объектов, а также их внутренние названия
/mt hand - если взять в руки какой-либо предмет и набрать эту команду, то в буфер обмена автоматически сохранится внутреннее название этого предмета, которое сразу можно использовать в скрипте.
/mt reload - обновить файл "project.zs" для применения внесенных в него изменений в игре.
/mt loot - вывести в minetweaker.log список всех типов сундуков с лутом, а также их возможное содержимое.
/mt oredict - вывести в minetweaker.log список всех групп ore dictionary c списком входящих в них объектов
/mt research - (если у вас установлен ThaumCraft) вывести в minetweaker.log список всех исследований ThaumCraft

Базовые основы

Для того чтобы закомментировать скрипт, или добавить в качестве комментария к скрипту какую-то фразу, можно использовать один из перечисленных способов:

//Так можно закомментировать строку
# И так тоже можно закомментировать строку
/* А так можно закомментировать
целый набор строк
главное не забыть
закрыть комментарии в конце */

Для того чтобы узнать правильное название предмета, следует ввести в игре команду /minetweaker names а затем, произведя поиск в файле "minetweaker.log" по имени объекта в игре, при помощи комбинации клавиш Ctrl+F внутреннего названия объекта. Именно это название нужно использовать в скриптах.

Если вы не можете найти название какого-то объекта в списке, то возможно он использует метаданные. Так, к примеру разные цвета шерсти обращаются по метаданным к прародителю - белой шерсти, а различные красители к своему прародителю - чернильному мешку.
Для того чтобы найти прародитель нужно включить в игре отображение id в названии объектов. Для этого нужно нажать комбинацию клавиш F3+H (вне инвентаря), затем найти прародителя, и произведя поиск в файле "minetweaker.log" по игровому имени прародителя, найти его внутреннее, а затем, обращаться через него, к нужному объекту, вводя в угловых скобочках после двоеточия - метаданные нужного объекта Пример:

<minecraft:wool> - белая шерсть 35
<minecraft:dye> - чернильный мешок 351
<minecraft:wool:1> - оранжевая шерсть 35:1
<minecraft:wool:4> - желтая шерсть 35:4
<minecraft:wool:15> - черная шерсть 35:15
<minecraft:dye:3> - какао бобы 351:3
<minecraft:dye:4> - дазурит 351:4
<minecraft:dye:15> - костяная мука 351:15

Если в крафте должен использоваться не только прародитель, или вызванный через метаданные объект, а все объекты использующие эти метаданные, начиная от прародителя (к примеру шерсть всех цветов, или любой краситель) то после двоеточия стоит указывать *.
Пример:

<minecraft:wool:*> - в рецепте используется шерсть всех цветов
<minecraft:dye:*> - в рецепте используются любые красители

По каким-то причинам может понадобится обратиться к какому-то объекту целым каскадом команд, поскольку внутренний язык не предусматривает одновременного отношения к объекту сразу по нескольким параметрам, можно создать переменную, к которой присвоить какой-то объект, а затем - обращаться через неё.
Для создания переменной используется команды var и val.
Пример присвоения переменной wool объекта белая шерсть <minecraft:wool>:

var wool = <minecraft:wool>

Названия переменных записываются слитно без пробелов и спец-символов. Используемый регистр имеет значение.
Пример двух разных переменных:

var wool = <minecraft:wool>
var WooL = <minecraft:wool:15>

Команда val применяется так-же как и предыдущая, но с одной небольшой поправкой, после объявления этой переменной ее уже нельзя переименовать.
Пример:

val stick = <minecraft:stick>;
var stick = <minecraft:bread>; // ОШИБКА, нельзя переименовывать!

Добавление и удаление Форменных Рецептов

Имеются в виду Shaped рецепты, то есть те, в которых важен порядок и расположение ингредиентов в сетке крафта.
Все описанные в рамочках скрипты вводятся в файле "project.zs"

Добавление Форменных Рецептов

Для добавления нового рецепта 2x2 используется следующий шаблон:

recipes.addShaped(<>,
[[<>, <>],
 [<>, <>]]);

Результат следует вводить в первые угловые скобки. Предметы, которые должны служить ингредиентами вводятся в массив ниже, в том же порядке в котором они будут использоваться в сетке крафта в игре. Пример крафта верстака из дубовых досок ниже:

recipes.addShaped(<minecraft:crafting_table>,
[[<minecraft:planks>, <minecraft:planks>],
 [<minecraft:planks>, <minecraft:planks>]]);

Если в крафте не должны быть задействованы какие-то клетки, то вместо угловых скобочек пишется null. Также, если на выходе должно получится несколько объектов, то после результата ставите * и указывает количество выходного результата в числовом эквиваленте.
Пример крафта 4-х палочек из двух дубовых досок:

recipes.addShaped(<minecraft:stick> * 4,
[[<minecraft:planks>, null],
 [<minecraft:planks>, null]]);

Для добавления рецепта для верстака, то есть 3х3, необходимо всего лишь расширить массив в шаблоне:

recipes.addShaped(<>,
[[<>, <>, <>],
 [<>, <>, <>],
 [<>, <>, <>]]);

В остальном, ничего не меняется. Крафт 16-и решеток из шести железных слитков, в качестве примера, ниже:

recipes.addShaped(<minecraft:iron_bars> * 16,
[[<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>],
 [<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>],
 [null, null, null]]);

Удаление Форменных Рецептов

Для удаления всех возможных крафтов некого объекта достаточно написать вот такую строчку:

recipes.remove(<>);

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

recipes.remove(<minecraft:crafting_table>);

Если же нужно удалить только один, какой-то определенный рецепт, то делаем все то же самое, только слегка дополнив скрипт.
Пример удаления крафта железной кирки ниже:

recipes.remove(<minecraft:iron_pickaxe>,
[[<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>],
 [null, <minecraft:stick>, null],
 [null, <minecraft:stick>, null]]);

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

Добавление и удаление Бесформенных Рецептов

Имеются в виду Shapeless рецепты, то есть те, в которых порядок и расположение ингредиентов не важно, важно только их наличие в сетке крафта.
Все описанные в рамочках скрипты вводятся в файле "project.zs"

Добавление Бесформенных Рецептов

Добавление бесформенных рецептов происходит по схожему шаблону, только в отличие от предыдущих, совершенно не обязательно правильно расставлять все объекты в массиве, достаточно их указать через запятую:

recipes.addShapeless (<>, [<>, <>, null]);

Пример крафта оранжевого красителя:

recipes.addShapeless (<minecraft:dye:14>, [<minecraft:dye:1>, <minecraft:dye:11>]);

Пример крафта черной шерсти:

recipes.addShapeless (<minecraft:wool:15>, [<minecraft:wool>, <minecraft:dye>]);

Удаление Бесформенных Рецептов

Удаление всех бесформенных рецептов какого-то одного объекта ничем не отличается от удаления всех рецептов какого-то форменного рецепта:

recipes.remove(<>);

Пример удаления всех возможных крафтов оранжевой шерсти (в том числе и добавляемых модификациями):

recipes.remove(<minecraft:wool:1>);

В случае же удаления какого-то одного бесформенного рецепта вводится схожая с удалением форменного рецепта строчка, только участвующие в крафте ингредиенты достаточно перечислить через запятую в строчку:

recipes.remove (<minecraft:wool:15>, [<minecraft:wool>, <minecraft:dye>]);

Всё, нет больше в майнкрафте возможности сделать черную шерсть. Ну разве что найти овцу, покрасить ее а затем постричь.

Добавление и удаление Рецептов для печек

Все описанные в рамочках скрипты вводятся в файле "project.zs"

Добавление Рецептов для печек

Чтобы добавить новый рецепт для печек, нужно воспользоваться следующим шаблоном:

furnace.addRecipe(<>, <>);

Где, в первых фигурных скобках пишется получаемый при переплавке объект, а во вторых - тот, из которого этот объект получился.

Пример получения слитка железа из железной руды:

furnace.addRecipe(<minecraft:iron_ingot>, <minecraft:iron_ore>);

Также, вставляя между запятой и закрывающей фигурной скобочкой, звездочку * и указывая цифру, можно указать сколько предметов мы получим при переплавке какого-то объекта.
Пример получения трех слитков железа при переплавке железной двери:

furnace.addRecipe(<minecraft:iron_ingot> * 3, <minecraft:iron_door>);

Как известно при переплавке чего-либо мы получаем опыт, когда забераем результат. Чтобы указать количество опыта (в уровнях) получаемое после обработки в печке нужно указать его через запятую внутри круглых скобок.
Пример получения опыта при переплавке двери на основе предыдущего примера:

furnace.addRecipe(<minecraft:iron_ingot> * 3, <minecraft:iron_door>, 0,5);

Еще можно добавить новое топливо, используемое по шаблону:

furnace.setFuel(<>, num);

Где в угловых скобках указывается объект, служащий топливом, а вместо num указывается время горения в тиках.
Пример добавления ванильного топлива (с его реальной продолжительностью):

furnace.setFuel(<minecraft:sapling:*>, 100);
furnace.setFuel(<minecraft:wooden_slab:*>, 150);
furnace.setFuel(<minecraft:wooden_sword>, 200);
furnace.setFuel(<minecraft:planks:*>, 300);
furnace.setFuel(<minecraft:coal>, 1600);
furnace.setFuel(<minecraft:blaze_rod>, 2400);
furnace.setFuel(<minecraft:coal_block>, 16000);
furnace.setFuel(<minecraft:lava_bucket>, 20000);

Удаление Рецептов для печек

Шаблон удаления рецепта для печки:

furnace.remove(<>);

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

furnace.remove(<minecraft:iron_ingot>, <minecraft:iron_ore>)

Добавление рецептов для модов

Для добавления рецепта для какого-то мода, по прежнему нужно внутреннее название того объекта для которого добавляется рецепт.
После чего, пишется строчка вида:

mods.название_мода.название_объекта.addRecipe(<>);

Пример добавления рецепта для Алтаря в моде Blood Magic:

mods.bloodmagic.Altar.addRecipe(<minecraft:glowstone_dust>, <minecraft:redstone>, 3, 5000, 20, 20);

Судя по этой строке, мы обращаемся к объекту в моде Blood Magic, под названием Алтарь крови, и добавляем в него рецепт создания светопыли из красной пыли, при этом требуется уровень алтаря - 3, 5000 единиц крови в алтаре, в течении 20-и тиков и скорость потери крови за тик - 20 единиц.

Альтернативный вариант - импортировать объекты и рецепты из мода, командой:

import mods.название_мода.объект;

А затем обратится к этому объекту, добавляя или убирая рецепт, так-же, как обращались к печке в предыдущем разделе. Пример:

import mods.ic2.Compressor;
Compressor.addRecipe(<minecraft:planks>, <minecraft:stick>);

Список поддерживаемых модификаций

То есть тех, которые имеют полную поддержку в моде.

  1. BetterStorage
  2. Blood Magic
  3. BuildCraft
  4. GregTech
  5. IndustrialCraft 2
  6. Immersive Engineering
  7. Magneticraft
  8. MineFactory Reloaded
  9. Not Enough Items
  10. Tinkers' Steelworks
  11. Witching Gadgets

А также аддоны к моду:

  1. ModTweaker
  2. ContentTweaker

Список неподдерживаемых модификаций

То есть тех, при добавлении рецептов для которых, происходят краши, или возникают проблемы:

  1. CraftingManager - рецепты крафта не могут быть загружены при запуске игры.
  2. Some of the Sync - рецепты не меняются при перезагрузке MineTweaker'а.

Изменение названия и/или описания в новых рецептах

Для создания описания или изменения названия на русский язык, рекомендуется использовать [этот] сайт. В окне слева вводится текст на русском, затем вы нажимаете на кнопку в виде стрелки вправо и в окне справа выводится последовательность английских символов разделенных слэшами. По сути это зашифрованные русские буквы, после чего вам достаточно вставить строчку из таких символов в строчку со скриптом, внутрь кавычек.
Стрелка "влево" используется для обратного перевода, для того чтобы увидеть оригинальный текст.

Смена оригинального названия

Шаблон:

<>.displayName = "";

Для того чтобы узнать внутреннее имя предмета, можно воспользоваться одной из консольных команд, поиском по minetweaker.log или как в примере ниже:

print(<minecraft:chest>.displayName);

При вводе этой команды в логе запишется имя предмета, в данном случае сундука. Затем, чтобы поменять название сундука в игре достаточно написать следующую строчку:

<minecraft:chest>.displayName = "Storage Box";

При этом теперь сундук будет называться не "Chest" или "Сундук", а "Storage Box". Если же вы хотите изменить название, или описание, на русском, воспользуйтесь советом в начале этого раздела.
Пример смены названия сундука на "Сундучище":

<minecraft:chest>.displayName = "\u0421\u0443\u043d\u0434\u0443\u0447\u0438\u0449\u0435";

Добавление описания

Шаблон:

<>.addTooltip("");

Tooltip или описание можно добавлять как целому ряду объектов, к примеру с помощью Ore Dictionary:

<ore:plankWood>.addTooltip("These are wood planks");
<ore:plankWood>.addTooltip("\u042d\u0442\u043e \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u043a\u0438"); //"Это деревянные доски"

Также, при желании можно добавлять описание к какому-то конкретному объекту:

<minecraft:stick>.addTooltip("This is stick");
<minecraft:stick>.addTooltip("\u042d\u0442\u043e \u043f\u0430\u043b\u043a\u0430"); //Это палка

Такое описание будет видно всегда, когда вы наводите курсор в инвентаре на объект, и будет писаться прямо под заголовком.

Если вы хотите, чтобы описание появлялось только когда вы наводите курсор на предмет и зажимаете ⇧ Shift, то вам нужно воспользоваться следующим шаблоном:

<>.addShiftTooltip("");

Так-же как и обычное описание, такое может применяться сразу к нескольким объектам по Ore Dictionary или к одному конкретному:

<ore:iron_ingot>.addShiftTooltip("That's all iron ingots");
<minecraft:diamond_sword>.addShiftTooltip("It is crystalline!");

По умолчанию описание пишется темно-фиолетовым цветом, курсивом, однако вы можете сами задать формат текста, который будет выводится в описании, для этого нужно добавить параметр format.color/font.
В качестве примера поменяем алмазному мечу, цвет описания на светло-голубой:

<minecraft:diamond_sword>.addTooltip(format.blue("It is crystalline!"));

Теперь сменим тип написания шрифта... пусть он будет полужирным:

<minecraft:diamond_sword>.addTooltip(format.blue(format.bold("It is crystalline!")));

Теперь вся надпись будет нежно-голубого цвета, полужирным шрифтом.

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

<minecraft:diamond_sword>.addShiftTooltip("It is" + "crystalline!");

В данном примере мы не увидим особых изменений, однако теперь мы можем применить к этим двум частям текста разное форматирование.
Давайте применим к последнему слову уже знакомое вам ворматирование, а к первым двум, иное:

<minecraft:diamond_sword>.addShiftTooltip(format.red("It is") + format.blue(format.bold("crystalline!")));

Cписок всех цветов, которые вы можете применить к тексту, расположен ниже:

format.black         //Черный
format.darkBlue      //Синий
format.darkGreen     //Темно-зеленый
format.darkAqua      //Темно-синий
format.darkRed       //Темно-красный
format.darkPurple    //Темно-фиолетовый
format.gold          //Желтый
format.gray          //Серый
format.darkGray      //Темно-серый
format.blue          //Голубой
format.green         //Зеленый
format.aqua          //Светло-синий
format.red           //Красный
format.lightPurple   //Светло-фиолетовый
format.yellow        //Светло-желтый
format.white         //Белый

Список всех форматов шрифтов которые можно применить к тексту:

format.obfuscated    //Затемненный
format.bold          //Полужирный
format.strikethrough //Зачеркнутый
format.underline     //Нижнее подчеркивание
format.italic        //Наклонный

NBT Тэги

Создание уникальной вещи

Так-же вы можете изменить содержание предметов, присвоив их какой-то переменной, а потом через эту переменную обратившись к их содержимому.
Пример обращения к NBT данным:

val Dsword = <minecraft:diamond_sword>;
val TagDsword = Dsword.withTag({display: {Name: "Epic Sword", Lore: ["Oh, it's...", "It's really power!"]}});

При использовании такой строчки, вы получите алмазный меч, который будет иметь название "Epic Sword", и описание которое будет идти в две строчки, первая строчка "Oh, it's...", вторая "It's really power!". При этом если вы скрафтите обычный, алмазный меч, то он не будет иметь никакого измененного названия, и/или описания. Для того чтобы увидеть изменные свойства, нужно добавить крафт такого меча, к примеру:

recipes.addShapeless(TagDsword, [Dsword, <minecraft:gold_ingot>, <minecraft:diamond>]);

В результате подобного бесформенного рецепта при использовании алмазного меча (ведь ранее вы создали переменную имеющую свойство алмазного меча, так почему же не использовать вместо внутреннего имени - переменную?), алмаза и золотого слитка вы получите обычный алмазный меч, но с необычнм названием и описанием.

Прочность и ремонт

Предположим, поскольку это "Эпический Меч", единственный в своем роде, то он должен уметь восстанавливаться, ремонтироваться. Мы можем воспользоваться наковальней, но в таком случае мы скорее всего получим обычный меч, давайте создадим рецепт, в котором если прочность меча будет составлять 100 единиц, то при комбинации с алмазом мы сможем восстановить его до исходного состояния. Естественно у предмета должна быть изначально какая-то прочность, к примеру если это инструмент, броня и оружие. Блок не имеет внутренней прочности.
Давайте попробуем. Для начала создадим переменную с сломанным мечом "Эпическим мечом":

val BrokenTagDsword = TagDsword.withDamage(100);

А затем создадим рецепт для ремонта этого меча:

recipes.addShapeless(TagDsword, [BrokenTagDsword, <minecraft:diamond>);

Теперь, когда прочность меча станет равна 100 единиц, то скомбинировав его с алмазом мы получим целый "Эпический меч". Однако, если прочность выше 100 единиц, или ниже, то рецепт может не сработать. Как же тогда поступить?
В таком случае нужно воспользоваться одним из перечисленных параметров ниже (в качестве примера использовалась та же переменная с алмазным мечом):

Dsword.onlyDamaged(); // Этот параметр принимает любой поврежденный алмазный меч (но только поврежденные)
Dsword.onlyDamageAtLeast(15); // Этот параметр принимает поврежденный алмазный меч с прочностью ниже 15
Dsword.onlyDamageAtMost(100); // Этот параметр принимает поврежденный алмазный меч с прочностью выше 100
Dsword.onlyDamageBetween(15, 100); // Этот параметр принимает поврежденный алмазный меч с прочностью не ниже 15 но не выше 100

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

Кстати, вам ничто не мешает объединять эти параметры в одной строчке, к примеру таким образом:

BrokenTagDsword.withDamage(100).withTag({display: {Name: "Epic Sword", Lore: ["Oh, it's...", "It's really power!"]}});

Рецепты с "бесконечными" ингридиентами

Давайте предположим, что мы хотим создавать больше ресурсов, с использованием дополнительного инструмента?
К примеру, увеличивать получение досок из дуба? В таком случае мы создадим рецепт подобного типа:

recipes.addShapeless(<minecraft:planks> * 6, [<minecraft:stone_axe>, <minecraft:log>]);

То есть просто положив блок дуба в сетку крафта, мы получали 4 доски, а теперь, комбинируя дуб и топор мы получаем целых шесть!
Но к сожалению топор каждый раз безследно исчезает.
Давайте это исправим:

recipes.addShapeless(<minecraft:planks> * 6, [<minecraft:stone_axe>.reuse(), <minecraft:log>]);

Теперь, когда мы будем забирать результат (доски) из окна крафта, то бревно будет пропадать, а топор оставаться. Отлично!
Однако это не совсем честно с точки зрения баланса, ведь машина-леспопилка тратит энергию при распиле бревна на 6 досок.
Давайте каждый такой рецепт будет отнимать у топора часть прочности:

recipes.addShapeless(<minecraft:planks> * 6, [<minecraft:stone_axe>.transformDamage(), <minecraft:log>]);

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

recipes.addShapeless(<minecraft:planks> * 6, [<minecraft:stone_axe>.transformDamage(10), <minecraft:log>]);

Теперь топор будет тратится значительно быстрее, при каждом использовании в крафте шести досок.

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

recipes.addShapeless(<minecraft:obsidian>, [<minecraft:water_bucket>, <minecraft:lava_bucket>]);

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

recipes.addShaped(<minecraft:obsidian>, [[
   <minecraft:water_bucket>.transformReplace(<minecraft:bucket>),
   <minecraft:lava_bucket>.transformReplace(<minecraft:bucket>),
]]); 

В результате, после того как вы заберете результат - блок обсидиана, у вас в окне крафта останутся два пустых ведра. Заполненные ведра как бы "трансформируются" в них.
Конечно же никто не мешает вам сделать более сбалансированный рецепт, к примеру, после такого крафта, ведра безнадежно портятся, и могут идти только на слитки. Причем они должны сразу возвращаться в инвентарь, не оставаясь в слотах верстака.
В таком случае идеальным будет следующий параметр:

recipes.addShaped(<minecraft:obsidian>, [[
   <minecraft:water_bucket>.giveBack(<minecraft:iron_ingot> * 2),
   <minecraft:lava_bucket>.giveBack(<minecraft:iron_ingot> * 2),
]]);

Отлично, теперь после получения обсидиана, слоты верстака очистятся, а в инвентарь нам попадет 4 слитка железа.

Кстати, довольно часто Minecraft способен определить какой предмет используется в крафте, и если взять изначальный рецепт крафта блока обсидиана, то ведра остались бы в любом случае:

recipes.addShapeless(<minecraft:obsidian>, [[
   <minecraft:water_bucket>,
   <minecraft:lava_bucket>
]]);

Но вдруг мы все же хотим чтобы ведра не оставались? Хотим сделать игру более сложной. Тут нам не поможет параметр .transformReplace(<>);, ведь он превращает что-то во что-то, тут нам поможет иной параметр:

recipes.addShapeless(<minecraft:obsidian>, [[
   <minecraft:water_bucket>.noReturn(),
   <minecraft:lava_bucket>.noReturn()
]]);

Вот теперь, при крафте обсидиана, ведра гарантированно исчезнут, и не вернутся ни пустые, ни полные.

Изменение дропа семян

Изменение лута в сундуках

Добавление в Ore Dictionary

Ссылки

Advertisement