Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a80e928c8 | ||
|
|
332010d79b | ||
|
|
74e056146a | ||
|
|
a8d549266d | ||
|
|
cb1c065e58 | ||
|
|
dfa6901bff | ||
|
|
01cba91236 | ||
|
|
2289f38a4c | ||
|
|
a046b0d4ed | ||
|
|
df9b1e4620 |
51
mcguide/10-新内容/1-开发工作台/932-1.1.48.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
front: https://nie.res.netease.com/r/pic/20251126/f99d0bfc-97b5-40fc-8157-394f2776d1d3.jpg
|
||||
hard: 入门
|
||||
time: 2分钟
|
||||
selection: 23
|
||||
---
|
||||
|
||||
# 2025.11.26 版本1.1.48
|
||||
|
||||
## 编辑器/Mod PC支持4D皮肤
|
||||
|
||||
为方便开发者在 PC 端直接进行 4D 皮肤与模组的兼容性调试,MC Studio 在 3.6 版本起正式支持 4D 皮肤测试。开发者可以灵活选择手机端和MC Studio,进行模组与4D皮肤的兼容性测试
|
||||
|
||||
### 使用方法
|
||||
|
||||
1. 新建开发测试
|
||||
|
||||
新建开发测试按钮,选择3.6(或以上)版本的Mod PC
|
||||
|
||||

|
||||
|
||||
选择下方的皮肤选项,可以看到除了默认的史蒂夫和爱丽克丝以外新增4款4D皮肤皮肤,选择皮肤后即可开始测试
|
||||
|
||||

|
||||
|
||||
2. 配置已有存档
|
||||
|
||||
对于已有的3.6测试存档,可以点击配置
|
||||
|
||||

|
||||
|
||||
在配置界面中可以切换下方的皮肤
|
||||
|
||||

|
||||
|
||||
3. 局内切换
|
||||
|
||||
进入游戏时,会触发一次UpdatePlayerSkinClient客户端事件
|
||||
点击右上角菜单,选择切换皮肤选项,即可选择其他4D皮肤
|
||||
|
||||

|
||||
|
||||
注意:
|
||||
|
||||
- 菜单切换4D皮肤是模拟玩家使用局内更衣室切换皮肤的情况
|
||||
|
||||
- 菜单切换会触发UpdatePlayerSkinClientEvent事件,开发者可以使用IsHighLevelOfficialSkin、IsOfficialSkin、IsHighLevelMultiJointOfficialSkin、IsMultiJointOfficialSkin接口进行调试与兼容
|
||||
|
||||
## 屏蔽我的伙伴功能
|
||||
|
||||
- 自本3.6版本Mod PC和1.1.48版本MC Studio开始,Mod PC开发者包和地图编辑器中挖矿将不会出现我的伙伴
|
||||
BIN
mcguide/10-新内容/1-开发工作台/images/251126/1.1.48_1.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
mcguide/10-新内容/1-开发工作台/images/251126/1.1.48_2.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
mcguide/10-新内容/1-开发工作台/images/251126/1.1.48_3.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
mcguide/10-新内容/1-开发工作台/images/251126/1.1.48_4.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
mcguide/10-新内容/1-开发工作台/images/251126/1.1.48_5.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
@@ -9,31 +9,51 @@ selection: true
|
||||
## 申请材料准备
|
||||
### 材料列表
|
||||
入驻全过程中,共需要下列材料:
|
||||
|
||||
- 1个网易邮箱账号(推荐是163邮箱,126邮箱无法被添加为协作成员)
|
||||
|
||||
- 1个手机号码
|
||||
|
||||
- 本人身份证号和姓名
|
||||
|
||||
- 1个自己的QQ号
|
||||
|
||||
银行卡认证全过程中,共需要下列材料:
|
||||
|
||||
- 本人有效身份证
|
||||
|
||||
- 本人开户的银行卡
|
||||
|
||||
> 如果想注册企业开发者,也需要先注册个人开发者再转企业开发者。
|
||||
|
||||
### 材料准备攻略
|
||||
- 1.本人身份证号和姓名
|
||||
|
||||
如果您不知道您的身份证号,请您拿出自己的二代身份证卡片,翻到背面(人像面),下方有【公民身份号码】,请将这18位的号码输入到输入框中,若知晓则直接填写。
|
||||
|
||||
- 2.有效身份证
|
||||
|
||||
如果您没有申领身份证,则请前往属地派出所申领您的身份证。若您的身份证已过期,则请前往属地派出所换领您的身份证。注册身份证必须在有效期内,若有则跳过。
|
||||
|
||||
- 3.QQ号
|
||||
|
||||
前往QQ官网,下载客户端并注册QQ,将信息页面打开,复制自己的QQ号,若有则直接填写。
|
||||
|
||||
- 4.网易邮箱账号
|
||||
|
||||
前往[网易邮箱注册](https://zc.reg.163.com/regInitialized#/),注册一个账号,若有则跳过。
|
||||
|
||||
- 5.手机号码
|
||||
|
||||
前往营业厅办理1张手机卡,未成年人需要监护人办理,若有则跳过。
|
||||
|
||||
- 6.本人开户的银行卡
|
||||
|
||||
首先请先确定自己想要办哪家银行的银行卡,建议先在网上查询好哪家银行的网点比较近或比较好。
|
||||
|
||||
按照政策规定,16岁以下的未成年人办理银行卡需要监护人陪同办理,16岁以上、18岁以下的未成年人可以自行办理,也可以监护人陪同办理,18岁以上的成年人可以自行办理。**具体以各地区各银行各网点规定为准**
|
||||
|
||||
然后,前往网点,说明是开户人是您,让工作人员帮您开户,开户成功给到卡片后,**请核实卡片是否为I类账户,开户人是否为您的名字**。(**若开户人不是本人,则会打款失败,若不是I类账户,则会有限额,收益过多时,会打款失败**)
|
||||
然后,前往网点,说明开户人是您,让工作人员帮您开户,开户成功给到卡片后,**请核实卡片是否为I类账户,开户人是否为您的名字**。(**若开户人不是本人,则会打款失败,若不是I类账户,则会有限额,收益过多时,会打款失败**)
|
||||
|
||||
至此银行卡办理流程结束,若有则跳过。
|
||||
|
||||
@@ -51,6 +71,8 @@ selection: true
|
||||
|
||||
3 - 跳转至新的页面,根据提示填入信息和**真实姓名、身份证号(新增)**,并勾选同意《隐私协议》,点击 **【注册】** 按钮(注意:开发者昵称注册后每90天可以修改1次)。
|
||||
|
||||
注意:新版开发者平台更新后,登录已经**实名过网易游戏**的网易邮箱账号,会**直接用该网易邮箱账号实名信息快捷认证完成开发者注册**,请**仔细检查您想要注册的账号是不是已经完成实名**(**一旦开发者账号实名通过,就再也无法释放更改实名信息**)
|
||||
|
||||

|
||||
|
||||
> 每个信息的用途:
|
||||
@@ -69,21 +91,25 @@ selection: true
|
||||
|
||||
- 注:**1个身份证号只能实名1个开发者账号,请谨慎选择账号注册,注册后非特殊情况不支持修改,注销无法释放身份证信息。**
|
||||
|
||||
4 - 成功入驻后,需要进行银行卡认证,填写身份证、银行卡等信息,点击 **【申请银行卡认证】** 跳转至银行卡认证界面。
|
||||
4 - 成功入驻后
|
||||
|
||||
你已经可以开始发布免费作品(目前的状态称为“**快捷验证账号**”),但若你需要发布钻石作品获取收益,则需要继续进行银行卡认证,填写身份证、银行卡等信息,点击 **【申请银行卡认证】** 跳转至银行卡认证界面。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
如实完成以上信息的正确填写并提交后,随后等待 **实名认证审核** 即可,通过后就可以发布作品啦!
|
||||
如实完成以上信息的正确填写并提交后,随后等待 **实名认证审核** 即可,通过后就可以发布钻石作品啦!
|
||||
|
||||

|
||||
|
||||
## 如何个人开发者转企业开发者
|
||||
|
||||
1. 点击开发者平台右上角的头像,点击“申请企业开发者认证”。
|
||||
1. 点击开发者平台右上角的头像,点击“企业转个人申请”。
|
||||
2. 提交认证信息,等待审核通过,一般在10个工作日内给结果。
|
||||
|
||||
注意:申请通过后1年内不能再次发起变更
|
||||
|
||||
## 如何企业开发者转个人开发者
|
||||
|
||||
目前**不支持**手动转回个人开发者,需要等待年审提出转个人申请。
|
||||
@@ -94,12 +120,19 @@ selection: true
|
||||
|
||||
开发者账号审核通过一般在 **7 个工作日** ,请耐心等待。
|
||||
|
||||
### 快捷验证账号皮肤区限制
|
||||
|
||||
近期因响应相关政策,皮肤区加强管理,**暂时对快捷验证登录用户上传皮肤进行限制**,后续开放时间请各位开发者持续关注官网公告及开发者平台。在此,我们再次感谢各位开发者的理解与支持。
|
||||
|
||||
解决方案:**申请银行卡认证**
|
||||
|
||||
### 选择符合自身实际情况的结算方式
|
||||
|
||||
在注册开发者时,需要选择 **结算方式** (指通过《我的世界》中国版投稿付费钻石组件后获得的收益结算),开发者应当选择 **符合自身实际情况** 的结算方式,共两种:
|
||||
|
||||
1. 代扣代缴:由我司代为扣缴,请注意此选项仅针对非公司性质的个人开发者
|
||||
2. 自备税票:自行开票或者请税局代为开票
|
||||
**只有代扣代缴才可以享受收益结算“快捷打款”服务,自备税票还是在月底打款。**
|
||||
|
||||
建议个人开发者或小规模团队选择“代扣代缴”的结算方式,公司类型的开发者及个体工商户选择“自备税票”的结算方式。
|
||||
|
||||
|
||||
@@ -152,8 +152,60 @@ def onUpdatePlayerSkinClient(self,args):
|
||||
|
||||
### 测试皮肤
|
||||
|
||||
为方便开发者测试4D皮肤与模组本身的兼容性,官方在开发者测试服提供了测试用4D皮肤,可通过邮件领取
|
||||
#### 手机端测试
|
||||
|
||||
为方便开发者测试4D皮肤与模组本身的兼容性,官方在**开发者测试服(手机自测)**提供了测试用4D皮肤,可通过邮件领取
|
||||
|
||||
**注意:** 请各位开发者更新到3.5测试服,3.4该测试皮肤不会生效
|
||||
|
||||
#### MC Studio
|
||||
|
||||
为方便开发者在 PC 端直接进行 4D 皮肤与模组的兼容性调试,MC Studio 在 3.6 版本起正式支持 4D 皮肤测试。开发者可以灵活选择手机端和MC Studio,进行模组与4D皮肤的兼容性测试
|
||||
|
||||
##### 新增皮肤介绍
|
||||
|
||||
| 皮肤名 | 皮肤品质 | 是否为多关节 | 皮肤预览 |
|
||||
|--------------|----------|--------------|--------------|
|
||||
| 4D测试皮肤 | 传说 | 是 | |
|
||||
| 黑洞之心 | 传说 | 否 | |
|
||||
| 云霄战姬 | 稀有 | 否 | |
|
||||
| 4D学生晴音 | 稀有 | 否 | |
|
||||
|
||||
##### 使用教程
|
||||
|
||||
更新MC Studio至1.1.48版本(发布日期:11月26日)
|
||||
|
||||
1. 新建开发测试
|
||||
|
||||
新建开发测试按钮,选择3.6(或以上)版本
|
||||
|
||||
注意:4D皮肤仅支持3.6及以上版本使用
|
||||
|
||||

|
||||
|
||||
选择下方的皮肤选项,可以看到除了默认的史蒂夫和爱丽克丝以外新增4款4D皮肤皮肤,选择皮肤后即可开始测试
|
||||
|
||||

|
||||
|
||||
2. 配置已有存档
|
||||
|
||||
对于已有的3.6测试存档,可以点击配置
|
||||
|
||||

|
||||
|
||||
在配置界面中可以切换下方的皮肤
|
||||
|
||||

|
||||
|
||||
3. 局内切换
|
||||
进入游戏时,会触发一次UpdatePlayerSkinClient客户端事件
|
||||
|
||||
点击右上角菜单,选择切换皮肤选项,即可选择其他4D皮肤
|
||||
|
||||

|
||||
|
||||
说明:
|
||||
|
||||
1.菜单切换4D皮肤是模拟玩家使用局内更衣室切换皮肤的情况
|
||||
|
||||
2.菜单切换会触发UpdatePlayerSkinClientEvent事件,开发者可以使用IsHighLevelOfficialSkin、IsOfficialSkin、IsHighLevelMultiJointOfficialSkin、IsMultiJointOfficialSkin接口进行调试与兼容
|
||||
BIN
mcguide/16-美术/6-模型和动作/resources/0_10.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_11.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_3.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_4.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_5.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_6.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_7.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_8.png
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
mcguide/16-美术/6-模型和动作/resources/0_9.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
@@ -378,7 +378,7 @@ mc里的特效实例有两种承载方式,一种是在世界空间单独存在
|
||||
动画是否循环播放,如果设置为false,则会在每个发射器的生命周期开始时重新播放动画。
|
||||
- `size`
|
||||
设置发射出来的骨骼模型的大小,支持molang表达式。
|
||||
- `ignore_lighting`(3.6beta版内容)
|
||||
- `ignore_lighting`
|
||||
设置粒子模型是否受到环境光照影响,与实体json中ignore_lighting作用相同。该值设置为true时,粒子模型不受环境光影响,始终保持默认亮度。
|
||||
|
||||
```json
|
||||
|
||||
@@ -1188,12 +1188,6 @@ JSON如下:
|
||||
"size": [100, 100],
|
||||
"offset": "@UIDemo.animation_in",
|
||||
"texture": "textures/netease/common/image/default",
|
||||
"is_new_nine_slice": false,
|
||||
"nine_slice_buttom" : 0,
|
||||
"nine_slice_left" : 0,
|
||||
"nine_slice_right" : 0,
|
||||
"nine_slice_top" : 0,
|
||||
"nineslice_size" : [0, 0, 0, 0],
|
||||
"type": "image"
|
||||
},
|
||||
"animation_in": {
|
||||
@@ -1246,104 +1240,6 @@ button是按钮控件,按钮有四种状态,分别为default/hover/pressed/l
|
||||
下面是一个使用了三种状态的按钮,我们继承common.button里的属性,无需自己再定义default_control等属性。
|
||||
|
||||
```json
|
||||
{
|
||||
"button0@common.button" : {
|
||||
"$default_texture" : "textures/netease/common/button/default",
|
||||
"$hover_texture" : "textures/netease/common/button/hover",
|
||||
"$is_new_nine_slice" : false,
|
||||
"$label_color" : [ 1, 1, 1 ],
|
||||
"$label_font_scale_factor" : 1.0,
|
||||
"$label_font_size" : "large",
|
||||
"$label_layer" : 3,
|
||||
"$label_offset" : [ 0, 0 ],
|
||||
"$label_text" : "Button",
|
||||
"$nine_slice_buttom" : 0,
|
||||
"$nine_slice_left" : 0,
|
||||
"$nine_slice_right" : 0,
|
||||
"$nine_slice_top" : 0,
|
||||
"$nineslice_size" : [ 0, 0, 0, 0 ],
|
||||
"$pressed_button_name" : "%fpsBattle.click",
|
||||
"$pressed_texture" : "textures/netease/common/button/pressed",
|
||||
"$texture_layer" : 2,
|
||||
"anchor_from" : "center",
|
||||
"anchor_to" : "center",
|
||||
"is_handle_button_move_event" : true,
|
||||
"button_mappings" : [],
|
||||
"bindings" : [
|
||||
{
|
||||
"binding_collection_name" : "",
|
||||
"binding_condition" : "always_when_visible",
|
||||
"binding_type" : "collection_details"
|
||||
}
|
||||
],
|
||||
"controls" : [
|
||||
{
|
||||
"default@fpsBattle.default" : {}
|
||||
},
|
||||
{
|
||||
"hover@fpsBattle.hover" : {}
|
||||
},
|
||||
{
|
||||
"pressed@fpsBattle.pressed" : {}
|
||||
},
|
||||
{
|
||||
"button_label@fpsBattle.button_label" : {}
|
||||
}
|
||||
],
|
||||
"default_control" : "default",
|
||||
"hover_control" : "hover",
|
||||
"layer" : 3,
|
||||
"offset" : [ 0, 0 ],
|
||||
"pressed_control" : "pressed",
|
||||
"size" : [ 100, 50 ],
|
||||
"type" : "button",
|
||||
"visible" : true
|
||||
},
|
||||
"button_label" : {
|
||||
"color" : "$label_color",
|
||||
"font_scale_factor" : "$label_font_scale_factor",
|
||||
"font_size" : "$label_font_size",
|
||||
"font_type" : "smooth",
|
||||
"layer" : "$label_layer",
|
||||
"max_size" : [ "100%", "100%" ],
|
||||
"offset" : [ 0, 0 ],
|
||||
"shadow" : false,
|
||||
"text" : "$label_text",
|
||||
"text_alignment" : "center",
|
||||
"type" : "label"
|
||||
},
|
||||
"default" : {
|
||||
"is_new_nine_slice" : "$is_new_nine_slice",
|
||||
"layer" : "$texture_layer",
|
||||
"nine_slice_buttom" : "$nine_slice_buttom",
|
||||
"nine_slice_left" : "$nine_slice_left",
|
||||
"nine_slice_right" : "$nine_slice_right",
|
||||
"nine_slice_top" : "$nine_slice_top",
|
||||
"texture" : "$default_texture",
|
||||
"type" : "image"
|
||||
},
|
||||
"hover" : {
|
||||
"is_new_nine_slice" : "$is_new_nine_slice",
|
||||
"layer" : "$texture_layer",
|
||||
"nine_slice_buttom" : "$nine_slice_buttom",
|
||||
"nine_slice_left" : "$nine_slice_left",
|
||||
"nine_slice_right" : "$nine_slice_right",
|
||||
"nine_slice_top" : "$nine_slice_top",
|
||||
"texture" : "$hover_texture",
|
||||
"type" : "image"
|
||||
},
|
||||
"pressed" : {
|
||||
"is_new_nine_slice" : "$is_new_nine_slice",
|
||||
"layer" : "$texture_layer",
|
||||
"nine_slice_buttom" : "$nine_slice_buttom",
|
||||
"nine_slice_left" : "$nine_slice_left",
|
||||
"nine_slice_right" : "$nine_slice_right",
|
||||
"nine_slice_top" : "$nine_slice_top",
|
||||
"texture" : "$pressed_texture",
|
||||
"type" : "image"
|
||||
}
|
||||
}
|
||||
```
|
||||
"button0@common.button": {
|
||||
"size": [100, 50],
|
||||
"button_mappings": [], //和$pressed_button_name只能二选一
|
||||
@@ -2372,7 +2268,7 @@ hover事件的触发本质上是与鼠标悬浮相关,在PC模式中,当鼠
|
||||
|
||||
UI编辑器暂时不支持编辑
|
||||
|
||||
### MiniMap
|
||||
### mini\_map
|
||||
|
||||
该控件可以在UI上画小地图,需要继承mini_map命名空间下的mini_map_wrapper控件。
|
||||
|
||||
@@ -2423,290 +2319,19 @@ UI编辑器暂时不支持编辑
|
||||
| $face_icon_size | 脸部icon的大小,默认为[4,4] |
|
||||
| $face_icon_bg_color | 标记icon底部背景颜色,默认为白色 |
|
||||
| $highest_y | 绘制的高度最大值,默认当前区块的最大值,当该值为-1时,表示最大高度值为玩家当前位置所在的高度 |
|
||||
| enable_scissor_test | 超出父控件区域后是否裁剪,默认为false, [enable_scissor_test](https://wiki.bedrock.dev/json-ui/json-ui-documentation.html)|
|
||||
|
||||
### **颜色渐变控件(gradientRenderer)**
|
||||
|
||||
该控件可以用于在ui上绘制渐变颜色
|
||||
|
||||
```json
|
||||
{
|
||||
"gradient": {
|
||||
"color1": [1, 0, 1, 1],
|
||||
"color2": [0, 0, 1, 1],
|
||||
"gradient_direction": "vertical",
|
||||
"renderer": "gradient_renderer",
|
||||
"type": "custom"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| 变量 | 解释 |
|
||||
| ------------------ | -------------------------------------- |
|
||||
| color1 | 渐变起始颜色的RGBA |
|
||||
| color2 | 渐变结束颜色的RGBA |
|
||||
| gradient_direction | 渐变方向,可选"vertical"或"horizontal" |
|
||||
| renderer | 需要指定为gradient_renderer |
|
||||
| type | 需要指定为custom |
|
||||
|
||||
<img src="./picture/IntroduceUI/IntroduceUI-50.png" alt="图片描述" style="display: block; margin-left: 0;" />
|
||||
|
||||
下图为UI编辑器中颜色渐变控件的属性编辑面板
|
||||
|
||||
<img src="./picture/IntroduceUI/IntroduceUI-51.png" alt="图片描述" style="display: block; margin-left: 0;" />
|
||||
|
||||
| 变量 | 解释 |
|
||||
| ------------ | ------------------------------------------------------ |
|
||||
| 渐变起始颜色 | 对应color1字段,支持调整不透明度(Alpha通道) |
|
||||
| 渐变结束颜色 | 对应color2字段,支持调整不透明度(Alpha通道) |
|
||||
| 渐变方向 | 对应gradient_direction字段,可选“垂直排布”或“水平排布” |
|
||||
### 继承控件
|
||||
|
||||
继承控件允许开发者选择并继承目标控件,继承成功后该控件拥有目标控件的所有属性,并可以重写其中任何一个属性的数据。
|
||||
|
||||
#### 继承写法简述
|
||||
|
||||
在界面json文件所有的编写技巧中,最为好用和灵活的功能当属继承写法。当界面中有一个需求,需要将若干个相同的控件按序排列,除了可以通过复制粘贴出若干个控件副本外,继承模板控件并只修改我们所需要修改的属性,其他的属性依然沿用模板控件的数据才是最便捷,也是最漂亮的写法。下面我们从一个简单的例子入手熟悉继承的写法,从例子中我们可以快速熟悉继承技巧。
|
||||
|
||||
```json
|
||||
{
|
||||
"main" : {
|
||||
"absorbs_input" : true,
|
||||
"always_accepts_input" : false,
|
||||
"controls" : [
|
||||
{
|
||||
"label0@myInherit.label0" : {}
|
||||
},
|
||||
{
|
||||
"inheritor0@myInherit.label0" : {
|
||||
"offset" : [ 10.0, 0.0 ]
|
||||
}
|
||||
},
|
||||
{
|
||||
"inheritor1@myInherit.label0" : {
|
||||
"offset" : [ 20.0, 0.0 ]
|
||||
}
|
||||
}
|
||||
],
|
||||
"force_render_below" : false,
|
||||
"is_showing_menu" : true,
|
||||
"render_game_behind" : true,
|
||||
"render_only_when_topmost" : true,
|
||||
"should_steal_mouse" : false,
|
||||
"type" : "screen"
|
||||
},
|
||||
"label0" : {
|
||||
"anchor_from" : "center",
|
||||
"anchor_to" : "center",
|
||||
"color" : [ 1, 1, 1 ],
|
||||
"font_scale_factor" : 1.0,
|
||||
"font_size" : "normal",
|
||||
"font_type" : "smooth",
|
||||
"layer" : 0,
|
||||
"offset" : [ 0, 0 ],
|
||||
"shadow" : false,
|
||||
"size" : [ 100, 100 ],
|
||||
"text" : "Hello World!",
|
||||
"text_alignment" : "center",
|
||||
"type" : "label",
|
||||
"visible" : true
|
||||
},
|
||||
"namespace" : "myInherit"
|
||||
}
|
||||
```
|
||||
|
||||
该段json描述了在main画布中创建了一个文本控件label0,并使继承控件inherit0和inherit1均继承了label0控件,并重写了offset属性,在场景中就得到了三个文本控件,这三个文本控件除了在场景中的位置因为重写而不同外,其他的属性一模一样。但是要注意的是,可以被继承的控件必须写在json文件的最外层,和main处在同一层级,即一个命名空间下有且仅有一个该名称的控件,满足该条件的控件才可以被继承。
|
||||
#### UI编辑器中的继承
|
||||
|
||||
新版的UI编辑器对继承提供了更可视化的方法,请参考[继承和自定义控件](./13-继承和自定义控件.md)。
|
||||
|
||||
## Python编写说明
|
||||
|
||||
### 必要的属性
|
||||
|
||||
```python
|
||||
import mod.client.extraClientApi as clientApi
|
||||
ViewBinder = clientApi.GetViewBinderCls()
|
||||
ViewRequest = clientApi.GetViewViewRequestCls()
|
||||
ScreenNode = clientApi.GetScreenNodeCls()
|
||||
```
|
||||
| 变量 | 解释 |
|
||||
| :------------: | :----------------------------------- |
|
||||
| extraClientApi | 我们开发的Client端Api接口文件 |
|
||||
| ViewBinder | 用于绑定回调函数的类型和响应的方法 |
|
||||
| ViewRequest | 用于返回绑定函数的返回值 |
|
||||
| ScreenNode | UI的基类,用于继承基类的方法和UI管理 |
|
||||
|
||||
### UI界面初始化
|
||||
|
||||
```python
|
||||
import mod.client.extraClientApi as clientApi
|
||||
|
||||
ScreenNode = clientApi.GetScreenNodeCls()
|
||||
|
||||
class TestScreen(ScreenNode):
|
||||
def __init__(self, namespace, name, param):
|
||||
ScreenNode.__init__(self, namespace, name, param)
|
||||
```
|
||||
|
||||
ScreenNode是我们的UI节点基类,必须继承。
|
||||
|
||||
```python
|
||||
# Bind Type
|
||||
class ViewBinder(object):
|
||||
ButtonFilter = 0x10000000
|
||||
BF_ButtonClickUp = 0 | ButtonFilter
|
||||
BF_ButtonClickDown = 1 | ButtonFilter
|
||||
BF_ButtonClick = 2 | ButtonFilter
|
||||
BF_ButtonClickCancel = 3
|
||||
BF_InteractButtonClick = 4
|
||||
BindFilter = 0x01000000
|
||||
BF_BindBool = 5 | BindFilter
|
||||
BF_BindInt = 6 | BindFilter
|
||||
BF_BindFloat = 7 | BindFilter
|
||||
BF_BindString = 8 | BindFilter
|
||||
BF_BindGridSize = 9 | BindFilter
|
||||
BF_BindColor = 10 | BindFilter
|
||||
EditFilter = 0x00100000
|
||||
BF_EditChanged = 11 | EditFilter
|
||||
BF_EditFinished = 12 | EditFilter
|
||||
ToggleFilter = 0x00010000
|
||||
BF_ToggleChanged = 13 | ToggleFilter
|
||||
|
||||
# Return Type
|
||||
class ViewRequest(object):
|
||||
Nothing = 0
|
||||
Refresh = 1 << 0
|
||||
PointerHeldEventsRequest = 1 << 1
|
||||
PointerHeldEventsCancel = 1 << 2
|
||||
Exit = 1 << 3
|
||||
```
|
||||
### UI绑定和返回
|
||||
|
||||
UI的绑定分为binding单个绑定和binding_collection集合绑定,适合集合容器。
|
||||
|
||||
| 绑定类型 | 绑定方式 | 解释 |
|
||||
| :--------------------- | :---------------------------: | :------------------------------------- |
|
||||
| BF_ButtonClickUp | binding | 绑定按钮的Up事件 |
|
||||
| BF_ButtonClickDown | binding | 绑定按钮的Down事件 |
|
||||
| BF_ButtonClick | binding | 同时绑定Up和Down事件 |
|
||||
| BF_ButtonClickCancel | binding | 绑定按钮的Cancel事件(按钮down其他up) |
|
||||
| BF_InteractButtonClick | binding | 绑定游戏原生的按钮点击事件 |
|
||||
| BF_BindBool | binding \| binding_collection | 绑定Bool变量 |
|
||||
| BF_BindInt | binding \| binding_collection | 绑定Int变量 |
|
||||
| BF_BindFloat | binding \| binding_collection | 绑定Float变量 |
|
||||
| BF_BindString | binding \| binding_collection | 绑定String变量 |
|
||||
| BF_BindGridSize | binding | 绑定GridSize变量 |
|
||||
| BF_BindColor | binding \| binding_collection | 绑定颜色变量 |
|
||||
| BF_EditChanged | binding | 绑定输入框输入改变事件 |
|
||||
| BF_EditFinished | binding | 绑定输入框输入完成事件 |
|
||||
| BF_ToggleChanged | binding | 开关状态改变事件 |
|
||||
|
||||
**binding(bind_flag, binding_name = None)**
|
||||
|
||||
bind_flag为上文中绑定类型,binding_name为绑定名称。
|
||||
|
||||
binding_name为脚本绑定变量,binding_name_override为引擎变量,json格式如下
|
||||
|
||||
```json
|
||||
{
|
||||
"bindings": [
|
||||
{
|
||||
"binding_condition" : "always",
|
||||
"binding_name" : "#scoreboard_grid.item_count",
|
||||
"binding_name_override" : "#StackGridItemsCount"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
对应的Python代码如下
|
||||
```python
|
||||
import mod.client.extraClientApi as clientApi
|
||||
|
||||
ViewBinder = clientApi.GetViewBinderCls()
|
||||
|
||||
@ViewBinder.binding(ViewBinder.BF_BindInt, "#scoreboard_grid.item_count")
|
||||
def OnStarkGridResize(self):
|
||||
return len(self.scoreBoardList)
|
||||
```
|
||||
|
||||
**binding_collection(bind_flag, collection_name, binding_name = None)**
|
||||
|
||||
bind_flag为上文中的绑定类型,collection_name为集合名称,binding_name为绑定的变量名称。
|
||||
|
||||
集合的json如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"collection_name" : "scoreboard_stackgrid"
|
||||
}
|
||||
```
|
||||
|
||||
在集合的子控件中,binding_collection_name为集合名,binding_condition为绑定条件,binding_name为绑定名称,binding_type为collection绑定,property_bag设置他的初始值,text为它的绑定值。
|
||||
|
||||
```json
|
||||
{
|
||||
"label_score_board" : {
|
||||
"bindings" : [
|
||||
{
|
||||
"binding_collection_name" : "scoreboard_stackgrid",
|
||||
"binding_condition" : "always",
|
||||
"binding_name" : "#label_score_board.text",
|
||||
"binding_type" : "collection"
|
||||
}
|
||||
],
|
||||
"offset" : [ "0%+0 px", "0%+0px" ],
|
||||
"property_bag" : {
|
||||
"#label_score_board.text" : "666666666666"
|
||||
},
|
||||
"text" : "#label_score_board.text",
|
||||
"text_alignment" : "left",
|
||||
"type" : "label",
|
||||
"visible" : true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
对应的Python代码如下,其中index表示在集合中的哪一元素。
|
||||
|
||||
```python
|
||||
import mod.client.extraClientApi as clientApi
|
||||
|
||||
ViewBinder = clientApi.GetViewBinderCls()
|
||||
|
||||
@ViewBinder.binding_collection(ViewBinder.BF_BindString, "scoreboard_stackgrid", "#label_score_board.text")
|
||||
def OnRefreshScoreBoardLabel(self, index):
|
||||
return self.scoreBoardList[index] if len(self.scoreBoardList) > index else ""
|
||||
```
|
||||
## 接口调用说明
|
||||
|
||||
### 参数命名说明
|
||||
|
||||
@Mod.Binding(name = myModName, version = myModVersion)
|
||||
|
||||
| 参数 | 类型 | 解释 |
|
||||
| :----------: | :--: | :------ |
|
||||
| myModName | str | Mod名称 |
|
||||
| myModVersion | str | Mod版本 |
|
||||
|
||||
假设设置Mod名称为"myModName",示例:
|
||||
```python
|
||||
from mod.common.mod import Mod
|
||||
@Mod.Binding(name = "myModName", version = "0.1")
|
||||
class MyModClass(object):
|
||||
def __init__(self):
|
||||
pass
|
||||
```
|
||||
|
||||
### 界面创建流程及生命周期
|
||||
### 界面创建流程
|
||||
|
||||
界面在<a href="../../mcdocs/1-ModAPI/事件/UI.html#uiinitfinished" rel="noopenner"> UiInitFinished </a>事件发送之后就可以开始创建
|
||||
|
||||
创建UI的第一步是UI的注册,通过调用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#registerui" rel="noopenner"> RegisterUI </a>接口,将想开启UI的相关数据进行注册。同一UI只需要注册一次即可
|
||||
创建UI的第一步是UI的注册,通过调用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#registerui" rel="noopenner"> RegisterUI </a>接口,传入UI类路径和JSON控件路径注册UI,同一UI只需要注册一次即可。
|
||||
|
||||
注册完成之后就可以在需要的时候实例化UI,可使用的接口有<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#createui" rel="noopenner"> CreateUI </a>和<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#pushscreen" rel="noopenner"> PushScreen </a>两种。使用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#createui" rel="noopenner"> CreateUI </a>生成的界面都生成在操作UI下,不同的生成参数UI层级不同,而使用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#pushscreen" rel="noopenner"> PushScreen </a>生成的界面以堆栈管理的方式生成,该界面生成时上一个<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#pushscreen" rel="noopenner"> PushScreen </a>生成的界面就会被隐藏。值得注意的是,MC原生界面(比如暂停界面,背包界面等)也是类似<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#pushscreen" rel="noopenner"> PushScreen </a>的方式加载进来,并以堆栈管理。
|
||||
|
||||
在UI创建完成之后,可以调用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#getui" rel="noopenner"> GetUI </a>接口拿到UI对应的ScreenNode实例。
|
||||
|
||||
如果想获取MC原生界面的实例,则需要监听原生界面Push进来的事件<a href="../../mcdocs/1-ModAPI/事件/UI.html#pushscreenevent" rel="noopenner"> PushScreenEvent </a>,然后在事件回调中调用接口<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#gettoppushedui" rel="noopenner"> GetTopPushedUI </a>。
|
||||
|
||||
每个ScreenNode都有生命周期函数,生命周期函数会被自动在以下情况下调用,重写函数可以完成一些逻辑。
|
||||
@@ -2716,9 +2341,38 @@ class MyModClass(object):
|
||||
| <a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#create" rel="noopenner"> Create </a> | UI创建成功时调用 |
|
||||
| <a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#onactive" rel="noopenner"> OnActive </a> | UI重新回到栈顶时调用 |
|
||||
| <a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#ondeactive" rel="noopenner"> OnDeactive </a> | 栈顶UI有其他UI入栈时调用 |
|
||||
| <a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#update" rel="noopenner"> Update </a> | 客户端每帧调用,1秒有30帧 |
|
||||
| <a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#destroy" rel="noopenner"> Destroy </a> | UI销毁时调用 |
|
||||
|
||||
最后,当UI需要销毁时,可以调用ScreenNode实例的<a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#setremove" rel="noopenner"> SetRemove </a>接口,此外使用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#pushscreen" rel="noopenner"> PushScreen </a>接口创建的界面还可以使用<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#popscreen" rel="noopenner"> PopScreen </a>接口进行销毁。
|
||||
|
||||
### 编写UI类
|
||||
|
||||
UI类用于编写界面逻辑,需要在<a href="../../mcdocs/1-ModAPI/接口/自定义UI/通用.html#registerui" rel="noopenner"> RegisterUI </a>时传入UI类的路径。一个客户端类可以对应多个UI类。UI类一般包含以下内容:
|
||||
|
||||
```python
|
||||
import client.extraClientApi as clientApi
|
||||
ScreenNode = clientApi.GetScreenNodeCls()
|
||||
ViewBinder = clientApi.GetViewBinderCls()
|
||||
ViewRequest = clientApi.GetViewViewRequestCls()
|
||||
Client = clientApi.GetSystem('xxxxMod', 'xxxxClientSystem')
|
||||
CF = clientApi.GetEngineCompFactory()
|
||||
PID = clientApi.GetLocalPlayerId()
|
||||
|
||||
class uiName(ScreenNode):
|
||||
def __init__(self, namespace, name, param):
|
||||
ScreenNode.__init__(self, namespace, name, param)
|
||||
|
||||
def Create(self):
|
||||
pass
|
||||
|
||||
def Destroy(self):
|
||||
pass
|
||||
|
||||
def Update(self):
|
||||
pass
|
||||
```
|
||||
|
||||
| 变量 | 解释 |
|
||||
| :------------: | :----------------------------------- |
|
||||
| extraClientApi | 我们开发的Client端Api接口文件 |
|
||||
@@ -2858,11 +2512,9 @@ button_data: {
|
||||
在字符串中嵌入`<link>link_data</link>`样式会被解析成超链接,外观和普通文本无异但可以被点击,link_data为特殊化数据,开发者可以在其中添加符合JSON格式的自定义数据,在点击富文本中对应超链接时会将link_data通过回调函数整个返回,以下属性为必须属性,text表示显示文本,format_code表示该段显示文本的样式代码,注意,基岩版的文本控件不支持下划线和删除线。
|
||||
|
||||
```json
|
||||
{
|
||||
"link_data":{
|
||||
"text":"末影人",
|
||||
"format_code":"§2"
|
||||
}
|
||||
link_data: {
|
||||
"text": "末影人",
|
||||
"format_code": "§2"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ python是一门很容易入门的编程语言,没有接触过python的开发
|
||||
| ----------------------- | ------------------------------------------------------------ |
|
||||
| tutorialScripts | python脚本的根目录,该目录的脚本会被加到python运行环境下,可以从该路径开始import脚本文件,例如from tutorilaScripts import modMain |
|
||||
| \_\_init\_\_.py | 是python module的标识,表示这是一个可以import的module,同时也可以做一些初始化的操作,内容可为空,但是文件必须有。 |
|
||||
| modMain.py | 必须有该文件,用来初始化我们的Mod |
|
||||
| modMain.py | 必须有该文件,用来初始化我们的Mod。**因为会基于该文件的层级进行打包,所以该文件必须放在Scripts(脚本)文件夹下,否则会导致Mod在手机端失效** |
|
||||
| tutorialClientSystem.py | 执行客户端逻辑的system |
|
||||
| tutorialServerSystem.py | 执行服务器逻辑的system |
|
||||
|
||||
|
||||
@@ -168,6 +168,112 @@ time: 分钟
|
||||
|
||||
指定语言文件键,用于映射鼠标悬停在物品栏和快捷栏中的方块物品上时显示的文本。如果给定的字符串无法解析为本地字符串,则将显示给定的原始字符串。使用需要方块行为的 `format_version`大于等于1.19.60。
|
||||
|
||||
|
||||
<span id="netease_portal"></span>
|
||||
|
||||
### netease:portal
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| -------------------- | ------ | ------ | ------------------------------------------------------------ |
|
||||
| particle_east_west | string | | 可选,对应于粒子json文件中的identifier,用于控制方块与Z轴同向时播放的粒子特效 |
|
||||
| particle_north_south | string | | 可选,对应于粒子json文件中的identifier,用于控制方块与X轴同向时播放的粒子特效 |
|
||||
| target_dimension | int | | 必须设置,用于控制进入传送门方块后到达的目标维度 |
|
||||
|
||||
- **自定义传送门方块的base_block需要设为portal。**
|
||||
- 粒子特效应放置于`resource/particles`,粒子特效编写可参考[官方关于粒子组件的说明](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/particlesreference/particlecomponentlist?view=minecraft-bedrock-stable)。
|
||||
- **目标维度为0或3-20的整数或者大于21的新版自定义维度的数值,1(下界)和2(末地)会被视作0来处理。**
|
||||
|
||||
|
||||
|
||||
<span id="netease_mob_spawner"></span>
|
||||
|
||||
### netease:mob_spawner
|
||||
|
||||
可在netease:mob_spawner组件中设置刷怪的类型,目前支持原生生物、微软自定义生物。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ---- | ------ | ------ | -------------------------------- |
|
||||
| type | string | | 必须设置,用于控制生成的生物类型 |
|
||||
|
||||
- 原生生物type为"minecraft:Namespaced ID",如"minecraft:parrot",Namespaced ID可参考[官方wiki](https://zh.minecraft.wiki/w/%E5%9F%BA%E5%B2%A9%E7%89%88%E6%95%B0%E6%8D%AE%E5%80%BC/%E5%AE%9E%E4%BD%93ID)中各Mob的详细信息。
|
||||
- 微软自定义生物type为"minecraft:entity"中"description"的"identifier"项,可参考[自定义生物文档](../../3-自定义生物/01-自定义基础生物.md)及[CustomBlocksMod](../../../13-模组SDK编程/60-Demo示例.md#CustomBlocksMod)中的customblocks_test_mobspawner1.json。
|
||||
- 自定义刷怪箱方块的base_block需要设为mob_spawner。
|
||||
|
||||
|
||||
|
||||
<span id="netease_water_destory"></span>
|
||||
|
||||
### netease:water_destory
|
||||
|
||||
可在netease:water_destory组件中设置是否无法摆放在水源和流水方块中,如果设置为true,会被流水摧毁。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | -------------------------------------------- |
|
||||
| value | bool | | 必须设置,用于设置无法摆放在水源和流水方块中 |
|
||||
|
||||
- 可以在方块的loottable中设置被水流摧毁后的掉落物
|
||||
|
||||
|
||||
|
||||
<span id="netease_water_only"></span>
|
||||
|
||||
### netease:water_only
|
||||
|
||||
可在netease:water_only组件中设置是否必须放置在水中。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | ------------------------------------ |
|
||||
| value | bool | | 必须设置,用于设置是否必须放在水中。 |
|
||||
|
||||
|
||||
|
||||
<span id="netease_water_source"></span>
|
||||
|
||||
### netease:water_source
|
||||
|
||||
可在netease:water_source组件中设置是否在水源方块中表现为含水。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | -------------------------------------- |
|
||||
| value | bool | | 必须设置,是否在水源方块中表现为含水。 |
|
||||
|
||||
|
||||
|
||||
<span id="netease_water_flow_source"></span>
|
||||
|
||||
### netease:water_flow_source
|
||||
|
||||
可在netease:water_flow_source组件中设置是否在水源和流水方块中表现为含水。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | -------------------------------------------- |
|
||||
| value | bool | | 必须设置,是否在水源和流水方块中表现为含水。 |
|
||||
|
||||
|
||||
|
||||
<span id="netease_snow_recover_able"></span>
|
||||
|
||||
### netease:snow_recover_able
|
||||
|
||||
可在netease:snow_recover_able组件中设置方块是否能含雪。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | -------------------------------- |
|
||||
| value | bool | | 必须设置,用于设置方块是否能含雪 |
|
||||
|
||||
- 目前自定义含雪方块和方块实体不兼容(包括自定义方块实体,自定义刷怪箱等),请不要一起使用。
|
||||
|
||||
|
||||
<span id="netease_can_built_over"></span>
|
||||
|
||||
### netease:can_built_over
|
||||
|
||||
可在netease:can_built_over组件中设置在放置其他方块时,如果该位置已有含netease:can_built_over配置的方块,其他方块能否和放置在此方块中。
|
||||
|
||||
| 键 | 类型 | 默认值 | 解释 |
|
||||
| ----- | ---- | ------ | ------------------------------------------------------------ |
|
||||
| value | bool | | 必须设置,用于设置在放置其他方块时,如果该位置已有含netease:can_built_over配置的方块,其他方块能否和放置在此方块中 |
|
||||
|
||||
<span id="netease_tier"></span>
|
||||
|
||||
### netease:tier
|
||||
|
||||
@@ -324,12 +324,18 @@ sidebarDepth: 4
|
||||
| <div style="width:100px">属性</div> | 解释 |
|
||||
| :---------------------------------: | ------------------------------------------------------------ |
|
||||
| recipeId | 合成配方的ID,一般为合成的物品的**identifier**,支持[自定义配方](../5-自定义配方.md) |
|
||||
| recipeShapeId | 配方Id,对应配方Json的identifier字段。 |
|
||||
| tag | 配方tag,对应配方Json的tags字段,可不配置,默认为crafing_table。仅支持工作台、自定义工作台、制图台、切石机配方 |
|
||||
| recipeSize | 合成表显示的大小,用二维浮点数组表示。<br/>该属性系统默认值为 [90.0, 48.0],可以不写。 |
|
||||
| aux | 合成物品的附加值**AuxValue**,该属性可以不写,系统默认值为0(整型)。 |
|
||||
| info | 合成物品的备注文本,显示在物品的下方。如果不写该属性,则无备注,内容文本会自动往上对齐。 |
|
||||
| content | 内容文本,默认值为"",支持格式化文本。文本框大小会自动适应页面,如果文本内容过多将不显示超出页面的文字。 |
|
||||
| contentTextSize | 内容文本的字体大小。<br>该属性系统默认值为**BookConfig.TextSize.content**,数值为**10**(整型),可以不写。 |
|
||||
|
||||
注意:
|
||||
- **recipeId仍然需要配置**
|
||||
- 如果同时配置recipeId、recipeShapeId,则会优先使用recipeShapeId获取配方、如果获取失败,才使用recipeId
|
||||
|
||||
#### 6.实体页
|
||||
|
||||
实体页在json文件中的type属性值为 "**entityPage**",展示的实体会**自动顺时针旋转**,示例在**behavior_pack/customBooks/entry/entityEntry.json**。
|
||||
|
||||
@@ -228,7 +228,7 @@ time: 分钟
|
||||
| 字段 | 名称 | 描述 |
|
||||
| --------- | -------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| tags | 配方标签 | 请填写“smithing_table” |
|
||||
| template | 锻造模板 | 可不填,执行转换操作所需的锻造模板,物品需要具有minecraft:transform_materials标签才能放入对应槽位 |
|
||||
| template | 锻造模板 | 可不填,执行转换操作所需的锻造模板,物品需要具有minecraft:transform_templates标签才能放入对应槽位 |
|
||||
| base | 输入物品 | 要转换的物品。输入物品的属性将被复制到输出物品,物品需要具有minecraft:transformable_items标签才能放入对应槽位,例如原版盔甲和工具 |
|
||||
| addition | 转换材料 | 转换所需的材料。目前只支持minecraft:netherite_ingot(下界合金锭) |
|
||||
| result | 输出物品 | 转换后的结果物品 |
|
||||
|
||||
86
mcguide/30-测试/6-我的山头模组测试教程.md
Normal file
@@ -0,0 +1,86 @@
|
||||
---
|
||||
front:
|
||||
hard: 入门
|
||||
time: 20分钟
|
||||
selection: true
|
||||
---
|
||||
|
||||
# MCS支持我的山头模组兼容测试
|
||||
|
||||
## 准备工作
|
||||
|
||||
1. 最新版MC Studio
|
||||
2. 最新版 3.6 及以后版本的 安卓手机测试包 (目前暂时不支持IOS)
|
||||
|
||||
MCS我的山头容器管理页面位于 【基岩版组件-联机测试】
|
||||
|
||||

|
||||
|
||||
## 如何创建一个测试山头
|
||||
|
||||
首先需要说明的是,MCS仅支持查阅日志和邀请玩家进入山头服,山头服的创建仍然需要前往测试审核服进行创建
|
||||
|
||||
创建完以后MCS会自动同步山头服实例
|
||||
|
||||
为了避免资源的浪费,目前只允许创建山腰服务器。其他档位会置灰
|
||||
|
||||

|
||||
|
||||
打开购买弹窗,点击确认即可
|
||||
|
||||

|
||||
|
||||
现在,你已经完成了在审核服创建山头的方法,此时当你创建好以后就可以在MCS管理成员和查阅日志
|
||||
|
||||
## 添加模组
|
||||
|
||||
您现在创建的山头,目前是没有模组的,但是山头容器可以获取到你上传到审核服的所有自测中的模组,但是前提是这个模组必须勾选上架 我的山头 专区
|
||||
|
||||
山头专区的模组,可以直接选择安装
|
||||
|
||||

|
||||
|
||||
这可能有些麻烦,这是因为山头容器只能拉取模组的itemid,这就代表无法本地进行山头服模组兼容测试,你只能上传模组到开平,然后在审核服测试
|
||||
|
||||
日志通过MCS进行查阅
|
||||
|
||||
## 日志
|
||||
|
||||
日志是山头测试的一个重要内容,关系到开发者能否查阅到模组在山头当中的报错从而追踪定位问题所在的代码
|
||||
|
||||
所以当你在测试服创建好山头以后,您可以直接在MCS山头测试页面,打开日志
|
||||
|
||||
第一次打开日志会出现有一定的时间的卡顿,这是正常现象
|
||||
|
||||
打开日志会一次性打开服务端日志和客户端日志,服务端日志会直接链接这个山头实例
|
||||
|
||||
但是客户端日志则需要开发者自行连接到手机端
|
||||
|
||||
连接手机端的方式可以查阅 [使用调试工具进行手机和电脑端调试](1-使用调试工具进行手机和电脑端调试.md)
|
||||
|
||||

|
||||
|
||||
## 成员管理
|
||||
|
||||
为了保证数据安全,成员管理请在MC Studio进行
|
||||
|
||||

|
||||
|
||||
您可以直接在这个页面输入对方的UID进行添加,添加以后点击确定即可
|
||||
|
||||
备注: 每次添加UID,只能一个一个的添加, 也就是输入UID以后点添加,就直接点击确认,不能一次性添加两个人及以上。这是为了防止恶意通过此入口来对山头服服务端进行多次请求
|
||||
|
||||
添加以后,开发者在审核服山头页面就会收到邀请,点击同意即可加入
|
||||
|
||||

|
||||
|
||||
如果对方没有同意,下一次再打开成员管理页面,仍然不会显示那名玩家的名称和UID,你不必重新添加
|
||||
|
||||
## 山头服自动回收
|
||||
|
||||
为了避免资源的浪费,每位开发者测试完毕后,应该主动在MCS删除实例,恶意占用资源的我们会严肃处理
|
||||
|
||||
当山头服 30 分钟内没有任何人时,山头服会自动进行回收,下次重新购买山腰档的山头服即可
|
||||
|
||||
|
||||
|
||||
BIN
mcguide/30-测试/images/img.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
mcguide/30-测试/images/img_1.png
Normal file
|
After Width: | Height: | Size: 461 KiB |
BIN
mcguide/30-测试/images/img_2.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
mcguide/30-测试/images/img_3.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
mcguide/30-测试/images/img_4.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
mcguide/30-测试/images/img_5.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
mcguide/30-测试/images/img_6.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
mcguide/30-测试/images/img_7.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
mcguide/35-上架与入驻/new_images/11.1/0.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
mcguide/35-上架与入驻/new_images/11.1/1.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
mcguide/35-上架与入驻/new_images/11.1/2.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
mcguide/35-上架与入驻/new_images/11.1/3.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
mcguide/35-上架与入驻/new_images/11.1/4.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
@@ -22,7 +22,7 @@ time: 10分钟
|
||||
|
||||
|
||||
|
||||
附件下载链接:[http://mc.netease.com/thread-417091-1-2.html](http://mc.netease.com/thread-417091-1-2.html)
|
||||
附件下载链接:[组件修改建议](https://g79.gdl.netease.com/zujianxiugaijianyi20240730.xlsx)
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ time: 10分钟
|
||||
|
||||
组件的封面,简介不得存在真实的枪械贴图与名称,如果有请作修改。
|
||||
|
||||
详细请参考:[http://mc.netease.com/thread-532700-1-1.html](http://mc.netease.com/thread-532700-1-1.html)
|
||||
详细请参考(附件下载链接):[武器审核评分表](https://g79.gdl.netease.com/wuqishenhepingfenbiaov5_070221.xlsx)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,43 +7,61 @@ selection: true
|
||||
|
||||
# 整合包概览
|
||||
|
||||
> 文档版本:2023.2.21, **首次更新整合包的使用说明** 。
|
||||
## 前言
|
||||
|
||||
> 文档版本:2025.09.26, **更新整合包的使用说明** 。
|
||||
|
||||
《我的世界》整合包是一种面向玩家的新型购物模式,它能将多个上线模组捆绑在一起进行打折销售,为开发者的专一粉丝提供附加价值与更多惠益。针对常见情况,有两种普遍的使用场景:
|
||||
|
||||
- 结合 主包 搭配 DLC 的模式销售系列模组。
|
||||
- 根据模组题材进行分类,帮助粉丝玩家更短时间找到喜欢的内容。
|
||||
|
||||
原合集功能将支持一键同步合集模组至整合包,后续开发者也无法创建新的合集,详情请查看[一键同步合集模组至整合包](./课程11.2-一键同步合集组件至整合包.html)。 **资源中心** - **开发者主页** 的合集分区将替换为整合包分区。 **且整合包当前仅支持《我的世界》手机版。**
|
||||
|
||||
《我的世界》开发者平台将在 **2月21日** 上线整合包功能,玩家可在 **3月23日** 后下载整合包。
|
||||
|
||||
期待各位开发者挖掘整合包的更多整合,使用上的建议与反馈可以通过[问题与反馈中心](https://mcdev.webapp.163.com/#/feedbackModal?target=browser)与我们取得联系。《我的世界》开发者平台也会提供独立的整合包流量位,敬请期待。
|
||||
|
||||
- 我们鼓励开发者注重模组间的协同与扩展(例如通过魔改实现资源互通、配方统一,或结合科技与魔法主题设计连贯的进程路线),从而打造出更具整体性与沉浸感的整合包体验;
|
||||
|
||||
- 我们也建议在开发中关注性能优化与玩家体验的平衡,加入必要的功能辅助与引导设计,共同构建富有生命力的整合包生态。
|
||||
|
||||
## 创建整合包
|
||||
|
||||
### 入口
|
||||
|
||||
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **模组** - **手机版** - **整合包**。
|
||||
|
||||

|
||||

|
||||
|
||||
### 创建基本信息
|
||||
|
||||
点击 **创建整合包** ,可先设置 **整合包名称** 、 **基础折扣** 与 **限时折扣** 。
|
||||
|
||||
点击 **创建整合包** ,可先设置 **整合包名称** 、 **整合包类型** 、 **基础折扣** 与 **限时折扣** 。
|
||||

|
||||
|
||||
- 整合包类型:分为 **普通整合包** 、 **纯地图整合包** 。
|
||||
- **普通整合包** :可以选择任一类型的模组。
|
||||
- **纯地图整合包** :只能选择 **地图模组** 。
|
||||
之后按照内容
|
||||
- 整合包名称:将作为整合包的名称进行展示。
|
||||
- 基础折扣:必填,整合包上线后的默认折扣。
|
||||
- 限时折扣:选填,可设置整合包在特定时间期间的折扣。整合包内的基础折扣与限时折扣同时生效时, **优先使用限时折扣** 。
|
||||
|
||||

|
||||
#### 创建规则
|
||||
|
||||
开发者可按以下配置创建新的整合包:
|
||||
- **多个** Add-on 模组
|
||||
|
||||
- **1** 张地图
|
||||
|
||||
**纯地图整合包** 最低折扣为50%, **普通整合包** 有价格限制,最低折扣需按模组原价折后价**500钻石**设置。整合包类型将根据包内模组类型情况进行自动选择。
|
||||
- **多个**材质/光影
|
||||
|
||||
- **多个**皮肤
|
||||
|
||||
#### 创建注意事项:
|
||||
- 整合包内不能添加多张地图
|
||||
|
||||
- 整合包内不能添加联机大厅
|
||||
|
||||
- 整合包内模组可以全部为Add-on模组或材质光影,不可全部为皮肤
|
||||
|
||||
- 仅符合新版规则的整合包可由玩家在详情页一键游玩,且可在存档管理 - 新增的整合包页签中找到并进行管理
|
||||
|
||||
模组购买价格将按照**模组本身的折扣**以及**整合包限时折扣**进行叠加,若整合包限时折扣不存在时,将由整合包基础折扣代替。
|
||||
|
||||
@@ -51,19 +69,21 @@ selection: true
|
||||
|
||||

|
||||
|
||||
|
||||
### 创建整合包资源
|
||||
|
||||
接着在资源区域添加与整合包关联的模组。其中,整合包最多关联20个,最少关联3个 **有过审记录的模组资源** 。 **单个模组资源可加入的整合包次数不限** 。
|
||||
|
||||

|
||||

|
||||
|
||||
添加模组资源后,必须设置其中一个模组为核心模组。核心模组默认在第一顺位展示。开发者可在每次关联模组时,通过添加顺序管理新增的模组展示顺序。
|
||||
|
||||

|
||||
|
||||
添加模组资源后,必须设置其中一个模组为核心模组。核心模组默认在第一顺位展示。开发者可在每次关联模组时,通过添加顺序管理新增的模组展示顺序,未来也会提供直接调整非核心模组的展示顺序功能,敬请期待。
|
||||
|
||||

|
||||
同时也提供直接调整非核心模组的展示顺序功能
|
||||
|
||||

|
||||
|
||||
### 创建详细信息、图片和上传视频
|
||||
|
||||
接着填充 **详情信息** 、**编辑图片** 和 **上传视频** 区域的相关内容,这些信息内容将会展示在整合包详情页中。也可直接点击同步按钮同步核心资源的资源描述,减少人工操作的时间。
|
||||
|
||||
@@ -73,7 +93,7 @@ selection: true
|
||||
|
||||

|
||||
|
||||
|
||||
### 创建更新纪要
|
||||
|
||||
与编辑模组上传信息不同,整合包的 **更新纪要** 为必填内容。设置之后会在玩家的订阅功能中同步生成资源卡片,并会在手机消息通知中同步收到提醒。
|
||||
|
||||
@@ -85,7 +105,7 @@ selection: true
|
||||
|
||||
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **模组** - **手机版** - **整合包**。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@@ -115,60 +135,42 @@ selection: true
|
||||
|
||||
## 整合包FAQ
|
||||
|
||||
### 整合包的展示位置在哪里?
|
||||
#### 整合包的展示位置在哪里?
|
||||
|
||||
答:整合包会在 **关联的单个模组详情页** 下进行展示,也可在开发者主页下的 **整合包分区** 中找到。
|
||||
|
||||
|
||||
|
||||
### 整合包的折扣后价格是如何计算得出的?
|
||||
#### 整合包的折扣后价格是如何计算得出的?
|
||||
|
||||
答:价格是所有关联整合包的模组当前总价与整合包折扣相乘后的折扣价格, **折扣后的价格出现小数点时,将向下取整到整数钻石** 。例如其中一个模组原价20钻石,使用模组折扣5折,并添入基础折扣为88折的整合包,则该模组最终在整合包的价格向下取整至8钻石。其余细则具体可查看 [创建整合包](#创建整合包)的折扣运作模式。
|
||||
|
||||
|
||||
|
||||
### 整合包的评分与评论系统来源是哪里?
|
||||
#### 整合包的评分与评论系统来源是哪里?
|
||||
|
||||
答:整合包的评分与评论系统将直接使用核心资源的评分与评论。
|
||||
|
||||
|
||||
|
||||
### 整合包支持加入购物车、心愿单与索要转赠功能吗?
|
||||
#### 整合包支持加入购物车、心愿单与索要转赠功能吗?
|
||||
|
||||
答:整合包暂不支持搭配购物车、心愿单与索要转赠功能使用。
|
||||
|
||||
|
||||
|
||||
### 是否可以将整合包加入折扣特卖或作品活动?
|
||||
#### 是否可以将整合包加入折扣特卖或作品活动?
|
||||
|
||||
答:目前尚不支持开发者登记整合包至[折扣特卖或作品活动](../40-活动、推广与收益/课程08-对作品进行推广与活动.html?catalog=1#活动参与)。
|
||||
|
||||
|
||||
|
||||
### 是否可以使用整合包的参与手机版推广位申请与竞拍?
|
||||
#### 是否可以使用整合包的参与手机版推广位申请与竞拍?
|
||||
|
||||
答:目前尚不支持在[推广位申请与竞拍功能](../40-活动、推广与收益/课程16-推广位申请与竞拍试运行指南.html?catalog=1#申请手机版轮播图推广位)内选择整合包,请期待后续更新。
|
||||
|
||||
|
||||
|
||||
### 整合包的审核流程是什么形式?
|
||||
#### 整合包的审核流程是什么形式?
|
||||
|
||||
答:与模组审核流程一致,开发者需要点击提审进入审核队列,并通过开发者邮箱与短信获得审核结果。
|
||||
|
||||
|
||||
|
||||
### 已购模组在整合包内会如何展示?
|
||||
#### 已购模组在整合包内会如何展示?
|
||||
|
||||
答:已购模组会在整合包内的模组列表显示已购标识,同理,未购模组也会显示未购买标识。
|
||||
|
||||
|
||||
|
||||
### 如何更换/新增/取消关联核心模组与非核心模组?
|
||||
#### 如何更换/新增/取消关联核心模组与非核心模组?
|
||||
|
||||
答: **在整合包首次上架前,开发者可以随时更换/新增与取消关联相应的核心模组与非核心模组。** 但在上架后,就无法更换/取消之前的核心模组或非核心模组,只允许关联其他新的模组资源为非核心模组。
|
||||
|
||||
|
||||
|
||||
### 核心模组或其他关联模组下架时,整合包会如何处理?
|
||||
#### 核心模组或其他关联模组下架时,整合包会如何处理?
|
||||
|
||||
答:核心模组下架后,整合包将会消失,请开发者注意。其他关联模组下架时,整合包会清除对应模组信息。
|
||||
@@ -146,7 +146,7 @@
|
||||
|
||||
**模组SDK:** 模组SDK是《我的世界》中国版提供的一套控制游戏内各种元素的Python接口,利用这套接口,能够制作出各种创新好玩的组件。若想要在游戏内实现较为复杂的逻辑,有关 [模组SDK开发文档](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/10-%E6%96%B0%E5%86%85%E5%AE%B9/2-%E6%A8%A1%E7%BB%84SDK/90-1.24%E7%89%88%E6%9C%AC.html?catalog=1)与 [接口文档](https://mc.163.com/dev/mcmanual/mc-dev/mcdocs/1-ModAPI/%E6%8E%A5%E5%8F%A3/%E9%80%9A%E7%94%A8/%E7%B4%A2%E5%BC%95.html?catalog=1)可以提供非常大的帮助。
|
||||
|
||||
**网络游戏开服工具:** 这是由中国版开发组维护的手游版网络游戏服务器集群工具,集成了负载均衡、集群管理、运营指令、多号协作的功能,同时支持完整的原版内容与附加包自定义功能。若您是一位寻求支持完整的原版内容、插件拓展与附加包功能的服主,不妨点击 [网络游戏开服工具常见问题答疑](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/50-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E7%AD%94%E7%96%91/20-%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F%E5%BC%80%E6%9C%8D%E5%B7%A5%E5%85%B7%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E7%AD%94%E7%96%91.html?catalog=1)与 [网络游戏开服工具课程](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/27-%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F/%E8%AF%BE%E7%A8%8B1%EF%BC%9A%E6%88%90%E4%B8%BAApollo%E6%9C%8D%E4%B8%BB%E5%8F%8A%E7%9B%B8%E5%85%B3%E5%87%86%E5%A4%87/%E7%AC%AC1%E8%8A%82%EF%BC%9AApollo%E4%BB%8B%E7%BB%8D.html?catalog=1)看看吧。
|
||||
**网络游戏开服工具:** 这是由中国版开发组维护的手游版网络游戏服务器集群工具,集成了负载均衡、集群管理、运营指令、多号协作的功能,同时支持完整的原版内容与附加包自定义功能。若您是一位寻求支持完整的原版内容、插件拓展与附加包功能的服主,不妨点击 [网络游戏开服工具常见问题答疑](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/50-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E7%AD%94%E7%96%91/20-%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F%E5%BC%80%E6%9C%8D%E5%B7%A5%E5%85%B7%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E7%AD%94%E7%96%91.html?catalog=1)与 [网络游戏开服工具课程](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/27-%E6%89%8B%E6%9C%BA%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F/%E8%AF%BE%E7%A8%8B1%EF%BC%9A%E6%88%90%E4%B8%BAApollo%E6%9C%8D%E4%B8%BB%E5%8F%8A%E7%9B%B8%E5%85%B3%E5%87%86%E5%A4%87/%E7%AC%AC1%E8%8A%82%EF%BC%9AApollo%E4%BB%8B%E7%BB%8D.html)看看吧。
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7,4 +7,4 @@ selection: true
|
||||
|
||||
# 模型规范指南
|
||||
|
||||
[点击前往快捷链接](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/16-%E7%BE%8E%E6%9C%AF/6-%E6%A8%A1%E5%9E%8B%E5%92%8C%E5%8A%A8%E4%BD%9C/%E6%A8%A1%E5%9E%8B%E8%A7%84%E8%8C%83%E6%8C%87%E5%8D%97.html?catalog=1)
|
||||
[点击前往快捷链接](../16-美术/6-模型和动作/6-模型规范指南.md)
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
## 先发测试
|
||||
|
||||
2020年6月,Notch将更新代号更改为了Alpha,这意味着游戏进入了正式发行前的测试阶段。同年12月底,更新代号进一步更改为了Beta。一般而言,Alpha意味着游戏的内测,Beta意味着公测,不过在Notch看来这两个阶段好像并无类似区别。Alpha阶段内加入了我们当前熟知的生物群系和下界,Beta阶段进一步加入了村庄、要塞等结构、重构了崭新的创造模式。大家最喜欢用的床也在这一阶段加入游戏。Notch计划加入一种新的维度,被称为天域,但并没有成功实现,这一维度是现在末地的前身。
|
||||
2010年6月,Notch将更新代号更改为了Alpha,这意味着游戏进入了正式发行前的测试阶段。同年12月底,更新代号进一步更改为了Beta。一般而言,Alpha意味着游戏的内测,Beta意味着公测,不过在Notch看来这两个阶段好像并无类似区别。Alpha阶段内加入了我们当前熟知的生物群系和下界,Beta阶段进一步加入了村庄、要塞等结构、重构了崭新的创造模式。大家最喜欢用的床也在这一阶段加入游戏。Notch计划加入一种新的维度,被称为天域,但并没有成功实现,这一维度是现在末地的前身。
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
开发者账号是你发布作品的重要渠道,也是你通过作品获得收益的重要途径。注册一个开发者账号是成为一个开发者的先决条件。现在,跟随我们的步骤,一起注册一个开发者账号吧!
|
||||
|
||||
**注意,本教程已为老教程,注册看房子可以前往以下链接**
|
||||
|
||||
[新开发注册流程](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/12-%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/10-%E6%B3%A8%E5%86%8C%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85.html?catalog=1)
|
||||
|
||||
## 准备
|
||||
|
||||
- 邮箱:你需要准备一个邮箱作为开发者账号的账号名。
|
||||
|
||||