Лучший способ зарегистрировать ItemBlock, чем у меня здесь?

Итак, я пытаюсь получить ItemBlock для регистрации рядом с моим Блоком, когда он будет зарегистрирован. Я придумал это до сих пор. Есть ли лучший способ сделать это? Я не очень доволен itemBlock.setRegistryName часть внутри registerBlock()!

public class ModBlocks {

    public static Block tinBlock;

    public static void init(){
        tinBlock = new BlockTinBlock("tin_block", "tin_block");
    }

    public static void register(){
        registerBlock(tinBlock);
    }

    public static void registerRenders(){
        registerRender(tinBlock);
    }

    public static void registerBlock(Block block){
        GameRegistry.register(block);
        ItemBlock itemBlock = new ItemBlock(block);
        itemBlock.setRegistryName(Reference.MODID, block.getUnlocalizedName().substring(5));
        GameRegistry.register(itemBlock);
    }

    public static void registerRender(Block block){
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(new ResourceLocation(Reference.MODID, block.getUnlocalizedName().substring(5)), "inventory"));
    }
}

2 ответа

Решение

Я наткнулся на ссылку, которая была размещена мне на MinecraftForge форумы 2 дня назад. Этот метод регистрации предметов и блоков актуален и использует RegistryEvents! Посмотрите и подумайте о переключении!

[MinecraftForge] 1.11.2 - Оправдано ли использование RegistryEvent?

То, что вы делаете, в значительной степени это, но для регистрации блоков, элементов и моделей и т. Д. Вы должны использовать соответствующее событие:
Для этого вам понадобится прослушиватель событий, прослушивающий событие.
Прослушиватель событий - это функция, которая принимает Событие в качестве параметра и аннотируется @SubscribeEvent они могут быть расположены в вашем @Mod класс или в аннотированных классах @Mod.EventBusSubscriber(modid = "yourmodid")

Чтобы зарегистрировать блоки, элементы и модели в отдельном классе, вы должны написать что-то вроде этого:

@Mod.EventBusSubscriber(modid = "yourmodid")
public class Registration{
    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        IForgeRegistry registry = event.getRegistry();
        //register blocks here using registry
    }

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        //register items here like we did with the blocks
    }

    @SideOnly(Side.CLIENT)
    @SubscribeEvent
    public static void initModels(ModelRegistryEvent event) {
        //register models here
    }
}

Более подробную информацию по этому вопросу можно найти в официальной документации Minecraft Forge, которую можно найти здесь.

Другие вопросы по тегам