的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。
public class LampBlock extends Block {
public static final BooleanProperty LIGHT = BooleanProperty.create("light");//这句定义了一个布尔属性 light,表示方块目前是亮还是灭。
public LampBlock() {
super(Properties.of()
.lightLevel(state->state.getValue(LampBlock.LIGHT)?15:0));//如果这个方块的 LIGHT 属性是 true → 发光等级 15(最亮),如果是 false → 发光等级 0(不发光)
registerDefaultState(getStateDefinition().any().setValue(LIGHT,false));//设置这个方块默认状态为 不发光(LIGHT=false)
}
public InteractionResult use(BlockState pState, Level plevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHitResult){
if(!plevel.isClientSide && pHand == InteractionHand.MAIN_HAND){//检查是否是服务端和是否是主手交互
plevel.setBlock(pPos,pState.cycle(LIGHT),3);//当玩家右键方块时:使用 pState.cycle(LIGHT) 切换LIGHT的值。因为LIGHT是布尔值,值只有true和false
}
return super.use(pState,plevel,pPos,pPlayer,pHand,pHitResult);
}
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {//把 LIGHT 属性加入到这个方块的状态系统里。
pBuilder.add(LIGHT);
}
}
之后的流程和前一期的方块一样:注册LAMPBLOCK,创建BlockItem,添加到创造物品栏等
添加材质
在blockstates下新建lamp.json
{
"variants": {//根据方块状态切换材质
"light=true": {"model": "examplemod:block/lamp_on"},
"light=false": {"model": "examplemod:block/lamp_off"}
}
}
block下新建lamp_off.json和lamp_on.json
{
"parent": "block/cube_all",
"textures": {
"all": "examplemod:block/lamp_off"
}
}
{
"parent": "block/cube_all",
"textures": {
"all": "examplemod:block/lamp_on"
}
}
item下新建lamp.json
{
"parent": "examplemod:block/lamp_on"
}
textures的block里放入lamp_off.png和lamp_on.png
最终效果显示

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















![表情[ciya]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/ciya.gif)
![表情[se]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/se.gif)
![表情[jie]-方块工坊](https://crapark.com/wp-content/themes/zibll/img/smilies/jie.gif)
暂无评论内容