Рецепты — различия между версиями

(Recipes.getRecipeResult вместо Recipes.provideRecipe)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 70: Строка 70:
  
 
<div class="mw-parser-output">
 
<div class="mw-parser-output">
 +
<div class="mw-parser-output">
 +
<div class="mw-parser-output"><div class="mw-parser-output">
 
=== Получение рецептов верстака и печи ===
 
=== Получение рецептов верстака и печи ===
  
Строка 77: Строка 79:
  
 
*Recipes.getRecipeByField(контейнер, префикс, игнорировать префикс); //<u>крафт</u> по входным слотам (должны называтся от slot0 до slot8)  
 
*Recipes.getRecipeByField(контейнер, префикс, игнорировать префикс); //<u>крафт</u> по входным слотам (должны называтся от slot0 до slot8)  
*Recipes.getWorkbenchRecipesByIngredient(id, data);&nbsp; //<u>список крафтов</u> с инградиентом  
+
*Recipes.getRecipeResult(контейнер, префикс) //<u>результат</u> по входным слотам (должны называтся от slot0 до slot8)
 +
*Recipes.getWorkbenchRecipesByIngredient(id, data); //<u>список крафтов</u> с инградиентом  
 
*Recipes.getWorkbenchRecipesByResult(id, кол-во, data); //<u>список крафтов</u> с результатом  
 
*Recipes.getWorkbenchRecipesByResult(id, кол-во, data); //<u>список крафтов</u> с результатом  
  
 
Для печи:
 
Для печи:
  
*Recipes.getFurnaceRecipesByResult();&nbsp; //<u>список всех</u> рецептов печи  
+
*Recipes.getFurnaceRecipesByResult(); //<u>список всех</u> рецептов печи (по задумке должен принимать id, data и префикс выходного предмета и возвращать только рецепты с ним, но в данный момент эта функция сломана и возвращает список всех рецептов независимо от аргументов)
*Recipes.getFurnaceRecipeResult(id, префикс);&nbsp; //возвращает&nbsp;объект предмета
+
*Recipes.getFurnaceRecipeResult(id, data, префикс); //принимает входной предмет и возвращает результат
  
 
Для того чтобы указать любое значение количиства или data можно использовать -1.
 
Для того чтобы указать любое значение количиства или data можно использовать -1.
  
 
Работа с объектами рецептов:
 
Работа с объектами рецептов:
<pre>var recipe_list=Recipes.getWorkbenchRecipesByResult(278, 1, 0);
+
<syntaxhighlight lang="JavaScript">
 +
var recipe_list=Recipes.getWorkbenchRecipesByResult(278, 1, 0);
  
 
//количество елементов в списке: recipe_list.size();
 
//количество елементов в списке: recipe_list.size();
Строка 106: Строка 110:
  
 
//получение префикса: recipe.prefix
 
//получение префикса: recipe.prefix
</pre>
+
</syntaxhighlight>
 
 
&nbsp; </div> </div> </div> </div> </div> </div>
 
</div>
 

Текущая версия на 22:33, 2 мая 2020

Добавление рецептов крафта и переплавки - то, без чего не обойдется никакой мод.

 

Рецепты верстака[править]

Рецепты верстака бывают 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, если столько не нужно.  Пример рецепта:

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: 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.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); //Переплавка лазурита в палку

 

Получение рецептов верстака и печи[править]

Есть возможность получать рецепты верстака или печи. Для этого есть функции:

Для верстака:

  • Recipes.getRecipeByField(контейнер, префикс, игнорировать префикс); //крафт по входным слотам (должны называтся от slot0 до slot8)
  • Recipes.getRecipeResult(контейнер, префикс) //результат по входным слотам (должны называтся от slot0 до slot8)
  • Recipes.getWorkbenchRecipesByIngredient(id, data); //список крафтов с инградиентом
  • Recipes.getWorkbenchRecipesByResult(id, кол-во, data); //список крафтов с результатом

Для печи:

  • Recipes.getFurnaceRecipesByResult(); //список всех рецептов печи (по задумке должен принимать id, data и префикс выходного предмета и возвращать только рецепты с ним, но в данный момент эта функция сломана и возвращает список всех рецептов независимо от аргументов)
  • Recipes.getFurnaceRecipeResult(id, data, префикс); //принимает входной предмет и возвращает результат

Для того чтобы указать любое значение количиства или 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