58 Commits

Author SHA1 Message Date
allcontributors[bot]
31d219956f docs: update .all-contributorsrc 2026-01-09 08:04:55 +00:00
allcontributors[bot]
df4bece89b docs: update README.md 2026-01-09 08:04:54 +00:00
MCNeteaseDevs
77ba105452 Merge pull request #40 from sevenstars0/patch-3
Update 30-UI说明文档.md
2026-01-09 16:02:43 +08:00
kwiilh
439216893d Github双端同步 2026-01-09 15:55:00 +08:00
MCNeteaseDevs
074cf234bd Fix typo in Mod SDK documentation section 2025-12-30 11:18:07 +08:00
MCNeteaseDevs
64282118f6 添加修改SDK文档流程说明 2025-12-30 11:17:14 +08:00
sevenstars
d68587065c Update 30-UI说明文档.md
增加了scroll_view中对于$touch变量的说明
2025-12-30 10:47:57 +08:00
MCNeteaseDevs
688a85ffff Merge pull request #38 from MCNeteaseDevs/all-contributors/add-sevenstars0
docs: add sevenstars0 as a contributor for doc
2025-12-30 10:36:20 +08:00
MCNeteaseDevs
521e187767 Merge branch 'main' into all-contributors/add-sevenstars0 2025-12-30 10:36:11 +08:00
MCNeteaseDevs
d458ef7ec7 Merge pull request #39 from MCNeteaseDevs/all-contributors/add-LiangJi23333
docs: add LiangJi23333 as a contributor for doc
2025-12-30 10:33:34 +08:00
allcontributors[bot]
77bdd38c05 docs: update .all-contributorsrc 2025-12-30 02:31:59 +00:00
allcontributors[bot]
0f012cde17 docs: update README.md 2025-12-30 02:31:58 +00:00
allcontributors[bot]
58189c3d48 docs: update .all-contributorsrc 2025-12-30 02:28:50 +00:00
allcontributors[bot]
d778ffb81c docs: update README.md 2025-12-30 02:28:49 +00:00
MCNeteaseDevs
e74c284815 Merge pull request #32 from xbmanh/patch-1
Improve guidelines for multiplayer compatibility
2025-12-30 10:17:06 +08:00
MCNeteaseDevs
8c8ae31c08 Merge pull request #33 from ShangguanXi/Supplement-the-base_block-field-
更新 1-JSON组件.md 内容
2025-12-30 10:15:27 +08:00
kwiilh
31dea08de7 同步正式环境 2025-12-30 10:14:17 +08:00
上官汐
c51b5bb73c Update 1-JSON组件.md 2025-12-28 18:53:54 +08:00
TimWang486
da08f15ac2 Improve guidelines for multiplayer compatibility
Clarified the principle of separating ServerSystem and ClientSystem for better compatibility in multiplayer environments. Updated example code to highlight incorrect client-side imports.
2025-12-27 22:04:25 +08:00
MCNeteaseDevs
a510d13f2b Merge pull request #29 from imchuyun/patch-2
fix: 修复新版守护进程因node版本号问题无法运行的BUG
2025-12-26 15:25:36 +08:00
MCNeteaseDevs
5ee48218b8 补充删除的开头 2025-12-26 15:25:03 +08:00
kwiilh
3a2cf90fa9 同步官网文档 2025-12-26 15:22:18 +08:00
MCNeteaseDevs
667aa53bc5 补充首页贡献展示说明 2025-12-26 14:15:08 +08:00
MCNeteaseDevs
7797f0e939 Merge pull request #31 from MCNeteaseDevs/all-contributors/add-MCNeteaseDevs
docs: add MCNeteaseDevs as a contributor for doc
2025-12-26 10:57:15 +08:00
allcontributors[bot]
93e56894f7 docs: update .all-contributorsrc 2025-12-26 02:56:07 +00:00
allcontributors[bot]
719cee30f0 docs: update README.md 2025-12-26 02:56:06 +00:00
MCNeteaseDevs
4ac57df199 添加配置 2025-12-26 10:50:52 +08:00
MCNeteaseDevs
bf866fd56e 添加贡献机器人基础配置 2025-12-26 10:50:14 +08:00
imchuyun
915e1dcf98 fix: 修复新版守护进程因node版本号问题无法运行的BUG
升级node为16+,并且强制要求16+,保证新版守护进程正常运行。
2025-12-25 09:20:05 +08:00
MCNeteaseDevs
7d7a7fbfa3 Merge pull request #28 from imchuyun/patch-1
fix: 修改守护进程下载源为github最新版本
2025-12-23 11:12:37 +08:00
NeteaseDev
99128414ab 同步官网文档(非版本) 2025-12-23 11:10:51 +08:00
imchuyun
f8027b4b19 Update 15-通过MCSM面板管理服务器.md 2025-12-22 09:35:27 +08:00
imchuyun
bcde4dc33a 修改封面图 2025-12-22 09:31:26 +08:00
imchuyun
5f219a7e26 修改守护进程下载源为github最新版本
修改守护进程下载源为github最新版本
2025-12-22 09:06:39 +08:00
MCNeteaseDevs
dd3d05715c Add developer info field to issue template
Added a textarea for developer name/contact information.
2025-12-19 10:34:42 +08:00
MCNeteaseDevs
680b621604 Update issue-template-sdk.yml 2025-12-16 14:26:11 +08:00
NeteaseDev
ebb8988a32 添加SDK修改Issue模版 2025-12-16 11:20:17 +08:00
MCNeteaseDevs
fb87dd369a Fix formatting in README.md for clarity
修复链接显示错误
2025-12-16 10:45:45 +08:00
MCNeteaseDevs
4621ea48f1 Update README with contribution guidelines and notes
添加注意事项
2025-12-16 10:44:39 +08:00
MCNeteaseDevs
a636b82b38 Merge pull request #26 from imchuyun/mcsmguide
fix: 修复文章显示问题
2025-12-16 10:22:23 +08:00
NeteaseDev
88c7c0d76a 回退文件名,该文件名是首页目录抓取依据不可修改 2025-12-16 10:20:15 +08:00
imchuyun
f7a59982c0 feat: 修复后的文章 2025-12-15 19:38:16 +08:00
imchuyun
51d0042f6a fix: 修复文章显示异常的问题。 2025-12-15 19:33:42 +08:00
NeteaseDev
fc457c77b4 删除冗余文件 2025-12-15 15:34:10 +08:00
MCNeteaseDevs
fcf47af619 Merge pull request #24 from imchuyun/mcsmguide
新增《通过MCSM面板管理服务器》文章
2025-12-15 15:15:30 +08:00
MCNeteaseDevs
d4f35639f2 Merge pull request #23 from TartaricAcid/main
添加 Tick 事件优化文章
2025-12-15 15:12:39 +08:00
NeteaseDev
8a80e928c8 同步官网文档 2025-12-15 15:06:45 +08:00
imchuyun
e36e1a8a9b feat: 新增《通过MCSM面板管理服务器》指南 2025-12-11 18:18:11 +08:00
tartaric_acid
48e19d260b Create Tick 事件优化.md 2025-12-09 16:11:48 +08:00
MCNeteaseDevs
332010d79b Merge pull request #21 from Xunzoua/mchistoryfix
fix:更新了注册成为开发者,我的世界历史部分年份错误,以及过旧的教程废弃
2025-12-08 12:00:05 +08:00
MCNeteaseDevs
74e056146a 修改部分描述 2025-12-08 11:59:30 +08:00
kwiilh
a8d549266d 同步官网文档 2025-12-08 10:34:02 +08:00
Xunzoua
cb1c065e58 Revise developer registration tutorial with details
Updated registration guide for developers with detailed steps and clarifications on required materials and processes.
2025-11-30 16:26:47 +08:00
Xunzoua
dfa6901bff Update tutorial with developer account registration warning
Added a warning about outdated tutorial content.
2025-11-30 15:30:07 +08:00
Xunzoua
01cba91236 Fix date in Minecraft history section
make line 39 "2020" to "2010"
2025-11-30 15:15:17 +08:00
MCNeteaseDevs
2289f38a4c Merge pull request #20 from ShangguanXi/Summary-of-block-components
feat:统合部分分散json方块组件至总json方块组件页面
2025-11-28 16:40:21 +08:00
上官汐
a046b0d4ed feat:统合部分分散json方块组件至总json方块组件页面 2025-11-23 13:04:06 +08:00
kwiilh
df9b1e4620 同步官网文档 2025-11-17 15:44:17 +08:00
75 changed files with 1453 additions and 1757 deletions

48
.all-contributorsrc Normal file
View File

@@ -0,0 +1,48 @@
{
"projectName": "netease-bedrock-wiki",
"projectOwner": "MCNeteaseDevs",
"files": [
"README.md"
],
"commitType": "docs",
"commitConvention": "angular",
"contributorsPerLine": 7,
"contributors": [
{
"login": "MCNeteaseDevs",
"name": "MCNeteaseDevs",
"avatar_url": "https://avatars.githubusercontent.com/u/186891705?v=4",
"profile": "https://github.com/MCNeteaseDevs",
"contributions": [
"doc"
]
},
{
"login": "sevenstars0",
"name": "sevenstars",
"avatar_url": "https://avatars.githubusercontent.com/u/148792757?v=4",
"profile": "https://github.com/sevenstars0",
"contributions": [
"doc"
]
},
{
"login": "LiangJi23333",
"name": "LiangJi23333",
"avatar_url": "https://avatars.githubusercontent.com/u/102958768?v=4",
"profile": "https://github.com/LiangJi23333",
"contributions": [
"doc"
]
},
{
"login": "Nacalpha",
"name": "Nacalpha",
"avatar_url": "https://avatars.githubusercontent.com/u/128111367?v=4",
"profile": "https://github.com/Nacalpha",
"contributions": [
"doc"
]
}
]
}

View File

@@ -0,0 +1,57 @@
name: SDK文档修改
description: 一条SDK修改对应一条Issue可以修改参数描述、接口备注等
title: "[sdk] "
labels: [sdk]
body:
- type: textarea
id: sdk_name
attributes:
label: 接口名称/链接
description: 请填写接口的名称或链接
placeholder: |
例如: CreateUI
validations:
required: true
- type: dropdown
id: sdk_type
attributes:
label: 接口类型
description: 接口的类型
options:
- 服务端
- 客户端
- 双端
validations:
required: true
- type: textarea
id: modifications
attributes:
label: 修改内容
description: 详细描述修改后的内容
placeholder: |
例如:
# 以CreateUI为例
1、参数修改
createParams的说明修改为创建UI的参数会传到UI类的_init_函数中详细请看下方备注说明
2、备注修改
createParams中的bindEntityId参数描述修改为意为绑定实体的id。若不传入该键值对或值为None则会以isHud = 0来处理该UI界面。血量显示模组可以使用该参数。
validations:
required: true
- type: textarea
id: other_content
attributes:
label: 其他补充信息
description: 如有其他补充信息请填写在这里
validations:
required: false
- type: textarea
id: developer_info
attributes:
label: 开发者名称/联系方式
description: 请填写您的开发者名称或联系方式QQ将会用于奖励发放等
validations:
required: false

View File

@@ -11,8 +11,29 @@
如果你发现了一些错误或者想要补充一些新的教程到我们的官网那可以在本仓库提交pr并在项目中留下你的大名
提交的文档会经过审核,最终以每两周一次的频率更新到我们的官网中
## 注意事项
- 因为**mcguide/12-入门教程/10-注册成为开发者**的文件名,是首页 https://mc.163.com/dev/guide.html 左侧目录生成抓取的依据,因此请开发者们勿修改**注册成为开发者**文件名。修改了文件名的Pull requests审核将不通过
- 文档一般双周进行同步,如需要立即同步等需求,请开发者在自己的提交请求下@MCNeteaseDevs,并给出申请立即同步的原因(如我提交的文档有误导致目录错误等)
## 贡献指南
**开发指南/教学课程文档**与**Mod SDK文档**修改流程不一致,接下来将会分别介绍
### Mod SDK文档修改
1. 点击仓库中**Issues** - 点击**New Issue** - 选择**SDK文档修改**
2. 按照模版依次填写以下内容:
- 标题:为了方便其他开发者查找相同修改,请写明**接口名称与修改部分**。例如StopCustomMusicById添加备注
- 接口名称:填写需要修改的接口名称或链接
- 接口类型:选择接口的类型,共有服务端、客户端、双端三种选项
- 修改内容:详细描述修改的接口文档内容
- 其他补充信息:如有其他信息可以补充在这里
- 开发者信息:将会用于贡献致谢展示与奖品发放
3. 完成后点击Create。修改内容会由官方进行审核审核通过后会在**两周之内**同步至官网
### 开发指南/教学课程修改
1. Fork 本项目。点击 Fork 按钮创建一个新的派生项目到自己的工作区Create a new fork
2. 克隆派生
@@ -48,7 +69,7 @@ git push --set-upstream origin your-branch-name
## 备注
我们的官网文档是使用VuePress构建的我们鼓励你使用VuePress的语法对文档进行美化
我们的官网文档是使用VuePress构建的我们鼓励你使用VuePress的语法对文档进行美化
## 鸣谢
@@ -56,3 +77,25 @@ git push --set-upstream origin your-branch-name
## 致谢
在此感谢以下开发者作出的贡献(以下排名不分先后)
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/MCNeteaseDevs"><img src="https://avatars.githubusercontent.com/u/186891705?v=4?s=100" width="100px;" alt="MCNeteaseDevs"/><br /><sub><b>MCNeteaseDevs</b></sub></a><br /><a href="#doc-MCNeteaseDevs" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/sevenstars0"><img src="https://avatars.githubusercontent.com/u/148792757?v=4?s=100" width="100px;" alt="sevenstars"/><br /><sub><b>sevenstars</b></sub></a><br /><a href="#doc-sevenstars0" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/LiangJi23333"><img src="https://avatars.githubusercontent.com/u/102958768?v=4?s=100" width="100px;" alt="LiangJi23333"/><br /><sub><b>LiangJi23333</b></sub></a><br /><a href="#doc-LiangJi23333" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Nacalpha"><img src="https://avatars.githubusercontent.com/u/128111367?v=4?s=100" width="100px;" alt="Nacalpha"/><br /><sub><b>Nacalpha</b></sub></a><br /><a href="#doc-Nacalpha" title="Documentation">📖</a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

View 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
![图片](./images/251126/1.1.48_1.png)
选择下方的皮肤选项可以看到除了默认的史蒂夫和爱丽克丝以外新增4款4D皮肤皮肤选择皮肤后即可开始测试
![图片](./images/251126/1.1.48_2.png)
2. 配置已有存档
对于已有的3.6测试存档,可以点击配置
![图片](./images/251126/1.1.48_3.png)
在配置界面中可以切换下方的皮肤
![图片](./images/251126/1.1.48_4.png)
3. 局内切换
进入游戏时会触发一次UpdatePlayerSkinClient客户端事件
点击右上角菜单选择切换皮肤选项即可选择其他4D皮肤
![图片](./images/251126/1.1.48_5.png)
注意:
- 菜单切换4D皮肤是模拟玩家使用局内更衣室切换皮肤的情况
- 菜单切换会触发UpdatePlayerSkinClientEvent事件开发者可以使用IsHighLevelOfficialSkin、IsOfficialSkin、IsHighLevelMultiJointOfficialSkin、IsMultiJointOfficialSkin接口进行调试与兼容
## 屏蔽我的伙伴功能
- 自本3.6版本Mod PC和1.1.48版本MC Studio开始Mod PC开发者包和地图编辑器中挖矿将不会出现我的伙伴

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -1,128 +0,0 @@
---
front: https://nie.res.netease.com/r/pic/20230524/e76f932d-0dda-464a-9b04-54f689d024c1.png
hard: 入门
time: 10分钟
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类账户则会有限额收益过多时会打款失败**
- 至此银行卡办理流程结束,若有则跳过。
## 如何注册开发者
首先,在 **官网** 中找到注册页面([或点击此处直接进入开发者内容管理网址](https://mcdev.webapp.163.com/#/login)
1 - 在搜索引擎中,搜索“我的世界”找到[官网](http://mc.163.com/),点击右上角 **【进入官网】** 按钮
![1](./images/0_1.png)
2 - 在[新的网页](http://mc.163.com/index.html )中,点击 **【成为创造者】** 按钮,前往开发者平台注册页面
![2](./images/0_2.png)
3 - 跳转至新的页面,根据提示填入信息和**真实姓名、身份证号(新增)**,并勾选同意《隐私协议》,点击 **【注册】** 按钮注意开发者昵称注册后每90天可以修改1次
![4](./images/0_4.png)
> 每个信息的用途:
>
> 开发者邮箱:开发者账号的唯一标识符
>
> 开发者昵称资源中心、开发者平台、MCStudio显示的昵称
>
> 手机号码:手机号码用于接收平台短信通知
>
> QQ号码目前没有实际用途
>
> 真实姓名:实名认证
>
> 身份证号:实名认证
- 注:**1个身份证号只能实名1个开发者账号请谨慎选择账号注册注册后非特殊情况不支持修改注销无法释放身份证信息。**
4 - 成功入驻后,需要进行银行卡认证,填写身份证、银行卡等信息,点击 **【申请银行卡认证】** 跳转至银行卡认证界面。
![5](./images/0_5.jpg)
![5.1](./images/0_6.png)
如实完成以上信息的正确填写并提交后,随后等待 **实名认证审核** 即可,通过后就可以发布作品啦!
![5.2](./images/0_7.png)
## 如何个人开发者转企业开发者
1. 点击开发者平台右上角的头像,点击“申请企业开发者认证”。
2. 提交认证信息等待审核通过一般在10个工作日内给结果。
## 如何企业开发者转个人开发者
目前**不支持**手动转回个人开发者,需要等待年审提出转个人申请。
## 开发者注册常见问题答疑
### 账号审核时间
开发者账号审核通过一般在 **7 个工作日** ,请耐心等待。
### 选择符合自身实际情况的结算方式
在注册开发者时,需要选择 **结算方式** (指通过《我的世界》中国版投稿付费钻石组件后获得的收益结算),开发者应当选择 **符合自身实际情况** 的结算方式,共两种:
1. 代扣代缴:由我司代为扣缴,请注意此选项仅针对非公司性质的个人开发者
2. 自备税票:自行开票或者请税局代为开票
建议个人开发者或小规模团队选择“代扣代缴”的结算方式,公司类型的开发者及个体工商户选择“自备税票”的结算方式。
### 如何更换开发者平台的结算信息(如换绑银行卡、改结算方式等)
**个人身份开发者:**
1. 点击开发者平台右上角的头像,点击“修改结算信息”提交新的银行信息或结算方式。
2. 提交内容前,请确保申请的信息与账号实名信息相符。更改结算信息后,还需等待审核通过方能生效。
3. 变更成功后90天内将不可再次发起银行卡及结算类型信息修改申请。无论通过与否平台都会通过开发者平台邮件和短信告知审核结果。
**企业身份开发者**
1. 非特殊情况不支持更改若有特殊情况请联系《我的世界》开发者频道管理staff。
### 若在规定期限内结算收益,但在打款时未拿到款项
在通常情况下,若点击结算的时间为工作日,在结算收益后会在当天或次日收到款项。如果超出正常结算周期仍然没收到款项,请检查您的资料信息是否有误。
1. 若出现银行卡信息错误导致收益无法收到的,官方会为账号打开 **“更新结算信息”** 入口,请尽快点击开发者平台右上方头像,在个人信息窗口找到 **"更换结算信息"** 入口,上传正确的结算资料等待审核。打款失败的款目会在审核通过后的下一周到账。如无及时更改将会影响后续的正常结算的流程,敬请了解。
2. 若出现过去可以正常收款,但在之后出现超出结算周期未收到款项。可以在 **【开发者平台】** - **【开发者常见问题答疑】** - **【反馈其他问题】** 与我们取得联系,填写表单时,请记得写好 **联系方式** 。在通常情况下,官方人员会通过留下的联系方式与您取得联系。
3. 若结算开放后超过5天才点击结算结算信息将会顺延至下个月打款。
### 想要注销开发者/UP主请问要怎么做呢
进入开发者平台后,点击右上角的个人昵称呼出 **个人信息窗口** ,点击 **申请注销账号** 按钮,并等待审核通过即可。注销申请提出后不可撤回, **且同个身份证、银行卡信息和手机号只允许注册一个开发者或一个UP主账号。当开发者或UP主账号被注册或注销时所使用过的个人信息将不再支持作为第二次注册开发者/UP主账号时的凭证资料请慎重操作。**
**温馨提示由于平台系统功能优化从2023年5月16日起平台已对up主带货系统进行逐步关停处理因此原平台不再开放up主身份进行注册。**

View File

@@ -5,7 +5,7 @@ time: 10分钟
selection: true
---
# 注册成为开发者
# 从零开始注册成为开发者
## 申请材料准备
### 材料列表
入驻全过程中,共需要下列材料:
@@ -30,13 +30,9 @@ selection: true
前往营业厅办理1张手机卡未成年人需要监护人办理若有则跳过。
- 6.本人开户的银行卡
首先请先确定自己想要办哪家银行的银行卡,建议先在网上查询好哪家银行的网点比较近或比较好。
按照政策规定16岁以下的未成年人办理银行卡需要监护人陪同办理16岁以上、18岁以下的未成年人可以自行办理也可以监护人陪同办理18岁以上的成年人可以自行办理。**具体以各地区各银行各网点规定为准**
然后,前往网点,说明是开户人是您,让工作人员帮您开户,开户成功给到卡片后,**请核实卡片是否为I类账户开户人是否为您的名字**。(**若开户人不是本人则会打款失败若不是I类账户则会有限额收益过多时会打款失败**
至此银行卡办理流程结束,若有则跳过。
- 至此银行卡办理流程结束,若有则跳过。
## 如何注册开发者
首先,在 **官网** 中找到注册页面([或点击此处直接进入开发者内容管理网址](https://mcdev.webapp.163.com/#/login)
@@ -52,7 +48,6 @@ selection: true
3 - 跳转至新的页面,根据提示填入信息和**真实姓名、身份证号(新增)**,并勾选同意《隐私协议》,点击 **【注册】** 按钮注意开发者昵称注册后每90天可以修改1次
![4](./images/0_4.png)
> 每个信息的用途:
>
> 开发者邮箱:开发者账号的唯一标识符
@@ -66,7 +61,6 @@ selection: true
> 真实姓名:实名认证
>
> 身份证号:实名认证
- 注:**1个身份证号只能实名1个开发者账号请谨慎选择账号注册注册后非特殊情况不支持修改注销无法释放身份证信息。**
4 - 成功入驻后,需要进行银行卡认证,填写身份证、银行卡等信息,点击 **【申请银行卡认证】** 跳转至银行卡认证界面。
@@ -80,14 +74,10 @@ selection: true
![5.2](./images/0_7.png)
## 如何个人开发者转企业开发者
1. 点击开发者平台右上角的头像,点击“申请企业开发者认证”。
2. 提交认证信息等待审核通过一般在10个工作日内给结果。
## 如何企业开发者转个人开发者
目前**不支持**手动转回个人开发者,需要等待年审提出转个人申请。
## 开发者注册常见问题答疑
### 账号审核时间

View File

@@ -1,150 +0,0 @@
---
front: 进阶
time: 15分钟
---
# 模型规范指南
## 前言
在当前模组开发实践中,部分开发者所采用的 Blockbench模型与官方标准模型存在差异。
因此换了BlockBench模型的Mod会导致官方皮肤时出现贴图错位、模型消失等兼容性问题影响了玩家的视觉体验。
现已开放官方模型规范开发者们请参考并遵循。新作品通过规范指南进行UV、动画等的制作。已有作品则可以通过SDK判断是否需要修改Blockbench模型确保模组能够与官方皮肤良好配合为玩家带来更加一致、流畅的游戏体验判断是否需要修改Blockbench模型确保模组能够与官方皮肤良好配合为玩家带来更加一致、流畅的游戏体验
## 模型模板下载
当前官方提供的“多关节”结构Blockbench模型已经能满足大部分的模组开发者请开发者下载[官方规范player模型文件](https://g79.gdl.netease.com/official_steve_model.zip)
## 兼容分类
根据模组与官方皮肤的兼容程度,分为:
1. **完全兼容**未更换bb模型。表现为皮肤模型贴图以及穿戴外观模组动画等表现都正常。
2. **部分兼容**更换了bb模型但按照官方规范制作。表现为皮肤挂件以及穿戴外观正常但是模型样式改变及贴图错乱。
3. **不兼容**更换了bb模型且未按照官方规范制作。表现为模型样式改变皮肤挂件错乱穿戴外观错乱以及动作异常。
## 规范概要
1. 玩法模组非必要不改bb模型如需修改bb模型需遵循动作优化类模组规范
2. 动作优化类模组:
- 人形角色非必要不修改bb结构即无需使用AddPlayerGeometry的Api
- 如需修改修改bb结构则应该按以下优先级进行美术制作
- 不修改玩家模型为多关节
- **按规范**修改四肢为多关节模型但是不修改Body为多关节模型
- **按规范**砍四肢与body为多关节模型
- **按规范**命名骨骼/层级,但是玩家骨骼层级随意修改 *(极不推荐)*
3. SDK使用
- 开发者可以结合以下Mod SDK判断是否需要更换模型
- 建议穿戴史诗及以上多关节官方4d皮肤在模组对皮肤兼容度较差的前提下不进行玩家模型修改
- 其余情况开发者也可以使用接口判断更换模型的必要性
- [IsOfficialSkin](../../../mcdocs/1-ModAPI-beta/接口/玩家/属性.md#isofficialskin) —— 获取玩家穿戴的皮肤是否为官方4d皮肤
- [IsHighLevelOfficialSkin](../../../mcdocs/1-ModAPI-beta/接口/玩家/属性.md#ishighlevelofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的官方4d皮肤
- [IsHighLevelMultiJointOfficialSkin](../../../mcdocs/1-ModAPI-beta/接口/玩家/属性.md#ishighlevelmultijointofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的多关节官方4d皮肤
4. 动画制作人形角色必须修改bb模型的建议使用官方模型并用其进行动画制作
5. 其他:不建议直接修改 player.entity.json 和 player.render_controllers.json如果改了请务必在官方的规范下进行拓展
## 多关节美术制作参考
### 必要骨骼
1. 常规骨骼(常作为挂件的挂点):
- root, waist, body, leftArm, **leftArmDown**, rightArm, **rightArmDown**, head, **bodyDown**, leftLeg, **leftLegDown**, rightLeg, **rightLegDown**, rightLeg, cape
2. 会员盔甲挂点:
- hat, jacket, **jacketDown**, leftSleeve, leftSleeveDown, rightSleeve, **rightSleeveDown**, leftPants, **leftPantsDown**, rightPants, **rightPantsDown**
**【注意】**
* 共计26个骨骼开发者请不要随意删除
* 必要骨骼中加粗字体的骨骼为相比原版Steve新增的关节
### 骨骼层级一览
| 节点名称 | | 枢轴点 | 备注 |
|---------------------------|---|----------------| --- |
| root | | (0,0,0) | |
| —waist | | (0, 12, 0) | |
| ——body | | (0, 24, 0) | |
| ———head | | (0, 24, 0) | |
| —————hat | | (0, 24, 0) | |
| ———cape | | (0, 24, 3) | |
| ———leftArm | | (-5, 22, 0) | |
| **—————leftArmDown** | | (-5, 18, 0) | 新增必要骨骼 |
| **———————leftSleeveDown** | | (-5, 18.25, 0) | 新增盔甲骨骼 |
| ———————leftItem | | (-6, 15, 1) | |
| —————leftSleeve | | (-5, 22, 0) | |
| ———rightArm | | (5, 22, 0) | |
| **—————rightArmDown** | | (5, 18, 0) | 新增必要骨骼 |
| **———————rightSleeveDown** | | (5, 18.25, 0) | 新增盔甲骨骼 |
| ———————rightItem | | (6, 15, 1) | |
| —————rightSleeve | | (5, 22, 0) | |
| ———jacket | | (0, 24, 0) | |
| **——bodyDown** | | (0, 16, 0) | 新增必要骨骼 |
| **———jacketDown** | | (0, 16.25, 0) | 新增盔甲骨骼 |
| —leftLeg | | (-1.9, 12, 0) | |
| ——leftPants | | (-1.9, 12, 0) | |
| **——leftLegDown** | | (-1.9, 6, 0) | 新增必要骨骼 |
| **————leftPantsDown** | | (-1.9, 6.25, 0) | 新增盔甲骨骼 |
| —rightLeg | | (1.9, 12, 0) | |
| ——rightPants | | (1.9, 12, 0) | |
| **——rightLegDown** | | (1.9, 6, 0) | 新增必要骨骼 |
| **————rightPantsDown** | | (1.9, 6.25, 0) | 新增盔甲骨骼 |
**【注意】**
* 骨骼层级:影响官方动画兼容
* 骨骼命名:影响官方挂件兼容
* 枢轴点影响。比如body枢轴点24非16的原因是考虑原生鞘翅和胸甲的绑定位置
### 骨骼层级说明
* body 和 bodyDown 层级并列
* 新增的切分关节
- 5个骨骼节点`leftArmDown, rightArmDown, bodyDown, leftLegDown, rightLegDown `
- 5个骨骼节点`jacketDown, leftSleeveDown, rightSleeveDown, leftPantsDown, rightPantsDown`
### UV贴图制作
如下图所示需要按照Steve规范进行制作
![](./resources/0_1.png)
### 其余注意事项
1. 除盔甲骨骼以外其他骨骼下必须有同名cube。例如
![](./resources/0_2.jpg)
## 新增支持
### MOD SDK
为了方便开发者们在脚本中判断当前玩家皮肤状态,新增了三个接口和一个事件。
开发者可在事件当中判定**当前皮肤是否是官方,从而决定是否修改模型。**
也请开发者注意[**规范概要**](#规范概要)**非必要情况不修改模型。如需修改,也遵循照官方模型规范**
**【接口和事件】**
1. IsOfficialSkin 是否为官方皮肤
2. IsHighLevelOfficialSkin 是否为官方史诗级以上皮肤
3. IsHighLevelMultiJointOfficialSkin 是否为官方史诗级以上的多关节皮肤
4. UpdatePlayerSkinClient 更新模型皮肤事件
**【注意】**
上述三个接口在收到 Minecraft:EngineScripts:UpdatePlayerSkinClient 事件后进行调用。更多详细说明,见官网文档
使用示例
```python
# 这里以IsHighLevelMultiJointOfficialSkin为例
self.ListenForEvent('Minecraft', "EngineScripts", "UpdatePlayerSkinClient', self, self onUpdatePlayerSkinClient)
def onUpdatePlayerSkinClient(self,args):
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
comp.IsHighLevelMultiJointOfficialSkin(args['playerId']) # 返回bool为官方史诗级以上的多关节皮肤
```
### 测试服测试
为方便开发者测试4D皮肤与模组本身的兼容性官方在开发者测试服提供了测试用4D皮肤可通过邮件领取

View File

@@ -44,6 +44,7 @@ selection: true
- 建议穿戴史诗及以上多关节官方4d皮肤在模组对皮肤兼容度较差的前提下不进行玩家模型修改
- 其余情况开发者也可以使用接口判断更换模型的必要性
- [IsOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#isofficialskin) —— 获取玩家穿戴的皮肤是否为官方4d皮肤
- [IsMultiJointOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#ismultijointofficialskin) —— 获取玩家穿戴的皮肤是否为多关节官方4d皮肤
- [IsHighLevelOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#ishighlevelofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的官方4d皮肤
- [IsHighLevelMultiJointOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#ishighlevelmultijointofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的多关节官方4d皮肤
4. 动画制作人形角色必须修改bb模型的建议使用官方模型并用其进行动画制作
@@ -152,8 +153,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测试皮肤 | 传说 | 是 |![](./resources/0_3.png) |
| 黑洞之心 | 传说 | 否 |![](./resources/0_4.png) |
| 云霄战姬 | 稀有 | 否 |![](./resources/0_5.png) |
| 4D学生晴音 | 稀有 | 否 |![](./resources/0_6.png) |
##### 使用教程
更新MC Studio至1.1.48版本发布日期11月26日
1. 新建开发测试
新建开发测试按钮选择3.6(或以上)版本
注意4D皮肤仅支持3.6及以上版本使用
![](./resources/0_7.png)
选择下方的皮肤选项可以看到除了默认的史蒂夫和爱丽克丝以外新增4款4D皮肤皮肤选择皮肤后即可开始测试
![](./resources/0_8.png)
2. 配置已有存档
对于已有的3.6测试存档,可以点击配置
![](./resources/0_9.png)
在配置界面中可以切换下方的皮肤
![](./resources/0_10.png)
3. 局内切换
进入游戏时会触发一次UpdatePlayerSkinClient客户端事件
点击右上角菜单选择切换皮肤选项即可选择其他4D皮肤
![](./resources/0_11.png)
说明:
1.菜单切换4D皮肤是模拟玩家使用局内更衣室切换皮肤的情况
2.菜单切换会触发UpdatePlayerSkinClientEvent事件开发者可以使用IsHighLevelOfficialSkin、IsOfficialSkin、IsHighLevelMultiJointOfficialSkin、IsMultiJointOfficialSkin接口进行调试与兼容

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,157 +0,0 @@
---
front: 进阶
time: 15分钟
---
# 模型规范指南
## 前言
在当前模组开发实践中,部分开发者所采用的 Blockbench模型与官方标准模型存在差异。
因此换了BlockBench模型的Mod会导致官方皮肤时出现贴图错位、模型消失等兼容性问题影响了玩家的视觉体验。
现已开放官方模型规范开发者们请参考并遵循。新作品通过规范指南进行UV、动画等的制作。已有作品则可以通过SDK判断是否需要修改Blockbench模型确保模组能够与官方皮肤良好配合为玩家带来更加一致、流畅的游戏体验判断是否需要修改Blockbench模型确保模组能够与官方皮肤良好配合为玩家带来更加一致、流畅的游戏体验
## 资源提供
当前官方提供的“多关节”结构Blockbench模型已经能满足大部分的模组开发者
- 请开发者下载[官方规范player模型文件](https://g79.gdl.netease.com/official_steve_model.zip)
- 手机端则可在开平下载**更新至3.5测试端**,在邮件**领取测试用4D皮肤**测试模组与4D皮肤的兼容性
## 兼容分类
根据模组与官方皮肤的兼容程度,分为:
1. **完全兼容**未更换bb模型。表现为皮肤模型贴图以及穿戴外观模组动画等表现都正常。
2. **部分兼容**更换了bb模型但按照官方规范制作。表现为皮肤挂件以及穿戴外观正常但是模型样式改变及贴图错乱。
3. **不兼容**更换了bb模型且未按照官方规范制作。表现为模型样式改变皮肤挂件错乱穿戴外观错乱以及动作异常。
## 规范概要
1. 玩法模组非必要不改bb模型如需修改bb模型需遵循动作优化类模组规范
2. 动作优化类模组:
- 人形角色非必要不修改bb结构即无需使用AddPlayerGeometry的Api
- 如需修改修改bb结构则应该按以下优先级进行美术制作
- 不修改玩家模型为多关节
- **按规范**修改四肢为多关节模型但是不修改Body为多关节模型
- **按规范**砍四肢与body为多关节模型
- **按规范**命名骨骼/层级,但是玩家骨骼层级随意修改 *(极不推荐)*
3. SDK使用
- 开发者可以结合以下Mod SDK判断是否需要更换模型
- 建议穿戴史诗及以上多关节官方4d皮肤在模组对皮肤兼容度较差的前提下不进行玩家模型修改
- 其余情况开发者也可以使用接口判断更换模型的必要性
- [IsOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#isofficialskin) —— 获取玩家穿戴的皮肤是否为官方4d皮肤
- [IsHighLevelOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#ishighlevelofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的官方4d皮肤
- [IsHighLevelMultiJointOfficialSkin](../../../mcdocs/1-ModAPI/接口/玩家/属性.md#ishighlevelmultijointofficialskin) —— 获取玩家穿戴的皮肤是否为史诗及以上的多关节官方4d皮肤
4. 动画制作人形角色必须修改bb模型的建议使用官方模型并用其进行动画制作
5. 其他:不建议直接修改 player.entity.json 和 player.render_controllers.json如果改了请务必在官方的规范下进行拓展
## 多关节美术制作参考
### 必要骨骼
1. 常规骨骼(常作为挂件的挂点):
- root, waist, body, leftArm, **leftArmDown**, rightArm, **rightArmDown**, head, **bodyDown**, leftLeg, **leftLegDown**, rightLeg, **rightLegDown**, rightLeg, cape
2. 会员盔甲挂点:
- hat, jacket, **jacketDown**, leftSleeve, leftSleeveDown, rightSleeve, **rightSleeveDown**, leftPants, **leftPantsDown**, rightPants, **rightPantsDown**
**【注意】**
* 共计26个骨骼开发者请不要随意删除
* 必要骨骼中加粗字体的骨骼为相比原版Steve新增的关节
### 骨骼层级一览
| 节点名称 | | 枢轴点 | 备注 |
|---------------------------|---|----------------| --- |
| root | | (0,0,0) | |
| —waist | | (0, 12, 0) | |
| ——body | | (0, 24, 0) | |
| ———head | | (0, 24, 0) | |
| —————hat | | (0, 24, 0) | |
| ———cape | | (0, 24, 3) | |
| ———leftArm | | (-5, 22, 0) | |
| **—————leftArmDown** | | (-5, 18, 0) | 新增必要骨骼 |
| **———————leftSleeveDown** | | (-5, 18.25, 0) | 新增盔甲骨骼 |
| ———————leftItem | | (-6, 15, 1) | |
| —————leftSleeve | | (-5, 22, 0) | |
| ———rightArm | | (5, 22, 0) | |
| **—————rightArmDown** | | (5, 18, 0) | 新增必要骨骼 |
| **———————rightSleeveDown** | | (5, 18.25, 0) | 新增盔甲骨骼 |
| ———————rightItem | | (6, 15, 1) | |
| —————rightSleeve | | (5, 22, 0) | |
| ———jacket | | (0, 24, 0) | |
| **——bodyDown** | | (0, 16, 0) | 新增必要骨骼 |
| **———jacketDown** | | (0, 16.25, 0) | 新增盔甲骨骼 |
| —leftLeg | | (-1.9, 12, 0) | |
| ——leftPants | | (-1.9, 12, 0) | |
| **——leftLegDown** | | (-1.9, 6, 0) | 新增必要骨骼 |
| **————leftPantsDown** | | (-1.9, 6.25, 0) | 新增盔甲骨骼 |
| —rightLeg | | (1.9, 12, 0) | |
| ——rightPants | | (1.9, 12, 0) | |
| **——rightLegDown** | | (1.9, 6, 0) | 新增必要骨骼 |
| **————rightPantsDown** | | (1.9, 6.25, 0) | 新增盔甲骨骼 |
**【注意】**
* 骨骼层级:影响官方动画兼容
* 骨骼命名:影响官方挂件兼容
* 枢轴点影响。比如body枢轴点24非16的原因是考虑原生鞘翅和胸甲的绑定位置
### 骨骼层级说明
* body 和 bodyDown 层级并列
* 新增的切分关节
- 5个骨骼节点`leftArmDown, rightArmDown, bodyDown, leftLegDown, rightLegDown `
- 5个骨骼节点`jacketDown, leftSleeveDown, rightSleeveDown, leftPantsDown, rightPantsDown`
### UV贴图制作
如下图所示需要按照Steve规范进行制作
![](./resources/0_1.png)
### 其余注意事项
1. 除盔甲骨骼以外其他骨骼下必须有同名cube。例如
![](./resources/0_2.jpg)
## 新增支持
### MOD SDK
为了方便开发者们在脚本中判断当前玩家皮肤状态,新增了三个接口和一个事件。
开发者可在事件当中判定**当前皮肤是否是官方,从而决定是否修改模型。**
也请开发者注意[**规范概要**](#规范概要)**非必要情况不修改模型。如需修改,也遵循照官方模型规范**
**【接口和事件】**
1. IsOfficialSkin 是否为官方皮肤
2. IsHighLevelOfficialSkin 是否为官方史诗级以上皮肤
3. IsHighLevelMultiJointOfficialSkin 是否为官方史诗级以上的多关节皮肤
4. UpdatePlayerSkinClient 更新模型皮肤事件
**【注意】**
上述三个接口在收到 Minecraft:EngineScripts:UpdatePlayerSkinClient 事件后进行调用。更多详细说明,见官网文档
使用示例
```python
# 这里以IsHighLevelMultiJointOfficialSkin为例
self.ListenForEvent('Minecraft', "EngineScripts", "UpdatePlayerSkinClient', self, self onUpdatePlayerSkinClient)
def onUpdatePlayerSkinClient(self,args):
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
comp.IsHighLevelMultiJointOfficialSkin(args['playerId']) # 返回bool为官方史诗级以上的多关节皮肤
```
### 测试皮肤
为方便开发者测试4D皮肤与模组本身的兼容性官方在开发者测试服提供了测试用4D皮肤可通过邮件领取
**注意:** 请各位开发者更新到3.5测试服3.4该测试皮肤不会生效

View File

@@ -378,7 +378,7 @@ mc里的特效实例有两种承载方式一种是在世界空间单独存在
动画是否循环播放如果设置为false则会在每个发射器的生命周期开始时重新播放动画。
- `size`
设置发射出来的骨骼模型的大小支持molang表达式。
- `ignore_lighting`3.6beta版内容)
- `ignore_lighting`
设置粒子模型是否受到环境光照影响与实体json中ignore_lighting作用相同。该值设置为true时粒子模型不受环境光影响始终保持默认亮度。
```json

View File

@@ -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只能二选一
@@ -1863,13 +1759,23 @@ PC和IOS平台没有这个问题
而对于scrolling_content的绝对路径一共有以下两种可以通过UI-API<a href="../../mcdocs/1-ModAPI/接口/自定义UI/UI界面.html#getallchildrenpath">GetAllChildrenPath</a>清楚的看到。
#### 特别注意
```python
scroll_view_path = "/scroll_view0"
touch_path = scroll_view_path + "/scroll_touch/scroll_view/panel/background_and_viewport/scrolling_view_port/scrolling_content"
mouse_path = scroll_view_path + "/scroll_mouse/scroll_view/stack_panel/background_and_viewport/scrolling_view_port/scrolling_content"
```
在PC端进行游戏时按F11可以切换鼠标和触摸屏两种操作模式而手机端通常只有触摸屏这一种操作模式。不同的操作模式scroll_view的scrolling_content会生成在不同的路径下触摸屏使用touch_path获得scrolling_content的绝对路径而鼠标控制使用mouse_path获得。
在PC端进行游戏时按F11可以切换鼠标和触摸屏两种操作模式而手机端通常只有触摸屏这一种操作模式。不同的操作模式scroll_view的scrolling_content会生成在不同的路径下触摸屏使用touch_path获得scrolling_content的绝对路径而鼠标控制使用mouse_path获得。如果不想让路径随操作模式变化,可以指定$touch变量为true此时路径将固定为touch_path。
```json
"scroll_view0@common.scrolling_panel": {
// 手动指定$touch变量为true
"$touch": true
...
}
```
### grid
@@ -2372,7 +2278,7 @@ hover事件的触发本质上是与鼠标悬浮相关在PC模式中当鼠
UI编辑器暂时不支持编辑
### MiniMap
### mini\_map
该控件可以在UI上画小地图需要继承mini_map命名空间下的mini_map_wrapper控件。
@@ -2423,290 +2329,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 +2351,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,12 +2522,10 @@ button_data: {
在字符串中嵌入`<link>link_data</link>`样式会被解析成超链接外观和普通文本无异但可以被点击link_data为特殊化数据开发者可以在其中添加符合JSON格式的自定义数据在点击富文本中对应超链接时会将link_data通过回调函数整个返回以下属性为必须属性text表示显示文本format_code表示该段显示文本的样式代码注意基岩版的文本控件不支持下划线和删除线。
```json
{
"link_data":{
link_data: {
"text": "末影人",
"format_code": "§2"
}
}
```
#### 序列帧动画

View File

@@ -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 |

View File

@@ -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

View File

@@ -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**。

View File

@@ -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 | 输出物品 | 转换后的结果物品 |

View File

@@ -0,0 +1,232 @@
---
front: https://nie.res.netease.com/r/pic/20210728/5507b669-4c6f-4958-b5d0-b8556ab4cfb5.png
hard: 进阶
time: 20分钟
---
# Tick 事件优化指南
Tick 事件是网易版组件开发中最为核心的机制之一,绝大多数重要的游戏逻辑都需要在 Tick 事件中实现。
然而,由于事件系统的架构特性,多个逻辑模块集中在同一时间执行时,容易产生性能瓶颈。本文将分享几个经过实践验证的优化策略,帮助开发者提升游戏性能。
在后续示例中,我们将以 `ServerBlockEntityTickEvent` 事件为例进行说明。该事件会在方块实体配置并启用 tick 组件后,以每秒 20 次的频率执行。
## 一、设计原则
### 原则一:优先执行开销最小、访问频率最高的运算
由于 `ServerBlockEntityTickEvent` 事件会在所有启用了 tick 组件的方块实体上执行,通过在事件处理的最开始进行方块类型判断,可以有效避免不必要的性能开销:
```python
# -*- coding: utf-8 -*-
# ServerBlockEntityTickEvent 事件
def on_block_entity_tick(args):
block_name = args["blockName"]
if block_name == "custom:some_tickable_block":
# tick 逻辑
pass
```
值得注意的是,网易版 API 中的 `serverApi.GetEngineCompFactory()` 等工厂方法在频繁调用时也会产生性能开销,在高频执行的 tick 事件中尤其需要注意这一点。
推荐的做法是将 tick 事件中常用的接口组件预先缓存为全局变量,避免重复创建:
```python
# -*- coding: utf-8 -*-
import mod.server.extraServerApi as serverApi
# 将部分组件缓存,以便后续高频访问使用
level_id = serverApi.GetLevelId()
factory = serverApi.GetEngineCompFactory()
block_info = factory.CreateBlockInfo(level_id)
be_comp = factory.CreateBlockEntityData(level_id)
# ServerBlockEntityTickEvent 事件
def on_block_entity_tick(args):
block_name = args["blockName"]
x = args["posX"]
y = args["posY"]
z = args["posZ"]
dim_id = args["dimension"]
if block_name == "custom:some_tickable_block":
below_block = block_info.GetBlockNew((x, y - 1, z), dim_id)
# 其他逻辑部分...
```
### 原则二:采用间隔执行机制,降低计算频率
并非所有游戏逻辑都需要在每个 tick 中执行。例如,在设计烤炉烤制食物的功能时,食物的烤制进度检查完全可以每隔 20 tick 或更长时间进行一次,而无需每 tick 都执行。
最简单的实现方式是引入全局计数变量,通过取余运算实现间隔执行:
```python
# -*- coding: utf-8 -*-
TICK_COUNT = 0
# OnScriptTickServer 事件
# 注意OnScriptTickServer 每秒执行 30 次
# 而 ServerBlockEntityTickEvent 每秒执行 20 次
# 实际项目中需要考虑这一频率差异
def on_script_tick():
# 每个 tick 计数变量递增
global TICK_COUNT
TICK_COUNT += 1
# ServerBlockEntityTickEvent 事件
def on_block_entity_tick(args):
block_name = args["blockName"]
if block_name == "custom:some_tickable_block" and TICK_COUNT % 20 == 0:
# 每 20 tick 执行一次特定操作
pass
```
## 二、Tick 计数的潜在问题与负载均衡策略
上述原则二中的 tick 计数方法虽然简单有效,但存在一个重要缺陷。
当玩家同时放置多个相同的可 tick 方块(如 20 个烤炉)时,由于它们共享同一个全局计数器 TICK_COUNT所有方块的逻辑会在同一时刻集中触发造成明显的间歇性卡顿现象。
解决这个问题的关键在于实现 tick 负载均衡,让每个方块的执行时机分散到不同的 tick 中。
### 加盐Salt机制
这是借鉴自密码学的概念。
通过在 tick 计数判断中加入特定的偏移值,使每个方块的执行时机产生差异:
```python
# -*- coding: utf-8 -*-
TICK_COUNT = 0
# OnScriptTickServer 事件
def on_script_tick():
# 每 tick 时,此计数变量自增 1
global TICK_COUNT
TICK_COUNT += 1
# ServerBlockEntityTickEvent 事件
def on_block_entity_tick(args):
block_name = args["blockName"]
x = args["posX"]
y = args["posY"]
z = args["posZ"]
dim_id = args["dimension"]
if block_name == "custom:some_tickable_block":
# 使用坐标和维度 ID 作为偏移量,确保不同位置的方块错开执行时机
offset_tick_count = x + y + z + dim_id + TICK_COUNT
# 每 20 tick 执行一次,但各方块的执行时机已经分散
if offset_tick_count % 20 == 0:
pass
```
通过这种方式,可以有效确保不同位置的方块避开在同一 tick 中执行操作。
### 逻辑模块化与分频执行
当可 tick 方块包含复杂的游戏逻辑,且这些逻辑可以划分为多个独立模块时,可以根据各模块的性能开销和实时性要求,采用不同的执行频率:
- 性能开销大、实时性要求低的模块:**低频执行**
- 性能开销小、实时性要求高的模块:**高频执行**
```python
# -*- coding: utf-8 -*-
TICK_COUNT = 0
# OnScriptTickServer 事件
def on_script_tick():
# 每 tick 时,此计数变量自增 1
global TICK_COUNT
TICK_COUNT += 1
# ServerBlockEntityTickEvent 事件
def on_block_entity_tick(args):
block_name = args["blockName"]
x = args["posX"]
y = args["posY"]
z = args["posZ"]
dim_id = args["dimension"]
if block_name == "custom:some_tickable_block":
# 使用坐标和维度 ID 作为偏移量,实现负载均衡
offset_tick_count = x + y + z + dim_id + TICK_COUNT
# 高频模块:每 5 tick 执行一次
if offset_tick_count % 5 == 0:
fast_logic(args)
# 低频模块:每 100 tick 执行一次
if offset_tick_count % 100 == 0:
slow_logic(args)
def fast_logic(args):
# 低开销、高频率执行的游戏逻辑
pass
def slow_logic(args):
# 高开销、低频率执行的游戏逻辑
pass
```
### 使用质数间隔,避免执行时机冲突
当游戏逻辑足够复杂,需要拆分为多个不同执行频率的模块时
```python3
# 每 10 tick 执行一次特定操作
if offset_tick_count % 10 == 0:
logic_a(args)
# 每 20 tick 执行一次特定操作
if offset_tick_count % 20 == 0:
logic_b(args)
# 每 40 tick 执行一次特定操作
if offset_tick_count % 40 == 0:
logic_c(args)
# 每 80 tick 执行一次特定操作
if offset_tick_count % 80 == 0:
logic_d(args)
```
当游戏运行到 80 tick 的倍数时,会发现四个逻辑模块同时触发,导致性能峰值和卡顿现象。
使用质数作为执行间隔可以有效避免这一问题。将原有的间隔替换为质数 `11, 19, 41, 79`
```python
# 每 11 tick 执行一次特定操作
if offset_tick_count % 11 == 0:
logic_a(args)
# 每 19 tick 执行一次特定操作
if offset_tick_count % 19 == 0:
logic_b(args)
# 每 41 tick 执行一次特定操作
if offset_tick_count % 41 == 0:
logic_c(args)
# 每 79 tick 执行一次特定操作
if offset_tick_count % 79 == 0:
logic_d(args)
```
利用质数的数学特性,这些逻辑模块在任何 tick 时刻都不会同时执行,从而实现了更均匀的性能负载分布。

View File

@@ -0,0 +1,242 @@
# 物理的使用指南
## 使用准则与免责声明
### 使用准则
1. 仅限第三方用户生成内容UGC使用
2. 只有创作者创建的自定义实体才能与物理刚体绑定原版实体无法与PhysX创建的刚体绑定
3. 物理身件可以与其他游戏物件(包括原生游戏物件)产生互动,但是原生游戏物件与其他原生游戏物件之间的互动方式及物理碰撞不会被改变
4. 当两个碰撞同时发生时,核心游戏的物理引擎具有最高优先级
只有满足上述条件,您的模组才能符合要求进行上架
### 免责声明
物理相关api与特性可能会在将来调整并且不向前兼容。请随时做好调整的准备
但是,每次调整都会做出充分的预告和调整内容公告,方便你对您的模组进行最新内容的兼容。
## 准备工作
由于我们的物理引擎是用的 NVIDIA PhysX您可以先前往NVIDIA官网下载PhysX Visual Debugger方便后续调试。
[https://developer.nvidia.com/physx-visual-debugger](https://developer.nvidia.com/physx-visual-debugger)
![img.png](./picture/img_2.png)
## 全局配置
在使用物理引擎之前,您需要在模组的 behavior_packs 行为包中新增 physx_setting.json 全局配置文件
![img.png](./picture/img.png)
文件里面需要设置成
```json
{
"enable": true
}
```
保存后,您的模组可以正常使用 PhysX 物理引擎了。
## 开始创作
现在我会通过demo来向你介绍physx能做的内容
### 创建自定义刚体
使用物理内容的之前,您首先需要创建一个新的物理刚体,物理刚体**必须**绑定在`自定义实体`上,且创建刚体的方法只能在 `AddEntityServerEvent` 事件中使用
```python
# 创建一个自定义刚体
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.CreatePxActor()
```
现在你已经为这个 entityId 的实体添加了一个物理刚体
> 注意: 刚体创建数量不得大于 8192 虽然Physx限制是31767但是我们需要预留一些刚体阈值给到其他实体和客户端内容
> 注意:必须要在 AddEntityServerEvent 事件中创建刚体,否则会报错
> 注意:实体必须绑定在 自定义实体上,不得绑定在原版实体上
### 添加包围盒
目前这个刚体暂时没有任何功能和属性,为了让它能够正常工作,我们需要给刚体添加一些属性
首先需要添加包围盒,包围盒是刚体的基本属性,你只有添加了包围盒,才能让刚体与世界实体进行交互
添加包围盒的方法是 AddBoxGeometry ,参数方法如下
```python
# localTransform tuple(float,float,float) 盒子中心相对实体原点的偏移
# halfX float 表示盒子长度的一半
# halfY float 表示盒子高度的一半
# halfZ float 表示盒子宽度的一半
# staticFriction float 静摩擦系数
# dynamicFriction float 动摩擦系数默认为e 注意此摩擦力设置为0并不代表刚体与原生游戏交互也是 0 摩擦力
# restitution float 弹性恢复系数默认为0
# eventMask int PxEventMask枚举用于监听碰撞事件默认为PxRigidBodyFlag.Null即不需要碰撞事件
# userData None或str 可记录自定义数据长度不超过20默认为None
comp.AddBoxGeometry((0, 0.9, 0), 0.3, 0.9, 0.3, 0.05, 0.05, 0, PxEventMask.Server | PxEventMask.Found, None)
```
PxEventMask 枚举目前有六个
1. PxEventMask.Server 服务端事件
2. PxEventMask.Client 客户端事件
3. PxEventMask.Lost 结束碰撞事件
4. PxEventMask.Found 开始碰撞事件
5. PxEventMask.Found_Detail 碰撞事件的详细信息
6. PxEventMask.Null 该刚体不附加任何事件
此时你已经成功为你的刚体创建好了包围盒
当你启动游戏时,如果你此时提前打开了 PhysX Visual Debugger那么刚体的包围盒就会显示出来了
![img.png](./picture/img_3.png)
红色代表世界的原生方块、绿色和黄色代表刚体的包围盒
![img.png](./picture/img_4.png)
### 添加约束和运动
如果你想给刚体添加一些约束,比如刚体的运动锁定某个轴体,您需要添加动态约束
```python
# 下面的方法是规定此刚体只会沿着 X Y Z 轴运动
comp.SetRigidDynamicLockFlags(PxRigidDynamicLockFlag.eLOCK_ANGULAR_X | PxRigidDynamicLockFlag.eLOCK_ANGULAR_Y | PxRigidDynamicLockFlag.eLOCK_ANGULAR_Z)
```
PxRigidDynamicLockFlag 枚举目前有六个
1. PxRigidDynamicLockFlag.eLOCK_ANGULAR_X 锁定沿着 X 轴运动
2. PxRigidDynamicLockFlag.eLOCK_ANGULAR_Y 锁定沿着 Y 轴运动
3. PxRigidDynamicLockFlag.eLOCK_ANGULAR_Z 锁定沿着 Z 轴运动
4. PxRigidDynamicLockFlag.eLOCK_LINEAR_X 锁定沿着 X 轴旋转
5. PxRigidDynamicLockFlag.eLOCK_LINEAR_Y 锁定沿着 Y 轴旋转
6. PxRigidDynamicLockFlag.eLOCK_LINEAR_Z 锁定沿着 Z 轴旋转
如果你希望您的刚体具有运动的属性你需要将刚体设置为运动学刚体
那什么叫做有运动的属性
比如你想要手动控制刚体的运动那么你需要将刚体设置为运动学刚体
包括做成刚体风车刚体传送带等行为
```python
# 目前PxRigdiBodyFlag 仅支持PxRigidBodyFlag.eKINEMATIC
comp.SetRigidBodyFlag(PxRigidBodyFlag.eKINEMATIC, True)
```
### AI控制
利用实体创建刚体您需要对AI进行调整
否则在客户端会出现悬空的情况
```python
comp = serverApi.GetEngineCompFactory().CreateControlAi(entityId)
comp.SetBlockControlAi(False)
```
### 做一个简单的风车
对此我们可以通过上述内容做一个简单的风车,我们计划是配合方块调色板 + 物理引擎来做一个简单的风车
机械动力的风车是一个比较不错的参考对象
我们仿照机械动力的风车,来做一个中国版物理引擎的风车
首先根据上面介绍的内容,我们依次创建刚体,设置包围盒
但是原版Java版机械动力的风车可以自由组合方块所以我们需要一个刚体对应一个方块。目前规划是创建一个长度5格的刚体
可以做一个for循环
```python
for i in range(2):
for j in range(-2,3):
comp.AddBoxGeometry((j, 0.5 + i, 0), 0.5, 0.5, 0.5, 0.05, 0.05, 0,
PxEventMask.Server | PxEventMask.Client | PxEventMask.Found | PxEventMask.Found_Detail | PxEventMask.Lost,
%s,%s,0'%(j, i))
```
此时就会创建一个总长度 5 格的刚体包围盒,并且每个刚体对应一个方块
因为这个刚体会有旋转的效果,所以我们需要给刚体添加一个运动属性
```python
# 目前PxRigdiBodyFlag 仅支持PxRigidBodyFlag.eKINEMATIC
comp.SetRigidBodyFlag(PxRigidBodyFlag.eKINEMATIC, True)
```
因为刚体旋转是通过传入一个四元数并对四元数调整来达到目标的
所以我们需要创建一个四元数组
```python
# 这里建议用一个成员变量来做存储,方便删除实体后对数据进行调整和删除
self.mSkeletons[entityId] = Quaternion(0, 0, 0, 1)
```
因为旋转是一个连续的过程所以我们需要重写Update方法以达到每tick刷新我们的旋转数据
```python
# 这里我们对 self.mSkeletons 进行遍历,获取刚刚存储好的四元数,修改的同时传入刚体运动方法
for entityId, v in self.mSkeletons.iteritems():
# 旋转
q = v * Quaternion.AngleAxis(1, Vector3.Up())
# 修改变量值
self.mSkeletons[entityId] = q
# 设置为运动学目标
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 运动
comp.SetKinematicTarget(None, q.ToTuple())
```
此时刚体就会每tick旋转角度
但是目前做的内容仅仅只是对刚体进行了旋转,客户端没有表现,我们还需要用方块调色板对客户端进行调试
首先创建一个调色板
```python
dataDict = {'extra': {}, 'void': False, 'actor': {}, 'volume': (1, 5, 2), 'common': {('minecraft:grass_block', 0): [4, 9], ('minecraft:glass', 0): [1, 6], ('minecraft:quartz_block', 0): [3, 8], ('minecraft:white_wool', 0): [0, 5], ('minecraft:oak_planks', 0): [2, 7]}, 'eliminateAir': True}
comp = compFactory.CreateBlock(levelId)
palette = comp.GetBlankBlockPalette()
palette.DeserializeBlockPalette(dataDict)
blockGeometryComp = compFactory.CreateBlockGeometry(levelId)
geometryName = blockGeometryComp.CombineBlockPaletteToGeometry(palette,"my_block_geometry")
```
然后需要将调色板绑定在实体上,但是绑定刚体是欧拉角,也就是说我们还需要将四元数转成欧拉角
好在ModSDK提供了这个简单的方法物理引擎也有获取客户端刚体的四元数数据
```python
actorRenderComp = compFactory.CreateActorRender(entityId)
comp = compFactory.CreatePhysx(entityId)
q = Quaternion(comp.GetQuaternion())
# AddActorBlockGeometry 在 3.7 新增了一个参数, 会控制先旋转后偏移还是先偏移后旋转。默认是False
# 为了做风车,我们设置为 True也就是先旋转再偏移
actorRenderComp.AddActorBlockGeometry(geometryName, (-2, 0, 0), q.EulerAngles().ToTuple(), 0True)
self.mSkeletons.add(entityId)
```
此时刚体的方块调色板就已经绑定在实体上了,但是这个我们查看 PhysX Visual Debugger 时,发现刚体变动了,但是调色板方块没有变化
所以我们也要对客户端表现进行调整
同样需要重写 Update 方法每tick修改方块调色板的旋转角度
```python
def Update(self):
for entityId in self.mSkeletons:
comp = compFactory.CreatePhysx(entityId)
q = comp.GetQuaternion()
if q:
q = Quaternion(q)
actorRenderComp = compFactory.CreateActorRender(entityId)
actorRenderComp.SetActorBlockGeometryRotation("my_block_geometry", q.EulerAngles().ToTuple())
```
当全部完成后,就可以做到风车围绕着一个自定义实体进行旋转,然后推动实体进行移动了
并且你也可以站在这个刚体上,但是站在刚体上,刚体并不会带着玩家一起移动,开发者们可以自行思考解决办法来处理这个问题!
![img_5.png](./picture/img_5.png)
### 思考
虽然我们现在是在用 Update 的方式去动态的调整刚体旋转和外观旋转
但是进入游戏后会发现,用此方法来旋转会有一点的顿挫感,虽然影响不是很大,但如果你需要追求细致,可能还不算太完美
或许还可以通过 `GameRenderTickEvent` 来调整,但是这个方法笔者并没有使用过,所以需要开发者们自行思考研究

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB

View File

@@ -0,0 +1,239 @@
---
front:
hard: 入门
time: 60分钟
---
# 通过MCSM面板管理服务器
![封面](./res/mcsmguide/10.png)
## 准备阶段
1. PE/PC网络服入驻通过并且拿到网易开发机/正式机。
2. 自备服务器非网易机器最低要求1c1g建议安装宝塔
3. 下载所需要的文件(相关文件已上传内容库)
4. 完成上一章节《部署服务器》
5. MCSM面板中文指南<https://docs.mcsmanager.com/zh_cn/>
## 特别提示
本教程不会在网易机器部署web面板及自建服务。
本教程将默认开发者已经熟悉MCSM面板基础内容不再介绍。
开始前请熟知并遵守《高危操作警告说明》:
* 网易机器禁止私自开放附录名单内端口对外
* 网易机器禁止私自把无任何认证校验服务直接对外
* 网易机器禁止私自把机器交付时开放的业务端口用于其他用途,如数据库或自建服务等
![《高危操作警告说明》文档](./res/mcsmguide/20.png)
## 原理说明
在网易机器部署mcsm daemon守护进程通过自备机器协议转发SSH隧道与网易机器通信从而达到使用mcsm面板管理网易机器。
![原理图](./res/mcsmguide/30.png)
## 操作步骤
### (一)在网易机器
#### 1. 无root安装node.js
**强制要求安装node16+的版本,不然守护进程跑不起来**
```bash
# 下载nodejs
cd ~/downloads
wget https://nodejs.org/dist/v16.20.2/node-v16.20.2-linux-x64.tar.xz
# 创建工作目录并解压
mkdir -p ~/apps/node-v16.20.2
tar -xJf node-v16.20.2-linux-x64.tar.xz --no-wildcards-match-slash --anchored --exclude */CHANGELOG.md --exclude */LICENSE --exclude */README.md --strip 1 -C ~/apps/node-v16.20.2
# 添加path变量
export PATH=~/apps/node-v16.20.2/bin:$PATH
source ~/.bashrc
# 检查nodejs版本
node -v
npm -v
# 至此安装完成
```
#### 2. 守护进程mcsm daemon上传部署
从github下载压缩包内容库也已上传
<https://github.com/MCSManager/MCSManager/releases/latest/download/mcsmanager_linux_daemon_only_release.tar.gz>
```bash
# 创建mcsm daemon工作目录
cd ~
mkdir -p ~/mcsm
# 上传到这个目录Xftp, FinalShell均可
# 解压
cd ~/mcsm
tar -zxvf mcsmanager_linux_daemon_only_release.tar.gz
cd ~/mcsm/mcsmanager
# 设置 npm 镜像源为国内淘宝源
npm config set registry https://registry.npmmirror.com
npm config get registry
# 新增screen
screen -S mcsm
# 安装依赖后部署
sh start-daemon.sh
```
#### 3. 检查24444端口和秘钥
执行上一步骤后,服务将会启动成功,请使用**ctrl+a、d**来后台运行screen
启动成功后,你会看到类似 \[INFO] Key: xxxxxxx 和 Port: 24444 的信息。
记录key秘钥后续将用于自备机器节点配置。
```bash
# 检查端口是否正常
netstat -tulnp | grep 24444
```
### (二)在自备机器
#### 1. 自动安装mcsm+开启守护进程
```bash
# 请确保root登录有sudo权限
sudo su -c "wget -qO- https://script.mcsmanager.com/setup_cn.sh | bash"
# 先启动面板守护进程。
# 这是用于进程控制,终端管理的服务进程。
systemctl start mcsm-daemon.service
# 再启动面板 Web 服务。
# 这是用来实现支持网页访问和用户管理的服务。
systemctl start mcsm-web.service
# 以下命令已列出(如有需要请自取)
# 重启面板命令
systemctl restart mcsm-daemon.service
systemctl restart mcsm-web.service
# 停止面板命令
systemctl stop mcsm-web.service
systemctl stop mcsm-daemon.service
```
如果 systemctl 命令无法启动面板,可以参考手动安装(<https://docs.mcsmanager.com/zh_cn/> 中的 启动方式 来启动 MCSManager。 但这需要你用其他后台运行程序来接管它,否则当你的 SSH 终端断开之时,手动启动的 MCSManager 面板也会随之被系统强制结束。
面板 Web 服务是提供用户管理与网页访问功能的服务,守护进程是提供进程管理和容器管理的服务,两者缺一不可。如果某个功能不正常,可以只重启这一部分的服务来热修复问题。
#### 2. 配置协议转发autossh
下面将以宝塔面板进行操作:
① 进入/root/.ssh/目录上传网易机器秘钥
② 配置秘钥密码和隧道转发
```bash
# 设置秘钥权限(请自行替换)
chmod 600 /root/.ssh/netease.key
# 启动 ssh-agent
eval `ssh-agent -s`
# 添加密钥并输入一次密码(请自行替换)
ssh-add /root/.ssh/netease.key
# 如无autossh请自行安装
apt-get update
apt-get install autossh -y
# 执行隧道命令(请自行替换)
# 将ssh隧道连接的网易机器24444端口转发到自备机器的24445端口
# 注意 -L 后面的 0.0.0.0:24445
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -p 32200 -i /root/.ssh/netease.key -CNf -L 0.0.0.0:24445:127.0.0.1:24444 fuzhu@<网易机器IP>
# 验证是否成功
netstat -tunlp | grep 24445
# 如果你看到类似下面的输出:
# tcp 0 0 127.0.0.1:24445 0.0.0.0:* LISTEN 1234/ssh
# 那么就成功了
# 至此隧道转发结束
```
③ 防火墙和安全组开放端口(仅在自备机器,网易机器禁止开放端口)
| mcsm面板web端口建议nginx转发改端口安全一些 | 23333 |
| ------------------------------ | ----- |
| **ssh协议转发端口设置端口白名单否则有安全问题** | 24445 |
#### 3. 配置mcsm节点
![节点位置](./res/mcsmguide/40.png)
![节点配置](./res/mcsmguide/50.png)
这里的“远程节点秘钥”请替换为网易机器守护进程输出的key秘钥。
添加后,显示节点状态为正常,网页直连为正常,可以读取内存和处理器使用率后节点配置成功。
#### 4. 检查实例创建和文件管理是否正常
如需迁移网易机器的screen至mcsm请使用“直接创建”配置服务端目录、实例类型和启动命令后即可迁移成功。
![创建实例](./res/mcsmguide/60.png)
![文件管理](./res/mcsmguide/70.png)
#### 5. 常见的问题
① 无法连接到远程节点
检查自备机器端口/安全组是否开放是否需要配置nginx反向代理。
最简单的方法就是直接复制地址浏览器访问看是否有显示daemon状态。
![无法连接到远程节点](./res/mcsmguide/80.png)
![守护进程状态](./res/mcsmguide/90.png)
② 多网易机器部署
按照此方法在不同机器上配置mcsm daemon守护进程配置多个SSH隧道协议转发然后新增节点即可。
③ mcsm面板传输文件出现错误
显示network error
解决方法升级daemon为最新版不要使用3.x的版本
## 特别鸣谢
教程作者:初云
灵感和帮助Soldier
全过程步骤指导Gemini3 Pro
教程参考指南MCSManager团队
MCSM常见问题解答混合、封神、MuFeng、西瓜、星汉
调试与测试:千阙云庭服务器团队、初云杯服务器团队、风之谷服务器团队
如您在操作过程中有困难,欢迎您随时联系我们\~
感谢帮助过我们的人,期待网络服环境蒸蒸日上!

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,103 +0,0 @@
---
front:
hard: 入门
time: 60分钟
---
# Nukkit部署教程
## 前言
本文默认认为你了解过Nukkit 或者 通过Waterdogpe + Nukkit搭建过第三方服务器。
## 准备阶段
1. 准备Java版本建议Java版本为Java17及以上版本
2. 准备NukkitMOT分支NukkitMOT原作者已将中国版打包到github主分支内 https://github.com/MemoriesOfTime/Nukkit-MOT
> 目前仅支持接入Nukkit-MOT其他分支可自行通过参考NukkitMOT源码进行对接
3. 准备 WaterDogPE 代理服务端。
## WaterDogPE
### config.yml 的配置
需要修改以下参数,其他配置根据情况自行修改
```yaml
# ....
netease_client: true # 启用 netease 客户端的支持
online_mode: true
# 开发测试阶段需要改为false否则会提示需要 minecraft验证
# 发布阶段时需要改为true之后只能用网易手机客户端连接才能进入
listener:
# .....
host: 0.0.0.0:19132 # waterdogpe 代理端的IP和端口 。官方提供的机器19132端口可能会被占用根据实际情况更改
priorites: # 按顺序配置,第一个是玩家进入时默认在的服务器。 一般为大厅服
- lobby1
# .....
servers: # 子服务器的连接ID配置如大厅服、游戏服等等。如子服务器不在同一台机器则需要写具体的ip。
lobby1:
address: 127.0.0.1:19133
public_address: play.myserver.com:19133
server_type: bedrock
permissions: # 权限配置,一般用于配置管理员的权限,用于测试、调试。仅通过名字识别,建议发布阶段去掉,改为用插件实现相关调试功能
玩家id:
- waterdog.player.transfer
- waterdog.player.list
- waterdog.command.server
```
### 装载客户端模组
当通过waterdogpe代理后需要将客户端模组存放在waterdogpe 根目录下的 packs 文件夹中不要存放在NukkitMOT根目录
> 除非你仅通过NukkitMOT单端开服 否则waterdogpe 会自动将nukkit模组加载数据包拦截
> 但如果关闭waterdogpe的资源包功能Nukkit数据包依然会被waterdogpe拦截而无法正常进入游戏
确保 config.yml 已启用资源包
```yaml
enable_packs: true # 必须打开
overwrite_client_packs: true # 按需
force_server_packs: true # 按需
```
### 模组打包格式
waterdogpe 仅支持 zip和mcpack包不支持文件夹。
可以将行为包、资源包都存放在packs目录中。
目前仅支持 manifest.json ,不支持 pack_manifest.json
zip打包格式为 压缩包一级目录下就是 manifest.json不要额外套一层文件夹
![](./images/img.png)
## Nukkit-MOT
nukkit社区的插件
https://cloudburstmc.org/resources/categories/nukkit-plugins.1/
### server.properties 配置
为了确保Nukkit-MOT正常接入中国版您需要调整一些配置
```properties
xbox-auth=off
netease-client-support=on
only-allow-netease-client=on
```
### 模组装载
如果使用 waterdogpe 代理,则需要将模组放在 waterdogpe 目录而非Nukkit目录
如果仅适用Nukkit则将行为包合资源包都放在Nukkit目录下有关 netease的文件里
### NukkitMaster插件
NukkitMaster相当于Spigot服的SpigotMaster内置封装了PyRPC、订单接口、消息收发等功能API和使用方法和SpigotMaster一样。
### 自定义物品、方块和实体
Nukkit-MOT本身已经支持自定义物品、方块、实体的功能可以参考[官方文档](https://www.nukkit-mot.com/zh/docs/tutorial-extras/custom/custom_item)

View File

@@ -1,271 +0,0 @@
# NukkitMaster文档
## 准备阶段
在部署Nukkit服务器之前您需要阅读一下NukkitMaster的API来进行基本的ModSDK通信与商业化内容接入。
NukkitMaster需要安装在Nukkit-MOT服务端中。
> 需要注意: NukkitMaster是基于Nukkit-MOT分支进行开发的。Nukkit官方服务端版本无法兼容。
> 如果您需要使用其他分支的Nukkit您可以自行反编译NukkitMaster
> NukkitMOT分支开源地址 https://github.com/MemoriesOfTime/Nukkit-MOT
## 插件配置
```yaml
# 服务器id开发者平台中的资源数字id
game_id: ""
# 正式服务器key开发者平台中的签名信息
game_key: ""
# 测试服务器key开发者平台中的签名信息
test_game_key: ""
# 是否是测试服
test_server: false
# 是否使用自定义商城false表示使用官方提供的商城功能
custom_shop: false
# 订单服务器地址(一般不用填,保持""即可)
shop_server_url: ""
# web服务器地址一般不用填保持""即可)
web_server_url: ""
```
NukkitMaster插件会在 `plugins/NukkitMaster` 下生成 `config.yml` 需要将服务器的相关数据进行配置订单API才能生效。
其中`gameid``rawkey``test rawkey`是必须要填写的。
`test_server`需要根据服务器部署情况进行修改这个值会影响NukkitMaster插件使用的是正式服url还是测试服url
`custom_shop` 和 [商业化流程](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%8B9%EF%BC%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%BA%BF/%E7%AC%AC3%E8%8A%82%EF%BC%9A%E5%95%86%E4%B8%9A%E5%8C%96%E6%93%8D%E4%BD%9C.html?key=use_custom_shop&docindex=1&type=0) 中 use custom shop 功能同理
`shop_server_url``web_server_url`为预留配置,目前不需要修改,默认即可
## API
### `public void enableCustomShopEntry(boolean useCustomShop)`
开启商城插件的入口该功能已经在NukkitMaster中集成可修改NukkitMaster的`config.yml`文件。
参数: `useCustomShop` —— 是否使用自定义商城入口为false时则使用官方商城入口
### `public void openShop(Player player)`
打开指定玩家商城界面 注意该接口需要使用商城插件并修改config.yml的`custom_shop`为true。
参数: `player` —— 玩家
### `public void closeShop(Player player)`
关闭指定玩家商城界面 注意该接口需要使用商城插件并修改config.yml的`custom_shop`为true。
参数: `player` —— 玩家
### `public void getPlayerOrderList(Player player, FutureCallback<Map<String, Object>> callback)`
获取玩家未发货订单列表
参数:
`player` —— 玩家
`callback` —— FutureCallBack 回调函数
例子:
回调参数为Map<String,Object>, 目前值为
| Key | Value |
|-------------|------------|
| json_result | 订单json数据对象 |
| player | Player玩家对象 |
### `public void finPlayerOrder(Player player, List<String> orderList, FutureCallback<Map<String, Object>> callback)`
获取玩家未发货订单列表
参数:
`player` —— 玩家
`orderList` —— 订单id列表
`callback` —— FutureCallBack 回调函数
### `public void listenForNukkitMasterEvent(SpigotMasterEvent event, PyRpcHandler handler)`
监听spigot master的自定义事件
参数:
`event` — SpigotMasterEvent的枚举值
`handler` — 回调函数
### `public void listenForEvent(String namespace, String system, String event, PyRpcHandler handler)`
注册客户端事件
参数:
`namespace` — 来源客户端系统的namespace
`system` — 来源客户端系统的systemName
`event` — 事件名
`handler` — 回调函数
### `public void notifyToClient(Player player, String namespace, String system, String event, Map<String, Object> data)`
给指定玩家发送服务端事件
参数:
`player` — 接收事件的玩家
`namespace` — 在客户端系统使用ListenForEvent监听的namespace
`system` — 在客户端系统使用ListenForEvent监听的systemName
`event` — 事件名
`data` — 事件参数。注意,要使用-2指代本地玩家的entityId。
### `public void notifyToMultiClients(List<Player> players, String namespace, String system, String event, Map<String, Object> data)`
给多个玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
参数:
`players` — 接收事件的玩家列表
`namespace` — 在客户端系统使用ListenForEvent监听的namespace
`system` — 在客户端系统使用ListenForEvent监听的systemName
`event` — 事件名
`data` — 事件参数
### `public void notifyToClientsNearby(@Nullable Player except, Location loc, double dist, String namespace, String system, String event, Map<String, Object> data)`
给某个位置附近一定半径内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
参数:
`except` — 发送事件时排除掉这个玩家可以为null表示不排除
`loc` — 圆心位置
`dist` — 半径
`namespace` — 在客户端系统使用ListenForEvent监听的namespace
`system` — 在客户端系统使用ListenForEvent监听的systemName
`event` — 事件名
`data` — 事件参数
### `public void broadcastToAllClient(@Nullable Player except, World world, String namespace, String system, String event, Map<String, Object> data)`
给某个world内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
参数:
`except` — 发送事件时排除掉这个玩家可以为null表示不排除
`world` — 所在world
`namespace` — 在客户端系统使用ListenForEvent监听的namespace
`system` — 在客户端系统使用ListenForEvent监听的systemName
`event` — 事件名
`data` — 事件参数
### `public void broadcastToAllClient(@Nullable Player except, String namespace, String system, String event, Map<String, Object> data)`
给服务器内的所有玩家发送服务端事件。 因为-2的entityId对于不同玩家来说都指代本机玩家而非某个固定的实体所以不要在多播中发送这种信息。
参数:
`except` — 发送事件时排除掉这个玩家可以为null表示不排除
`namespace` — 在客户端系统使用ListenForEvent监听的namespace
`system` — 在客户端系统使用ListenForEvent监听的systemName
`event` — 事件名
`data` — 事件参数
## API的使用例子
可以参考Spigot开服的商店DEMO [商城Demo详解](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%8B10%EF%BC%9A%E4%BD%BF%E7%94%A8Spigot%E5%BC%80%E6%9C%8D/30-Spigot%E6%9C%8DDemo%E8%AF%A6%E8%A7%A3/3-%E5%95%86%E5%9F%8EDemo%E8%AF%A6%E8%A7%A3.html)
仅仅只是将其中spigotMaster更换为nukkitMaster其他逻辑基本相同
### 获取nukkitMaster对象
```java
import com.neteasemc.nukkitmaster.NukkitMaster;
public final class App extends PluginBase {
NukkitMaster nukkitMaster;
@Override
public void onEnable() {
// 可以直接获取instance
nukkitMaster = NukkitMaster.getInstance();
// 或者通过插件名字获取
nukkitMaster = (NukkitMaster)getServer().getPluginManager().getPlugin("NukkitMaster");
}
}
```
### 监听玩家购买商品事件、玩家催发货事件和发货逻辑
```java
public void ListenShop() {
PyRpcHandler shipItemHandler = new PyRpcHandler() {
@Override
public void onEvent(Player player, Map<String, Object> data) {
tryShipItem(player);
}
};
// 玩家催发货或者玩家购买物品成功事件进行发货检查
nukkitMaster.listenForNukkitMasterEvent(NukkitMasterEvent.PLAYER_BUY_ITEM_SUCCESS, shipItemHandler);
nukkitMaster.listenForNukkitMasterEvent(NukkitMasterEvent.PLAYER_URGE_SHIP, shipItemHandler);
}
// 获取玩家订单,并且尝试发货
public void tryShipItem(Player player){
FutureCallback<Map<String, Object>> cbHandler = new FutureCallback<Map<String, Object>>() {
@Override
public void completed(Map<String, Object> result) {
JSONObject jsonRes = (JSONObject)result.get("json_result");
Player requestPlayer = (Player)result.get("player");
JSONArray entities = (JSONArray)jsonRes.get("entities");
// 这里进行entites的订单内容发放
List<String> finOrderIds = new ArrayList<>();
for(int i = 0; i < entities.size(); ++i){
JSONObject order = (JSONObject)entities.get(i);
// 取出订单id判断是否已经发放过比如说通过本地的数据库等
String orderId = order.getAsString("orderid");
// 对于还未发放的订单, 根据order的cmd字段进行对应的奖励逻辑发放
// 如shipItemToPlayer(requestPlayer);
// 发放完之后记录数据库
// 如saveOrder(requestPlayer, orderId);
// 最后通知网易服务器订单已完成
finOrderIds.add(orderId);
}
finPlayerOrder(requestPlayer, finOrderIds);
}
@Override
public void failed(Exception ex) {
// 失败原因
getLogger().info(ex.toString());
}
@Override
public void cancelled() {
getLogger().info("取消请求玩家订单");
}
};
nukkitMaster.getPlayerOrderList(player, cbHandler);
}
// 通知网易服务器订单完成
public void finPlayerOrder(Player player, List<String> finOrderList){
FutureCallback<Map<String, Object>> cbHandler = new FutureCallback<Map<String, Object>>() {
@Override
public void completed(Map<String, Object> result) {
JSONObject jsonRes = (JSONObject)result.get("json_result");
Player requestPlayer = (Player)result.get("player");
getLogger().info("玩家:" + requestPlayer.getDisplayName() + " 订单已完成:" + jsonRes);
}
@Override
public void failed(Exception ex) {
getLogger().info(ex.toString());
}
@Override
public void cancelled() {
getLogger().info("取消通知玩家订单完成");
}
};
nukkitMaster.finPlayerOrder(player, finOrderList, cbHandler);
}
```
## NukkitMaster Event事件
### `PLAYER_URGE_SHIP("player_urge_ship")`
玩家催发货事件
### `PLAYER_BUY_ITEM_SUCCESS("player_buy_item_success")`
玩家购买成功事件
### `CLIENT_LOAD_ADDON_FINISH("client_load_addon_finish")`
玩家客户端加载Mod完成事件

View File

@@ -6,33 +6,63 @@ time: 5分钟
# 组件打包发布
## 前言
本文将从MC Studio工具快捷打包 和 手动打包 两个方面介绍组件的打包发布
## 组件配置
在组件的右键菜单选择配置可以对作品的UUID与版本号进行修改
### 配置介绍
UUID: 代表模组的内容的全局唯一标识符如果有相同的UUID的组件会在组件上传审核机审时候报错
版本号:对应模组内容的迭代版本
### UUID更新
在组件的右键菜单选择配置。可以对作品的UUID与版本号进行修改
![image-20220523212424951](./images/image-20220523212424951.png)
点击随机UUID将会自动对所有资源包和行为包的UUID进行随机
**点击随机UUID将会自动对所有资源包和行为包的UUID进行随机**
选中对应的资源包右键可以复制其UUID
![image-20220523212517202](./images/image-20220523212517202.png)
在开发测试阶段,并不需要关注版本号,而当你的组件需要发布到平台,为了让组件上线后能顺利更新,每次发布前需要提升组件版本号,这里你既可以单独升级个别资源包,也可以全选升级所有资源包。
### 版本号
## 组件发布
![升级版本号](./new_images/zujiandabao/0_1.png)
当你的组件一切准备就绪,就可以在组件的右键菜单里,点击进行发布。
在开发测试阶段,并不需要关注版本号,其不会影响你的开发
发布时会自动选中平台已有的同名组件,并自动勾选更新已有作品,因此请尽量保持作品与平台名称一致
当你的组件需要发布到平台,如果你是第一次发布组件时,会以资源包与行为包**默认的0.0.1版本**进行发布。而之后的每次更新发布前,需要提升组件版本号,根据你更新的内容决定,这里你可以单独升级个别资源包,也可以全选升级所有资源包
![image-20220523213006425](./images/image-20220523213006425.png)
## MC Studio进行快捷打包发布
点击确定后,我们会对作品进行自检,然后导出必要的文件,并压缩成<名称_时间.zip>的命名格式,上传到开发者平台,并打开浏览器对应链接,你可以在这个页面进一步编辑器组件的详情,最后点击保存。
## 组件转换
同时我们还提供了组件间的转换功能你可以在右键菜单里找到它将AddOn方便的转换为地图或服务器Mod
1. MC Studio提供了组件间的转换功能你可以在右键菜单里找到它将AddOn方便的转换为地图或服务器Mod
![image-20220523213431590](./images/image-20220523213431590.png)
2. 当你的组件一切准备就绪,就可以在组件的右键菜单里,点击进行发布,随后会有一个选择界面。
![image-20220523213006425](./images/image-20220523213006425.png)
- 新建作品:你的开发者平台中没有该作品,这时会创建一个全新的组件
- 更新已有作品:此时会自动选中平台已有的同名组件,并自动勾选更新已有作品。**当然也可以手动选择其他组件,但是这代表着其他组件的内容将会被本次发布的组件内容覆盖,因此请尽量保持作品与平台中作品名称一致,避免组件上传错误** (可以看到上图中和首页第一张图的组件名称都是叫lobbyGoodsMod2.0)
3. 点击确定后MC Studio会对作品进行自检然后导出必要的文件并压缩成<名称_时间.zip>的命名格式,上传到开发者平台,并打开浏览器对应链接,你可以在这个页面进一步编辑器组件的详情,最后点击保存。
## 手动打包发布
### 检查包体的文件结构与导出
[课程01.包体的结构和导入](https://mc.163.com/dev/mcmanual/mc-dev/mconline/10-addon%E6%95%99%E7%A8%8B/%E7%AC%AC18%E7%AB%A0%EF%BC%9A%E6%89%93%E5%8C%85%E5%AF%BC%E5%87%BA%E4%BD%A0%E7%9A%84%E4%BD%9C%E5%93%81/%E8%AF%BE%E7%A8%8B01.%E5%8C%85%E4%BD%93%E7%9A%84%E7%BB%93%E6%9E%84%E5%92%8C%E5%AF%BC%E5%85%A5.html?catalog=1)介绍了PC PE中所有组件类型的文件结构与打包开发者可以进行参考检查自己的文件
### 发布
[课程03-组件上架的规范及过审攻略](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/35-%E4%B8%8A%E6%9E%B6%E4%B8%8E%E5%85%A5%E9%A9%BB/%E8%AF%BE%E7%A8%8B04-%E8%AE%A4%E8%AF%86%E4%BD%9C%E5%93%81%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97.html?catalog=1)介绍了如何将打包后组件上传发布,开发者可以进行流程参考

View File

@@ -0,0 +1,86 @@
---
front:
hard: 入门
time: 20分钟
selection: true
---
# MCS支持我的山头模组兼容测试
## 准备工作
1. 最新版MC Studio
2. 最新版 3.6 及以后版本的 安卓手机测试包 目前暂时不支持IOS
MCS我的山头容器管理页面位于 【基岩版组件-联机测试】
![](./images/img.png)
## 如何创建一个测试山头
首先需要说明的是MCS仅支持查阅日志和邀请玩家进入山头服山头服的创建仍然需要前往测试审核服进行创建
创建完以后MCS会自动同步山头服实例
为了避免资源的浪费,目前只允许创建山腰服务器。其他档位会置灰
![](./images/img_1.png)
打开购买弹窗,点击确认即可
![](./images/img_3.png)
现在你已经完成了在审核服创建山头的方法此时当你创建好以后就可以在MCS管理成员和查阅日志
## 添加模组
您现在创建的山头,目前是没有模组的,但是山头容器可以获取到你上传到审核服的所有自测中的模组,但是前提是这个模组必须勾选上架 我的山头 专区
山头专区的模组,可以直接选择安装
![](./images/img_4.png)
这可能有些麻烦这是因为山头容器只能拉取模组的itemid这就代表无法本地进行山头服模组兼容测试你只能上传模组到开平然后在审核服测试
日志通过MCS进行查阅
## 日志
日志是山头测试的一个重要内容,关系到开发者能否查阅到模组在山头当中的报错从而追踪定位问题所在的代码
所以当你在测试服创建好山头以后您可以直接在MCS山头测试页面打开日志
第一次打开日志会出现有一定的时间的卡顿,这是正常现象
打开日志会一次性打开服务端日志和客户端日志,服务端日志会直接链接这个山头实例
但是客户端日志则需要开发者自行连接到手机端
连接手机端的方式可以查阅 [使用调试工具进行手机和电脑端调试](1-使用调试工具进行手机和电脑端调试.md)
![](./images/img_5.png)
## 成员管理
为了保证数据安全成员管理请在MC Studio进行
![](./images/img_6.png)
您可以直接在这个页面输入对方的UID进行添加添加以后点击确定即可
备注: 每次添加UID只能一个一个的添加 也就是输入UID以后点添加就直接点击确认不能一次性添加两个人及以上。这是为了防止恶意通过此入口来对山头服服务端进行多次请求
添加以后,开发者在审核服山头页面就会收到邀请,点击同意即可加入
![](./images/img_7.png)
如果对方没有同意下一次再打开成员管理页面仍然不会显示那名玩家的名称和UID你不必重新添加
## 山头服自动回收
为了避免资源的浪费每位开发者测试完毕后应该主动在MCS删除实例恶意占用资源的我们会严肃处理
当山头服 30 分钟内没有任何人时,山头服会自动进行回收,下次重新购买山腰档的山头服即可

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

View File

@@ -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)

View File

@@ -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)与我们取得联系。《我的世界》开发者平台也会提供独立的整合包流量位,敬请期待。
- 我们鼓励开发者注重模组间的协同与扩展(例如通过魔改实现资源互通、配方统一,或结合科技与魔法主题设计连贯的进程路线),从而打造出更具整体性与沉浸感的整合包体验;
- 我们也建议在开发中关注性能优化与玩家体验的平衡,加入必要的功能辅助与引导设计,共同构建富有生命力的整合包生态。
## 创建整合包
### 入口
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **模组** - **手机版** - **整合包**
![image-20230216150314989](./images/bundle_8.png)
![alt text](./new_images/11.1/0.png)
### 创建基本信息
点击 **创建整合包** ,可先设置 **整合包名称****基础折扣****限时折扣**
点击 **创建整合包** ,可先设置 **整合包名称****整合包类型****基础折扣****限时折扣**
![alt text](./new_images/11.1/1.png)
- 整合包类型:分为 **普通整合包****纯地图整合包**
- **普通整合包** :可以选择任一类型的模组。
- **纯地图整合包** :只能选择 **地图模组**
之后按照内容
- 整合包名称:将作为整合包的名称进行展示。
- 基础折扣:必填,整合包上线后的默认折扣。
- 限时折扣:选填,可设置整合包在特定时间期间的折扣。整合包内的基础折扣与限时折扣同时生效时, **优先使用限时折扣**
![image-20230216163112834](./images/bundle_12.png)
#### 创建规则
开发者可按以下配置创建新的整合包:
- **多个** Add-on 模组
- **1** 张地图
**纯地图整合包** 最低折扣为50% **普通整合包** 有价格限制,最低折扣需按模组原价折后价**500钻石**设置。整合包类型将根据包内模组类型情况进行自动选择。
- **多个**材质/光影
- **多个**皮肤
#### 创建注意事项:
- 整合包内不能添加多张地图
- 整合包内不能添加联机大厅
- 整合包内模组可以全部为Add-on模组或材质光影不可全部为皮肤
- 仅符合新版规则的整合包可由玩家在详情页一键游玩,且可在存档管理 - 新增的整合包页签中找到并进行管理
模组购买价格将按照**模组本身的折扣**以及**整合包限时折扣**进行叠加,若整合包限时折扣不存在时,将由整合包基础折扣代替。
@@ -51,19 +69,21 @@ selection: true
![bundle_example_0](./images/bundle_0.png)
### 创建整合包资源
接着在资源区域添加与整合包关联的模组。其中整合包最多关联20个最少关联3个 **有过审记录的模组资源****单个模组资源可加入的整合包次数不限**
![image-20230216162103730](./images/bundle_2.png)
![alt text](./new_images/11.1/2.png)
添加模组资源后,必须设置其中一个模组为核心模组。核心模组默认在第一顺位展示。开发者可在每次关联模组时,通过添加顺序管理新增的模组展示顺序。
![alt text](./new_images/11.1/3.png)
添加模组资源后,必须设置其中一个模组为核心模组。核心模组默认在第一顺位展示。开发者可在每次关联模组时,通过添加顺序管理新增的模组展示顺序,未来也会提供直接调整非核心模组的展示顺序功能,敬请期待。
![image-20230216161858452](./images/bundle_6.png)
同时也提供直接调整非核心模组的展示顺序功能
![image-20251203tt](./new_images/11.1/4.png)
### 创建详细信息、图片和上传视频
接着填充 **详情信息** 、**编辑图片** 和 **上传视频** 区域的相关内容,这些信息内容将会展示在整合包详情页中。也可直接点击同步按钮同步核心资源的资源描述,减少人工操作的时间。
@@ -73,7 +93,7 @@ selection: true
![image-20230216142226019](./images/bundle_4.png)
### 创建更新纪要
与编辑模组上传信息不同,整合包的 **更新纪要** 为必填内容。设置之后会在玩家的订阅功能中同步生成资源卡片,并会在手机消息通知中同步收到提醒。
@@ -85,7 +105,7 @@ selection: true
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **模组** - **手机版** - **整合包**
![image-20230216145005670](./images/bundle_8.png)
![alt text](./new_images/11.1/0.png)
@@ -115,60 +135,42 @@ selection: true
## 整合包FAQ
### 整合包的展示位置在哪里?
#### 整合包的展示位置在哪里?
答:整合包会在 **关联的单个模组详情页** 下进行展示,也可在开发者主页下的 **整合包分区** 中找到。
### 整合包的折扣后价格是如何计算得出的?
#### 整合包的折扣后价格是如何计算得出的?
答:价格是所有关联整合包的模组当前总价与整合包折扣相乘后的折扣价格, **折扣后的价格出现小数点时,将向下取整到整数钻石** 。例如其中一个模组原价20钻石使用模组折扣5折并添入基础折扣为88折的整合包则该模组最终在整合包的价格向下取整至8钻石。其余细则具体可查看 [创建整合包](#创建整合包)的折扣运作模式。
### 整合包的评分与评论系统来源是哪里?
#### 整合包的评分与评论系统来源是哪里?
答:整合包的评分与评论系统将直接使用核心资源的评分与评论。
### 整合包支持加入购物车、心愿单与索要转赠功能吗?
#### 整合包支持加入购物车、心愿单与索要转赠功能吗?
答:整合包暂不支持搭配购物车、心愿单与索要转赠功能使用。
### 是否可以将整合包加入折扣特卖或作品活动?
#### 是否可以将整合包加入折扣特卖或作品活动?
答:目前尚不支持开发者登记整合包至[折扣特卖或作品活动](../40-活动、推广与收益/课程08-对作品进行推广与活动.html?catalog=1#活动参与)。
### 是否可以使用整合包的参与手机版推广位申请与竞拍?
#### 是否可以使用整合包的参与手机版推广位申请与竞拍?
答:目前尚不支持在[推广位申请与竞拍功能](../40-活动、推广与收益/课程16-推广位申请与竞拍试运行指南.html?catalog=1#申请手机版轮播图推广位)内选择整合包,请期待后续更新。
### 整合包的审核流程是什么形式?
#### 整合包的审核流程是什么形式?
答:与模组审核流程一致,开发者需要点击提审进入审核队列,并通过开发者邮箱与短信获得审核结果。
### 已购模组在整合包内会如何展示?
#### 已购模组在整合包内会如何展示?
答:已购模组会在整合包内的模组列表显示已购标识,同理,未购模组也会显示未购买标识。
### 如何更换/新增/取消关联核心模组与非核心模组?
#### 如何更换/新增/取消关联核心模组与非核心模组?
答: **在整合包首次上架前,开发者可以随时更换/新增与取消关联相应的核心模组与非核心模组。** 但在上架后,就无法更换/取消之前的核心模组或非核心模组,只允许关联其他新的模组资源为非核心模组。
### 核心模组或其他关联模组下架时,整合包会如何处理?
#### 核心模组或其他关联模组下架时,整合包会如何处理?
答:核心模组下架后,整合包将会消失,请开发者注意。其他关联模组下架时,整合包会清除对应模组信息。

View File

@@ -1,175 +0,0 @@
---
front:
hard: 入门
time: 15分钟
selection: true
---
# 资源组合包概览
> 文档版本2023.2.21 **首次更新资源组合包的使用说明** 。
《我的世界》资源组合包是一种面向玩家的新型购物模式,它能将多个上线组件捆绑在一起进行打折销售,为开发者的专一粉丝提供附加价值与更多惠益。针对常见情况,有两种普遍的使用场景:
- 结合 主包 搭配 DLC 的模式销售系列组件。
- 根据组件题材进行分类,帮助粉丝玩家更短时间找到喜欢的内容。
原合集功能将支持一键同步合集组件至资源组合包,后续开发者也无法创建新的合集,详情请查看[一键同步合集组件至资源组合包](./课程11.2-一键同步合集组件至资源组合包.html)。 **资源中心** - **开发者主页** 的合集分区将替换为资源组合包分区。 **且资源组合包当前仅支持《我的世界》手机版。**
《我的世界》开发者平台将在 **2月21日** 上线资源组合包功能,玩家可在 **3月23日** 后下载资源组合包。
期待各位开发者挖掘资源组合包的更多组合,使用上的建议与反馈可以通过[问题与反馈中心](https://mcdev.webapp.163.com/#/feedbackModal?target=browser)与我们取得联系。《我的世界》开发者平台也会提供独立的资源组合包流量位,敬请期待。
## 创建资源组合包
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **组件** - **手机版** - **资源组合包**
![image-20230216150314989](./images/bundle_8.png)
点击 **创建资源组合包** ,可先设置 **组合包名称****组合包类型****基础折扣****限时折扣**
- 组合包类型:分为 **普通组合包****纯皮肤组合包****纯地图组合包**
- **普通组合包** :可以选择任一类型的组件。
- **纯皮肤组合包** :只能选择 **皮肤组件**
- **纯地图组合包** :只能选择 **地图组件**
- 组合包名称:将作为资源组合包的名称进行展示。
- 基础折扣:必填,资源组合包上线后的默认折扣。
- 限时折扣:选填,可设置资源组合包在特定时间期间的折扣。资源组合包内的基础折扣与限时折扣同时生效时, **优先使用限时折扣**
![image-20230216163112834](./images/bundle_12.png)
**纯皮肤组合包****纯地图组合包** 最低折扣为50% **普通资源组合包** 有价格限制,最低折扣需按组件原价折后价**500钻石**设置。组合包类型将根据包内组件类型情况进行自动选择。
组件购买价格将按照**组件本身的折扣**以及**组合包限时折扣**进行叠加,若组合包限时折扣不存在时,将由组合包基础折扣代替。
折扣的运作模式可参考下图:
![bundle_example_0](./images/bundle_0.png)
接着在资源区域添加与组合包关联的组件。其中资源组合包最多关联20个最少关联2个 **有过审记录的组件资源****单个组件资源可加入的资源组合包次数不限**
![image-20230216162103730](./images/bundle_2.png)
添加组件资源后,必须设置其中一个组件为核心组件。核心组件默认在第一顺位展示。开发者可在每次关联组件时,通过添加顺序管理新增的组件展示顺序,未来也会提供直接调整非核心组件的展示顺序功能,敬请期待。
![image-20230216161858452](./images/bundle_6.png)
接着填充 **详情信息** 、**编辑图片** 和 **上传视频** 区域的相关内容,这些信息内容将会展示在资源组合包详情页中。也可直接点击同步按钮同步核心资源的资源描述,减少人工操作的时间。
![image-20230216162211163](./images/bundle_5.png)
![image-20230216142214820](./images/bundle_3.png)
![image-20230216142226019](./images/bundle_4.png)
与编辑组件上传信息不同,资源组合包的 **更新纪要** 为必填内容。设置之后会在玩家的订阅功能中同步生成资源卡片,并会在手机消息通知中同步收到提醒。
![image-20230216141926921](./images/bundle_1.png)
## 自测、提审与更新资源组合包
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **组件** - **手机版** - **资源组合包**
![image-20230216145005670](./images/bundle_8.png)
对已创建好的资源组合包可在《我的世界》2.6整包Beta更新后点击自测按钮进行 **自测** ,在手机版测试启动器中预览对应的资源组合包。
点击 **提交审核** 按钮对资源组合包提交审核,点击后需进行二次确认才可提审,同样支持在二次确认弹窗中补充提审说明。
![image-20230216143926571](./images/bundle_9.png)
点击 **编辑** 按钮可重新进入资源组合包编辑页面,编辑更新后记得保存。
![image-20230216144831521](./images/bundle_7.png)
## 下架资源组合包
在单个资源组合包详情页中,找到 **上架设置** 。编辑 **上架设置** ,勾选 **弱下架** ,并提供 **弱下架原因**
![image-20230216161426665](./images/bundle_11.png)
最后重新提审,等待审核通过后即可下架资源组合包。
## 资源组合包FAQ
### 资源组合包的展示位置在哪里?
答:资源组合包会在 **关联的单个组件详情页** 下进行展示,也可在开发者主页下的 **资源组合包分区** 中找到。
### 资源组合包的折扣后价格是如何计算得出的?
答:价格是所有关联资源组合包的组件当前总价与资源组合包折扣相乘后的折扣价格, **折扣后的价格出现小数点时,将向下取整到整数钻石** 。例如其中一个组件原价20钻石使用组件折扣5折并添入基础折扣为88折的资源组合包则该组件最终在资源组合包的价格向下取整至8钻石。其余细则具体可查看 [创建资源组合包](#创建资源组合包)的折扣运作模式。
### 资源组合包的评分与评论系统来源是哪里?
答:资源组合包的评分与评论系统将直接使用核心资源的评分与评论。
### 资源组合包支持加入购物车、心愿单与索要转赠功能吗?
答:资源组合包暂不支持搭配购物车、心愿单与索要转赠功能使用。
### 是否可以将资源组合包加入折扣特卖或作品活动?
答:目前尚不支持开发者登记资源组合包至[折扣特卖或作品活动](../40-活动、推广与收益/课程08-对作品进行推广与活动.html?catalog=1#活动参与)。
### 是否可以使用资源组合包的参与手机版推广位申请与竞拍?
答:目前尚不支持在[推广位申请与竞拍功能](../40-活动、推广与收益/课程16-推广位申请与竞拍试运行指南.html?catalog=1#申请手机版轮播图推广位)内选择资源组合包,请期待后续更新。
### 资源组合包的审核流程是什么形式?
答:与组件审核流程一致,开发者需要点击提审进入审核队列,并通过开发者邮箱与短信获得审核结果。
### 已购组件在资源组合包内会如何展示?
答:已购组件会在资源组合包内的组件列表显示已购标识,同理,未购组件也会显示未购买标识。
### 如何更换/新增/取消关联核心组件与非核心组件?
答: **在资源组合包首次上架前,开发者可以随时更换/新增与取消关联相应的核心组件与非核心组件。** 但在上架后,就无法更换/取消之前的核心组件或非核心组件,只允许关联其他新的组件资源为非核心组件。
### 核心组件或其他关联组件下架时,资源组合包会如何处理?
答:核心组件下架后,资源组合包列表不受影响。其他关联组件下架时,资源组合包会清除对应组件信息。

View File

@@ -1,39 +0,0 @@
---
front:
hard: 入门
time: 10分钟
---
# 一键同步合集组件至资源组合包
> 文档版本2023.2.21 **首次更新合集组件迁移资源组合包的使用说明** 。
资源组合包功能推出后,原合集功能不再支持创建新的合集,组件管理页面也不再支持将组件加入原有的合集。
有关资源组合包的使用说明,请查看[资源组合包概览](./课程11.1-资源组合包概览.html)。
**资源中心** - **开发者主页** 的合集分区将替换为资源组合包分区,合集内容不再展示。使用 **一键生成资源组合包功能** 可以帮助开发者快速导入合集组件信息至新的资源组合包,减少人工操作的时间。
## 使用一键生成资源组合包功能
进入 《我的世界》开发者平台,点击 **作品管理** - **上架与资源管理**,接着点击 **组件** - **手机版** - **合集**
![image-20230216150230714](./images/bundle_10.png)
在原有的合集列表下,点击 **一键生成资源组合包** ,进入资源组合包编辑页。
![image-20230216150131474](./images/bundle_13.png)
按照[创建资源组合包](./课程11.1-资源组合包概览.html?catalog=1#创建资源组合包)的步骤完成配置,点击 **保存****提交审核** 即可完成迁移。
## 一键同步功能FAQ
### 资源组合包功能上线后,合集功能还能继续使用吗?
答:合集功能将在资源组合包功能上线后不再显示在 **资源中心** - **开发者主页** ,且原合集功能也不再支持创建新的合集,因此无法继续使用。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

View File

@@ -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)看看吧。

View File

@@ -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)

View File

@@ -8,397 +8,265 @@ time: 20分钟
#### 作者:境界
### 作者:
境界
## 前言
包体也被称为Package它是由开发者将本地的JAVA版资源内容和基岩版资源内容进行压缩打包后的档案。在中国版开发者平台拿到上传的包体后通过机器审核和人工审核后包体最终会被推送至公共下载服务器。最后再由玩家下载后压缩包后经客户端解压才能玩到组件资源。
在上传至平台前,开发者应确保在本地开发的内容达到了预期的运行效果。并遵照本章的打包方式进行压缩打包,降低机器审核的打回概率或审核时间。
在上传至平台前,开发者应确保在**本地开发的内容达到了预期的运行效果。并遵照本章的打包方式进行压缩打包,降低机器审核的打回概率或审核时间**
## 认识JAVA包体结构
### PC地图
### 认识JAVA包体结构
<img src="./images/1_1.jpg" style="zoom:40%; display:block; margin:0 auto;" />
#### PC地图
1. 截图截选了我的世界JAVA版1.12.2游戏客户端生成的世界存档的内容。test文件夹下存放着名为test的世界信息。
<img src="./images/1_2.jpg" style="zoom:40%; display:block; margin:0 auto;" />
2. 打开这个客户端可以看到test存档。
![](./images/1_1.jpg)
<img src="./images/1_3.jpg" style="zoom:40%; display:block; margin:0 auto;" />
3. 返回到目录的上一级saves文件夹下则会存放着这个客户端可以启动的所有存档文件夹其中就有前面提到的test存档。
<img src="./images/1_4.jpg" style="zoom:40%; display:block; margin:0 auto;" />
1) 截图截选了我的世界JAVA版1.12.2游戏客户端生成的世界存档的内容。test文件夹下存放着名为test的世界信息
4. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择地图。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本
![](./images/1_2.jpg)
<img src="./images/1_5.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
5. 点击导入窗体内的+号按钮直接选择test文件夹后点击选择文件夹。
<img src="./images/1_6.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2) 打开这个客户端可以看到test存档
6. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的存档文件夹
![](./images/1_3.jpg)
<img src="./images/1_7.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
7. 开发者不通过MCSTUDIO而选择自行打包时请将存档文件夹使用7Z压缩工具打包成一个后缀为7z的压缩文档。再通过开发者平台进行上传操作。
### PC MOD
3) 返回到目录的上一级saves文件夹下则会存放着这个客户端可以启动的所有存档文件夹其中就有前面提到的test存档。
<img src="./images/1_8.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_4.jpg)
1. 上传平台的MOD文件必须以jar格式作为分发给玩家游玩的标准文件格式。
<img src="./images/1_9.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择Mod。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
4) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择地图。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
![](./images/1_5.jpg)
5) 点击导入窗体内的+号按钮直接选择test文件夹后点击选择文件夹。
![](./images/1_6.jpg)
6) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的存档文件夹。
![](./images/1_7.jpg)
7) 开发者不通过MCSTUDIO而选择自行打包时请将存档文件夹使用7Z压缩工具打包成一个后缀为7z的压缩文档。再通过开发者平台进行上传操作。
#### PC MOD
![](./images/1_8.jpg)
1) 上传平台的MOD文件必须以jar格式作为分发给玩家游玩的标准文件格式。
![](./images/1_9.jpg)
2) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择Mod。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
![](./images/1_10.jpg)
<img src="./images/1_10.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
3点击导入窗体内的+号按钮直接双击或选择jar文件后选打开。
![](./images/1_11.jpg)
<img src="./images/1_11.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的jar文件。
<img src="./images/1_12.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的jar文件。
<img src="./images/1_13.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_12.jpg)
5. 开发者不通过MCSTUDIO而选择自行打包时请将jar文件放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
![](./images/1_13.jpg)
### PC 材质
<img src="./images/1_14.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1. 截图主要展示JAVA版材质的目录和文件结构。
5) 开发者不通过MCSTUDIO而选择自行打包时请将jar文件放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
<img src="./images/1_15.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 直接将材质文件夹内的内容全部选取后右键保存成zip压缩文档。
<img src="./images/1_16.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
#### PC 材质
3. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择材质。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
![](./images/1_14.jpg)
<img src="./images/1_17.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4. 点击导入窗体内的+号按钮直接双击或选择zip文档后选打开。
<img src="./images/1_18.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1) 截图主要展示JAVA版材质的目录和文件结构
5. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的材质压缩档
![](./images/1_15.jpg)
<img src="./images/1_19.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
6. 开发者不通过MCSTUDIO而选择自行打包时请将材质压缩文档放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
### PC 光影
2) 直接将材质文件夹内的内容全部选取后右键保存成zip压缩文档。
<img src="./images/1_20.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_16.jpg)
1. 截图主要展示JAVA版光影的内容目录和文件结构。
<img src="./images/1_21.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 直接将文件夹内的所有文件全部选取后右键保存成zip压缩文档。
3) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择材质。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
<img src="./images/1_22.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_17.jpg)
3. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择光影。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
<img src="./images/1_23.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4. 点击导入窗体内的+号按钮直接双击或选择zip文档后选打开。
4) 点击导入窗体内的+号按钮直接双击或选择zip文档后选打开。
<img src="./images/1_24.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_18.jpg)
5. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的光影压缩档。
6. 开发者不通过MCSTUDIO而选择自行打包时请将光影压缩文档放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
### PC 皮肤
5) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的材质压缩档。
<img src="./images/1_25.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_19.jpg)
1. 截图主要展示PC皮肤资源支持的文件格式为结尾png的图片文档。该格式的图片保存着一道透明通道。
<img src="./images/1_26.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择皮肤。【适用MC版本】选择默认选择全版本即可。
6) 开发者不通过MCSTUDIO而选择自行打包时请将材质压缩文档放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
<img src="./images/1_27.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
3. 点击导入窗体内的+号按钮直接双击或选择png文档后选打开。
<img src="./images/1_28.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
#### PC 光影
4. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的图片文档。
![](./images/1_20.jpg)
5. 开发者不通过MCSTUDIO而选择自行打包时请直接通过开发者平台上传皮肤组件源图片文档。
### PC 玩法
<img src="./images/1_29.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1) 截图主要展示JAVA版光影的内容目录和文件结构
1. 截图截选了我的世界JAVA版1.12.2游戏客户端生成的地图的内容。test文件夹下存放着名为test的世界信息。命令方块玩法、数据包等是用我的世界JAVA版地图作为承载
![](./images/1_21.jpg)
<img src="./images/1_30.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开这个客户端可以看到test存档。
<img src="./images/1_31.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2) 直接将文件夹内的所有文件全部选取后右键保存成zip压缩文档。
3. 返回到目录的上一级saves文件夹下则会存放着这个客户端可以启动的所有存档文件夹其中就有前面提到的test存档。
![](./images/1_22.jpg)
<img src="./images/1_32.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4. 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择玩法。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
<img src="./images/1_33.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
3) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择光影。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本
5. 点击导入窗体内的+号按钮直接选择test文件夹后点击选择文件夹
![](./images/1_23.jpg)
<img src="./images/1_34.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
6. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的存档文件夹。
<img src="./images/1_35.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4) 点击导入窗体内的+号按钮直接双击或选择zip文档后选打开
7. 开发者不通过MCSTUDIO而选择自行打包时请将存档文件夹使用7Z压缩工具打包成一个后缀为7z的压缩文档。再通过开发者平台进行上传操作
![](./images/1_24.jpg)
## 认识基岩版包体结构
### PE地图
<img src="./images/1_36.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
5) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的光影压缩档
1. 截图截选了我的世界基岩版1.16.12游戏客户端生成的世界存档的内容。英文数字组合名称的文件夹下存放着该存档的世界信息
6) 开发者不通过MCSTUDIO而选择自行打包时请将光影压缩文档放入一个文件夹内将文件夹用7z压缩工具压缩成7z后缀格式的压缩包。再通过开发者平台上传组件资源源文档。
<img src="./images/1_38.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击基岩版版组件分类选择【地图】。若勾选【复制文件到默认文件夹】MCSTUDIO会将地图完整拷贝一份至C:/MCStudioDownload/work/开发者ID/Cpp/Map下。若不勾选则不会做出此操作。
<img src="./images/1_37.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
#### PC 皮肤
3. 勾选选项时,点击窗体内的+号。不勾选选项时,点击窗体内的选择按钮。双击存档文件夹或选择文件夹后点击【选择文件夹】按钮。
![](./images/1_25.jpg)
<img src="./images/1_39.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4. 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品并且作品勾选【复制文件到默认文件夹】则会系统会将C:/MCStudioDownload/work/开发者ID/Cpp/Map下相应的拷贝文件夹删除。
<img src="./images/1_40.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1) 截图主要展示PC皮肤资源支持的文件格式为结尾png的图片文档。该格式的图片保存着一道透明通道
5. 开发者不通过MCSTUDIO而选择自行打包时请将整个存档文件夹使用任意压缩工具打包成一个后缀为zip的压缩文档。再通过开发者平台进行上传操作
![](./images/1_26.jpg)
### PE 联机地图
<img src="./images/1_41.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1. 截图截选了我的世界基岩版1.16.12游戏客户端生成的世界存档的内容。英文数字组合名称的文件夹下存放着该存档的世界信息。联机地图指代可以同时在本地、本地联机、联机大厅上使用的地图资源。
2) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择皮肤。【适用MC版本】选择默认选择全版本即可。
<img src="./images/1_42.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_27.jpg)
<img src="./images/1_43.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 若世界存档携带附加包玩法请确保存档文件夹目录下存有world_behavior_packs.json和world_resource_packs.json文件。其中pack_id对应材质包或行为包manifest内header下的uuid。version对应manifest内header下的version。若只携带材质包或行为包可以在world_behavior_packs.json内或world_resource_packs.json将第一个方括号内的内容全部清除。若不携带附加包则则不需要在存档文件夹下携带此类文件。
<img src="./images/1_44.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
3) 点击导入窗体内的+号按钮直接双击或选择png文档后选打开。
3. 开发者可以在存档中放置一个server.properties指定玩家的游戏模式。这样在联机大厅玩这个联机地图时玩家每次进入都是server.properties文件中设置的游戏模式。更多基岩版多人联机地图的配置设定请参考网址[https://zh.minecraft.wiki/w/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F](https://zh.minecraft.wiki/w/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F)
![](./images/1_28.jpg)
4. 当前MCSTUDIO暂不支持导入联机大厅地图请将整个存档文件夹使用任意压缩工具打包成一个后缀为zip的压缩文档。再通过开发者平台进行上传操作。
### PE Addon
<img src="./images/1_45.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
4) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的图片文档
1. 截图截选了我的世界基岩版Addon的内容。Addon又被称作附加包它由材质包和行为包组成。因此开发者在上架完整的附加包内容包含附加包和行为包需依照接下来的规范进行打包上传即可。请注意上架至中国版平台的附加包中行为包内必须携带entities文件夹材质包内必须携带textures文件夹
5) 开发者不通过MCSTUDIO而选择自行打包时请直接通过开发者平台上传皮肤组件源图片文档。
<img src="./images/1_46.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
<img src="./images/1_47.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击基岩版版组件。若勾选【复制文件到默认文件夹】请将行为包、材质包全部选取后右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/AddOn下。若不勾选则直接选择带有行为包或材质包的文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
#### PC 玩法
3. 若开发者不通过MCSTUDIO而选择自行打包时请将行为包、材质包全部选取后右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
![](./images/1_29.jpg)
### PE 材质
<img src="./images/1_48.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1. 附加包是行为包和材质包的统称因此材质包被算入附加包的一种类型。因此开发者在上架完整的材质包内容前需依照接下来的规范进行打包上传。请注意上架至中国版平台的材质包内必须携带textures文件夹。
1) 截图截选了我的世界JAVA版1.12.2游戏客户端生成的地图的内容。test文件夹下存放着名为test的世界信息。命令方块玩法、数据包等是用我的世界JAVA版地图作为承载。
<img src="./images/1_49.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_30.jpg)
<img src="./images/1_50.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【皮肤】。若勾选【复制文件到默认文件夹】请将材质包文件夹右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/Material下。若不勾选则直接选择带有材质包的文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
3. 若开发者不通过MCSTUDIO而选择自行打包时请将材质包文件夹右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
2) 打开这个客户端可以看到test存档。
### PE 光影
![](./images/1_31.jpg)
<img src="./images/1_51.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
1. 光影的内容都被保存在材质包文件夹中因此在运行机制与打包机制上与材质包类似。因此开发者在上架完整的光影内容前需依照接下来的规范进行打包上传。请注意上架至中国版平台的材质包内必须携带textures文件夹。
<img src="./images/1_52.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
3) 返回到目录的上一级saves文件夹下则会存放着这个客户端可以启动的所有存档文件夹其中就有前面提到的test存档。
<img src="./images/1_53.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_32.jpg)
2. 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【光影】。若勾选【复制文件到默认文件夹】请将光影材质包文件夹右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/Light下。若不勾选则直接选择带有光影的材质包文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
3. 若开发者不通过MCSTUDIO而选择自行打包时请将带有光影的材质包文件夹右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
### PE 皮肤
4) 打开MCSTUDIO点击作品库后再点击Java版组件。在右上角点击本地导入【作品分区】选择Java版作品。【作品分类】中选择玩法。【适用MC版本】选择对应存档本版。若支持多个版本可以选择多个相应版本。
<img src="./images/1_54.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
![](./images/1_33.jpg)
1. 截图主要展示PE皮肤资源支持的文件格式为结尾png的图片文档。该格式的图片保存着一道透明通道。
<img src="./images/1_55.jpg" style="zoom:40%; display:block; margin:0 auto;"/>
2. 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【皮肤】。直接点击+号选择png结尾的皮肤图片即可。
5) 点击导入窗体内的+号按钮直接选择test文件夹后点击选择文件夹
![](./images/1_34.jpg)
6) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品也不会影响到最原先的存档文件夹。
![](./images/1_35.jpg)
7) 开发者不通过MCSTUDIO而选择自行打包时请将存档文件夹使用7Z压缩工具打包成一个后缀为7z的压缩文档。再通过开发者平台进行上传操作。
### 认识基岩版包体结构
#### PE地图
![](./images/1_36.jpg)
1) 截图截选了我的世界基岩版1.16.12游戏客户端生成的世界存档的内容。英文数字组合名称的文件夹下存放着该存档的世界信息。
![](./images/1_38.jpg)
2) 打开MCSTUDIO点击作品库后再点击基岩版版组件分类选择【地图】。若勾选【复制文件到默认文件夹】MCSTUDIO会将地图完整拷贝一份至C:/MCStudioDownload/work/开发者ID/Cpp/Map下。若不勾选则不会做出此操作。
![](./images/1_37.jpg)
3) 勾选选项时,点击窗体内的+号。不勾选选项时,点击窗体内的选择按钮。双击存档文件夹或选择文件夹后点击【选择文件夹】按钮。
![](./images/1_39.jpg)
4) 最后点击导入按钮即可由MCSTUDIO拷贝作品后导入进作品库内进行后续的测试、发布、配置等操作。若开发者选择删除作品并且作品勾选【复制文件到默认文件夹】则会系统会将C:/MCStudioDownload/work/开发者ID/Cpp/Map下相应的拷贝文件夹删除。
![](./images/1_40.jpg)
5) 开发者不通过MCSTUDIO而选择自行打包时请将整个存档文件夹使用任意压缩工具打包成一个后缀为zip的压缩文档。再通过开发者平台进行上传操作。
#### PE 联机地图
![](./images/1_41.jpg)
1) 截图截选了我的世界基岩版1.16.12游戏客户端生成的世界存档的内容。英文数字组合名称的文件夹下存放着该存档的世界信息。联机地图指代可以同时在本地、本地联机、联机大厅上使用的地图资源。
![](./images/1_42.jpg)
![](./images/1_43.jpg)
2) 若世界存档携带附加包玩法请确保存档文件夹目录下存有world_behavior_packs.json和world_resource_packs.json文件。其中pack_id对应材质包或行为包manifest内header下的uuid。version对应manifest内header下的version。若只携带材质包或行为包可以在world_behavior_packs.json内或world_resource_packs.json将第一个方括号内的内容全部清除。若不携带附加包则则不需要在存档文件夹下携带此类文件。
![](./images/1_44.jpg)
3) 开发者可以在存档中放置一个server.properties指定玩家的游戏模式。这样在联机大厅玩这个联机地图时玩家每次进入都是server.properties文件中设置的游戏模式。更多基岩版多人联机地图的配置设定请参考网址[https://zh.minecraft.wiki/w/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F](https://zh.minecraft.wiki/w/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F)
4) 当前MCSTUDIO暂不支持导入联机大厅地图请将整个存档文件夹使用任意压缩工具打包成一个后缀为zip的压缩文档。再通过开发者平台进行上传操作。
#### PE Addon
![](./images/1_45.jpg)
1) 截图截选了我的世界基岩版Addon的内容。Addon又被称作附加包它由材质包和行为包组成。因此开发者在上架完整的附加包内容包含附加包和行为包需依照接下来的规范进行打包上传即可。请注意上架至中国版平台的附加包中行为包内必须携带entities文件夹材质包内必须携带textures文件夹。
![](./images/1_46.jpg)
![](./images/1_47.jpg)
2) 打开MCSTUDIO点击作品库后再点击基岩版版组件。若勾选【复制文件到默认文件夹】请将行为包、材质包全部选取后右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/AddOn下。若不勾选则直接选择带有行为包或材质包的文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
3) 若开发者不通过MCSTUDIO而选择自行打包时请将行为包、材质包全部选取后右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
#### PE 材质
![](./images/1_48.jpg)
1) 附加包是行为包和材质包的统称因此材质包被算入附加包的一种类型。因此开发者在上架完整的材质包内容前需依照接下来的规范进行打包上传。请注意上架至中国版平台的材质包内必须携带textures文件夹。
![](./images/1_49.jpg)
![](./images/1_50.jpg)
2) 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【皮肤】。若勾选【复制文件到默认文件夹】请将材质包文件夹右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/Material下。若不勾选则直接选择带有材质包的文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
3) 若开发者不通过MCSTUDIO而选择自行打包时请将材质包文件夹右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
#### PE 光影
![](./images/1_51.jpg)
1) 光影的内容都被保存在材质包文件夹中因此在运行机制与打包机制上与材质包类似。因此开发者在上架完整的光影内容前需依照接下来的规范进行打包上传。请注意上架至中国版平台的材质包内必须携带textures文件夹。
![](./images/1_52.jpg)
![](./images/1_53.jpg)
2) 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【光影】。若勾选【复制文件到默认文件夹】请将光影材质包文件夹右键使用压缩工具压缩成zip文档MCSTUDIO会在导入zip文档后将一份完整拷贝放至C:/MCStudioDownload/work/开发者ID/Cpp/Light下。若不勾选则直接选择带有光影的材质包文件夹即可。最后点击导入即可之后开发者可以在MCSTUDIO进行后续的测试、发布、配置等操作。
3) 若开发者不通过MCSTUDIO而选择自行打包时请将带有光影的材质包文件夹右键使用压缩工具压缩成zip文档。再通过开发者平台进行上传操作。
#### PE 皮肤
![](./images/1_54.jpg)
1) 截图主要展示PE皮肤资源支持的文件格式为结尾png的图片文档。该格式的图片保存着一道透明通道。
![](./images/1_55.jpg)
2) 打开MCSTUDIO点击作品库后再点击基岩版版组件在右上角点击本地导入分区选择【基岩版作品】分类选择【皮肤】。直接点击+号选择png结尾的皮肤图片即可。
3) 若开发者不通过MCSTUDIO而选择自行打包时请将带有皮肤文件直接通过开发者平台进行上传操作。
3. 若开发者不通过MCSTUDIO而选择自行打包时请将带有皮肤文件直接通过开发者平台进行上传操作

View File

@@ -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计划加入一种新的维度被称为天域但并没有成功实现这一维度是现在末地的前身。
![img](./assets/Old_Nether.png)

View File

@@ -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)
## 准备
- 邮箱:你需要准备一个邮箱作为开发者账号的账号名。