Основные скрипты
Описание предметам
// Пример вставки текста и открытии его при нажатии LShift и разными цветовыми палитрами в тексте
<minecraft:stick>.addTooltip("Зажмите " + format.aqua("LShift") + format.gray(" для информации по приватам"));
<minecraft:stick>.addShiftTooltip(format.yellow("Помощь по приватам:"));
<minecraft:stick>.addShiftTooltip(format.aqua("Для начала выделите область по диагонали"));
<minecraft:stick>.addShiftTooltip(format.green("Левый клик мыши") + format.gray(" -") + format.gray(" первая точка привата"));
Пример обычного текста
<minecraft:apple>.addTooltip(format.green("Текст"));Форменные рецепты
Форменный рецепт – это рецепт, для работы которого нужно выложить вещи точно так, как указано в рецепте.
// recipes.addShaped(<minecraft:planks> * 4, [[<minecraft:stone_axe>, null, null], [<minecraft:log>, null, null]]);
Пример форменного рецепта по добавлению крафта 4-х досок из каменного топора и бревна, при этом крафтить надо будет обязательно в верстаке
и обязательно нужно будет ставить каменный топор в левый верхний угол, а бревно дуба ниже, в центр левого края.
Топор после крафта полностью потратится.
Использование метаданных
// recipes.addShaped(<minecraft:stick> * 4, [[<minecraft:planks:*>, null], [null, <minecraft:planks:*>]]);
Это рецепт на создание 4-х палок из 2-х досок по диагонали (слева направо), при этом доски могут быть любыми, хоть дубовыми, хоть еловыми.
recipes.removeShaped(<minecraft:stick>);
Для удаления всех форменных рецептов этого предмета
recipes.remove(<minecraft:stick>);
Для удаления всех рецептов этого предмета
recipes.removeShaped(<minecraft:stick>, [[<*>], [<*>]]);
Для удаления форменного рецепта палки, знак * означает что там может быть любой предмет и не важно какой именно.Бесформенные рецепты
Бесформенный рецепт – это рецепт, для работы которого нужно лишь выложить нужные предметы в сетку крафта, а как именно выкладывать сами предметы – не важно.
Записывается он немного по-другому: В круглых скобках как обычно в начале пишется строчный ID, и в квадратных скобках нужно просто через запятую указать строчные ID предметов, которые будут использоваться в крафте, не надо добавлять ещё одну пару квадратных скобок.
// recipes.addShapeless(<minecraft:sand>, [<ore:blockGlass>]);
Это рецепт на создание песка из любого стекла, который принадлежит к ore:blockGlass по словарю руды.
// recipes.addShapeless(<minecraft:stick> * 4, [<ore:plankWood>, <ore:plankWood>]);
Бесформенный рецепт на создание 4-х палок из 2-х любых досок, осторожней с бесформенными крафтами, т.к. не забудьте что из 2-х досок
также могут быть созданы деревянные нажимные плиты, при автокрафте этих нажимных плит в такой ситуации могут быть проблемы.
recipes.removeShapeless(<minecraft:stick>);
Для удаления всех бесформенных рецептов этого предметаВозврат предметов после крафта
// Допустим, мне нужен рецепт, через который можно сделать 2 дубовые деревянные плиты через использование железного топора топора,
но при этом мне не нужно чтобы топор пропадал после крафта:
recipes.addShapeless(<minecraft:wooden_slab:0> * 2, [<minecraft:iron_axe>.reuse(), <minecraft:planks:0>]);
// А для того чтобы топор получал повреждения при использовании в крафте, подойдёт такой метод:
recipes.addShapeless(<minecraft:wooden_slab:0> * 2, [<minecraft:iron_axe>.anyDamage().transformDamage(), <minecraft:planks:0>]);
По умолчанию он будет получать по 1-у повреждению. Если нужно, чтобы он получал по
конкретному кол-ву повреждений, то в () transformDamage'а напишите нужное вам число.
.anyDamage() в этом примере используется, для того чтобы можно было в крафте использовать также повреждённый железный топор.
// Пример рецепта, но теперь с ведром и немного другими параметрами, посмотрим как оно будет себя вести с разными условиями.
Например, я желаю создавать замшелый кирпич из каменного кирпича и ведра воды, при использовании строки ниже:
recipes.addShapeless(<minecraft:stonebrick:1>, [<minecraft:stonebrick:0>, <minecraft:water_bucket>]);
Пустое ведро от ведра воды будет возвращаться в инвентарь после крафта.
// А если нужно, чтобы пустое ведро появлялось на месте ведра с водой, после крафта, то используется такая часть:
<строчный ID ведра с жидкостью>.transformReplace(<minecraft:bucket>)]);
Вот полный пример этой части скрипта:
recipes.addShapeless(<minecraft:stonebrick:1>, [<minecraft:stonebrick:0>, <minecraft:water_bucket>.transformReplace(<minecraft:bucket>)]);
В этом примере создаётся 1 замшелый каменный кирпич из 1 каменного кирпича и одного ведра воды.
И, кстати, если указать вместо ведра другой предмет, то после крафта на место ведра воды будет
появляться тот предмет, который вы указали, даже если он не будет пустым ведром.
// Если вы не хотите, чтобы пустое ведро вообще возвращалось, используйте это:
recipes.addShapeless(<minecraft:stonebrick:1>, [<minecraft:stonebrick:0>, <minecraft:water_bucket>.noReturn()]);
// А если вам нужно, чтобы после крафта в инвентарь складывалось, а не оставалось как при использовании .transformReplace,
не ведро, а другой предмет выдавался, то используется такая часть скрипта:
recipes.addShapeless(<minecraft:stonebrick:1>, [<minecraft:stonebrick:0>, <minecraft:water_bucket>.giveBack(<minecraft:iron_ingot> * 3)]);
В этом примере, после создания 1-го замшелого каменного кирпича из 1-го каменного кирпича и
1-го ведра воды, в инвентарь складываются 3 железных слитка, а ведро воды пропадает.
Если вы используя .giveBack не желаете чтобы возвращался другой предмет, то просто оставляете скобки пустыми, вот так: .giveBack()Добавление починки инструмента через крафт
Для такого действия есть специальная функция function(), как с ней работать сейчас разберём на примерах.
// Пример:
recipes.addShapeless(<minecraft:wooden_pickaxe>, [<minecraft:wooden_pickaxe>.anyDamage().marked("pickaxe"), <minecraft:planks:*>], function(output, inputs, crafting) {
return inputs.pickaxe.withDamage(max(0, inputs.pickaxe.damage - 25));
});
Если вам так удобнее будет, можете записывать скрипт с сносками как показано выше.
Главное аккуратней с скобками, их там довольно много и из-за этого легче запутаться.
Пустая форма выглядит так:
recipes.addShapeless(<строчный ID>, [<строчный ID>.anyDamage().marked("N"), <строчный ID>], function(output, inputs, crafting) {return inputs.N.withDamage(max(0, inputs.N.damage - 25));});
В первом строчном ID записывается предмет, который в результате крафта получится, второй строчный ID отвечает за то, что надо положить для крафта,
поскольку этот раздел о починке инструмента, то там записываете инструмент, чтобы можно было использовать поломанный инструмент,
была добавлена часть .anyDamage(), для того чтобы рецепт понимал, что именно мы хотим починить из указанных предметов,
используется для пометки этого предмета .marked("N"), это имя будет чисто внутри скрипта в рецепте и в игре не будет никак отображаться.
Далее записываются функции, output в начале, потому что первый строчный ID – это то что будет по итогу получено,
следующее inputs – это то, на что будет применяться функция, которую укажем чуть позже и crafting используется, потому что крафтим мы через верстак.
Далее используется команда возврата return, т.к. мы обращаемся к функции, что была указано до этого в скобках, в нашем случае – это inputs,
после него через . дописывается имя, которым мы отметили предмет, на который будет применена функция, а дальше через . указывается собственно сама функция,
в нашем случае – это withDamage(max(0, inputs.N.damage - 25), то есть мы говорим рецепту, что речь будет об повреждении на инструменте (withDamage),
max 0 записывается чтобы не было ошибки (для чего именно max 0 записывается я ещё не знаю), прими отмеченный предмет и
подлатай причинённый урон кирки на 25 единиц прочности, мол damage = урон, а если damage - число, это уже отнять столько-то полученного урона,
по факту – это значит восстановить предмет на столько-то единиц.Last updated