NeoForge-1.20.4Mod开发教程之方块状态

NeoForge-1.20.4Mod开发教程之方块状态

本篇教程参考为Flandre芙兰NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。

创建LampBlock类

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.jsonlamp_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.pnglamp_on.png

 

最终效果显示

 

8a0284941a20260129143927

 

© 版权声明
THE END
喜欢就支持一下吧
点赞4 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容