[Forge 1.8] Добавляем блок

675
2
Доброго времени суток.​

К версии кубача 1.8 изрядно изменилась система добавления блоков и предметов. Много вопросов по этому поводу на англоязычных ресурсах, отсюда решил написать небольшой туториал на эту тему.

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

    1. Разворачиваем рабочее пространство
    2. Пишем стандартные классы/Настраиваем прокси

    3. Первое отличие
        - Прощайте методы registerBlockIcons() и setBlockTextureName(). Их больше нет - смиритесь.
        - Теперь вы должны описывать внешний вид своих блоков в json-файлах
            - ~Иерархия:
                
misc.php

            *Пощупать*

    4. Второе отличие
        - Вы обязаны регистрировать для клиента(т.е. где-нибудь в клиентском прокcи) модель предмета в инвентаре
        - Это так же относится к блоком, так как блок в инвентаре это точно такой же предмет
        - Регистрируем модель(не раньше FMLInitializationEvent'а): 
Код:
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(YourItem, metadata, new ModelResourceLocation("MOD_ID:Зарегестрированное имя предмета", "inventory"));*

    5. Итого:
Код:
public abstract class BaseBlock extends Block {

    protected String name;

    public BaseBlock(String name, Material material) {
        super(material);
        this.name = name;
        setCreativeTab(ChemistryTab.INSTANCE);
    }

    public String getName() {
        return name;
    }

}

Код:
public class Proxy {

    public void preInit() {
        new ChemistryTab();
    }

    public void init() {
        registerBlock(new ChemistryTable());
    }

    protected void registerBlock(BaseBlock baseBlock) {
        String blockName = baseBlock.getName();
        baseBlock.setUnlocalizedName(Info.MOD_ID + "." + blockName);
        GameRegistry.registerBlock(baseBlock, blockName);
    }

}

Код:
public class ClientProxy extends Proxy {

    @Override
    public void preInit() {
        super.preInit();
    }

    @Override
    public void init() {
        super.init();
    }

    @Override
    protected void registerBlock(BaseBlock baseBlock) {
        super.registerBlock(baseBlock);
        String blockName = baseBlock.getName();
        Item itemBlock = GameRegistry.findItem(Info.MOD_ID, blockName);
        ModelResourceLocation model = new ModelResourceLocation(Info.MOD_ID + ":" + blockName, "inventory");
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(itemBlock, 0, model);
    }

}


    6. Полезности
        Minecraft в примерах: https://github.com/TheGreyGhost/MinecraftByExample
 
675
2
waxta_teemoxi написал(а):
Спасибо. А джэсон не так уж и плох:)
Агась. Написал бы еще кто-нибудь гибкий генератор с удобным GUI для генерации json-описаний блоков/предметов, было бы вообще отлично. Мб кстати я и возьмусь, если не лень будет.
 
905
5
Try4W написал(а):
waxta_teemoxi написал(а):
Спасибо. А джэсон не так уж и плох:)
Агась. Написал бы еще кто-нибудь гибкий генератор с удобным GUI для генерации json-описаний блоков/предметов, было бы вообще отлично. Мб кстати я и возьмусь, если не лень будет.
tabula.todo.txt
 
675
2
Dragon2488 написал(а):
Ты вообще не в курсе новостей от айчана.
Я слабо слежу за англоязычным сообществом Minecraft, и уж тем более не наблюдаю за конкретными личностями.

Да и странное решение - пилить внутриигровой конструктор моделей. Это как минимум работа с не самым лучшим UI-API. Лучшеб запилил такое на JavaFX, там даже есть отдельные элементы для работы с 3D графикой:
8.jpg
 
2,955
12
Слушай, не все должны под друг-друга подстраиваться. Кому как нравиться, тот так и делает.
 
905
5
Try4W написал(а):
Да и странное решение - пилить внутриигровой конструктор моделей. Это как минимум работа с не самым лучшим UI-API.
Рендерер тот же, встроенные модели ванильки, 70% кода уже есть - одни плюсы.
 
675
2
Dragon2488 написал(а):
Слушай, не все должны под друг-друга подстраиваться. Кому как нравиться, тот так и делает.
Ну я же никому ничего не указываю. Просто моё скромное мнение.
[merge_posts_bbcode]Добавлено: 07.01.2015 18:08:01[/merge_posts_bbcode]

laz2727 написал(а):
Рендерер тот же, встроенные модели ванильки, 70% кода уже есть - одни плюсы.
Я бы подключил кубач как библиотеку и норм :)
На счет кода спорить не могу, но вроде как JavaFX имеет свой рендер. А остальное в любом случае пришлось бы дописывать.
 
1,683
1
Не нравится,пиши свой. Меня лично бесит,когда делают на JFX то,что можно сделать джавой. А вообще посрать
 
1,990
18
105
Лично меня бесит, когда то что можно сделать на JavaFX, делают своими дебильными костылями на джаве. Как я. У меня самого игровой редактор на Swing + LWJGL, я умудрился совместить две эти технологии, но приходится временами страдать. Потому что надо не изобретать свои костыльные велосипеды - а юзать то, что давно отлажено, тем более LWJGL 3+ обещает совместимость с JavaFX и её поддержку.
Но в целом да, в конкретном данном случае так легче сделать - потому что большая часть кода уже имеется и встроить редактор моделек в кубач действительно легче, чем писать стэндалон приложение.
 
1,683
1
Я о том,например,когда делают таблицу(да,да это все приложение)на JFX,особенно когда джавой свинговской можно сделать таблицу
 
675
2
Dovakin написал(а):
Не нравится,пиши свой. Меня лично бесит,когда делают на JFX то,что можно сделать джавой. А вообще посрать
Повторюсь, что это просто моё мнение. JavaFX - это Java-фреймворк. Просто библиотека, от написания кода ты никуда не денешься.
[merge_posts_bbcode]Добавлено: 07.01.2015 18:33:37[/merge_posts_bbcode]

Oldestkon написал(а):
Но в целом да, в конкретном данном случае так легче сделать - потому что большая часть кода уже имеется и встроить редактор моделек в кубач действительно легче, чем писать стэндалон приложение.
Опыта у меня тут мало, будем знать.

[merge_posts_bbcode]Добавлено: 07.01.2015 18:35:12[/merge_posts_bbcode]

Dovakin написал(а):
Я о том,например,когда делают таблицу(да,да это все приложение)на JFX,особенно когда джавой свинговской можно сделать таблицу
Ведь не знаешь, о чем говоришь.
http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
 
Сверху