文档和工具

1. 概述

该功能不需要开启实验性玩法。

开发者可以通过在addon中配置json来添加自定义方块。添加的自定义方块支持“MOD SDK文档”中与方块及物品相关的所有事件及接口。

 

2. 注册

以demo CustomBlocksMod为例

  1. 在行为包中新建netease_blocks目录

    avatar

  2. 在目录下新建一个json,编写方块的定义。json的格式可参考官方wiki

    • json中至少有一个component
    • identifier分为命名空间及方块名。命名空间推荐与mod名称一致。其中的方块名必须全局唯一,可以加上mod名的前缀来保证唯一。mod中其他地方都是用这个identifier与这个自定义方块对应上

    avatar

    avatar

  3. 将方块的贴图放到textures\blocks

    可以支持高于16x16分辨率的高清贴图,但需要注意过高的分辨率会导致手机端(尤其是低端机)上无法进入游戏。

    avatar

  4. 在textures中新建terrain_texture.json,编写资源名与贴图的对应关系。资源名的命名必须满足全局唯一。json格式可参考“Mod PC开发包”的data\resource_packs\vanilla\textures\terrain_texture.json

    avatar

    avatar

  5. 在resource中新建一个blocks.json,编写方块贴图及声音,贴图的值需要与上一步terrain_texture.json中配置的资源名对应。json格式可参考“Mod PC开发包”的data\resource_packs\vanilla\blocks.json

    avatar

    avatar

  6. texts\zh_CN.lang中配置方块中文名称。

    键的格式为tile.方块identifier.name

    avatar

    avatar

  7. 重复1-6编写其他自定义方块

 

3. JSON组件

目前行为包中自定义方块json中支持的component如下:

3.1 原版components

支持的微软原版component包括:(参数及解释见官方wiki

minecraft:loot

可用于使用loot table控制掉落物

可参考CustomBlocksMod的customblocks:customblocks_test_ore方块

minecraft:destroy_time

可用于控制挖掘所需的时间。该值的含义与官方wiki的“硬度”一致

主要用于挖掘的功能

minecraft:block_light_emission

可用于设置方块亮度。关于亮度及方块光源可参考官方wiki

主要用于亮度的功能

minecraft:explosion_resistance

可用于设置爆炸抗性。原版方块的爆炸抗性见官方wiki

minecraft:block_light_absorption

可用于设置方块的透光率。具体可参考官方wiki

主要用于亮度的功能

minecraft:map_color

可用于设置方块显示在地图上的颜色

 

3.2 网易components

netease:tier

用于设置与挖掘相关的属性

主要用于挖掘的功能

类型默认值解释
diggerstring 必须设置。表示方块使用此工具挖掘时有速度加成。
可选的值有:
shovel:铲
pickaxe:镐
hatchet:斧
destroy_specialboolfalse可选。当设置为true时,表示只有使用digger设置的工具进行挖掘才会产生掉落物。
levelint0可选。当destroy_special为true时才会生效。表示挖掘所需的工具等级,若手持工具等级小于该值,则不会产生掉落物。
原版工具的等级:
空手/其他非工具物品:0
木制/金制工具:0
石制工具:1
铁制工具:2
钻石工具:3

netease:aabb

用于设置方块的碰撞盒

注意事项:

  1. 无碰撞箱的方块请将collision的值都设置为0
  2. 有碰撞箱的方块,clip的范围需要小于或等于collision的范围,否则弹射物命中时会异常

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

类型默认值解释
collisionAABB 计算与物体碰撞时用的碰撞盒
clipAABB 计算射线检测时用的碰撞盒。如准心选取及弹射物碰撞。
(那么当该AABB没有体积时,准心与弹射物都会无视这个方块)

AABB的结构:

类型默认值解释
min[float, float, float][0, 0, 0]min的三个值必须小于等于max的三个值
max[float, float, float][1, 1, 1] 

netease:face_directional

用于设置方块的多面向

主要用于多面向的功能

类型默认值解释
typestring direction:四面向方块
facing_direction:六面向方块

netease:render_layer

用于设置方块渲染时使用的材质

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

类型默认值解释
valuestring 目前支持的材质有:
opaque:不透明,即“terrain_opaque”材质。默认为此项
alpha:全透明,即“terrain_alpha”材质,如火焰,树叶。
blend:半透明,即“terrain_blend”材质,如彩色玻璃

netease:solid

用于设置方块是否为实心方块主要与生物在方块内时是否受到窒息伤害有关。

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

类型默认值解释
valuebooltrue为true时,生物在方块内会受到窒息伤害
为false时,生物在方块内不会受到窒息伤害

netease:pathable

用于设置游戏内AI在进行寻路时,方块是否被当作障碍物。

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

类型默认值解释
valueboolfalse为true时,寻路时被当作空气
为false时,寻路时被当作障碍物,并且可在其上方行走

 

 

4. 功能

4.1 获取及设置某个位置的方块

获取见服务端blockInfo组件的GetBlockNew接口

设置见服务端blockInfo组件的SetBlockNew接口

4.2 物品形式的生成及获取

支持“自定义物品”文档中所有类型的接口及事件,其中的物品identifier对应方块identifier。

4.3 方块及物品事件

支持“MOD SDK文档”中所有与方块相关的事件,其中添加了“fullName”字段返回对应的方块identifier

支持"MOD SDK文档"中所有与物品相关的事件,其中添加了“itemName”字段返回对应的方块identifier。

4.4 自定义配方

见“自定义配方”文档,材料及结果都支持填写方块identifier。可参考CustomBlocksMod行为包的netease_recipes

4.5 方块组合

见"MOD SDK文档"的服务端block组件,defines项支持填写自定义方块的identifier。可参考CustomBlocksMod脚本的CustomBlocksServer.RegisterBlockPattern

4.6 村民交易

可将行为包的交易配置中的item修改为自定义方块的identifier。可参考CustomBlocksMod行为包的trading\economy_trades\armorer_trades.json,里面将新手级盔甲商的其中一个交易项替换为绿宝石兑换customblocks:customblocks_test0方块

4.7 构成自定义群系

阅读这条前请先阅读“自定义生物群系”文档。

可通过修改minecraft:overworld_surface字段来使用自定义方块生成区块。可参考CustomBlocksMod行为包的netease_biomes\dm5,里面在自定义群系demo(CustomBiomesMod)中dm5维度的基础上进行修改,将该维度的dm5_cold_beach、dm5_frozen_ocean、dm5_frozen_river、dm5_ice_plains、dm5_river几个群系的地表方块进行了替换。

4.8 详细属性

方块形状

可在resource包的blocks.json中添加"blockshape"的键值进行配置。

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

目前支持的方块形状:

string解释
fire与原版火方块一致(若附近没有其他方块附着则不会渲染)
facing_block配合多面向使用

声音

resource包中blocks.json配置方块的sound。

可以使用原版sounds.json中block_sounds里的类型。不支持添加自定义block_sounds类型

亮度

行为包中使用minecraft:block_light_emission可将方块设置为光源。

可参考CustomBlocksMod的customblocks:customblocks_test_fire方块。

minecraft:block_light_absorption可设置方块透光率,值的范围为0-16

挖掘

挖掘的详细介绍可参考官方wiki

挖掘时间可使用minecraft:destroy_time配置

挖掘工具可使用netease:tier配置

可参考CustomBlocksMod的customblocks:customblocks_test_ore方块

多面向

行为包中使用netease:face_directional配置。

需要在resource包中把方块的blockshape设置为“facing_block”

四面向可参考CustomBlocksMod的customblocks:customblocks_test_face4方块

六面向可参考CustomBlocksMod的customblocks:customblocks_test_face6方块

对于两种面向,当玩家进行放置时,都是north的贴图面向玩家。

方块的面向等于north贴图面向的方向(即玩家放置时准心的反方向)。

 

当设置为四面向时,方块面向与auxvalue的关系为:

方块面向auxvalue
south0
west1
north2
ease3

当设置为六面向时,方块面向与auxvalue的关系为:

方块面向auxvalue
down0
up1
north2
south3
west4
east5

 

4.9 特殊方块

开发者可通过在方块定义json中添加base_block来修改方块的基础行为。

avatar

avatar

自定义刷怪箱

  • 自定义刷怪箱方块的base_block需要设为mob_spawner,并在blocks.json中进行如下设置:

avatar

  • 可在netease:mob_spawner中设置刷怪的类型,目前支持原生生物、网易自定义生物与微软自定义生物。
类型默认值解释
typestring 必须设置,用于控制生成的生物类型
  • 原生生物type为其Namespaced ID,可参考官方wiki中各Mob的详细信息。
  • 网易自定义生物type为"minecraft:identifier"中的"id",详见 3-2 自定义生物文档。
  • 微软自定义生物type为"minecraft:entity"中"description"的"identifier"项,可参考3-2 自定义生物文档及CustomBlocksMod中的customblocks_test_mobspawner1.json。

自定义传送门方块

  • 自定义传送门方块的base_block需要设为portal。
  • 可通过在resource/textures/flipbook_textures.json中配置动画纹理使其贴图拥有动态效果,属于微软功能。
  • 传送门方块拥有两种朝向,其方块延伸方向分别与X轴、Z轴相同,如下图所示:

avatar

  • 可在netease:portal中设置传送门方块上播放的粒子特效以及目标维度。粒子特效应放置于resource/particles,粒子特效编写可参考官方关于粒子组件的说明。目标维度为0或3-20的整数(0为主世界,3-20为自定义维度),其余值会被视作0来处理。
类型默认值解释
particle_east_weststring 可选,对应于粒子json文件中的identifier,用于控制方块与Z轴同向时播放的粒子特效
particle_north_southstring 可选,对应于粒子json文件中的identifier,用于控制方块与X轴同向时播放的粒子特效
target_dimensionint 必须设置,用于控制进入传送门方块后到达的目标维度
  • 若通过服务端blockInfo组件的SetBlockNew接口放置传送门方块。当'aux'设为1时,该方块延伸方向与X轴相同,播放particle_north_south对应的粒子;'aux'设为2时,该方块延伸方向与Z轴相同,播放particle_east_west对应的粒子。
  • 手动放置的传送门方块'aux'始终为0,无论它朝向哪里。
  • 目标维度与当前维度相同时,将不会进行传送。
  • 只有玩家才能够通过自定义传送门方块进行传送。
  • 同一玩家存在一定的传送冷却时间,不会连续传送。
  • 传送前后玩家坐标不发生改变。

5. demo解释

CustomBlocksMod中定义了以下自定义方块:

  • customblocks:customblocks_test0

    上表面与其他面不同的方块。

    resource/blocks.json中将isotropic的up设置为true,使其上表面在放置时会随机旋转,可以达到视觉上没有明显的贴图重复的效果,属于微软自定义方块的功能

    演示了构成自定义群系,村民交易,自定义配方,方块组合的功能

  • customblocks:customblocks_test_ore

    性质与矿物相似的自定义方块

    演示了挖掘,掉落物的功能

  • customblocks:customblocks_test_fire

    外观与原版火焰相似的方块

    通过在resource/textures/flipbook_textures.json中配置动画纹理使其贴图拥有动态效果,属于微软功能。

    演示了方块形状,亮度,碰撞盒,渲染材质,构成自定义群系,是否实心,是否可寻路的功能

  • customblocks:customblocks_test_face4

    拥有4个面向的方块

    演示了多面向中四面向的功能

  • customblocks:customblocks_test_face6

    拥有6个面向的方块

    演示了多面向中六面向的功能

  • customblocks:customblocks_test_mobspawner

    自定义刷怪箱方块-原生生物

    演示了“特殊方块-自定义刷怪箱”中生成原生生物的功能

  • customblocks:customblocks_test_mobspawner1

    自定义刷怪箱方块-微软自定义生物

    演示了“特殊方块-自定义刷怪箱”中生成微软自定义生物的功能

  • customblocks:customblocks_test_portal_blue

    前往维度3的自定义传送门方块

    演示了“特殊方块-自定义传送门方块”的功能

6. Mod卸载

若使用了自定义方块的存档卸载mod后再进入时:

  1. 对地图上已存在的自定义方块:

    自定义方块会变为空气。若某个subchunk未进行过方块更新,那么重新加载mod时,自定义方块会保留。但一旦subchunk进行了方块更新,即使重新加载mod,自定义方块会永远消失。

  2. 对玩家背包中的自定义方块:

    物品会消失。若重新加载mod,对卸载期间登录过的玩家,物品不会恢复;没登录过的玩家,物品可以保留

  3. 对地图上容器内的自定义方块:

    物品会消失。若重新加载mod,对卸载期间进行探索过的区域内的容器,物品不会恢复;未探索区域的容器,物品可以保留

  4. 对地图上未捡起的掉落物:

    掉落物会消失。若重新加载mod,对卸载期间进行探索过的区域,掉落物不会恢复(除非subchunk内没有其他任何entity);未探索区域的掉落物可以保留。

 

7. 常见报错

  1. JSON: xxx has an error

    一般为json格式有问题,可以检查一下逗号时候漏写或多写,括号是否对应。

    图为多写逗号的报错

avatar