用户: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…”)
 
第54行: 第54行:
你可能注意到了,原版的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

个编辑