blocklauncher插件吧 关注:2,543贴子:18,931

自定义方块with特殊值

只看楼主收藏回复

上一次我们讲了如何定义一个方块。但是方块id总是有限的,而且多次定义方块特别耗时间。


来自Android客户端1楼2016-08-12 12:37回复
    首先我们需要了解特殊值的作用
    同一个id,不同特殊值他们的性质是一样的,爆炸抗性,基础形状,声音,材料,摩擦力等都一样。特殊值用在性质差不多的方块之间。


    来自Android客户端2楼2016-08-12 12:39
    收起回复
      如果玩家手持一个id5特殊值5的方块,那么放下去的方块id5特殊值5。所以我们可以通过addCreativeItem的方式来看特殊值方块。


      来自Android客户端3楼2016-08-12 12:40
      回复
        首先,定义一个带有特殊值的方块需要继承Block类。在构造函数里面设置方块基础性质
        class MyAuxDataBlock : public Block


        来自Android客户端4楼2016-08-12 12:42
        回复
          为什么要继承Block类呢?为的就是函数重载。在MyAuxDataBlock里面添加函数bool canHaveExtraData 说明这个方块是特殊值方块


          来自Android客户端5楼2016-08-12 12:43
          回复
            特殊值方块不同特殊值之间掉落物品也不一样。有两种方式可以实现:
            int getSpawnResourceAuxValue(unsigned char)
            unsigned char为方块特殊值
            int为掉落物特殊值
            第二种:重载playerDestroyBlock函数
            void playerDestroy(Player*, BlockPos const&, int)
            Player*为玩家指针,使用要注意空指针问题
            BlockPos 为方块坐标
            int为方块特殊值。这样子我们就可以通过添加一个ItemEntity即可


            来自Android客户端6楼2016-08-12 12:46
            回复
              同一id不同特殊值之间名字也不一样。这时候我们就需要
              std::string buildDescriptionName(ItemInstance const&) const
              可以通过ItemInstance获取id,数量,特殊值等。


              来自Android客户端7楼2016-08-12 12:47
              回复
                同一id不同特殊值方块贴图也不一样。这就是BlockGraphics::setTextureItem参数为何没有数字的原因了。
                方块贴图总是放在assets/images/terrain-atlas文件夹下面。(在BlockLauncher1.13之前是json定义)
                每个贴图后面都有一个_加数字。数字就是对应的特殊值。当方块特殊值为0时,贴图使用xxx_0,特殊值为1时使用xxx_1


                来自Android客户端8楼2016-08-12 12:50
                收起回复
                  在方块放置时,也需要对它的特殊值进行设置。
                  int getPlacementDataValue正好可以解决问题。
                  getPlacementDataValue(Mob&, BlockPos const&, signed char , Vec3 const&, int)
                  signed char为方块面。int为手持特殊值。BlockPos为坐标 Vec3为点击位置 Mob&为放置这个方块的生物


                  来自Android客户端9楼2016-08-12 12:52
                  回复
                    那么最后,我们需要注意一个问题:
                    带有特殊值的方块定义到这里还不够,因为会有掉落物品重叠的bug。我们在定义这个方块对应的Item时,就不能使用BlockItem了。需要使用AuxDataBlockItem
                    AuxDataBlockItem(std::string const&方块名字,int ID减去256,Block*对应的Block指针)


                    来自Android客户端10楼2016-08-12 12:54
                    回复
                      完结


                      来自Android客户端11楼2016-08-12 12:54
                      回复


                        IP属地:广东来自Android客户端12楼2016-08-12 13:04
                        回复
                          源码呢


                          IP属地:四川来自Android客户端13楼2016-08-12 13:11
                          收起回复
                            不会自定义方块


                            IP属地:广东14楼2016-08-12 14:39
                            回复


                              IP属地:广东来自Android客户端15楼2016-08-12 15:31
                              收起回复