Jump to content

[MineTweaker3] Учебное пособие: Рудный словарь


BazZziliuS
 Share

Recommended Posts

Рудный словарь
Теперь, когда мы промочили ноги (вы ведь следовали предыдущим инструкциям, верно?), давайте попробуем этот рецепт: (требуется IC2)

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 или Tinkers Construct! Предметы разные!

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

Эти статьи из словаря руды можно легко использовать в рецептах:

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>);

Теперь, сделав это, вы свяжете железо так же, как в. Затем Iron будет по существу переопределен tin, и любые изменения, внесенные в tin, автоматически отразятся в iron.

 

Добавление новых статей словаря руды
Когда вы используете статью из словаря ore, не имеет значения, существует она уже или нет. Если вы используете тот, который не существует, он просто вернет пустой. Таким образом, все, что вам нужно, это сослаться на словарь руды, который вы хотите создать, как если бы он уже существовал, и добавить в него элементы:

val myEntry = <ore:myOwnEntry>;
myEntry.add(<minecraft:coal>);
myEntry.add(<minecraft:iron_ingot>);

 

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

<ore:dustSalt>.addAll(<ore:foodSalt>);
<ore:foodSalt>.mirror(<ore:dustSalt>); 

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

 

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

 

Перебор значений в записи oredict
Иногда возникает необходимость выполнить определенное действие для каждого элемента в словаре руды. Это возможно с помощью простого цикла for:

for item in <ore:ingotCopper>.items {
    doSomething();
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...