Лучший способ зарегистрировать 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, которую можно найти здесь.