Доброго времени суток.
К версии кубача 1.8 изрядно изменилась система добавления блоков и предметов. Много вопросов по этому поводу на англоязычных ресурсах, отсюда решил написать небольшой туториал на эту тему.
Рассказывать буду на примере своего мода. Люди, которым действительно нужна информация, а не готовые исходники, все поймут.
1. Разворачиваем рабочее пространство
2. Пишем стандартные классы/Настраиваем прокси
3. Первое отличие
- Прощайте методы registerBlockIcons() и setBlockTextureName(). Их больше нет - смиритесь.
- Теперь вы должны описывать внешний вид своих блоков в json-файлах
- ~Иерархия:
*Пощупать*
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