Урок по программированию в MineTweaker 3
ссылка на мод
УРОК №3
СЛОВАРЬ РУД (ORE DICTIONARY)
Словарь руд
Теперь, когда мы получили достаточно знаний (вы ведь изучили предыдущие уроки, верно?), Давайте попробуем вот такой рецепт: (требуется установленный мод
Industrial Craft 2)
val copper = <IC2:itemIngotCopper>;
val tin = <IC2:itemIngotTin>;
val iron = <minecraft:iron_ingot>;
// Актуальная на сегодняшний день версия IC2 использует вместо бронзы медь. Правда, это не имеет значения, так как данный пример лишь демонстрация скрипта
recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);
Если Вы используете этот рецепт, то проблем не будет и все будет работать ... но если Вы в данном рецепте будете использовать медные слитки, скажем, из мода
Thermal Expansion или
Tinker Construct, то ничего не получится т.к. медь, железо и олово из разных модов отличается названием! Обратите внимание на приставку IC2 в <IC2:itemIngotCopper>. т.е. данный слиток меди (copper) принадлежит к моду Industrial Craft 2 и никакой другой слиток меди из других модов использовать в рецепте нельзя!
К счастью, данная проблема существует довольно долго! Решена она путем использования словаря руд. По сути, словарь руд - это группа предметов с общим смыслом. Таким образом, моды могут добавлять свои собственные элементы к словарю руд. Например, в словаре руд, медная руда имеет название <ore:ingotCopper>. Обратите внимание на приставку ore!
Словарь руд легко использовать в рецептах:
val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;
// Актуальная на сегодняшний день версия IC2 использует вместо бронзы медь. Правда, это не имеет значения, так как данный пример лишь демонстрация скрипта
recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);
Теперь, попробуйте установить несколько модов, которые добавляют медную руду и вы увидите, что все слитки будут совместимыми.
Словарь руд используется не только для руд и слитков. Многие ингредиенты имеют свою собственную запись в словарь руд, что позволяет объединить несколько ингредиентов из разных модов (общего смысла) для конкретного рецепта.
Изменение словаря руд
Вас не устраивает какие изменения вносят моды в словарь руд? Может какой-то мод забыл добавить элемент в словарь руд? Или же Вы считаете, что какой-то компонент из словаря руд делает рецепт слишком легким? MineTweaker позволяет изменять содержимое словаря руд.
После того, как Вы извлекли запись руды из словаря руд, Вы можете изменить словарь добавив или удалив руду. Давайте, немного изменим наш скрипт:
val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;
iron.add(<minecraft:coal>);
// Актуальная на сегодняшний день версия IC2 использует вместо бронзы медь. Правда, это не имеет значения, так как данный пример лишь демонстрация скрипта
recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);
Если Вы перезагрузите скрипт и проверите рецепт, то заметите, что железо может быть замещено углем.
Кроме того, Вы можете из словаря руд удалить железо:
val copper = <ore:ingotCopper>;
val tin = <ore:ingotTin>;
val iron = <ore:ingotIron>;
iron.add(<minecraft:coal>);
iron.remove(<minecraft:iron_ingot>);
// Актуальная на сегодняшний день версия IC2 использует вместо бронзы медь. Правда, это не имеет значения, так как данный пример лишь демонстрация скрипта
recipes.addShaped(<IC2:itemPartAlloy>, [[iron, iron, iron], [copper, copper, copper], [tin, tin, tin]]);
Конечно, в таком виде, как сейчас, словарь руд не очень полезен, но зато это отлично иллюстрирует, как словарь руд можно легко изменять.
Если Вам попадется мод в котором руда должна приравниваться к другой руде, то это можно сделать с помощью "зеркала" в словаре руд:
<ore:ingotIron>.mirror(<ore:ingotTin>);
С помощью этой строки мы приравняли железо к олову. По сути, железо стало оловом и любые изменения с оловом будет автоматически отражаться на железе.