java吧 关注:1,234,549贴子:12,703,380
  • 8回复贴,共1

minecraft地形生成源码分析

取消只看楼主收藏回复

通过mcp代码了解minecraft地形生成


IP属地:江苏来自iPhone客户端1楼2017-09-22 09:43回复

    由于最近在参与minecraft分布式服务端minecase的编写,接触到了一部分minecraft地形生成有关的一部分机制。源码面前,了无秘密。虽说minecraft的地形是mc最最有趣,富于变化的部分,但是在理清楚源码的基础上,mc地形的生成过程还是比较容易理解的。接下来,我会从源码入手,解析mc的地形生成过。另外,平时事情比较多,更新可能比较缓慢。见谅。


    IP属地:江苏来自iPhone客户端2楼2017-09-22 09:44
    回复
      理解中如果有错误之处,恳请指出


      IP属地:江苏来自iPhone客户端3楼2017-09-22 09:45
      回复
        另外前排推荐一下我正在参与的minecraft分布式服务器,采用.net core编写,使用Orleans框架,如果大家感兴趣,欢迎大家参与或者给我们star


        IP属地:江苏来自iPhone客户端5楼2017-09-22 09:45
        收起回复
          基本概念
          地形生成的代码主要在net/Minecraft/world文件夹下,地形的生成主要分为两个阶段,generate和populate。generate主要进行基本地形生成,生物群落特有方块覆盖,以及skylight计算。populate主要负责建筑生成,植物生成,动物生成等地形附加结构。


          IP属地:江苏来自iPhone客户端6楼2017-09-22 09:48
          回复
            minecraft数据基本存储结构
            minecraft的地图数据存储的基本元素称为block,16x16x16个block组成一个section,16个section垂直排列组成一个chunk,chunk也就是我们常说的区块,区块的大小是16x16x256。chunk数据以nbt格式存储在文件中(nbt以后有空讲)


            IP属地:江苏来自iPhone客户端7楼2017-09-22 09:49
            回复
              block数据
              每个block数据主要包括block id和meta数据,当然在传输过程中还会有skylight数据。
              blockid用来区分区分不同种类的方块,metavalue用来区分每一大类方块具体数值,例如燃烧着的熔炉和普通熔炉。例如方块的朝向。


              IP属地:江苏来自iPhone客户端8楼2017-09-22 10:03
              回复
                chunk数据
                每个chunk的数据包含了16x16x256的block,它也是地图传输与存储的基本单位。用户登入服务器后,服务器会将user所在点周围chunk传给客户端。


                IP属地:江苏来自iPhone客户端9楼2017-09-22 12:23
                回复
                  minecraft坐标系统
                  对于minecraft中坐标,玩家们应该都很熟悉,xyz中y轴是高度,x,z轴与地面水平。
                  接下来我来介绍一下mc中几个常用的坐标
                  1.Entity在世界中的坐标,共三个分量,xyz,类型float
                  2.Block在世界中的坐标,共三个分量,xyz,类型int
                  3.Block在chunk中的坐标,三个分量,xyz,类型int
                  4.Chunk在世界中坐标,共两个分量,xz,类型int


                  IP属地:江苏来自iPhone客户端10楼2017-09-22 12:58
                  回复