Регистрация

Версия Minecraft
1.12.2
1,031
19
87
Решил снова поглазеть видео туторы и... Вы издеваетесь? Опять новые способы регистрации блоков и моделей? Памагите разобратся в плюсах и минусах каждого вида плиз.
Тут регистрация вручную. Создаём обьект (блок\итем), вручную заносим его в ForgeRegistries
Регистрация через виртуальный класс с евентами
Использование интерфейса IHasModel и использование списка с автодобавляемыми в него обьектами для последующей регистрации
Тут вообще без коментариев:
Java:
public class ModBlocks {

    @GameRegistry.ObjectHolder("modtut:firstblock")
    public static FirstBlock firstBlock;
}

@Mod.EventBusSubscriber
public class CommonProxy {

    ...

    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().register(new FirstBlock());
    }

    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().register(new ItemBlock(ModBlocks.firstBlock).setRegistryName(ModBlocks.firstBlock.getRegistryName()));
    }
Хм, а материала хватит на неплохой тутор :eek:
 
1,031
19
87
методы для стандартной регистрации
Мне если бы использовать по максимуму самые новые возможности кузницы. Но например по первому варианту долго вручную регистрировать, в втором так же только в прокси регистрировать, в 3-м вроде хорошо, но мало чего понятно а в последнем ещё и ObjectHolder, он упоминается в документации кузницы, но она вроде под 1.10.2 и я не знаю, может такой метод устаревший. тут бы спросить у @Ivasik, он вроде хорошо шарит в регистрациях.
я по этому туториалу делал
А это разве не экранизация учебника?
 
Последнее редактирование:
1,031
19
87
Ну я стараюсь использовать самые эффективные методы для своей модификации с минимальным количеством костылей. Да и так, использовать ресурсы и возможности кузницы более рационально.
 
699
9
53
Да и так, использовать ресурсы и возможности кузницы более рационально.
эффективные методы
То, что метод новее не значит что он лучше.
минимальным количеством костылей
Регистрация простым методом самая не костыльная, если можно так сказать.
 
1,031
19
87
То, что метод новее не значит что он лучше.
Тут согласен, но ведь не всегда так, к примеру на моём ПК версия 1.5.2 фризит в разы больше чем 1.12.2
Регистрация простым методом самая не костыльная
А можно поподробней?
 
1,031
19
87
Что тебе в 4 способе то не нравится?
Он описан в документации к кузнице, но сама документация рассчитана на версию 1.10.2, и возможно уже есть что-то новее или эффективнее.
Его немного подправить
А что там подправлять?
 
7,099
324
1,509
Как-то так
item и blocks - коллекции, в которых добавлены экземпляры блоков и предметов
Scala:
items.foreach(item=>{
      val name=item.getClass.getSimpleName.dropRight(1).toLowerCase
      ForgeRegistries.ITEMS.register(item.setRegistryName(name).setUnlocalizedName(name).setCreativeTab(tab))
    })
  
blocks.foreach(block=>{
      val name=block.getClass.getSimpleName.dropRight(1).toLowerCase
      ForgeRegistries.BLOCKS.register(block.setUnlocalizedName(name).setRegistryName(name).setCreativeTab(tab))
      ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(name))
      block match {
        case container: BlockContainer =>
          val tile = container.createNewTileEntity(null, 0).getClass
          GameRegistry.registerTileEntity(tile, tile.getSimpleName)
        case _ =>
      }
    })
 
1,031
19
87
7,099
324
1,509
В том коде ничего сверхъестественного не юзается, все в жаба-стиле, ну кроме type match.
Вот так выглядит на java:
Java:
items.forEach(item->{
    String rawName=item.getClass().getSimpleName();
    String name=rawName.substring(0,rawName.lenght()-2).toLowerCase();
    ForgeRegistries.ITEMS.register(item.setRegistryName(name).setUnlocalizedName(name).setCreativeTab(tab));
})
 
blocks.forEach(block->{
    String rawName=block.getClass().getSimpleName();
    String name=rawName.substring(0,rawName.lenght()-2).toLowerCase();
    ForgeRegistries.BLOCKS.register(block.setUnlocalizedName(name).setRegistryName(name).setCreativeTab(tab));
    ForgeRegistries.ITEMS.register(new ItemBlock(block).setRegistryName(name));
    if(block isInstanceOf BlockContainer) {
          val tile = ((BlockContainer)block).createNewTileEntity(null, 0).getClass();
          GameRegistry.registerTileEntity(tile, tile.getSimpleName);
    }
})
 
Сверху