minecraft
Создание базового блока с помощью Forge
Поиск…
Вступление
Создание простого, декоративного блока с помощью Forge - одна из первых задач, которую должен научиться начинающий модератор. Как это изменилось в разных версиях Minecraft и, вероятно, на «умеренной» позиции сложности 1.7.10 из-за большого количества ошибок.
замечания
Если что-то пойдет не так, и ваш пользовательский блок (либо при размещении, либо удерживается) имеет отсутствующую текстуру (черный / фиолетовый) или модель (куб по умолчанию, который слишком велик, когда удерживается) проверяет журнал. Проблемы такого рода будут почти всегда появляться в журнале, если вы зарегистрировали вещи правильно.
Первое, что будет отображаться, - это строка "Exception loading model for variant..."
или аналогичная, сообщающая, какой блок или элемент не удалось загрузить должным образом. После дюжины строк, начинающихся с at...
будет еще одна строка, начинающаяся Caused by...
Эта строка «Causeed By» является важной, она скажет вам, какой файл не удалось загрузить должным образом и может быть одной из нескольких ошибок, таких как:
- Malformed JSON (ваш JSON-файл недействителен и имеет опечатку)
- Файл не найден (файл, который Minecraft ищет, неправильно назван или находится в нужном месте)
- Отсутствие исключения варианта (ваш Blockstate JSON является неполным)
Вы можете даже получить более одной ошибки при ошибке! Если вы не знаете, какой блок является проблемой, закомментируйте каждый блок и элемент, который, как вы знаете, работаете, уменьшите список ошибок до блока (или блоков), о котором идет речь. Возможно, вам придется делать это несколько раз.
Кроме того, текстура смешивания отображается так же, как и простой список всех недостающих ресурсов для данного домена (идентификатор мод).
Класс блоков
Сначала нам нужен класс, представляющий блок
public class CustomBlock extends Block {
public CustomBlock () {
super(Material.ROCK);
setHardness(1.0f);
setHarvestLevel("pickaxe", 0);
setResistance(1.0f);
setCreativeTab(CreativeTabs.DECORATIONS);
this.setSoundType(SoundType.STONE);
}
}
Даже здесь есть несколько доступных модификаций: материал (который управляет некоторыми свойствами, такими как возможность выталкивать поршни и может ли он быть разбит вручную), твердость (как долго это требуется для разрыва), уровень урожая (соответствующий инструмент и инструмент материал: в данном случае деревянная кирка), сопротивление (против взрывов), вкладка, отображаемая в творческом меню, и какой шаг звука у него есть.
Здесь вам понадобятся любые фантастические функциональные блоки, но пока мы делаем блок, который выглядит просто красиво, поэтому мы закончили.
Блок-модель JSON
Затем нам нужно сообщить Minecraft, что мы хотим, чтобы наш блок выглядел.
{
"parent": "block/cube_all",
"textures": {
"all": "example:blocks/decorative"
}
}
Это почти все, что нужно, чтобы он работал после регистрации блока. Важно только то, что имя файла соответствует имени реестра, используемому для регистрации блока, и должно быть во всех строчных (имена файлов 1.11+ должны быть строчными, до этого они чувствительны к регистру).
Назовите модель JSON-файла my_block.json
(сопоставив имя реестра, которое мы собираемся дать позже) и сохраним его в src\main\resources\assets\example\models\block\
(где, example
это идентификатор мод, указанный в @Mod аннотация вашего основного класса мод).
Здесь в блочной модели используется родительский элемент block / cube_all, что означает, что единая поставляемая текстура будет использоваться на всех грани. Существуют и другие модели по умолчанию, такие как:
- блок / куб (все шесть граней назначены независимо)
- block / cube_bottom_top (верхняя и нижняя грани независимы от сторон)
- блок / ориентируемый (направленный облицовочный блок, например печь)
- блок / крест (цветы, высокая трава)
- блок / культура (пшеница, морковь)
Обратите внимание, что каждая модель указывает текстуры, которые она использует с помощью идентификатора имени (например, "all"
или "top"
). Посмотрите на родительскую модель, чтобы определить, что эти имена, если вы не уверены. Некорректно определенные текстуры могут привести к отсутствию ошибок при обработке текстур.
Также возможно создать полностью настраиваемую модель или создать пользовательскую родительскую модель. Но пока этого будет достаточно.
Не забудьте создать текстуру, назовите ее decorative.png
(как это указано в файле JSON) и сохраните его в src\main\resources\assets\example\textures\blocks\
Регистрация блока
Регистрация блоков выполняется из основного класса mod или метода класса ModBlocks, вызванного из основного класса mod во время preInit.
Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);
Существует важная причина использования block.setUnlocalizedName(block.getRegistryName().toString());
также! Это гарантирует, что ваши неблокированные имена блоков (и элементов) содержат идентификатор мод, чтобы избежать конфликтов языковых файлов между модами.
О, вы хотите, чтобы версия продукта тоже могла существовать в вашем инвентаре? Это создается отдельно после 1.7.10 и выполняется следующим образом:
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);
Обратите внимание, что мы установили имя реестра ItemBlock в ту же строку, что и наш блок. Это то, как Forge и match блокирует их экземпляр ItemBlock и наоборот.
Но подождите, есть еще!
У вашего блока может быть форма элемента , но у этого элемента еще нет модели или текстуры! Модели автоматически регистрируются для блоков, но не для элементов. Это может быть вызвано только из прокси-сервера клиента и не охватывает блоки с вариантами (например, шерсть или листья).
ModelLoader.setCustomModelResourceLocation(
ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));
Вообще говоря, вам также не понадобится модель товара JSON, поскольку Forge и vanilla снова упадут на модель блока, но это не всегда так. Если вы обнаружите, что вам нужна модель товара JSON, просто откройте его на своем блоке JSON и сохраните его в src\main\resources\assets\example\models\item\
с тем же именем файла, что и имя реестра блока.
{
"parent": "example:block/my_block"
}