(просто исправил ошибку про переплавку железа в алмаз, там было написано "железа в алмаза") |
(Recipes.getRecipeResult вместо Recipes.provideRecipe) |
||
(не показано 10 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
− | <div class="mw-parser-output"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> | + | <div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> |
Добавление рецептов крафта и переплавки - то, без чего не обойдется никакой мод. | Добавление рецептов крафта и переплавки - то, без чего не обойдется никакой мод. | ||
Строка 6: | Строка 6: | ||
=== Рецепты верстака === | === Рецепты верстака === | ||
− | Рецепты верстака бывают 2х типов: | + | Рецепты верстака бывают 2х типов: |
− | + | *форменные - предмет должен быть выложен на верстаке в определенной форме. Если меньше, чем 3х3, то он может быть выложен в любой области верстака для его выполнения. | |
+ | *бесформенные - требует лишь соблюдения присутсвия и кол-ва предметов в сетке крафта, но не требует порядка | ||
− | + | Для добавления форменных рецептов используется функция Recipes.addShaped({id: id, count: кол-во, data: data}, [форма рецепта], [ингридиенты], функция выполнения function(api, field, result){}, префикс) - в обычном рецепте последние 2 параметра можно и нужно опустить, о них будет рассказано позже. | |
− | + | *api - содержит объект апи содержащий следущие параметры: | |
+ | **contatiner, getClass, wait, isPrevented, notifyAll, decreaseFieldSlot, notify, prevent, fieldSlot, getFieldSlot, hashCode, equals, toString, class, prevented. | ||
+ | *field - массив идентификаторов слотов 0-8, содержащие: id, count, data, extra. для получения содержания слота используется field[slotID].parameter | ||
+ | *result - содержит сам предмет который возвращается в инвентарь при удачном крафте. Параметры result содержат: id, count, data, extra. | ||
− | + | | |
− | |||
− | + | Форма рецепта задается массивом строк, которые соответсвуют строкам в форме рецепта, где каждый символ означает предмет, а пробел - отсутсвие предмета. | |
− | + | Ингридиенты это массив, в котором данные идут в порядке ['символ1', id1, data1, 'символ2', id2, data2, ...], и так для всех символов, которые использовались в форме рецепта, кроме пробела. Если data предмета не важна (к примеру вы хотите, чтобы в рецепте использовались доски любого типа), то вместо нее напишите -1. | |
− | + | Кол-ва строк может быть меньше 3, если столько не нужно. Пример рецепта: | |
+ | <syntaxhighlight lang="javascript">Recipes.addShaped({id: 264, count: 1, data: 0}, /* Результат крафта */ | ||
+ | ["ax", "xa", "ax"], /* Форма рецепта */ | ||
+ | ['x', 265, 0, 'a', 266, 0]/* Ингридиенты */ | ||
+ | ); | ||
+ | /* добавит рецепт алмаза, который создается из 3 железных и 3 золотых слитков, где x - железо, a - золото */</syntaxhighlight> | ||
− | ], ['x', 265, 0, 'a', 266, 0]); | + | Плохой пример рецепта: |
+ | <syntaxhighlight lang="javascript">Recipes.addShaped({id: 264, count: 1, data: 0}, | ||
+ | ["ax ","xa ","ax "], | ||
+ | ['x', 265, 0, 'a', 266, 0] | ||
+ | ); | ||
+ | // Рецепт можно будет создать только, если выложить рецепт в левой части верстака.</syntaxhighlight> | ||
− | / | + | Тот же самый пример, но ингридиенты можно разложить в любом порядке |
+ | <syntaxhighlight lang="javascript">Recipes.addShapeless( | ||
+ | {id: 264, count: 1, data: 0}, | ||
+ | [{id: 265, data: 0}, {id: 265, data: 0}, {id: 265, data: 0}, | ||
+ | {id: 266, data: 0}, {id: 266, data: 0}, {id: 266, data: 0}] | ||
+ | );</syntaxhighlight> | ||
− | + | *Recipes.addShapeless({id: id, count: кол-во, data: data}, [{id: id1, data: data1}, {id: id2, data: data2}, ...], функция выполнения, префикс) - добавление бесформенных рецептов. | |
− | + | *Recipes.deleteRecipe({id: id, count: кол-во, data: data}) - удаляет все рецепты для данного предмета. | |
− | + | *Recipes.replaceWithShaped({id: id, count: кол-во, data: data}, форма рецепта, определение предметов, функция выполнения, префикс) - аналогична Recipes.addShaped, заменяет все остальные рецепты для этого предмета. | |
− | + | *Recipes.replaceWithShapeless({id: id, count: кол-во, data: data}, форма рецепта, определение предметов, функция выполнения, префикс) - аналогична Recipes.addShapeless, заменяет все остальные рецепты для этого предмета. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | *Recipes.deleteRecipe({id: id | ||
− | *Recipes.replaceWithShaped({id: id | ||
− | *Recipes.replaceWithShapeless({id: id | ||
− | |||
− | |||
− | |||
=== Функция крафта === | === Функция крафта === | ||
Строка 84: | Строка 68: | ||
| | ||
− | </ | + | |
+ | <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"> | ||
+ | <div class="mw-parser-output"><div class="mw-parser-output"> | ||
+ | === Получение рецептов верстака и печи === | ||
+ | |||
+ | Есть возможность получать рецепты верстака или печи. Для этого есть функции: | ||
+ | |||
+ | Для верстака: | ||
+ | |||
+ | *Recipes.getRecipeByField(контейнер, префикс, игнорировать префикс); //<u>крафт</u> по входным слотам (должны называтся от slot0 до slot8) | ||
+ | *Recipes.getRecipeResult(контейнер, префикс) //<u>результат</u> по входным слотам (должны называтся от slot0 до slot8) | ||
+ | *Recipes.getWorkbenchRecipesByIngredient(id, data); //<u>список крафтов</u> с инградиентом | ||
+ | *Recipes.getWorkbenchRecipesByResult(id, кол-во, data); //<u>список крафтов</u> с результатом | ||
+ | |||
+ | Для печи: | ||
+ | |||
+ | *Recipes.getFurnaceRecipesByResult(); //<u>список всех</u> рецептов печи (по задумке должен принимать id, data и префикс выходного предмета и возвращать только рецепты с ним, но в данный момент эта функция сломана и возвращает список всех рецептов независимо от аргументов) | ||
+ | *Recipes.getFurnaceRecipeResult(id, data, префикс); //принимает входной предмет и возвращает результат | ||
+ | |||
+ | Для того чтобы указать любое значение количиства или data можно использовать -1. | ||
+ | |||
+ | Работа с объектами рецептов: | ||
+ | <syntaxhighlight lang="JavaScript"> | ||
+ | var recipe_list=Recipes.getWorkbenchRecipesByResult(278, 1, 0); | ||
+ | |||
+ | //количество елементов в списке: recipe_list.size(); | ||
+ | |||
+ | //получение одного рецепта из списка: | ||
+ | var recipe=recipe_list.get(елемент); | ||
+ | //или (если первый не работает используйте второй) | ||
+ | var recipe=recipe_list.toArray()[елемент]; | ||
+ | |||
+ | //получение результата | ||
+ | recipe.result | ||
+ | //получение входного слота печи | ||
+ | recipe.inId recipe.inData | ||
+ | //получение входных слотов верстака | ||
+ | var slots=recipe.getSortedEntries(); | ||
+ | slots[номер слота от 0 до 8] | ||
+ | |||
+ | //получение префикса: recipe.prefix | ||
+ | </syntaxhighlight> |
Добавление рецептов крафта и переплавки - то, без чего не обойдется никакой мод.
Рецепты верстака бывают 2х типов:
Для добавления форменных рецептов используется функция Recipes.addShaped({id: id, count: кол-во, data: data}, [форма рецепта], [ингридиенты], функция выполнения function(api, field, result){}, префикс) - в обычном рецепте последние 2 параметра можно и нужно опустить, о них будет рассказано позже.
Форма рецепта задается массивом строк, которые соответсвуют строкам в форме рецепта, где каждый символ означает предмет, а пробел - отсутсвие предмета.
Ингридиенты это массив, в котором данные идут в порядке ['символ1', id1, data1, 'символ2', id2, data2, ...], и так для всех символов, которые использовались в форме рецепта, кроме пробела. Если data предмета не важна (к примеру вы хотите, чтобы в рецепте использовались доски любого типа), то вместо нее напишите -1.
Кол-ва строк может быть меньше 3, если столько не нужно. Пример рецепта:
Recipes.addShaped({id: 264, count: 1, data: 0}, /* Результат крафта */
["ax", "xa", "ax"], /* Форма рецепта */
['x', 265, 0, 'a', 266, 0]/* Ингридиенты */
);
/* добавит рецепт алмаза, который создается из 3 железных и 3 золотых слитков, где x - железо, a - золото */
Плохой пример рецепта:
Recipes.addShaped({id: 264, count: 1, data: 0},
["ax ","xa ","ax "],
['x', 265, 0, 'a', 266, 0]
);
// Рецепт можно будет создать только, если выложить рецепт в левой части верстака.
Тот же самый пример, но ингридиенты можно разложить в любом порядке
Recipes.addShapeless(
{id: 264, count: 1, data: 0},
[{id: 265, data: 0}, {id: 265, data: 0}, {id: 265, data: 0},
{id: 266, data: 0}, {id: 266, data: 0}, {id: 266, data: 0}]
);
К любому рецепту крафта может быть добавлена функция, вызывающуюся после совершения крафта. Пример раскрафта алмазной мотыги на составляющие:
Recipes.addShapeless({id: 264, count: 1, data: 0}, [{id: 293, data: 0}], function(api, field, result){
Player.addItemToInventory(ItemID.280, 2);
});
Для добавления рецепта печи используется метод Recipes.addFurnace(id сырья, id результата, data результата, префикс) - для обычного рецепта параметры префикс не нужен.
Пример:
Recipes.addFurnace(265, 264, 0); // переплавка железа в алмаз
Так же этот метод имеет еще одну вариацию Recipes.addFurnace(id сырья, data сырья, id результата, data результата, префикс)
Recipes.addFurnace(351, 4, 280, 0); //Переплавка лазурита в палку
Есть возможность получать рецепты верстака или печи. Для этого есть функции:
Для верстака:
Для печи:
Для того чтобы указать любое значение количиства или data можно использовать -1.
Работа с объектами рецептов:
var recipe_list=Recipes.getWorkbenchRecipesByResult(278, 1, 0);
//количество елементов в списке: recipe_list.size();
//получение одного рецепта из списка:
var recipe=recipe_list.get(елемент);
//или (если первый не работает используйте второй)
var recipe=recipe_list.toArray()[елемент];
//получение результата
recipe.result
//получение входного слота печи
recipe.inId recipe.inData
//получение входных слотов верстака
var slots=recipe.getSortedEntries();
slots[номер слота от 0 до 8]
//получение префикса: recipe.prefix