用户:MashKJo/1.21.1模组开发教程/6.1.第一个方块:修订间差异

(创建页面,内容为“方块的基类是<code>net.minecraft.world.level.block.Block</code>类,和物品一样,简单的方块可以直接new这个类;拥有额外的逻辑的则需要先继承再实例化。 public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(TutorialMod.MODID); public static final DeferredBlock<Block> EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", BlockBehaviour.Properties.of(). ...); Block类接受一个Block…”)
 
 
(未显示同一用户的2个中间版本)
第11行: 第11行:
  public static final DeferredItem<BlockItem> EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(MyBlockClass.EXAMPLE_BLOCK);
  public static final DeferredItem<BlockItem> EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(MyBlockClass.EXAMPLE_BLOCK);


方块的本地化键名格式是block.<modid>.<registry_name>,如上述示例代码中注册的EXAMPLE_BLOCK的本地化键名为block.tutorialmod.example_block。
方块的本地化键名格式是<code>block.<modid>.<registry_name></code>,如上述示例代码中注册的EXAMPLE_BLOCK的本地化键名为<code>block.tutorialmod.example_block</code>。


== blockstates和模型文件 ==
== blockstates和模型文件 ==
第50行: 第50行:


事实上,任何物品都可以通过模型文件继承方块模型来获得一个方块的外观。
事实上,任何物品都可以通过模型文件继承方块模型来获得一个方块的外观。
=== 数据生成 ===
对应的DataProvider实现类为BlockStateProvider,同样提供了大量辅助方法如#simpleBlock、#simpleBlockWithItem等,思路和物品模型datagen类似,这里就不赘述了,读者可自行翻阅BlockStateProvider的源码。


== 方块类型(MapCodec<? extends Block>) ==
== 方块类型(MapCodec<? extends Block>) ==
你可能注意到了,原版的Block子类都定义了一个public static final的MapCodec字段(有关Codec和MapCodec,详见第10章),即所谓的“方块类型”;还覆写了#codec方法。并且这些方块类型都被注册进了注册表BuiltInRegistries.BLOCK_TYPE。
你可能注意到了,原版的Block子类都定义了一个public static final的MapCodec字段(有关Codec和MapCodec,详见第10章),即所谓的“方块类型”;还覆写了#codec方法。并且这些方块类型都被注册进了注册表BuiltInRegistries.BLOCK_TYPE。


由于方块目前仍是固有注册项,并未数据驱动化,因此这东西其实没啥用。不过为了和原版统一,你也可以为你的Block子类加上方块类型。如果你的方块子类的构造方法只接受一个BlockBehaviour.Properties,那么可以直接用#simpleCodec来得到一个MapCodec;如果构造方法不止这一个参数,你需要使用RecordCodecBuilder#mapCodec来创建MapCodec,方块属性的Codec可以通过BlockBehaviour#propertiesCodec得到。
由于方块目前仍是固有注册项,并未数据驱动化,因此这东西其实没啥用。不过为了和原版统一,你也可以为你的Block子类加上方块类型。如果你的方块子类的构造方法只接受一个BlockBehaviour.Properties,那么可以直接用#simpleCodec来得到一个MapCodec;如果构造方法不止这一个参数,你需要使用RecordCodecBuilder#mapCodec来创建MapCodec,方块属性参数的Codec填BlockBehaviour#propertiesCodec。
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,417

个编辑