Minecraft Modding
Учебник по созданию Minecraft модов
mode_editРедактировать

Создание блокаlink

Основаlink

Создадим класс для нашего предмета.

public class BlockBestStone extends Block
{
    public BlockBestStone(String name)
    {
        super(Material.ROCK);
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
    }

    @Override
    public boolean isOpaqueCube(IBlockState state)
    {
        return false;
    }

    @Override
    public boolean isFullCube(IBlockState state)
    {
        return false;
    }
}

Вы так же можете вынести Material в параметр конструктора, чтобы можно было задавать разные материалы для других блоков.

Регистрацияlink

Создадим класс BlocksRegister.

public class BlocksRegister
{
    public static Block BEST_STONE = new BlockBestStone("best_stone");

    public static void register()
    {
        setRegister(BEST_STONE);
    }

    @SideOnly(Side.CLIENT)
    public static void registerRender()
    {
        setRender(BEST_STONE);
    }

    private static void setRegister(Block block)
    {
        ForgeRegistries.BLOCKS.register(block);
        ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(block.getRegistryName()));
    }

    @SideOnly(Side.CLIENT)
    private static void setRender(Block block)
    {

    }
}

Возможно вы заметили, что в методе setRegister появился ещё один регистратор в виде предмета. Начиная с 1.9 версии Minecraft, блоки регистрируются в два этапа. Первый этап это сам блок, который ставится и блок в виде предмета.

Нам нужно добавить в CommonProxy, в метод preInit такую строку кода BlocksRegister.register();.

Теперь можете запустить Minecraft нажав на кнопку run и посмотреть свой блок в живую. Чтобы получить блок пропишите /give @p tut:best_stone. Вместо tut у Вас должен быть modid вашего мода! Вместо best_stone у Вас должно быть регистрируемое имя вашего блока.

Блок от первого лица Блок от третьего лица

Модельlink

Для начала добавим такой код в BlocksRegister, в метод setRender

Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(), "inventory"));

Создадим файл best_stone.json. По пути:

└── src    
    └── main
        └── resources
            └── assets
                └── tut
                    └── blockstates
{
    "variants": {
        "normal": { "model": "tut:best_stone" }
    }
}

Теперь Вы должны создать тип рендера блока, Вы можете создать как стандартный тип рендера блока, примером может послужить камень, так и тип рендера в виде модели. Вот пример стандартного типа рендера:

{
    "parent": "block/cube_all",
    "textures": {
        "all": "tut:blocks/best_stone"
    }
}

Название файла должно быть таким же как и в blockstates -> best_stone, в переменной model!

Модель

В этом файле будет хранится информация о состояниях блоков. (Подробнее про состояние блоков, вы сможете прочитать в следующей статье)

Если ваша текстура к модели берётся из самого Minecraft, то tut:(modid) прописывать не надо! В примере с объёмной моделью я решил использовать текстуру камня из Minecraft.

tut - modid нашего мода. best_stone - регистрируемое имя нашего блока.

Когда ваша модель готово, добавьте её по пути:

└── src    
    └── main
        └── resources
            └── assets
                └── tut
                    └── models
                        └── block
                        └── item

Добавим в ClientProxy, в метод init такой код BlocksRegister.registerRender();.

И вот, что в конечном итоге у нас может получится.

Блок с моделью от первого лица Блок с моделью от третьего лица Блок с моделью на земле

Ivasik
Автор
mcmodding.ru v1.1.1