Resource Data Pack Loader
=========================

Всё, что вы положите в эту папку, заменяет то, что даёт мод или сам Minecraft.
Это действует в каждом мире, в одиночной игре и на серверах, и включать ничего
не нужно.


БОЛЬШЕ, ЧЕМ ПЕРЕОПРЕДЕЛЕНИЯ
---------------------------

Паки здесь умеют ещё и описывать новые блоки, предметы, биомы и целые измерения
в JSON, решать, что и где генерируется, запирать измерения за предметом или за
мобом, которого нужно убить, и создавать землю мира заранее, чтобы никто никогда
не ждал чанк. Всё это разобрано в HOWTO.md, который идёт вместе с модом.


КАК ДОБАВИТЬ ФАЙЛ
-----------------

Откройте jar мода, найдите файл, который хотите изменить, и скопируйте его путь
начиная с 'assets'.

Чтобы заменить текстуру железной руды: внутри jar Minecraft файл лежит здесь:

    assets/minecraft/textures/blocks/iron_ore.png

значит, ваш вариант идёт сюда:

    rdploader/assets/minecraft/textures/blocks/iron_ore.png

Это всё правило целиком. Путь после 'assets' всегда такой же, как путь внутри
jar, поэтому ничего никогда не нужно переименовывать или переносить.


КАК ДЕРЖАТЬ ПОРЯДОК
-------------------

Файлы можно собрать в именованный пак, папкой или zip-архивом:

    rdploader/MyTextures/assets/minecraft/textures/blocks/iron_ore.png
    rdploader/MyTextures.zip        ('assets' на верхнем уровне архива)

При упаковке выделяйте содержимое и архивируйте его, а не папку вокруг него.
Архив, на верхнем уровне которого лежит одна папка с 'assets' внутри,
пропускается, и в логе об этом сказано.

Папки удобнее править во время работы, архивы удобнее передавать другим. Ведут
они себя одинаково.

Если один и тот же файл лежит в двух местах, именованный пак выигрывает у
россыпи файлов. Лог называет пак, из которого взят каждый файл, так что всегда
видно, кто победил.


ПРИОРИТЕТ ПАКОВ
---------------

Если один и тот же файл есть в двух именованных паках, тем, кто выигрывает,
управляет префикс RDPL с числом перед именем папки или архива. RDPL0 грузится
первым, числа больше грузятся позже, и выигрывает пак, загруженный последним:

    rdploader/RDPL0 BaseTextures.zip
    rdploader/RDPL1 SeasonalTextures

Регистр не важен, а пробел, дефис или подчёркивание после числа необязательны.
Префикс срезается с имени пака в логе и в /rdpl list, поэтому RDPL1
SeasonalTextures показывается как SeasonalTextures.


API ДЛЯ МОДОВ
-------------

Мод может нести содержимое RDPL прямо в своём jar, в папке rdploader,
устроенной точно так же, как пак:

    thatmod.jar
      mcmod.info
      rdploader/assets/thatmod/blocks/ruby_ore.json

Это значения по умолчанию, а не переопределения. Пак из мода загружается ниже
любого пака в этой папке, так что всё, что лежит здесь, его перебивает, а сам
мод может давать файлы только в том пространстве имён, которое объявляет в
своём mcmod.info. Всё остальное пропускается с предупреждением, чтобы ни один
мод не переписывал втихую содержимое другого или ваше.

Каждый мод, который так делает, попадает в config/mods.json при первом
обнаружении:

    {
      "thatmod": {
        "enabled": true,
        "priority": -1
      }
    }

Поставьте enabled в false, чтобы выключить содержимое этого мода. Оставьте
priority равным -1, чтобы он оставался под всем остальным, или задайте число,
и тогда он встанет в общий порядок рядом с нумерованными паками. В логе паки
идут от самого нижнего, и пак мода там помечен, так что ничего не грузится
незаметно.


РЕСУРСПАКИ
----------

По умолчанию файлы отсюда стоят выше ресурспаков, которые игрок выбирает в
настройках, так что ресурспак их не перебьёт. Для логотипа сборки это правильно,
а для текстур, которые вы хотите дать людям перерисовывать, нет.

Добавьте O или N после префикса RDPL, чтобы решать это для каждого пака:

    rdploader/RDPLO Branding          всегда выигрывает, ресурспаку не достать
    rdploader/RDPLN BaseTextures      ресурспак может его перебить
    rdploader/RDPL1O Seasonal         приоритет и всегда выигрывает, вместе

Паки без буквы следуют настройке overrideResourcePacks в конфиге, а /rdpl list
помечает те, что перекрывают.

Паки без префикса грузятся раньше всех нумерованных, по алфавиту, поэтому
нумерованный пак всегда выигрывает у ненумерованного.

Чтобы выключить пак, не удаляя его, допишите .disabled в конец имени:

    rdploader/RDPL1 SeasonalTextures.zip.disabled

Пак пропускается, и в логе об этом сказано. Уберите суффикс, чтобы включить его
обратно.


ЧТО МОЖНО ИЗМЕНИТЬ
------------------

Текстуры, модели, blockstates, языковые файлы, звуки, шрифты, splash-тексты и
всё прочее, что мод держит в своей папке assets, например справочники или
руководства.

Достижения и таблицы лута. Они серверные, поэтому работают и на выделенном
сервере.

Шаблоны структур, файлы .nbt в assets/<modid>/structures. Структура, сохранённая
в собственной папке structures мира, по-прежнему выигрывает у файла отсюда, а уже
размещённая структура остаётся загруженной, пока вы не выйдете из мира.

Рецепты, в том числе замена рецепта мода или добавление своего. Рецепты
загружаются только при запуске игры, поэтому изменение здесь требует
перезапуска, а не перезагрузки.

Функции, файлы .mcfunction в assets/<modid>/functions. Minecraft читает их
только из собственной папки data мира, поэтому здесь они начинают работать в
каждом мире. Функция, сохранённая в мире, по-прежнему выигрывает у файла отсюда.

Переименования в реестрах, чтобы мир, сохранённый до того, как мод переименовал
один из своих блоков, сохранил этот блок, а не потерял его. Положите файл в
assets/<modid>/registry_remap:

    {
      "registry": "minecraft:items",
      "mapping": { "oldmod:old_name": "newmod:new_name" }
    }

Реестр указывается тот, которому принадлежит запись, обычно minecraft:items или
minecraft:blocks. Переименования выстраиваются в цепочку: A на B, а позже B на
C отправляет A сразу на C.

Свойства того, что уже существует, не трогая их файлы. Файл в
assets/<yourpack>/overrides называет свою цель путём, поэтому
overrides/minecraft/stone.json меняет minecraft:stone, что ванильный, что
модовый. Блоки принимают прочность, взрывоустойчивость, свет, непрозрачность
для света, скользкость, звук, инструмент и уровень добычи, а также
воспламеняемость. Предметы принимают размер стопки, прочность и предмет-тару, и
любой предмет можно сделать съедобным, с питательностью и эффектами. Эффекты
зелья можно переписать. Всё это живое: выключите пак, выполните /rdpl reload, и
каждое значение вернётся к прежнему, без перезапуска. Впишите id мода-владельца
в "requires", чтобы файл молча пропускался, когда этот мод не установлен.

Лут игрока, для которого у игры вообще нет названия. Игроки роняют свой
инвентарь и больше ничего, поэтому файл в assets/<modid>/player_loot даёт им
собственную таблицу лута:

    {
      "table": "mypack:entities/player",
      "mode": "add",
      "rollOnKeepInventory": false
    }

"add" роняет то, что выпало по таблице, вдобавок ко всему, что они несли,
"replace" роняет это вместо их инвентаря, а rollOnKeepInventory решает, будет
ли таблица разыграна вообще в мире, где инвентарь сохраняется.

Баннер стоит особняком. Одно описание регистрирует два блока, ваш и второй с
именем <name>_wall, и предмет получает только стоящий, а он сам выбирает между
ними при установке. Его модель уходит далеко за пределы собственного блока, до
29,33 из 16 у стоящего и на 13 ниже блока у настенного, а стоящему blockstate
нужен формат Forge, чтобы поворачиваться шестнадцатыми. Полные размеры есть в
руководствах.

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

Текстуру можно описать в JSON вместо того, чтобы рисовать. Назовите файл по
имени PNG с .json на конце, textures/blocks/panel.png.json, и задайте размер,
например 16x16 или 16x32, палитру из одного символа на цвет и строки этих
символов сверху вниз. Другой такой файл может расширить его и назвать только те
цвета, которые должны отличаться, так что одну форму можно перекрашивать сколько
угодно раз без единого изображения. Нарисованное хранится здесь в
pixelmap-cache и перерисовывается всякий раз, когда меняется карта или её
шаблон.

CraftTweaker и GroovyScript работают ровно как раньше. Они идут после этого
мода, поэтому всё, что убирают или меняют ваши скрипты, выигрывает у файла
отсюда.

RDPL хорош, чтобы заменить один-два рецепта, а рецепты для собственного контента
живут в паке рядом с ним. Для полного контроля над рецептами в сборке лучше
подходят CraftTweaker и GroovyScript. Файл отсюда заменяет оригинал целиком,
поэтому, чтобы поменять один ингредиент или убрать одну запись лута, берите их.


ДОБАВЛЕНИЕ НОВОГО КОНТЕНТА
--------------------------

Пак умеет добавлять и собственные блоки, предметы и жидкости, описанные в JSON.
Писать или собирать мод для этого не нужно.

Путь файла и есть его имя. Блок по пути

    rdploader/MyPack/assets/mypack/blocks/copper_ore.json

регистрируется как mypack:copper_ore. Нет поля с именем, которое надо заполнять
или можно написать неверно. Если такое имя уже регистрирует настоящий мод, мод
выигрывает, а ваш файл пропускается.

Простейший блок это несколько строк:

    {
      "type": "ore",
      "material": "rock",
      "harvestTool": "pickaxe",
      "variants": {
        "copper_ore": { "meta": 0, "hardness": 3.0, "harvestLevel": 1 }
      }
    }

Модель, blockstate, текстуру и языковую запись вы по-прежнему кладёте так же,
как любой другой файл в этой папке.

Каждое из этого папка внутри assets/<yourpack>:

    blocks           items            fluids           materials
    worldgen         furnace          fuels            oredict
    sounds           tabs             recipes          recipe_removals
    loot_tables      loot_injections  advancements     functions
    structures       registry_remap   potions          potion_types
    brewing          villagers        trades           biomes
    villages         entities         gates            dimensions
    gamerules        worldtemplates   worldintro       pathintersects
    hardness         blastplaster     player_loot      overrides

Блоки бывают таких видов, вид задаёт поле "type":

    basic   ore     falling   slab    stairs   fence    door
    pane    wall    ladder    torch   crop     flower   cane
    log     leaves  sapling   vine    portal   trapdoor fence_gate
    banner

а предметы таких:

    basic   food    drink     potion  tool     armor    seed
    potion_bottle

Тип зелья всегда появляется на ванильном зелье, взрывном зелье, оседающем зелье
и стреле с эффектом, а они лежат во вкладках «Зельеварение» и «Бой». Вкладка это
свойство предмета, а не типа зелья, поэтому перенести их в свою вкладку никак не
получится. Предмет типа potion_bottle это ваша собственная тара: он принимает
creativeTab, как любой предмет, перечисляет в potionTypes названные вами типы
зелий, и варочная стойка принимает его всюду, где годится стеклянная бутылка.

Файл villagers/<name>.json описывает профессию и карьеры, которые она предлагает.
Файл trades/*.json добавляет обмены любой карьере, вашей или минекрафтовской, и
называет профессию, карьеру и уровень, на котором обмен появляется. Назовите
карьеру, которой нет, и лог перечислит те, что есть.

Файл entities/<name>.json делает новую сущность из уже существующей. Он называет
сущность, на которой строится, и то, чем она отличается: имя, облик, сколько у
неё здоровья и урона, как быстро она движется и как высоко прыгает, какого
размера её рисуют, что она носит, на кого охотится и кого не замечает, и
подчиняется ли она по-прежнему правилам появления той сущности, из которой
сделана. Это сущность сама по себе, со своим яйцом призыва и своей таблицей
лута, а та, из которой она сделана, остаётся нетронутой. Участку деревни можно
велеть поселить её вместо жителя.

Файл villages/<name>.json добавляет участок, который деревни умеют строить:
либо ферму, которую вы описываете, либо один из ваших шаблонов .nbt. Те же
настройки выбирают, какие ванильные постройки ещё появляются, как далеко друг
от друга сеются деревни и в каких биомах они разрешены.

Файл worldintro/<name>.json проигрывает череду страниц, когда кто-то входит в
мир, до того как получит управление: бегущий текст поверх картинки, титульная
карточка, слайд-шоу, при желании с музыкой позади. Сами слова это обычные файлы
.txt в assets/<yourpack>/texts. Проигрывать можно один раз на игрока или при
каждом входе.

ЦЕЛЫЕ МИРЫ
----------

Пак не ограничен отдельными вещами. dimensions/<name>.json регистрирует
измерение с собственным рельефом, биомами и небом. gates/<name>.json ставит
условие на попадание в него, например держать в руках или отдать предмет. Блок
типа portal отправляет того, кто в него зашёл, и запоминает, кто его построил.

Шаблон мира умеет формовать и сам обычный мир, задавая уровень моря, лавовые
океаны и шум рельефа. Это применяется при создании мира и никогда позже, так что
уже существующий мир остаётся каким был.

worldtemplates/<name>.json собирает настройки мира в один файл, поэтому пак
может привезти целую форму мира разом, вместо того чтобы просить о дюжине
правок конфига. Каждая группа, которую он может задать, отвечает ещё и
категории control в конфиге, а та решает, кто решает: пак, конфиг, или же
группа выключена совсем и включить её не может никакой пак.

worldgen это больше, чем руда. Запись это форма, которую ставит распределение:
комки, длинные жилы, пласты, жеоды, чаши, шпили, желваки, жерла, украшение
поверхности, целые деревья, лозы, пояса длиной в несколько чанков или один из
ваших шаблонов .nbt, разбросанные равномерно, вокруг высоты, фрактально, по
рельефу, по полу или потолку пещер либо под водой.


Файл biomes/<name>.json описывает биом: его климат и цвета, блоки, из которых он
сложен, чем он украшен, кто в нём появляется и где он генерируется. Номер
выбирается за вас и записывается в каждый мир при первой загрузке, поэтому потом
он остаётся на месте, что бы вы ещё ни поставили. Задавайте "id" только тогда,
когда биому нужно сохранить номер, который уже занимало что-то другое, например
когда пак заменяет уходящий мод. Переименовать или удалить биом, который уже
есть в мире, значит потерять его, ровно как при перенумерации блока, поэтому для
переименования берите registry_remap.

Отображаемое имя жителя это языковой ключ entity.Villager.<career>, где имя
карьеры записано ровно так, как вы его написали, и никак иначе. Это пространство
ключей общее с Minecraft и всеми другими паками, поэтому вписывайте своё
пространство имён в имя карьеры, как в rdpltest.prospector. Затрагивается только
имя: житель хранит свою карьеру числом, поэтому переименование меняет то, как
зовут уже существующих жителей, а перестановка списка карьер меняет то, какая
карьера у них есть.

Тип зелья назван по своему файлу точно так же, а отображаемое имя берётся из
языкового ключа potion.effect.<namespace>.<name>, а для трёх остальных форм из
splash_potion.effect., lingering_potion.effect. и tipped_arrow.effect.


МИРЫ RUBIC
----------

Шаблон мира может попросить мир, собранный из кубов вместо столбов по 256
блоков, и тогда мир растёт в обе стороны: дно далеко ниже нуля, потолок далеко
выше 255, с рельефом, пещерами и рудой по всей высоте. Играть в таком мире
обычно. Вы копаете, строите, освещаете и путешествуете так же, а ванильное окно
генерации сохраняет внутри высокого мира привычную форму, поэтому моды,
генерирующие рельеф, попадают туда же, куда попадали всегда.

Что получает пак: собственную высоту мира, заданную один раз при создании мира;
глубинный мир под ванильным окном, с шумовыми пещерами, водоносными слоями и
полосчатыми рудными жилами в камне, который вы назовёте; пещерные регионы,
паковый ответ на пещерные биомы, расписанные по подземелью в трёх измерениях,
со своими полами, потолками, уровнем воды, мобами и структурами; измерения,
поставленные друг на друга, так что падение сквозь дно одного мира уносит вас в
следующий вниз, а выход через верх возвращает обратно; и любое измерение,
оставленное в стороне, которое сохраняет свой обычный мир в том же сохранении.

Внутри мир хранится кубами 16 на 16 на 16 в собственных файлах регионов рядом с
ванильными, генерируется, загружается и сохраняется отдельно, с движком
освещения, написанным под эту форму. Ванильное допущение, что мир высотой 256
блоков, пропатчено всюду, где оно несущее: от границ строительства и плоскостей
смерти до поиска пути, порталов, маяков, карт и рендерера. Генераторы других
модов по-прежнему видят нормальное окно в 256 блоков, поэтому их рельеф и
работает.

В HOWTO.md есть настройки, высоты, которые может принять мир, и моды, рядом с
которыми это не запустится.


ПРЕДУПРЕЖДЕНИЕ О META
---------------------

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

Блок держит 16 вариантов, потому что столько позволяют четыре бита метаданных.
Плиты получают 8, так как один бит говорит, верхняя она или нижняя, а ступени,
лестницы, факелы и посевы получают 1, потому что поворот или возраст занимает
остальное. С предметами не так тесно, и номера можно пропускать.


ГДЕ ЭТО ЗАКАНЧИВАЕТСЯ
---------------------

Здесь описывается, что вещь собой представляет, а не что она делает во времени.
Всё, чему нужен тайл-энтити, интерфейс, инвентарь или код каждый тик, всё так же
требует настоящего мода. Машина недостижима; руда, забор, еда или жидкость нет.


КАК УВИДЕТЬ ИЗМЕНЕНИЯ
---------------------

Нажмите F3+T, чтобы перезагрузить текстуры, модели, языковые файлы, достижения и
таблицы лута. На сервере наберите /reload для того же самого. Рецепты
исключение, как сказано выше: они загружаются только при запуске, поэтому смена
рецепта требует перезапуска.

Если вы добавили новый файл или удалили какой-то, берите /rdpl reload. Правка
файла, который уже был на месте, обходится одним F3+T.

/rdpl reload textures перезагружает только текстуры, и в большом паке это
намного быстрее, чем F3+T. models, languages, sounds и shaders работают так же.
Не указывайте имя, чтобы перечитать папку и перезагрузить всё.

/rdpl list показывает каждый загруженный пак и то, что в нём есть. Нажмите на
пак, чтобы посмотреть его.

/rdpl which minecraft:textures/blocks/stone.png показывает, какой пак отдаёт
файл и какие паки перекрыты под ним.

Это работает и без прав оператора, потому что читает только файлы на вашем
компьютере. На выделенном сервере /rdplserver reload перечитывает копию сервера.


ЕСЛИ ЧТО-ТО НЕ РАБОТАЕТ
-----------------------

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

Для текстур и прочих ассетов /rdpl unused перечисляет любой файл в ваших паках,
которого ещё никто не спрашивал, а это обычно означает опечатку в пути.
Выполняйте его после того, как игра догрузилась, и учитывайте, что часть файлов
загружается только по надобности, например языки, кроме того, на котором вы
играете.

Заглавные буквы важны. Если ваш файл называется Stone.png, а игра спросила
stone.png, он всё равно загрузится, но предупреждение скажет переименовать его.
Переименуйте, потому что везде, кроме этого мода, файл не найдут вовсе. Чаще
всего спотыкаются на языковых файлах: они называются en_us.lang, а не
en_US.lang.

Проверьте, что ваши файлы лежат внутри папки 'assets'. Папка пака или архив без
неё пропускается, и в логе об этом сказано.



ДОСТИЖЕНИЯ И РЕЦЕПТЫ
--------------------

Если ваши скрипты убирают рецепт, любое достижение, которое его выдавало,
продолжает работать, а не ломается. Просто выдавать ему больше нечего, и лог
называет его один раз.

Если вы заменили этот рецепт новым и хотите, чтобы достижение выдавало новый,
дайте новому рецепту имя в скрипте:

    recipes.addShaped("rail", <minecraft:rail> * 16, [[...]]);

Это регистрирует его как crafttweaker:rail. Затем положите сюда файл достижения,
указывающий на это имя, и достижение снова работает от начала до конца.

Без имени он получает что-то вроде crafttweaker:ct_shaped-1834729103, хеш самого
рецепта. Он меняется в тот же миг, как вы правите рецепт, и может сдвинуться,
если перед ним добавят другой рецепт, так что указывать на него достижение
небезопасно.


Саму папку rdploader можно перенести или переименовать настройкой rootDirectory
в config/mct_resourcedatapackloader_mixin.cfg. Абсолютный путь тоже работает, и
требуется перезапуск.

Положите pack.png рядом с этим файлом, чтобы дать паку значок.

Этот файл пишет мод, и он обновляется всякий раз, когда меняется, поэтому всё,
что вы в него впишете, будет заменено при следующем запуске игры.
