All Activity
- Yesterday
-
Kirilloooo joined the community
- Last week
-
Hyd_ra joined the community
-
permmihail joined the community
-
The_Rex joined the community
-
useman joined the community
- Earlier
-
aussieTnseshay joined the community
-
BlackBlizzard joined the community
-
xietaku joined the community
-
Dororo joined the community
-
Nekz- joined the community
-
Добрый день. Ваш аккаунт был взломан. Нарушитель найден и наказан. Рекомендую сменить пароль на аккаунте.
-
Сколько играю - никогда такого не было.....
-
Приват заново создал. но на нем ничего не осталось((((((((((((((((((((((((((((
-
Несколько дней назад - не мог зайти в игру - думал залогало. сегодня зашел - привата нет, все разграбили. как так - приват был?????????? Модеры - проверьте - кто мой приват убрал??????
-
Скриншоты НЕ ДОЛЖНЫ БЫТЬ обрезаны, отредактированы и подвержены любому изменению. Фотографии с телефона также не принимаются.
-
Время случившегося (по МСК, примерное или точное). 13 20 Ник модератора, который нарушил правила или не выполнил действие. TheFoxMan Что было нарушено? (пункт правил или небольшой текст). Не замутил игрока за 3.5, но я получил наказание, блат своего друга просто и все! Доказательства (ссылка на нарушение или скриншот/видео) https://imgur.com/a/2r987BI
-
[MagicRPG][Гайд]Advent of Ascension(Основные моменты)
greenTEa__ posted a topic in Гайды по серверам
Advent of Ascension - добавляет множество измерений, огромное количество мобов, блоков, брони, оружия, инструментов, различные полезные предметы с своими эффектами и систему навыков. Для добычи всех руд из АоА нужна алмазная кирка или лучше, по уровню добычи. Полезная информация при прокачки навыков с помощью блока-станции (например, плиты питомцев и кузня создания, ниже просто пример): Если расставить например 3 стака эссенций, переключиться на последний стак и зажать ПКМ, то тратится будет сначала первый стак и так до последнего. Это нужно чтобы не переключаться вручную между ними, но это работает только если используемые предметы будут 1-го вида (например, расплавленная эссенция, это подразумевается под видом). ================================================================================================================================== Блоки-станции (которые крафтятся/не крафтятся и нужны для создания предметов) ================================================================================================================================== Таблички (которые за использование требуют какое-то количество силы духа) ================================================================================================================================== Боссы ================================================================================================================================== -
Хорошо, без лишних слов - у системы квестов очень странное форматирование текста. Он часто вылезает за пределы видимой части окна, из-за чего часто можно просто не понять о чём конкретно идёт речь. При чём, это сохраняется и на разномасштабных настройках интерфейса самого майна, и при изменении разрешения окна. Учитывая, что я не знаю тонкости работы этой системы, предложение такое - поправить расположение текста или добавить возможность прокручивать текст ползунком или ещё как-то/чем-то. Честно, лень проверять наличие той-же проблемы на других серверах проекта, так что предполагаю что она существует везде, и потому размещаю тему здесь. Ниже приведу скрины-примеры неудачных описаний с сервера UltimateSky:
-
Используй VPN для входа
-
Зраствуйте, что вам помогло решить проблему? У меня также.
-
OneBlock — Тут вы сможете создавать горы ресурсов буквально из ничего, имея всего лишь один блок, обладающий уникальными свойствами - спавнить случайных мобов или лут! Ваша задача ломать блок и получать из него различные ресурсы. Чем больше раз сломан блок, тем выше уровень острова и лучше блоки, которые выпадают из генератора. После накопления ресурсов, мы сможем обустроить некоторую площадь вокруг: построить дом, создать ферму и огород, а также создать инструменты и оружие. Но не забывайте, что при добычи блока могут выпасть враждебные мобы! Вы должны с умом и ответственностью подойти к тому, как именно распорядиться ограниченными в количестве ресурсами, отнеситесь к этому делу более творчески! Развиваться можно как в одиночку, так и в компании друзей на общем острове. Всё это ждёт вас! Общая Информация: Дата последнего вайпа - 01.01.1970 Размер региона острова: 12х12 чанков , или 192x192 блоков Версия - 1.7.10 Полезные варпы: /warp Shop /warp Boss /warp Safari Список модов: Скоро... Список кит наборов: Скоро...
-
Хей-хей, ребят! Вот и подошел к концу долгожданный ЗИМНИЙ ВАЙП. Все сервера запущены и готовы к игре Настало время покорять просторы мира CenturyMine. Встречайте огромное зимнее обновление, которое затронуло все сервера: Добавлен внутриигровой обмен игроков, командой /trade На технических серверах, был добавлен CenturyAE который добавляет: На технических серверах, был добавлен CenturyTechnical который добавляет: На магических серверах был добавлен CenturyMagical который добавляет: Обновление моделей в моде TeslaCraft!
-
LightInTheDark started following Darknes5
-
LightInTheDark changed their profile photo
-
Предварительного времени запуска серверов нет. Следите за новостями!
-
Сделайте уже вайп !!! Ладно бы отпуск у состава, но вы хоть примерные сроки и даты бы дали, а так - считай бросили игроков в неведении.
-
Начиная с MineTweaker 3.0.8, можно изменять строки локализации. Существует два варианта функции - один, который задает перевод независимо от текущего языка, и другой, который переопределяет перевод, но только тогда, когда данный язык соответствует текущему языку: // Установите перевод, но только в том случае, если язык en_US game.setLocalization("en_US", "nei.inventory.prev", "Past"); //KEY, TEXT - Вы захотите использовать этот вариант большую часть времени, он переопределяет независимо от языка game.setLocalization("nei.inventory.next", "Future"); Чтобы найти локализации, проверьте файлы локализации в активах Minecraft или моды, которые вы хотите изменить.
-
Скриптовый движок MineTweaker (ZenScript) все еще находится в стадии интенсивной разработки. Структуры управления в настоящее время реализованы лишь частично, но уже можно использовать циклические структуры, чтобы помочь вам в разработке. Когда мы используем циклические структуры, нам обычно приходится сначала сохранять некоторые переменные. При хранении предметов или ингредиентов в переменных вам никогда не приходилось беспокоиться о типах предметов. Аналогично, когда вы используете массивы или словари в рецептах или значениях тегов, вы могли бы просто указать правильный синтаксис, и все заработало. Однако MineTweaker является *строго типизированным*. Пока он может определять тип из вашего выражения, вам не нужно предоставлять какую-либо информацию о типизации, но когда вы объявляете такую вещь как массив, это больше не будет работать. Это потерпело бы неудачу: var myItems = [<minecraft:stick>, <minecraft:stone>]; Проблема в том, что MineTweaker не знает ваш тип массива. Это было сделано во всех примерах, приведенных ранее, поскольку он мог вывести тип массива из функции, которую вы вызывали, но когда вы присваиваете его переменной, он не может этого сделать, поскольку он еще не знает ваш тип. Чтобы исправить это, вам нужно привести массив к определенному типу, как таковому: import minetweaker.item.IItemStack; var myItems = [<minecraft:stick>, <minecraft:stone>] as IItemStack[]; IItemStack - это тип, который вы получаете, когда разрешаете переменную элемента, такую как <minecraft:stick>. IItemStack обозначает конкретный объект и может использоваться либо как ингредиент для крафта, либо как результат крафта, как вы, скорее всего, уже сделали. Его друзья - это IIngredient, который является более общим, чем элемент. Например, словарные статьи о руде - это ингредиенты. Они не могут быть использованы в качестве выходных данных, но их можно использовать в качестве входных данных для создания. Кроме того, если вы добавите преобразования или условия в IItemStack, он станет IIngredient: import minetweaker.item.IIngredient; var myIngredients = [<ore:plankWood>, <minecraft:stick>.onlyWithTag({display:{Name: "Something"}})] as IIngredient[]; var myIngredients2 = [<minecraft:stick>, <ore:plankWood>] as IIngredient[]; // will work since an IItemStack can be casted to an IIngredient Когда вы определяете массивы элементов, вы можете использовать операторы цикла для них, чтобы сделать ваши скрипты короче. Например, предположим, мы хотим, чтобы стандартные рецепты "бревно в древесину" имели низкий выход, но улучшали его при обработке топорами, и чтобы тип топора определял количество досок, которые у нас есть: import minetweaker.item.IItemStack; var myLogs = [<minecraft:log:0>, <minecraft:log:1>, <minecraft:log:2>, <minecraft:log:3>, <minecraft:log:4>, <minecraft:log:5>] as IItemStack[]; var myPlanks = [<minecraft:planks:0>, <minecraft:planks:1>, <minecraft:planks:2>, <minecraft:planks:3>, <minecraft:planks:4>, <minecraft:planks:5>] as IItemStack[]; var stoneAxe = <minecraft:stone_axe>.anyDamage().transformDamage(); var ironAxe = <minecraft:iron_axe>.anyDamage().transformDamage(); var goldenAxe = <minecraft:golden_axe>.anyDamage().transformDamage(); var diamondAxe = <minecraft:diamond_axe>.anyDamage().transformDamage(); for i, log in myLogs { var plank = myPlanks[i]; recipes.removeShapeless(plank, [log]); recipes.addShapeless(plank * 2, [log]); recipes.addShapeless(plank * 3, [log, stoneAxe]); recipes.addShapeless(plank * 4, [log, ironAxe]); recipes.addShapeless(plank * 5, [log, goldenAxe]); recipes.addShapeless(plank * 6, [log, diamondAxe]); } Теперь вы можете поместить все ваши доски, добавленные модом, в массив, а также их журналы, и пусть цикл for сделает всю тяжелую работу за вас! Иногда может возникнуть необходимость назначить теги NBT внутри цикла for. Вы можете определить значение NBT в переменной вне цикла, но только при приведении его к IData. Данные - это тип данных для тега NBT. Немного расширяем наш предыдущий пример: import minetweaker.data.IData; import minetweaker.item.IItemStack; var myData = {display: {Name: "Axed plank"}} as IData; var myLogs = [<minecraft:log:0>, <minecraft:log:1>, <minecraft:log:2>, <minecraft:log:3>, <minecraft:log:4>, <minecraft:log:5>] as IItemStack[]; var myPlanks = [<minecraft:planks:0>, <minecraft:planks:1>, <minecraft:planks:2>, <minecraft:planks:3>, <minecraft:planks:4>,<minecraft:planks:5>] as IItemStack[]; var stoneAxe = <minecraft:stone_axe>.anyDamage().transformDamage(); var ironAxe = <minecraft:iron_axe>.anyDamage().transformDamage(); var goldenAxe = <minecraft:golden_axe>.anyDamage().transformDamage(); var diamondAxe = <minecraft:diamond_axe>.anyDamage().transformDamage(); for i, log in myLogs { var plank = myPlanks[i].withTag(myData); recipes.removeShapeless(plank, [log]); recipes.addShapeless(plank * 2, [log]); recipes.addShapeless(plank * 3, [log, stoneAxe]); recipes.addShapeless(plank * 4, [log, ironAxe]); recipes.addShapeless(plank * 5, [log, goldenAxe]); recipes.addShapeless(plank * 6, [log, diamondAxe]); }
-
Добыча из сундука Начиная с версии 3.0.8, можно изменять любой вид добычи в подземельях. Добычу можно обменять на сундуки с подземельями, шахтные сундуки или любые другие ванильные сундуки или с модами.Эта линия сделала бы появление бриллиантов очень вероятным: vanilla.loot.addChestLoot("dungeonChest", <minecraft:diamond>.weight(100)); // Порождает 1-5 палочек с вероятностью 100 vanilla.loot.addChestLoot("dungeonChest", <minecraft:stick>.weight(100), 1, 5); Также возможно удалить добычу из сундука: vanilla.loot.removeChestLoot("dungeonChest", <minecraft:enchanted_book>); Работают как элементы, так и отдельные словарные статьи, а также шаблон подстановочных знаков для удаления всего (<*>). Используйте /mt loot, чтобы вывести список сундуков и их содержимого. Семена Теперь вы также можете изменять семена, которые выпадают, когда вы ломаете высокую траву: vanilla.seeds.addSeed(<minecraft:planks>.weight(100)); vanilla.seeds.removeSeed(<Natura:barley.seed:*>); Эта функциональность существовала в ModTweaker раньше, а теперь была интегрирована в MineTweaker. Используйте /mt seeds, чтобы увидеть, что уже зарегистрировано.
-
Начиная с MineTweaker 3.0.8, теперь вы можете добавлять всплывающие подсказки к элементам. Добавление всплывающих подсказок может быть сделано непосредственно на любом виде ингредиента: <ore:plankWood>.addTooltip("These are wood planks"); <minecraft:stick>.addTooltip("These are sticks"); Доступны два вида всплывающих подсказок: обычные всплывающие подсказки и всплывающие подсказки, которые появляются только при нажатии клавиши shift.: <minecraft:stick>.addShiftTooltip("Only appears with shift") Разметка Всплывающие подсказки можно раскрашивать и оформлять с помощью функций форматирования: <minecraft:stick>.addTooltip(format.green("This is green text")); Доступны следующие функции форматирования: format.black format.darkBlue format.darkGreen format.darkAqua format.darkRed format.darkPurple format.gold format.gray format.darkGray format.blue format.green format.aqua format.red format.lightPurple format.yellow format.white format.obfuscated format.bold format.strikethrough format.underline format.italic Строки (и форматированные строки) могут быть легко объединены и вложены: <minecraft:stick>.addTooltip(format.green(format.italic("This is a stick") + " with " + format.strikethrough("text")) + " in multiple styles"); Будьте осторожны, чтобы правильно подобрать скобки!
-
Не устраивает название товара? Хотите исправить опечатку, допущенную автором мода? Пропал какой-то перевод? Хотя пакет ресурсов может исправить это, использование MineTweaker вместо этого может оказаться менее громоздким: print(<minecraft:chest>.displayName); // выводит исходное имя <minecraft:chest>.displayName = "Storage Box"; Это все, что для этого нужно! Обратите внимание, что существуют некоторые элементы мода со сломанными внутренними именами. Их имена не могут быть изменены с помощью этого метода. Они также не могут быть изменены с помощью файлов переводов, и поэтому эти элементы модов следует считать прослушиваемыми. Если установлен NEI, вы все равно можете использовать функцию NEI.overrideName, которая изменит имя в большинстве мест. В отличие от большинства типов скриптов, для переименования требуется перезапуск клиента, а не просто перезагрузка скрипта.
-
До сих пор мы узнали о том, как добавлять или удалять простые рецепты. Но что, если входные и выходные данные также включают значения повреждений или метки NBT? Метка NBT в выводе В качестве выходных данных можно определить как повреждение, так и метку NBT. Давайте возьмем кирку в качестве нашей игрушки для этого урока: val stick = <minecraft:stick>; val pick = <minecraft:stone_pickaxe>; val damagedPick = pick.withDamage(10); val stickedPick = pick.withTag({display: {Name: "Палочки выбирают", Lore: ["Этот выбор", "Был приклеен"]}}); recipes.addShaped(damagedPick, [[pick, stick]]); recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]); Приготовив кирку из 1 или 3 палочек, как в рецепте, вы получите предмет с соответствующим уроном и названием / знаниями соответственно. Входные условия Вы также можете потребовать, чтобы входные данные содержали определенные теги NBT. Допустим, вы готовите рецепт, для приготовления которого требуется наш маринад. Давайте изменим наш файл: val stick = <minecraft:stick>; val pick = <minecraft:stone_pickaxe>; val damagedPick = pick.withDamage(10); val stickedPick = pick.withTag({display: {Name: "Sticked pick", Lore: ["This pick", "Has been sticked"]}}); recipes.addShaped(damagedPick, [[pick, stick]]); recipes.addShaped(stickedPick, [[pick, stick], [stick, stick]]); val stonedPick = pick.withTag({display: {Name: "Stoned pick", Lore: ["This pick", "Has been experimenting too much"]}}); val onlyStickedPick = pick.onlyWithTag({display: {Name: "Sticked pick"}}); val cobble = <minecraft:cobblestone>; recipes.addShaped(stonedPick, [[onlyStickedPick, cobble], [cobble, cobble]]); А как насчет части знаний в нашей подборке? Поскольку ваше условие содержит только имя, часть знаний игнорируется - при установке условия для тега данных MineTweaker заботится только о указанном вами содержимом и игнорирует все остальное. Обратите внимание на разницу между with Tag и onlyWithTag. withTag предназначен для вывода и является точным тегом, который будет выводиться. onlyWithTag предназначен для ввода и задает условие. Применение withTag к входным данным никак не влияет на рецепт. Существуют и другие условия: myItem.onlyDamaged(); // принимаются только поврежденные товары myItem.onlyDamageAtLeast(15); // принимаются только предметы с повреждением не менее 15 myItem.onlyDamageAtMost(100); // принимаются только предметы с повреждением не более 100 myItem.onlyDamageBetween(15, 100); // принимаются только предметы с повреждением от 15 до 100 К одному ингредиенту также можно добавить несколько условий: myItem.onlyDamaged().onlyWithTag({display: {Name: "Sticked pick"}}); Повторное использование выходных данных и преобразования Начиная с MineTweaker 3.0.2, теперь можно повторно использовать предметы, возвращать пустые ведра в сетку для крафта (или любой другой предмет, который вы хотите) или повреждать предметы при крафте. Мы могли бы, например, составить рецепт получения большего количества палочек из дерева с помощью топора: recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>, <ore:woodPlanks>]); Милый. Но каменный топор расходуется, и это немного раздражает. Мы можем исправить это с помощью модификатора повторного использования: recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.reuse(), <ore:plankWood>]); Отлично! Мы можем использовать топор повторно. А что, если бы мы также хотели, чтобы топор был поврежден, когда вы им пользуетесь? recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.transformDamage(), <ore:plankWood>]); Мы также можем нанести более 1 урона при крафте: recipes.addShapeless(<minecraft:stick> * 3, [<minecraft:stone_axe>.transformDamage(4), <ore:plankWood>]); Представьте, что мы хотели бы приготовить рецепт превращения грязи в траву, объединив грязь, ведро с водой и пшеницу. Мы могли бы приготовить этот рецепт: recipes.addShapeless(<minecraft:grass>, [<minecraft:dirt>, <minecraft:water_bucket>, <minecraft:wheat>]); Однако на его создание уйдет целое ведро. Мы можем сказать MineTweaker, чтобы он вернул пустое ведро позже: recipes.addShaped(<minecraft:grass>, [[ <minecraft:dirt>, <minecraft:water_bucket>.transformReplace(<minecraft:bucket>), <minecraft:wheat> ]]); Теперь создание травяного блока вернет пустое ведро для крафта в сетку для крафта. Иногда моды определяют свое собственное поведение, когда вы используете их предметы во время крафта. Аналогично, Minecraft вернет вам пустое ведро, когда вы используете его в рецепте крафта. Если вы этого не хотите, вы можете сказать элементу, чтобы он вообще ничего не возвращал: recipes.addShaped(<minecraft:grass>, [[ <minecraft:dirt>, <minecraft:water_bucket>.noReturn(), <minecraft:wheat> ]]); Если вы хотите вернуть что-то, но этого нет в инвентаре для крафта, вы также можете использовать "Вернуть". Возврат может быть использован без аргументов, и в этом случае он вернет исходный предмет, или он может быть использован с предметом, и в этом случае этот предмет будет возвращен обратно в инвентарь игрока: recipes.addShaped(<minecraft:grass>, [[ <minecraft:dirt>, <minecraft:water_bucket>.giveBack(<minecraft:iron_ore> * 3), <minecraft:wheat> ]]); Возврат обычно также имеет побочный эффект подавления поведения возврата модного элемента. Таким образом, в этих случаях это может быть удобной альтернативой модификатору transformReplace. Функциональные рецепты При добавлении рецепта вы также можете указать дополнительный аргумент, который является пользовательской функцией. Эта функция может программно определять выходные данные вашего рецепта. Чтобы продемонстрировать, как это работает, давайте приготовим рецепт, который восстанавливает каменную кирку, когда вы делаете ее из булыжника. Результат нашего рецепта зависит от предоставленной кирки (ее повреждения), поэтому обычный рецепт в данном случае не сработает. Давайте начнем с добавления к нему функции: recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>, <minecraft:cobblestone>], function(output, inputs, crafting) { // подлежащий реализации } Теперь нам нужно посмотреть на стоимость кирки. Чтобы получить фактические значения входных данных, нам нужно пометить их именем, и MineTweaker сохранит его в списке входных данных: recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>.marked("pick"), <minecraft:cobblestone>], function(output, inputs, crafting) { // подлежащий реализации. inputs.pick теперь содержит кирку, используемую в качестве входных данных } Тогда это просто вопрос написания кода для починки кирки: recipes.addShapeless(<minecraft:stone_pickaxe>, [<minecraft:stone_pickaxe>.anyDamage().marked("pick"), <minecraft:cobblestone>], function(output, inputs, crafting) { // максимум здесь для того, чтобы убедиться, что урон не станет отрицательным // исправляет 25 повреждений за булыжник return inputs.pick.withDamage(max(0, inputs.pick.damage - 25)); });
-
MineTweaker также позволяет изменять рецептуры печей и виды топлива для печей с помощью нескольких простых команд. Считаете ли вы, что плавить руду в печи слишком просто? Вы можете исправить это как таковое: furnace.remove(<minecraft:gold_ingot>); // в качестве альтернативы вы можете указать элемент ввода furnace.remove(<*>, <minecraft:iron_ore>); Вам показалось грустным, что вы не можете превратить древесный уголь в настоящий? Простое исправление: furnace.addRecipe(<minecraft:coal:0>, <minecraft:coal:1>); // или, если вы хотите сгенерировать 0,5 XP, сделав это furnace.addRecipe(<minecraft:coal:0>, <minecraft:coal:1>, 0.5); Хотите сделать предметы пригодными для сжигания? Установите их расход топлива с помощью функции setFuel: furnace.setFuel(<minecraft:rotten_flesh>, 100); Тот же метод можно использовать для установки существующего топлива - ЗА исключением ванильного топлива, поскольку оно, к сожалению, жестко запрограммировано. Дополнительно (за исключением ванильного топлива) вы можете удалить топливо, установив его значение топлива равным 0.
-
Рудный словарь Теперь, когда мы промочили ноги (вы ведь следовали предыдущим инструкциям, верно?), давайте попробуем этот рецепт: (требуется 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(); }
-
Использование обозначения рецепта Самые основные изменения, которые вы можете выполнить в MineTweaker, - это добавление и удаление рецепта. Визуального редактора нет, только язык сценариев, поэтому вы должны понимать, как записывать свои рецепты в виде текста. Чтобы определить его функциональность, вы должны вызвать функции. Примером функции является print, которую вы видели ранее и которая принимает один аргумент: print("My text"); Это было легко. Более полезной функцией, например, является функция добавления рецепта в форме: recipes.addShaped(recipe output, recipe contents) Эта строка, по сути, означает "вызовите функцию addShaped для объекта recipes". Объект recipes - это специальный объект, доступный из любого места вашего кода и содержащий все функции, связанные с добавлением и удалением рецептов приготовления. Обратите внимание, что объект recipes управляет только рецептами для крафта - например, рецептами печи управляет объект furnace (о котором вы узнаете в следующем руководстве), а у машин с модами есть еще разные методы управления рецептами. Теперь, как нам вызвать функцию добавления формы с соответствующими аргументами? Нам нужно сообщить ему, каким должен быть результат и каким должен быть рецепт. Давайте возьмем, к примеру, рецепт железных леггинсов, который заключается в следующем: Для этого рецепта используется следующее обозначение минитвейкера: [[<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>], [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>], [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>]] Это может показаться загадочным, если вы раньше не занимались программированием, но принцип довольно прост. Вы можете визуализировать рецепт следующим образом: Каждый элемент в minetweaker имеет свое собственное имя, заключенное в угловые скобки, чтобы сообщить ему "найдите мне элемент с этим именем". Это обозначение в угловых скобках будет использоваться во многих местах - от извлечения элементов до словарных статей о руде и названий жидкостей. Название предмета для железного слитка - <minecraft:iron_ingot>, а железные леггинсы - <minecraft:iron_leggings>. А как насчет пустых мест? Вы не можете просто пропустить записи - вы должны поместить что-то, чтобы указать "это пусто". У MineTweaker есть специальное слово для таких объектов, и это "null". Таким образом, мы можем определить рецепт леггинсов с помощью следующего кода: recipes.addShaped(<minecraft:iron_leggings>,[ [<minecraft:iron_ingot>, <minecraft:iron_ingot>, <minecraft:iron_ingot>], [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>], [<minecraft:iron_ingot>, null, <minecraft:iron_ingot>]]); Или вы можете разделить строку по-другому для удобства чтения, поскольку MineTweaker не заботится о том, как вы разделяете свой код на строки. Вы также можете один раз извлечь железный слиток, присвоить его переменной, а затем повторно использовать, как будет описано в конце этого руководства. Основные рецепты Визуального редактора нет, поэтому вы должны понимать, как записывать свои рецепты в виде текста. В качестве небольшого введения давайте рассмотрим рецепт приготовления палочек. В ванильном майнкрафте требуется 2 деревянные доски, чтобы сделать 4 палочки, и они должны располагаться друг над другом. Но что, если мы захотим это изменить? Что, если, скажем, мы сочтем более логичным вместо этого поместить два деревянных бруска по диагонали? (эта палка диагональная, верно?) Изменить рецепт палочек удивительно просто. Создайте скрипт со следующим содержимым: recipes.remove(<minecraft:stick>); recipes.addShaped(<minecraft:stick> * 4, [[<minecraft:planks>, null], [null, <minecraft:planks>]]); Откройте новую игру (или перезагрузите скрипты, если вы уже находитесь в игре). Теперь возьмите 2 дубовые доски и протестируйте свой рецепт. Это работает? Отлично! Но теперь вы, возможно, заметили недостаток в рецепте: если вы положите березовые или еловые дрова, это не сработает! Почему это не работает? Элемент "доски" имеет подпункты, которые отличаются не только названием элемента, но и его мета-значением. По умолчанию, если вы извлекаете элемент с синтаксисом скобок, MineTweaker предполагает, что вам нужен элемент с мета-значением 0. И вот что он вернул - предмет "дубовые доски". Но нам нужен ингредиент, который по сути означает "любой сорт дерева". К счастью, это легко исправить. При использовании синтаксиса скобок, помимо имени, мы также можем определить мета-значение. Например, <minecraft:planks:1> относится к еловому дереву. Мы также можем использовать подстановочный знак (*), чтобы получить элемент, означающий "любое мета-значение хорошо": <minecraft:planks:*>. Таким образом, измените свой рецепт и перезагрузите: recipes.remove(<minecraft:stick>); recipes.addShaped(<minecraft:stick> * 4, [[<minecraft:planks:*>, null], [null, <minecraft:planks:*>]]); Исправлено! Конечно, вы должны использовать статью в словаре руды для досок, что было бы еще лучше, поскольку она была бы совместима с досками, добавленными модом Если вам нужно полное название предмета, вы можете подержать его в руке и использовать команду /minetweaker hand. Он напечатает имя и скопирует его в буфер обмена, так что вы можете просто вставить его непосредственно в свой скрипт Другие виды рецептов Форменные рецепты - это рецепты, в которых ингредиенты должны быть расположены в правильной форме, чтобы они сработали. Не все рецепты Minecraft имеют форму - некоторые не заботятся о форме. MineTweaker поддерживает те, у кого есть функция addShapeless: recipes.addShapeless(<minecraft:stick> * 4, [<ore:plankWood>, <ore:plankWood>]); Теперь не имеет значения, как вы размещаете свои доски - вы всегда можете изготовить палочки. Обратите внимание, что в этом примере, однако, вы больше не можете изготовить деревянную прижимную пластину. Начиная с версии 3.0.7, также возможно регистрировать зеркальные рецепты. Продолжаем с нашими палочками (не забудьте сначала удалить предыдущие рецепты): recipes.addShapedMirrored(<minecraft:stick> * 4, [[<minecraft:planks:*>, null], [null, <minecraft:planks:*>]]); Теперь не имеет значения, повторяете ли вы рецепт - он все равно работает! Удаление конкретного рецепта Пока что мы решили, что удалим все рецепты для стика. В ванильном майнкрафте тоже есть только один, так что это не проблема. Но что, если мы захотим быть более конкретными? Часто существует несколько рецептов для одного и того же продукта, и мы можем захотеть удалить один, но сохранить остальные. В этом случае можно быть более конкретным: recipes.removeShaped(<minecraft:stick>, [[<minecraft:planks:*>], [<minecraft:planks:*>]]); Это удалит только один рецепт - даже если есть другие рецепты. Также можно удалить все рецепты, которые имеют форму, или все рецепты, которые не имеют формы, просто вызвав: recipes.removeShaped(<minecraft:stick>); recipes.removeShapeless(<minecraft:stick>); Кроме того, шаблоны подстановочных знаков можно использовать для указания того, что любой элемент будет соответствовать определенной позиции, если он не пустой: recipes.removeShaped(<minecraft:stick>, [[<*>], [<*>]]); Аналогично, при удалении бесформенных рецептов можно указать только один или несколько ингредиентов бесформенного рецепта, а затем сообщить minetweaker, что оставшаяся часть рецепта может содержать что угодно: recipes.removeShapeless(<minecraft:wool:*>, [<minecraft:wool>]); // удаляет все рецепты окрашивания шерсти Подпункты и значения ущерба Довольно часто элементы имеют несколько подпунктов. Очень хорошо известным примером являются уголь и древесный уголь. Оба имеют одинаковый идентификатор (minecraft:coal), но имеют разное мета-значение. При загрузке элемента вы можете указать мета-значение для подпункта: var coal = <minecraft:coal:0>; // такой же, как <minecraft:coal> var charcoal = <minecraft:coal:1>; Если подпункт не указан, для подпункта заполняется :0. Если вы хотите, чтобы рецепт соответствовал какому-либо подпункту, вы можете использовать синтаксис подстановочных знаков: var anyCoal = <minecraft:coal:*>; Многие виды предметов также могут быть повреждены. При использовании такого продукта в качестве ингредиента для рецепта, по умолчанию, повреждение не допускается. Например: var pick = <minecraft:stone_pickaxe>; var iron = <minecraft:iron_ingot>; recipes.addRecipe(<minecraft:iron_pickaxe>, [[iron, iron, iron], [null, pick, null]]); В приведенном выше рецепте поврежденная кирка не будет принята. Это можно легко изменить с помощью модификатора .anyDamage(): var pick = <minecraft:stone_pickaxe>.anyDamage(); var iron = <minecraft:iron_ingot>; // upgrade pick recipe :) recipes.addShaped(<minecraft:iron_pickaxe>, [[iron, iron, iron], [null, pick, null]]); Перезагрузка и рецепты Когда вы перезагружали скрипты, вы, возможно, заметили, что при перезагрузке скрипта рецепт не дублируется. Аналогично, если дополнение к рецепту удалено из сценария и сценарий перезагружен, рецепт фактически удаляется из игры, даже если может не быть заявления, явно запрашивающего такое удаление. MineTweaker запоминает такие действия, как добавление и удаление рецепта. Когда скрипт перезагружается (или загружается путем подключения к другому серверу), MineTweaker сначала отменит все записанные изменения, которые были внесены, прежде чем он выполнит новый скрипт. Однако многие мод-машины не поддерживают такое удаление рецепта. В этом случае рецепт будет "застрять" в игре до тех пор, пока не будет перезагружена вся игра. Для сервера это означает, что рецепт останется в списке до перезапуска сервера; для клиента это означает, что рецепт будет показан и с ним будут действовать так, как если бы он существовал, хотя при попытке создания фактическое создание завершится неудачей. Такое поведение невозможно исправить; авторы соответствующих модов должны предоставить достаточный API, чтобы гарантировать возможность удаления рецепта. Использование переменных Вы обнаруживаете, что просматриваете один и тот же элемент снова и снова, используя синтаксис скобок? Может быть удобно запомнить значение на потом; что можно сделать с помощью операторов val и var: val stick = <minecraft:stick>; val planks = <minecraft:planks:*>; recipes.remove(stick); recipes.addShaped(stick * 4, [[planks, null], [null, planks]]); В этом примере var может быть использован для: var stick = <minecraft:stick>; var planks = <minecraft:planks:*>; recipes.remove(stick); recipes.addShaped(stick * 4, [[planks, null], [null, planks]]); Разница между var и val заключается в том, что значение val не может быть изменено после его объявления: val stick = <minecraft:stick>; stick = <minecraft:bread>; // ошибка