2.6
This commit is contained in:
113
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/1-基本属性.md
Normal file
113
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/1-基本属性.md
Normal file
@@ -0,0 +1,113 @@
|
||||
# 基本属性
|
||||
|
||||
在下面这几节中我们一起来回顾学习方块相关的自定义JSON文件。首先,我们在编辑器中新建一个自定义方块作为示例并观察他的JSON结构。
|
||||
|
||||
## 在编辑器中创建
|
||||
|
||||

|
||||
|
||||
我们创建一个空的标识符为`test:test_block`的方块。
|
||||
|
||||

|
||||
|
||||
我们在行为包组件中添加一些最基本的常用组件作为示例。
|
||||
|
||||

|
||||
|
||||
以上是添加了行为包组件之后的编辑器中显示效果。
|
||||
|
||||

|
||||
|
||||
我们再在“方块属性列表”栏中添加一些属性。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
我们如图所示添加一些内容。
|
||||
|
||||
## 实际文件
|
||||
|
||||
虽然只有行为包中有存储方块定义的`netease_blocks`文件夹,但实际上方块也需要在客户端中进行定义。在客户端中定义方块的是一个独立文件`blocks.json`文件,这个文件就位于客户端的根目录中。我们先查看`blocks.json`文件:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": [
|
||||
1,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"test:loot": {
|
||||
"textures": "test:barrel_side"
|
||||
},
|
||||
"test:test_block": {
|
||||
"isotropic": {
|
||||
"down": false,
|
||||
"east": false,
|
||||
"north": false,
|
||||
"south": false,
|
||||
"up": false,
|
||||
"west": false
|
||||
},
|
||||
"sound": "stone",
|
||||
"textures": "test:custom_dirt"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
可以看到,我们定义过的所有方块其实都会出现在这同一文件中,该文件中可以定义方块的一系列客户端属性。`textures`用于定义方块使用的纹理,`sound`用于定义方块使用的音效,`isotropic`用于定义方块是否具有“各向异性”效果,即贴图随着坐标不同随机旋转或变化。
|
||||
|
||||
我们再来观察方块的行为包定义文件。方块的行为包定义文件位于行为包的`netease_blocks`文件夹下,打开之后如下所示:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"minecraft:block": {
|
||||
"components": {
|
||||
"minecraft:destroy_time": {
|
||||
"value": 0.0
|
||||
},
|
||||
"minecraft:explosion_resistance": {
|
||||
"value": 0.0
|
||||
},
|
||||
"minecraft:map_color": {
|
||||
"color": "#000000"
|
||||
},
|
||||
"minecraft:max_stack_size": {
|
||||
"value": 64
|
||||
},
|
||||
"netease:aabb": {
|
||||
"clip": [
|
||||
|
||||
],
|
||||
"collision": [
|
||||
|
||||
]
|
||||
},
|
||||
"netease:fuel": {
|
||||
"duration": 0
|
||||
},
|
||||
"netease:pathable": {
|
||||
"value": true
|
||||
},
|
||||
"netease:render_layer": {
|
||||
"value": "opaque"
|
||||
},
|
||||
"netease:solid": {
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"identifier": "test:test_block"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
整个结构与物品、实体非常类似,只是组件有所不同。
|
||||
|
||||
`minecraft:destroy_time`用于指定方块的硬度,原版方块的硬度可以在Minecraft Wiki的[方块挖掘时间](https://zh.minecraft.wiki/w/%E6%8C%96%E6%8E%98/%E6%96%B9%E5%9D%97%E6%8C%96%E6%8E%98%E6%97%B6%E9%97%B4)页面找到。`minecraft:explosion_resistance`用于指定方块的爆炸抗性。`minecraft:map_color`用于指定方块在地图上显示的颜色。
|
||||
|
||||
`netease:aabb`是中国版自定义的组件,可以指定方块的碰撞箱和击中箱。`netease:fuel`可以用来指定方块成为熔炉燃料。`netease:pathable`用于指定是否可被生物寻路。`netease:render_layer`用于指定该方块在渲染时的渲染图层,也即渲染时的透明性。`netease:solid`用于指定方块是否有固体属性。
|
||||
|
||||
关于更多的方块组件内容及使用方法,可以参考官方文档自定义方块的[JSON组件](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/15-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B8%B8%E6%88%8F%E5%86%85%E5%AE%B9/2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97/1-JSON%E7%BB%84%E4%BB%B6.html?catalog=1)章节。
|
||||
@@ -0,0 +1,98 @@
|
||||
# 物理属性
|
||||
|
||||
在本节中,我们回顾学习方块的一些物理属性。
|
||||
|
||||
## 在编辑器中添加
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
我们继续向我们的方块中添加一些属性。
|
||||
|
||||

|
||||
|
||||
同时,我们在方块基础属性中添加`base_block`。
|
||||
|
||||

|
||||
|
||||
并将其设置为重力方块。
|
||||
|
||||

|
||||
|
||||
我们的属性栏中便多出了这些属性。
|
||||
|
||||
## 实际文件
|
||||
|
||||
接下来我们观察方块服务端定义文件的变化:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"minecraft:block": {
|
||||
"components": {
|
||||
"minecraft:block_light_absorption": {
|
||||
"value": 0
|
||||
},
|
||||
"minecraft:block_light_emission": {
|
||||
"emission": 0
|
||||
},
|
||||
"minecraft:destroy_time": {
|
||||
"value": 0.0
|
||||
},
|
||||
"minecraft:explosion_resistance": {
|
||||
"value": 0.0
|
||||
},
|
||||
"minecraft:map_color": {
|
||||
"color": "#000000"
|
||||
},
|
||||
"minecraft:max_stack_size": {
|
||||
"value": 64
|
||||
},
|
||||
"netease:aabb": {
|
||||
"clip": [
|
||||
|
||||
],
|
||||
"collision": [
|
||||
|
||||
]
|
||||
},
|
||||
"netease:fall": {
|
||||
"adjust_percentage": 0.98,
|
||||
"cancel_drop": false,
|
||||
"fall_acceleration": 0.04,
|
||||
"fall_damage_amount": 2.0,
|
||||
"force_break_tick": 600,
|
||||
"hurt_entity": false,
|
||||
"max_fall_damage": 40,
|
||||
"min_height_remove_tick": 100,
|
||||
"send_python_event": false
|
||||
},
|
||||
"netease:fuel": {
|
||||
"duration": 0
|
||||
},
|
||||
"netease:pathable": {
|
||||
"value": true
|
||||
},
|
||||
"netease:render_layer": {
|
||||
"value": "opaque"
|
||||
},
|
||||
"netease:solid": {
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"base_block": "custom_heavy_block",
|
||||
"identifier": "test:test_block"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
现在我们的方块便具有了一些更多的物理属性,例如与光线的交互,或者是可以像沙子、铁砧那样下落。
|
||||
|
||||
`minecraft:block_light_absorption`用于指定方块的光线吸收度。世界中每个方块都有一个亮度,亮度默认会在向四周传播时如果相隔的是空气,每隔一个方块减少1,如果是一些“固体”方块,则直接减少15级,即不透光。这里我们可以更改这个值,使其阻挡自定义多的光线或者不吸收任何光线。
|
||||
|
||||
`minecraft:block_light_emission`则是定义了一个光源,其值代表光源发出多少级亮度的光。
|
||||
|
||||
`netease:fall`需要配合`description/base_block`为`custom_heavy_block`来使用,定义一个方块可以受重力下落。具体的下落方块字段属性的含义可以参考官方文档[自定义重力方块](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/15-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B8%B8%E6%88%8F%E5%86%85%E5%AE%B9/2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97/3-%E7%89%B9%E6%AE%8A%E6%96%B9%E5%9D%97/6-%E8%87%AA%E5%AE%9A%E4%B9%89%E9%87%8D%E5%8A%9B%E6%96%B9%E5%9D%97.html?catalog=1)页面。
|
||||
38
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/3-掉落.md
Normal file
38
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/3-掉落.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 掉落
|
||||
|
||||
在本节中,我们回顾学习方块的掉落属性。
|
||||
|
||||
## 在编辑器中添加
|
||||
|
||||

|
||||
|
||||
和实体一样,也如之前教程中所教的那样,方块的掉落是由`minecraft:loot`属性控制的。我们可以在行为包属性中找到该属性并添加。
|
||||
|
||||

|
||||
|
||||
我们之前的木桶战利品方块已经添加过该组件了。
|
||||
|
||||
## 实际文件
|
||||
|
||||
我们打开并查看木桶战利品方块的服务端定义文件:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"minecraft:block": {
|
||||
"components": {
|
||||
"minecraft:loot": {
|
||||
"table": "loot_tables/diamond_apple_loot.json"
|
||||
}
|
||||
},
|
||||
"description": {
|
||||
"identifier": "test:loot"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`minecraft:loot`便是控制方块被挖掘之后掉落物如何生成的组件,其下的`table`接受一个战利品表。如果没有设置该组件,则默认掉落方块自身。
|
||||
|
||||
当然,如果你希望方块不掉落任何物品,你可以设置原版的空掉落战利品表:`loot_tables/empty.json`。
|
||||
|
||||
125
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/4-外观.md
Normal file
125
docs/mconline/5-游戏入门与基础讲解/34-理解Json(数据驱动)/7-重温:自定义方块/4-外观.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# 外观
|
||||
|
||||
最后,我们回顾学习如何修改方块的外观。
|
||||
|
||||
## 在编辑器中添加
|
||||
|
||||

|
||||
|
||||
我们回到`test:test_block`方块,在“方块列表属性”中像这样选中并添加一些属性。
|
||||
|
||||

|
||||
|
||||
在属性栏中,我们产生了如图所示的属性列表。要注意的是,我们此处是为了演示对应关系而将他们全部添加进来了,事实上,在实际操作中,我们未必需要这些全部同时存在。你马上就会知道这些属性之间的含义有哪些异同。
|
||||
|
||||
## 实际文件
|
||||
|
||||
我么打开资源包的`blocks.json`文件:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": [
|
||||
1,
|
||||
1,
|
||||
0
|
||||
],
|
||||
"test:loot": {
|
||||
"textures": "test:barrel_side"
|
||||
},
|
||||
"test:test_block": {
|
||||
"client_entity": {
|
||||
"hand_model_use_client_entity": false,
|
||||
"identifier": ""
|
||||
},
|
||||
"isotropic": {
|
||||
"down": false,
|
||||
"east": false,
|
||||
"north": false,
|
||||
"south": false,
|
||||
"up": false,
|
||||
"west": false
|
||||
},
|
||||
"model_item_texture": "",
|
||||
"model_textures": [
|
||||
|
||||
],
|
||||
"netease_model": "",
|
||||
"sound": "stone",
|
||||
"textures": "test:custom_dirt"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
首先,我们关注`netease_model`字段,这用于控制方块是否使用自定义模型。使用自定义模型的方块如同实体一样,可以拥有更细致的外观。使用这种方法定义的自定义模型必须是网易特有的JSON格式,关于如何制作这种JSON格式,你可以详细参考官方文档的[自定义方块模型](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/15-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B8%B8%E6%88%8F%E5%86%85%E5%AE%B9/2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97/5-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97%E6%A8%A1%E5%9E%8B.html?catalog=1)页面。特别地,我们这里展示如何在编辑器中通过导入`.bbmodel`文件来产生网易自定义的方块模型格式:
|
||||
|
||||

|
||||
|
||||
在导入完成后,我们可以在资源包的`models`文件夹下的`netease_block`文件夹中找到对应模型的JSON文件。一个示例的JSON文件形如此:
|
||||
|
||||
```json
|
||||
{
|
||||
"format_version": "1.13.0",
|
||||
"netease:block_geometry": {
|
||||
"bones": [
|
||||
{
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-16, 0, 8],
|
||||
"size": [16, 16, 0],
|
||||
"pivot": [-8, 0, 8],
|
||||
"rotation": [0, -45, 0],
|
||||
"uv": {
|
||||
"north": {
|
||||
"texture": 0,
|
||||
"uv": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"uv_size": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-16, 0, 8],
|
||||
"size": [16, 16, 0],
|
||||
"pivot": [-8, 0, 8],
|
||||
"rotation": [0, 45, 0],
|
||||
"uv": {
|
||||
"north": {
|
||||
"texture": 0,
|
||||
"uv": [
|
||||
0,
|
||||
0
|
||||
],
|
||||
"uv_size": [
|
||||
16,
|
||||
16
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"name": "unknown_bone",
|
||||
"pivot": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"description": {
|
||||
"identifier": "customblocks:web_preset",
|
||||
"use_ao": true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
该模型文件是网易内置的一个特殊模型文件,标识符可以在文件内容中轻松找到,为`customblocks:web_preset`。由于是内置的,这也意味着我们不能再采用这个标识符作为模型名。
|
||||
|
||||
如果我们将`netease_model`字段设置为这个`customblocks:web_preset`模型,那么我们将允许直接在`blocks.json`文件中配置使用交叉贴图模型的方块。`model_textures`和`model_item_texture`字段将在此时有效。如果`netease_model`字段设置为其他值,这两个字段将无效。关于交叉贴图方块相关字段如何设置可以查看官方文档[自定义交叉贴图方块](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/15-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B8%B8%E6%88%8F%E5%86%85%E5%AE%B9/2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97/3-%E7%89%B9%E6%AE%8A%E6%96%B9%E5%9D%97/8-%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%A4%E5%8F%89%E8%B4%B4%E5%9B%BE%E6%96%B9%E5%9D%97.html?catalog=1)页面。
|
||||
|
||||
最后我们来看`client_entity`字段。该字段是用于配置客户端方块实体的。方块实体允许方块在客户端使用自定义模型的同时使用与实体一样的模型动画。在这里,我们接受的模型不再是方块模型,而是直接接受一个实体客户端定义文件的标识符,也就是直接引用一个实体客户端定义。可想而知,实体的所有渲染表现形式都可以轻松在这里的方块实体中实现。具体方块实体相关字段的配置可以参考官方文档[自定义方块实体外观](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/15-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B8%B8%E6%88%8F%E5%86%85%E5%AE%B9/2-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97/4.1-%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%B9%E5%9D%97%E5%AE%9E%E4%BD%93%E5%A4%96%E8%A7%82.html?catalog=1)页面。
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user