diff --git a/mcguide/10-新内容/1-开发工作台/964-1.0.27.md b/mcguide/10-新内容/1-开发工作台/964-1.0.27.md index 2ac801f..5e2f68a 100644 --- a/mcguide/10-新内容/1-开发工作台/964-1.0.27.md +++ b/mcguide/10-新内容/1-开发工作台/964-1.0.27.md @@ -24,7 +24,7 @@ selection: 23 ![图片](./images/230323/contentlib2.png) -2. 内容库**其他**分页上线3个spigot插件和一个SDK的示例模型包,详情参考[这篇文档](../../27-网络游戏/课程10:使用Spigot开服/99-下载内容.md)。 +2. 内容库**其他**分页上线3个spigot插件和一个SDK的示例模型包,详情参考[这篇文档](../../27-手机网络游戏/课程10:使用Spigot开服/99-下载内容.md)。 ![图片](./images/230323/contentlib3.png) diff --git a/mcguide/10-新内容/1-开发工作台/973-1.0.15.md b/mcguide/10-新内容/1-开发工作台/973-1.0.15.md index b0247db..71cef06 100644 --- a/mcguide/10-新内容/1-开发工作台/973-1.0.15.md +++ b/mcguide/10-新内容/1-开发工作台/973-1.0.15.md @@ -9,7 +9,7 @@ selection: 12 ## 开服工具2.0正式外放 -1. 支持使用Spigot和模组SDK制作基岩版手游服务器,详情参考[开服工具2.0](../../27-网络游戏/课程10:使用Spigot开服/10-支持基岩版客户端的Java版网络游戏概述.md) +1. 支持使用Spigot和模组SDK制作基岩版手游服务器,详情参考[开服工具2.0](../../27-手机网络游戏/课程10:使用Spigot开服/10-支持基岩版客户端的Java版网络游戏概述.md) ## 关卡编辑器支持放置生物 diff --git a/mcguide/10-新内容/1-开发工作台/983-1.0.5.md b/mcguide/10-新内容/1-开发工作台/983-1.0.5.md index 9b75ab9..672412f 100644 --- a/mcguide/10-新内容/1-开发工作台/983-1.0.5.md +++ b/mcguide/10-新内容/1-开发工作台/983-1.0.5.md @@ -21,7 +21,7 @@ selection: ### 新建服务器插件 -- 工作台新建基岩版服务器的弹窗中,新增了一个空白插件,可以用来新建插件,详情请见[使用工作台新建插件](../../27-网络游戏/课程5:插件教学/第0节:使用工作台新建插件.md) +- 工作台新建基岩版服务器的弹窗中,新增了一个空白插件,可以用来新建插件,详情请见[使用工作台新建插件](../../27-手机网络游戏/课程5:插件教学/第0节:使用工作台新建插件.md) - 新建插件支持分开创建大厅服Mod和游戏服Mod - 插件导入的界面同样得到了更新 @@ -32,7 +32,7 @@ selection: - 可以在开发者平台赋予子账号更高权限 - 如果子账号被赋予了开发及审核阶段的部署权限:那么子账号拥有除了删除之外的所有权限 - 如果子账号被赋予了上线阶段的调试权限:那么子账号拥有调试和查看日志的权限 -- 详情请见[子账号部署和控制台调试功能](../../27-网络游戏/课程7:开发技巧/第4节:子账号部署和控制台调试功能.md) +- 详情请见[子账号部署和控制台调试功能](../../27-手机网络游戏/课程7:开发技巧/第4节:子账号部署和控制台调试功能.md) ![image-20220411204613763](./images/image-20220411204613763.png) diff --git a/mcguide/10-新内容/1-开发工作台/991-0.17.4.md b/mcguide/10-新内容/1-开发工作台/991-0.17.4.md index df6e38a..feec357 100644 --- a/mcguide/10-新内容/1-开发工作台/991-0.17.4.md +++ b/mcguide/10-新内容/1-开发工作台/991-0.17.4.md @@ -2,7 +2,7 @@ ### Apollo性能优化工具 -我们为各位服务器开发者提供了脚本性能的监测工具,你可以选择要监测的服务器,并在监测一段时间后,获取到这段时间内的脚本函数调用的火焰图,并根据火焰图进行代码优化,详见[性能优化小贴士](../../27-网络游戏/课程8:性能优化/第6节:性能优化小贴士.md)。 +我们为各位服务器开发者提供了脚本性能的监测工具,你可以选择要监测的服务器,并在监测一段时间后,获取到这段时间内的脚本函数调用的火焰图,并根据火焰图进行代码优化,详见[性能优化小贴士](../../27-手机网络游戏/课程8:性能优化/第6节:性能优化小贴士.md)。 ![image-20211208181043002](./images/image-20211208181043002.png) diff --git a/mcguide/10-新内容/1-开发工作台/997-0.16.16.md b/mcguide/10-新内容/1-开发工作台/997-0.16.16.md index eb75cf0..53428d9 100644 --- a/mcguide/10-新内容/1-开发工作台/997-0.16.16.md +++ b/mcguide/10-新内容/1-开发工作台/997-0.16.16.md @@ -46,7 +46,7 @@ from mod.server import extraServerApi ### Apollo快速切服 -对于需要频繁切服的游戏类型(例如小游戏),我们提供了快速切服的功能,详情请参考[快速切服](../../27-网络游戏/课程8:性能优化/第3节:快速切服.md)文档。 +对于需要频繁切服的游戏类型(例如小游戏),我们提供了快速切服的功能,详情请参考[快速切服](../../27-手机网络游戏/课程8:性能优化/第3节:快速切服.md)文档。 ![image-20210826105407118](./images/image-20210826105407118.png) diff --git a/mcguide/12-入门教程/5-学习路线导览.md b/mcguide/12-入门教程/5-学习路线导览.md index 9597ada..fa188f2 100644 --- a/mcguide/12-入门教程/5-学习路线导览.md +++ b/mcguide/12-入门教程/5-学习路线导览.md @@ -230,11 +230,11 @@ selection: true 网络服开发者简称“服主”,服主在申请成为开发者之后,还需要申请测试机器,用于网络服的部署开发。开发完成后,需要进行提审,申请正式机器,用于最终上线。 -测试机器申请可查看教程:入驻申请。 +测试机器申请可查看教程:入驻申请。 -获得测试机器之后,需要连接开发机,可查看课程:连接开发机。 +获得测试机器之后,需要连接开发机,可查看课程:连接开发机。 -机器连接成功之后,可以按照指引视频,完成一系列的基本操作。可查看课程:简易网络服视频教程。 +机器连接成功之后,可以按照指引视频,完成一系列的基本操作。可查看课程:简易网络服视频教程。 其余的教学内容简介详见官网——教学中心——网络游戏以及官网——在线课程——网络服插件教程。 diff --git a/mcguide/16-美术/6-模型和动作/6-模型规范指南.md b/mcguide/16-美术/6-模型和动作/6-模型规范指南.md new file mode 100644 index 0000000..cde79d8 --- /dev/null +++ b/mcguide/16-美术/6-模型和动作/6-模型规范指南.md @@ -0,0 +1,159 @@ +--- +front: https://nie.res.netease.com/r/pic/20220408/fd58eff7-ab4c-4f98-94b5-87912c6e8e4d.png +hard: 入门 +time: 15分钟 +selection: true +--- + +# 模型规范指南 +## 前言 +在当前模组开发实践中,部分开发者所采用的 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该测试皮肤不会生效 + + diff --git a/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md b/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md index 97a83ca..03c15e8 100644 --- a/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md +++ b/mcguide/16-美术/9-特效/21-原版特效属性详细说明.md @@ -378,13 +378,16 @@ mc里的特效实例有两种承载方式,一种是在世界空间单独存在 动画是否循环播放,如果设置为false,则会在每个发射器的生命周期开始时重新播放动画。 - `size` 设置发射出来的骨骼模型的大小,支持molang表达式。 + - `ignore_lighting`(3.6beta版内容) + 设置粒子模型是否受到环境光照影响,与实体json中ignore_lighting作用相同。该值设置为true时,粒子模型不受环境光影响,始终保持默认亮度。 ```json "components": { "netease:particle_appearance_FBX": { "play_animation": "happy", "loop": true, - "size": [1, 1, 1] + "size": [1, 1, 1], + "ignore_lighting": false }, ... } diff --git a/mcguide/20-玩法开发/13-模组SDK编程/60-Demo示例.md b/mcguide/20-玩法开发/13-模组SDK编程/60-Demo示例.md index 12420b4..419fd6a 100644 --- a/mcguide/20-玩法开发/13-模组SDK编程/60-Demo示例.md +++ b/mcguide/20-玩法开发/13-模组SDK编程/60-Demo示例.md @@ -10,7 +10,7 @@ time: 分钟 ## 示例下载 -下载地址:[示例Demo](https://g79.gdl.netease.com/3.3Demo.zip)。 +下载地址:[示例Demo](https://g79.gdl.netease.com/3.6Demo.zip)。 @@ -175,7 +175,7 @@ time: 分钟 - 自定义云成就-CloudAchievementMod - 展示了[云成就](../../28-成就系统/云成就使用文档.md)的基本用法 + 展示了[云成就](../../29-成就系统/云成就使用文档.md)的基本用法 - 微软粒子发射骨骼模型-NeteaseModelParticleDemo diff --git a/mcguide/20-玩法开发/15-自定义游戏内容/9-自定义指令.md b/mcguide/20-玩法开发/15-自定义游戏内容/9-自定义指令.md index 074b405..f8d0932 100644 --- a/mcguide/20-玩法开发/15-自定义游戏内容/9-自定义指令.md +++ b/mcguide/20-玩法开发/15-自定义游戏内容/9-自定义指令.md @@ -57,7 +57,7 @@ selection: true |format_version|str||格式版本,请填写0.0.1| |name|str||指令名称,例如gamemode| |description|str||指令描述,也支持在语言文件(例如zh_CN.lang)中定义| - |permission_level|str|权限等级,可选game_directors、admin、host、owner、any,具体含义如下
game_directors:任何操作员都可以运行此命令,包括命令方块
admin:任何操作员都可以运行此命令,但命令方块不能
host:任何服务器主机都可以运行此命令
owner:只有专用服务器可以运行此命令
any:任何人都可以运行此命令| + |permission_level|str|game_directors|权限等级,可选game_directors、admin、host、owner、any,具体含义如下
game_directors:任何操作员都可以运行此命令,包括命令方块
admin:任何操作员都可以运行此命令,但命令方块不能
host:任何服务器主机都可以运行此命令
owner:只有专用服务器可以运行此命令
any:任何人都可以运行此命令| - args是一个包含object的列表,定义指令的参数。每个object都代表一个参数,object的顺序决定指令参数的输入顺序,每个object的参数说明如下 diff --git a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md index a065349..c500478 100644 --- a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md +++ b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md @@ -92,32 +92,33 @@ playerId = clientApi.GetLocalPlayerId() ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_create_flying", 0) ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_elytra_flying", 0) +# key为需要监听的attr名称,value为需要设置的对应Molang变量名称 +queryDict = { + "playerIsFlying": "query.mod.ysm_is_flying", + "playerIsElytraFlying": "query.mod.ysm_is_elytra_flying" +} + +# 根据queryDict自动配置监听,简化代码 +def CreateAttrCallBack(bindQuery): + def _eventFuckCallBack(args): + ClientComp.CreateQueryVariable(args["entityId"]).Set(bindQuery, args["newValue"]) + return _eventFuckCallBack + + class PlayerActionClientSystem(ClientSystem): def __init__(self, namespace, systemName): ClientSystem.__init__(self, namespace, systemName) # 注册本地玩家的属性值变化回调函数 modAttr = ClientComp.CreateModAttr(playerId) - modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) - modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged) + for attr, query in queryDict.items(): + ClientComp.CreateModAttr(playerId).RegisterUpdateFunc(attr, CreateAttrCallBack(query)) def OnAddPlayerAOIClient(self, args): """玩家加入游戏或进入视野时触发,注册属性值变化回调""" pId = args["playerId"] modAttr = ClientComp.CreateModAttr(pId) - modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged) - modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged) - - def PlayerCreateFlyStateChanged(self, args): - """创造飞行状态变化回调""" - molangVar = args["newValue"] # 属性变化后的值 - pId = args["entityId"] # 属性变化对应的实体Id - ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_create_flying", molangVar) - - def PlayerElytraFlyStateChanged(self, args): - """鞘翅飞行状态变化回调""" - molangVar = args["newValue"] # 属性变化后的值 - pId = args["entityId"] # 属性变化对应的实体Id - ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_elytra_flying", molangVar) + for attr, query in queryDict.items(): + ClientComp.CreateModAttr(pId).RegisterUpdateFunc(attr, CreateAttrCallBack(query)) ``` ### 工作流程说明 diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/0-Nukkit部署教程.md b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/0-Nukkit部署教程.md new file mode 100644 index 0000000..6337ad1 --- /dev/null +++ b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/0-Nukkit部署教程.md @@ -0,0 +1,107 @@ +--- +front: +hard: 入门 +time: 60分钟 +--- + +# Nukkit部署教程 + +## 前言 +本文默认认为你了解过Nukkit 或者 通过Waterdogpe + Nukkit搭建过第三方服务器。 + +如果你没有了解过,请移步到 [2-Nukkit开服教程](2-Server.properties详解.md) + +特别鸣谢(排名不分先后): LT_Name(NukkitMOT作者)、bbbroken(EaseCation服务器开发者)、亦染(社区支持者) + +## 准备阶段 +1. 准备Java版本,建议Java版本为Java17及以上版本 +2. 准备NukkitMOT分支,NukkitMOT原作者已将中国版打包到github主分支内 https://github.com/MemoriesOfTime/Nukkit-MOT +> 目前仅支持接入Nukkit-MOT,其他分支可自行通过参考NukkitMOT源码进行对接 +3. 准备 WaterDogPE 代理服务端而。WaterdogPE 已兼容中国版,开源仓库是: https://github.com/MCNeteaseDevs/WaterdogPE_Netease/tree/netease。 + + +## 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) diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/1-NukkitMasterAPI文档.md b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/1-NukkitMasterAPI文档.md index 2a2872f..d588d61 100644 --- a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/1-NukkitMasterAPI文档.md +++ b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/1-NukkitMasterAPI文档.md @@ -13,7 +13,8 @@ NukkitMaster需要安装在Nukkit-MOT服务端中。 > 需要注意: NukkitMaster是基于Nukkit-MOT分支进行开发的。Nukkit官方服务端版本无法兼容。 -> 如果您需要使用其他分支的Nukkit,您可以自行反编译NukkitMaster +> 如果您需要使用其他分支的Nukkit,您可以参考NukkitMOT源码仓库修改的内容而自行修改服务端以兼容中国版的协议。 +> 通信内容方面,您可以自行反编译NukkitMaster来兼容您的其他分支的Nukkit服务端。 > NukkitMOT分支开源地址: https://github.com/MemoriesOfTime/Nukkit-MOT diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/2-Server.properties详解.md b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/2-Server.properties详解.md new file mode 100644 index 0000000..25581a8 --- /dev/null +++ b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/2-Server.properties详解.md @@ -0,0 +1,974 @@ +--- +front: +hard: 入门 +time: 60分钟 +--- + +# server.properties参数解释 + +## 前言 + +作者:LT_Name +原文: [server.properties](https://www.nukkit-mot.com/zh/docs/server-config/server-properties) + +修改服务器的运行配置,以此来定制一些基本功能。 + +## `server-ip` +| 数据类型 | 默认值 | +|--------|---------| +| String | 0.0.0.0 | + +服务器的IP + +## `server-port` +| 数据类型 | 默认值 | +|---------|-------| +| Integer | 19132 | + +服务器的端口 + +> 同一端口不能运行多个服务器 +如果不能访问请检查防火墙 +基岩版使用 UDP + +## `enable-query` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用 Query 查询 +详见:https://wiki.vg/Query + +## `motd` +| 数据类型 | 默认值 | +|--------|------------------| +| String | Minecraft Server | + +服务器名称/显示在服务器列表上的文本 + +## `sub-motd` +| 数据类型 | 默认值 | +|--------|-----------------------| +| String | Powered by Nukkit-MOT | + +motd 的第二行 + +> 只有当在游戏中的好友列表中查看服务器时,才会显示给本地网络中的玩家 +自 1.16.210 以来不能为空 + +## `view-distance` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 8 | + +最大视距(以区块为单位) +更大的值 = 加载更多区块 = 更多的内存和 CPU 使用 + +## `achievements` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用玩家成就 + +## `announce-player-achievements` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +向所有玩家广播获得成就的消息 + +## `spawn-protection` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 10 | + +非管理员(OP)玩家无法在区块内建造或破坏方块的生成保护区域大小(以方块为单位) + +## `max-players` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 50 | + +服务器允许的最大玩家人数 + +## `drop-spawners` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +刷怪笼被挖掘后掉落 + +## `spawn-animals` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用动物生成 + +## `spawn-mobs` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用怪物生成 + +## `gamemode` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 2 | + +服务器的默认游戏模式 +0 = 生存, 1 = 创造, 2 = 冒险, 3 = 旁观 + +## `force-gamemode` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +每次加入时将玩家游戏模式设置为默认游戏模式 + +## `difficulty` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 2 | + +服务器的默认难度(0-3) + +## `hardcore` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +玩家死亡后将其封禁 + +## `pvp` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +是否启用玩家对战 + +## `white-list` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +仅允许白名单中的玩家加入服务器 +使用`/whitelist`命令或修改 `white-list.txt` 来添加玩家到白名单 + +## `whitelist-reason` +| 数据类型 | 默认值 | +|--------|------------------------| +| String | Server is white-listed | + +启用白名单的原因,显示给被阻挡在外的玩家 + +## `generator-settings` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +默认级别的特殊世界生成器设置 + +## `level-name` +| 数据类型 | 默认值 | +|--------|-------| +| String | world | + +默认世界的名称 + +## `level-seed` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +默认世界的种子 + +## `level-type` +| 数据类型 | 默认值 | +|--------|------| +| String | void | + +如果默认世界不存在,则使用的生成器 +默认支持:default, normal, flat, nether, the_end或void + +## `enable-rcon` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用远程控制台访问 + +> RCON 不是一个非常安全的远程控制服务器的方式 +RCON 可以使用与服务器相同的端口(TCP 协议) +详见:https://developer.valvesoftware.com/wiki/Source_RCON_Protocol + +## `rcon.password` +| 数据类型 | 默认值 | +|--------|---------| +| String | 随机10位字符 | + +RCON 连接的密码 + +## `rcon.port` +| 数据类型 | 默认值 | +|---------|-------| +| Integer | 25575 | + +RCON 连接的端口 + +## `auto-save` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +自动保存世界、玩家数据 + +> 如果禁用,则对世界的更改不会自动保存,即使在卸载时也是如此,如果需要可以使用插件手动保存 + +您可以使用 `worlds-level-auto-save-disabled` 仅禁用自动保存世界 + +## `force-resources` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +强制玩家下载服务器的资源包后才能加入 +还请参阅 `force-resources-allow-client-packs` + +## `force-resources-allow-client-packs` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +在启用 `force-resources` 时不要禁用客户端自己的资源包 + +## `xbox-auth` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +需要经过 Xbox 帐户验证后才能加入 + +> 不会绕过客户端的限制条件。 +如果您选择禁用此功能(不推荐这样做),请在玩家名称和 UUIDs 传递给权限管理器或管理员之后,以确保它们已经得到了验证。 + +## `encryption` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用网络加密 +如果不使用代理软件,则建议启用此功能 + +## `bed-spawnpoints` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许玩家使用床和重生锚设置重生点 + +## `explosion-break-blocks` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用爆炸对方块造成的破坏 +影响所有爆炸,如 TNT、苦力怕和末影水晶 + +## `stop-in-game` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许 OP 在游戏中使用 `/stop` 命令 + +## `op-in-game` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许 OP 在游戏中使用 `/op` 命令对其他玩家进行操作 + +## `space-name-mode` +| 数据类型 | 默认值 | +|--------|--------| +| String | ignore | + +玩家名称中带有空格的处理方式 +"disabled" - 禁止带有空格名称的玩家进入服务器 +"ignore" - 忽略空格名称 (默认) +"replacing" - 用"_"替换玩家名称中的空格 + +## `xp-bottles-on-creative` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许创造模式下玩家扔经验瓶 + +## `spawn-eggs` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用刷怪蛋,允许通过刷怪蛋生成实体 + +## `mob-ai` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用 MobPlugin 的生物 AI + +## `entity-auto-spawn-task` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用自动生成怪物和动物的任务 +生成功能依据服务器的游戏难度来工作 +注意:如果您希望生成任何生物,必须启用`spawn-animals`、`spawn-mobs`其一,或者两者都启用。 + +## `entity-despawn-task` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +若启用,则没有使用命名牌命名的生物的会自动消失 + +> 末影龙、凋灵和村民不会消失 + +## `language` +| 数据类型 | 默认值 | +|--------|-----| +| String | eng | + +Nukkit 使用的默认语言 + +## `force-language` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +强制使用服务器端翻译 +只有在你有插件来实现这些翻译时才启用 + +## `shutdown-message` +| 数据类型 | 默认值 | +|--------|---------------| +| String | Server closed | + +当您停止服务器时向玩家显示的消息 +可以使用颜色符号`§`,换行请使用 `§n`。 + +## `save-player-data` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +如果启用,则以其UUID保存玩家数据的格式,并自动将旧格式的玩家数据转换为新格式 +如果使用旧版Waterdog代理,请禁用此功能 +如果存在新的玩家数据,请勿禁用 + +## `query-plugins` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +若启用则 Query 查询可以获取插件列表(enable-query=on) + +## `debug-level` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 1 | + +如果您想要更多的调试日志记录,请设置较高的值(1-3) + +## `async-workers` +| 数据类型 | 默认值 | +|--------|------| +| String | auto | + +异步工作线程数 +如果设置为 auto,则会尝试自动检测核心数进行调整 + +## `zlib-provider` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 2 | + +选择 zlib 提供程序 +0 = ZlibOriginal,1 = ZlibSingleThreadLowMem,2 = ZlibThreadLocal +默认:2 +其他提供程序可能会对服务器的性能产生负面影响 + +## `compression-level` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 4 | + +发送数据包的 Zlib 压缩级别(0-9) +更高的值 = 更多的 CPU 占用 + 更少的网络占用 + +## `compression-threshold` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 256 | + +不要压缩小于此值的批处理数据包(仅限Zlib) + +## `use-snappy-compression` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +使用 Snappy 压缩数据包 + +## ~~min-mtu~~ +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 576 | + +~~设置最小 MTU 大小~~ +~~默认值:576~~ + +## ~~max-mtu~~ +| 数据类型 | 默认值 | +|---------|------| +| Integer | 1492 | + +~~设置最大 MTU 大小(576 - 1492)~~ +~~值越大网络发包越高效,但较小的值或许可以解决某些连接上的问题。~~ + +## `rak-packet-limit` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 120 | + +每个ip可以在一个 RakNet 周期(10ms)内发送的数据包数量 +超过此限制的ip将被暂时封禁 + +## `enable-rak-send-cookie` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | on | + +启用此选项后,服务器会在客户端连接时发送一个 Cookie,用于验证客户端的合法性。 +这将增强连接的安全性,防止潜在的恶意连接或攻击。 + +## `timeout-milliseconds` +| 数据类型 | 默认值 | +|---------|-------| +| Integer | 25000 | + +如果客户端没有响应,服务器应该等待多长时间后踢出玩家 +单位为毫秒,1000 毫秒 = 1 秒 + +## `auto-tick-rate` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许服务器自动调整世界游戏刻以维持每秒 20 个游戏刻 + +## `auto-tick-rate-limit` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 20 | + +服务器可以临时降低游戏刻速率到多少 + +## `base-tick-rate` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 1 | + +基础游戏刻速率 +1 = 每秒 20 个刻度,2 = 每秒 10 个刻度,以此类推。 +建议保持默认值(1)。 + +## `always-tick-players` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +始终对玩家进行游戏刻更新 + +## `light-updates` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +光照更新 + +## `clear-chunk-tick-list` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许服务器在完成每个游戏刻的逻辑更新后,清空用于追踪哪些区块需要进行逻辑更新的列表 `chunkTickList`。 +这可以帮助优化服务器性能,防止不必要的计算,特别是在大型服务器或有大量区块需要管理的情况下。 + +## `spawn-threshold` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 56 | + +在生成玩家之前需要加载多少个区块 + +## `chunk-sending-per-tick` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 4 | + +每游戏刻发送的区块数 + +## `chunk-ticking-per-tick` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 40 | + +每游戏刻 `chunkTickList` 存储的区块数 + +## `chunk-ticking-radius` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 3 | + +玩家周围需要进行刻算的区块半径 + +## `chunk-generation-queue-size` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 8 | + +等待生成的区块数量 + +## `chunk-generation-population-queue-size` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 8 | + +等待填充的区块数量 + +## `ticks-per-autosave` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 6000 | + +世界自动保存任务运行的频率 +以刻为单位,20刻 = 1秒 + +## `ticks-per-entity-spawns` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 200 | + +实体自动生成任务运行的频率 +以刻为单位,20刻 = 1秒 + +## `ticks-per-entity-despawns` +| Data Type | Default Value | +|-----------|---------------| +| Integer | 12000 | + +实体存活的时间 +以刻为单位,20刻 = 1秒 + +## `thread-watchdog` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用线程看门狗 + +## `thread-watchdog-tick` +| 数据类型 | 默认值 | +|---------|-------| +| Integer | 60000 | + +如果 Nukkit-MOT 主线程暂停超过 60000 毫秒,会抛出致命错误并终止执行的毫秒数 + +## `nether` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +生成地狱世界 + +## `end` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +生成末地世界 + +## `vanilla-portals` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +原版传送门 + +## `portal-ticks` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 80 | + +玩家触发传送门所需Tick + +## `multi-nether-worlds` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +如果你需要多个地狱世界,在这里列出应该有自己地狱的世界,否则使用默认的地狱世界 + +## `anti-xray-worlds` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +启用内置反矿透的世界列表 + +示例:`world, survival, factions` + +## `do-not-tick-worlds` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +禁用随机方块刻度的世界列表 +这将禁用植物生长、树叶腐烂、草方块蔓延、方块掉落等。 +你可能想在这里添加你的大堂和迷你游戏世界 + +## `worlds-entity-spawning-disabled` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +不允许实体自动生成的世界列表 + +示例:`lobby, pvp, creative` + +## `load-all-worlds` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +加载所有世界 + +## `ansi-title` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用在 Windows CMD 标题中显示服务器占用信息 +Windows 命令行标题 + +## `block-listener` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用用于雪块、铁傀儡、怪物蛋石等的检查 + +## `allow-flight` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用/禁用飞行反作弊 + +## `multiversion-min-protocol` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 0 | + +多版本的最低协议 + +## `multiversion-max-protocol` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | -1 | + +多版本的最高协议 + +## `vanilla-bossbars` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +显示凋零和末影龙的Boss血条(实验性) + +## `strong-ip-bans` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +强制 IP 封禁 + +## `worlds-level-auto-save-disabled` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +禁用自动保存 +等级的世界 + +## `temp-ip-ban-failed-xbox-auth` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +临时封禁 Xbox 身份验证失败的玩家 + +## `call-data-pk-send-event` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +如果没有插件使用它,可以禁用 `DataPacketSendEvent` 以获得更好的性能 + +## `call-batch-pk-send-event` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +如果没有插件使用它,可以禁用 `BatchPacketsEvent` 以获得更好的性能 + +## `do-level-gc` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +在游戏刻之间进行世界垃圾收集 + +## `skin-change-cooldown` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 15 | + +玩家皮肤更换冷却时间(秒) + +## ~~check-op-movement~~ +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +~~为管理员(OP)启用移动检查~~ + +## `do-not-limit-interactions` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +禁用用于限制客户端右键交互垃圾数据包的黑客技术 + +## `do-not-limit-skin-geometry` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +禁用最大皮肤几何大小检查 +可能对某些玩家,皮肤的可用性是必需的 + +## `automatic-bug-report` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用自动报告错误 + +## ~~anvils-enabled~~ +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +~~启用铁砧~~ +~~在 Nukkit 上,铁砧属于实验性功能方块,普遍存在物品重命名、物品数据丢失等问题~~ + +## `save-player-data-by-uuid` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +如果启用,则以 NukkitX 使用的格式保存玩家数据,并自动将旧格式的玩家数据转换为新格式 +如果使用旧版 WaterdogPE 代理,请禁用此功能 + +> 如果存在新的玩家数据,请勿禁用 + +## `persona-skins` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +允许玩家自己的皮肤 + +> 如果禁用,将显示默认的史蒂夫皮肤 +某些玩家的皮肤可能需要启用 `do-not-limit-skin-geometry` 才能使用 + +## ~~call-entity-motion-event~~ +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +~~您可以禁用 EntityMotionEvent 以获得更好的性能,如果您的插件没有使用它~~ + +## `update-notifications` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +有新的 Nukkit-MOT 版本发布时通知刚加入游戏的管理员(OP) + +## `bstats-metrics` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用 bStats 统计 +https://bstats.org/plugin/server-implementation/Nukkit/ +匿名收集数据:Nukkit 版本(Nukkit-MOT)、玩家数量、玩家游戏版本、是否开启 Xbox 身份验证、Java 版本、操作系统、CPU 架构及数量、服务器地理位置(粗略) + +## `cache-chunks` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +将区块保存到内存中以加快发送速度 + +> 多版本支持的效果不佳 + +## `async-chunks` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用异步区块发送 +当向不同版本的玩家发送大量区块时,这可以极大地提高性能 +建议保持此选项开启 + +## `deprecated-verbose` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +当插件使用不推荐 API 时在控制台显示警告。 + +## `server-authoritative-movement` +| 数据类型 | 默认值 | +|--------|-------------| +| String | server-auth | + +服务器移动验证方式 +可选:`client-auth / server-auth-with-rewind / server-auth` + +## `server-authoritative-block-breaking` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +服务器权威方块破坏 + +## `use-client-spectator` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +使用客户端侧的旁观者模式 + +## `enable-experiment-mode` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用实验模式 + +## `use-waterdog` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +尝试获取 WaterdogPE 提供的客户端真实 IP +详见:https://waterdog.dev/ + +## `enable-spark` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +启用 Spark 用于性能分析 +详见:https://spark.lucko.me/docs + +## `hastebin-token` +| 数据类型 | 默认值 | +|--------|-----| +| String | | + +Hastebin 令牌,方便生成 debug 链接 +详见:https://www.toptal.com/developers/hastebin/documentation + +## `use-native-leveldb` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | off | + +使用原生的 LevelDB 实现 + +## `enable-raw-ores` +| 数据类型 | 默认值 | +|---------|-----| +| Boolean | on | + +启用粗矿石;若启用则对高版本玩家掉落粗铜、粗铁、粗金 +版本自 [BE 1.17.0](https://minecraft.wiki/w/Bedrock_Edition_1.17.0) 起 + +## `enable-new-paintings` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | on | + +启用在1.21版本新加入的画 + +## `enable-new-chicken-eggs-laying` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | on | + +启用鸡产出新类型鸡蛋 +(蓝色鸡蛋&棕色鸡蛋) + +## `leveldb-cache-mb` +| 数据类型 | 默认值 | +|---------|-----| +| Integer | 80 | + +与 `use-native-leveldb` 一同使用 +用于减少每个世界硬盘读写操作的区块数据最大缓存大小 +如果你拥有大量内存并且仅有几个大型世界,可以调高此缓存大小 + +## `forced-safety-enchant` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | on | + +启用强制安全附魔(限制附魔最大等级) + +## `netease-client-support` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | off | + +启用网易客户端支持,启用后将允许网易玩家进入服务器 + +## `only-allow-netease-client` +| Data Type | Default Value | +|-----------|---------------| +| Boolean | off | + +仅允许网易玩家进入服务器,开启后将禁止微软版玩家进入服务器,仅允许网易玩家加入服务器 + + diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/3-客户端打包教程.md b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/3-客户端打包教程.md new file mode 100644 index 0000000..9866e01 --- /dev/null +++ b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/3-客户端打包教程.md @@ -0,0 +1,30 @@ +--- +front: +hard: 入门 +time: 60分钟 +--- + +# 客户端打包教程 + +## 前言 + +为了能够让MC Server识别到开发者在客户端的模组,除了将资源文件放在服务端/代理端相应位置以外,还需要将行为包和资源包打包成可被解析的包体 + +## 打包与上传 + +客户端的包体您可以将他视作一个地图Addons去看待 + +里面的内容都与地图addons相似 + +![](./images/img_1.png) + +获取到这些文件后,用压缩软件压缩成7z格式的压缩包 + +目录格式如下 + +![](./images/img_3.png) +![](./images/img_2.png) + +打包完后,上传客户端即可 + +> 入驻上传的客户端没有做机审验证,上架期间上传的客户端是有机审验证的,从而确保格式正确 \ No newline at end of file diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_1.png b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_1.png new file mode 100644 index 0000000..01e9806 Binary files /dev/null and b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_1.png differ diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_2.png b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_2.png new file mode 100644 index 0000000..234c24c Binary files /dev/null and b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_2.png differ diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_3.png b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_3.png new file mode 100644 index 0000000..b4330f5 Binary files /dev/null and b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/images/img_3.png differ diff --git a/mcguide/32-开发者账号与团队/课程15-使用成员管理模块实现多账号协作.md b/mcguide/32-开发者账号与团队/课程15-使用成员管理模块实现多账号协作.md index d5c93a4..1ea5fd3 100644 --- a/mcguide/32-开发者账号与团队/课程15-使用成员管理模块实现多账号协作.md +++ b/mcguide/32-开发者账号与团队/课程15-使用成员管理模块实现多账号协作.md @@ -23,15 +23,15 @@ selection: true - 设为核心成员:在游戏的开发者主页中显示为核心成员。 - 测试版启动器登录权限:设置成员是否可以使用手机版测试工具。开发者有内容通过审核后,最多可以设置10个子账号登录手机版测试启动器。未曾有过过审内容者,最多只能设置2个名额。 **注意:未经过实名认证的开发者主账号无法使用手机版测试启动器。** - 协作开发权限设置:可以登录我的世界开发者工作台看到主账号的云端组件、网络服等,也可以通过手机测试段与主账号联机测试。若开发者有网络游戏作品,还可以对成员额外设置是否在 **【开发阶段允许配置、部署与热更】** 、 **【上线阶段允许控制台调试】** 等功能。 - - 开发阶段允许配置、部署与热更:允许成员使用我的世界基岩版网络游戏开服工具对主账号的开发中服务器进行配置、部署与热更。有关网络游戏开服工具的配置、部署与热更功能,[详细教程可查看此处](../27-网络游戏/课程2:Apollo基础知识/第4节:部署.html#部署)。 - - 上线阶段允许控制台调试:允许成员使用我的世界基岩版网络游戏开服工具对主账号的上线阶段服务器进行控制台调试。有关网络游戏开服工具控制台调试功能,[详细教程可查看此处](../27-网络游戏/课程7:开发技巧/第3节:控制台调试.html)。 + - 开发阶段允许配置、部署与热更:允许成员使用我的世界基岩版网络游戏开服工具对主账号的开发中服务器进行配置、部署与热更。有关网络游戏开服工具的配置、部署与热更功能,[详细教程可查看此处](../27-手机网络游戏/课程2:Apollo基础知识/第4节:部署.html#部署)。 + - 上线阶段允许控制台调试:允许成员使用我的世界基岩版网络游戏开服工具对主账号的上线阶段服务器进行控制台调试。有关网络游戏开服工具控制台调试功能,[详细教程可查看此处](../27-手机网络游戏/课程7:开发技巧/第3节:控制台调试.html)。 ![63](./images/15_3.jpg) 成员管理模块不仅仅用于管理团队,对于开发也起着很重要的作用: - 联机测试:可使用我的世界基岩版手机版开发启动器在外网网域下远程联机作品,详细教程可查看; -- 多账号协作:可在网络游戏开服工具下实现多账号协作,[详细教程可查看此处](../27-网络游戏/课程1:成为Apollo服主及相关准备/第7节:McStudio多账号协作.md); +- 多账号协作:可在网络游戏开服工具下实现多账号协作,[详细教程可查看此处](../27-手机网络游戏/课程1:成为Apollo服主及相关准备/第7节:McStudio多账号协作.md); diff --git a/mcguide/35-上架与入驻/images/6.1_1.png b/mcguide/35-上架与入驻/images/6.1_1.png new file mode 100644 index 0000000..9bf9706 Binary files /dev/null and b/mcguide/35-上架与入驻/images/6.1_1.png differ diff --git a/mcguide/35-上架与入驻/images/6.1_2.jpg b/mcguide/35-上架与入驻/images/6.1_2.jpg new file mode 100644 index 0000000..5cd6ba4 Binary files /dev/null and b/mcguide/35-上架与入驻/images/6.1_2.jpg differ diff --git a/mcguide/35-上架与入驻/images/6.1_3.jpg b/mcguide/35-上架与入驻/images/6.1_3.jpg new file mode 100644 index 0000000..b75c2b3 Binary files /dev/null and b/mcguide/35-上架与入驻/images/6.1_3.jpg differ diff --git a/mcguide/35-上架与入驻/images/img.png b/mcguide/35-上架与入驻/images/img.png new file mode 100644 index 0000000..e256e6c Binary files /dev/null and b/mcguide/35-上架与入驻/images/img.png differ diff --git a/mcguide/35-上架与入驻/images/img_1.png b/mcguide/35-上架与入驻/images/img_1.png new file mode 100644 index 0000000..e1cbc1a Binary files /dev/null and b/mcguide/35-上架与入驻/images/img_1.png differ diff --git a/mcguide/35-上架与入驻/images/img_2.png b/mcguide/35-上架与入驻/images/img_2.png new file mode 100644 index 0000000..37f96d6 Binary files /dev/null and b/mcguide/35-上架与入驻/images/img_2.png differ diff --git a/mcguide/35-上架与入驻/images/img_3.png b/mcguide/35-上架与入驻/images/img_3.png new file mode 100644 index 0000000..1c5dcac Binary files /dev/null and b/mcguide/35-上架与入驻/images/img_3.png differ diff --git a/mcguide/35-上架与入驻/images/img_4.png b/mcguide/35-上架与入驻/images/img_4.png new file mode 100644 index 0000000..b2dee4c Binary files /dev/null and b/mcguide/35-上架与入驻/images/img_4.png differ diff --git a/mcguide/35-上架与入驻/课程02-资源定价规则说明.md b/mcguide/35-上架与入驻/课程02-资源定价规则说明.md index e34e14c..9f21f2f 100644 --- a/mcguide/35-上架与入驻/课程02-资源定价规则说明.md +++ b/mcguide/35-上架与入驻/课程02-资源定价规则说明.md @@ -122,7 +122,7 @@ selection: true - 此次组件定价功能调整针对电脑版及手机版发布平台的组件资源。 - 网络游戏商品内购、联机大厅商品内购不在以上价格档位中。 - 内购联机大厅的本体资源若设置为付费资源作品,资源本体同样适用直购定价档位。 -- 资源组合包依据[资源组合包概览](./课程11.1-资源组合包概览.html)的相关条规继续执行。 +- 整合包依据[整合包概览](./课程11.1-整合包概览.html)的相关条规继续执行。 diff --git a/mcguide/35-上架与入驻/课程04-认识作品管理模块.md b/mcguide/35-上架与入驻/课程04-认识作品管理模块.md index cab7683..f5eabd4 100644 --- a/mcguide/35-上架与入驻/课程04-认识作品管理模块.md +++ b/mcguide/35-上架与入驻/课程04-认识作品管理模块.md @@ -59,7 +59,7 @@ time: 10分钟 ![25](./images/4_3.png) -手机版 **网络游戏使用[基岩版开服工具(Apollo)](../27-网络游戏/课程0:基岩版网络游戏概述/第1节:基岩版网络游戏概述与工具指引.html)** ,为开发者提供基于 **基岩版网络游戏** 与基于 **JAVA版网络游戏** 两种开服模式,以服务手机版与电脑基岩版的玩家。 [**基于基岩版网络游戏**](../27-网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.html) 的开服模式,适合已经有在手机版平台使用`Python`语言进行功能玩法开发的开发者。而 [**基于JAVA版网络游戏**](../27-网络游戏/课程10:使用Spigot开服/10-支持基岩版客户端的Java版网络游戏概述.html) 的开服模式,适合对 **JAVA版网络游戏** 和 **JAVA版网络游戏插件** 有一定概念的开发者。 +手机版 **网络游戏使用[基岩版开服工具(Apollo)](../27-手机网络游戏/课程0:基岩版网络游戏概述/第1节:基岩版网络游戏概述与工具指引.html)** ,为开发者提供基于 **基岩版网络游戏** 与基于 **JAVA版网络游戏** 两种开服模式,以服务手机版与电脑基岩版的玩家。 [**基于基岩版网络游戏**](../27-手机网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.html) 的开服模式,适合已经有在手机版平台使用`Python`语言进行功能玩法开发的开发者。而 [**基于JAVA版网络游戏**](../27-手机网络游戏/课程10:使用Spigot开服/10-支持基岩版客户端的Java版网络游戏概述.html) 的开服模式,适合对 **JAVA版网络游戏** 和 **JAVA版网络游戏插件** 有一定概念的开发者。 上线网络游戏前,还必须先获得网络游戏入驻资格,请查看 **[基岩版网络游戏入驻指南](./课程12.1-基岩版网络游戏入驻指南.html)** 与 **[JAVA网络游戏入驻指南](./课程13-《我的世界》中国版JAVA网络游戏入驻指南.html)** 。 diff --git a/mcguide/35-上架与入驻/课程06-新版分类指引.md b/mcguide/35-上架与入驻/课程06-新版分类指引.md new file mode 100644 index 0000000..6ec2072 --- /dev/null +++ b/mcguide/35-上架与入驻/课程06-新版分类指引.md @@ -0,0 +1,82 @@ +# 新版分类指引 + +## 新版分类 + +模组中心正在进行一轮模组分类的迭代,基于此迭代,作品上传的流程会发生两个变化: + +1. 手机版模组上传时的 *功能玩法-Add_ons* 下将会多出一个新的子分类选项作为必选项存在 + +2. 手机版模组上传时的 *功能玩法-Add_ons* 类型的模组新增模组标签设置 + +接下来本指引将会帮助您选择合适的模组分类和标签。 + +## 新的分类机制 + +在**作品上传-上传PE资源管理**,选择资源类别为*Add_ons*后,将会出现两个子分类选项。 + +![1](./images/6.1_1.png) + +*子分类(新)* 即对应本次新增的分类 + +*子分类*为旧的模组分类选项,在替换期间,这两个分类会共存。 + +*子分类(新)* 以模组主要提供游玩乐趣的修改部分作为分类依据,以下是分类的基本定义: + +1. **武器装备** 仅修改玩家的可用武器、防具,或以赋予玩家战斗攻防手段为主要核心的道具扩展 + +2. **物品道具** 非武器装备的全部道具扩展 + +3. **更多生物** 以新增非玩家生物实体为核心可玩性的模组,包括围绕生物新增的衍生道具 + +4. **方块与群系** 以新增或修改群系、非装饰方块为核心可玩性的模组 + +5. **辅助工具** 以优化原版游戏体验为核心,不提供内容扩展性的模组 + +6. **建筑与家具** 围绕建造、建筑、家具、装饰以及辅助建造工具的模组 + +7. **视觉美化** 以提供独特的视听交互反馈为核心可玩性的模组 + +8. **大型玩法** 新增维度、综合修改多个分类内容,或者创造了独特的玩法机制 + +>特别的,即使一个模组属于一个大型玩法系列,仍然要按照模组本身的修改范围来分类。 +>例如假设 *朝霞森林* 是一个包含了众多新维度、道具、BOSS的大型玩法系列,主包*朝霞森林*可被归类为**大型玩法**,但是 *朝霞森林-更多武器* 仅仅是新增了武器道具,那么该模组 *朝霞森林-更多武器* 应该被归类为**武器装备** + +## 新的标签机制 +新的标签将会由多个标签组构成,冒险家能够通过不同的标签组来筛选找到自己喜爱的模组,本次更新将会上线的标签组包含 【玩法标签】和【主题标签】两个标签组,后续将会视情况增加新的标签组。 + +**玩法标签** 即主要描述玩法乐趣的标签 +**主题标签** 主要描述玩法的题材风格 +>例如,一个网络热门动漫的二创角色技能MOD,在玩法上为玩家创造了专属某个角色的代入感,因此选择玩法标签1-*扮演*,新增技能强化战斗体验,因此选择玩法标签2-*战斗*。在题材上属于对流行文化内容的致敬,因此选择主题标签1-*流行*。 + +**温馨提示**:请尽量选择贴合作品的标签, 因为标签关联程度会纳入推荐算法考量,选择不合适的标签可能会导致作品自然流量下滑 + +## 分类和标签在冒险家前台的表现 +分类对应冒险家进入**模组中心-全部模组-功能玩法**后看到的顶部分类: +![2](./images/6.1_2.jpg) + +标签对应冒险家点击筛选按钮后可以看到的筛选词条: +![3](./images/6.1_3.jpg) +## 分类与标签的提交和更新 + +自您看到这篇文章开始,开发者内容管理平台已经支持选择新的分类和标签。 + +目前标签体系属于试运行阶段,每次上传新作品时,需要在每个标签组至少选择一个适用的标签,至多三个标签 + +当您新建作品时,您必须选择新的分类和标签,该分类和标签将会随模组过审应用至线上环境;若您对分类和标签有调整,可随时通过作品更新来修改,过审后一小时左右将会同步线上环境。 + +此外,由于当前新的分类和标签仍属于试运行阶段,新旧子分类会继续共存一段时间 + +## 为什么会有新分类和标签? + +**与时俱进** 模组中心(旧称资源中心)的分类系统距离上线后的分类调整已经过去了悠长的时间,当初设计的分类逻辑和分类词均已无法适应当前的市场现状 + +**模组集中度** 根据数据统计,模组中心当前的分类集中度过高,大部分模组集中在 *Add_ons-玩法拓展* 这个类型中, 对应的是玩家在游戏前端浏览时的效率低下,众多有质量的模组被埋没在长长的列表中。通过优化分类和标签,缩短冒险家找到心仪模组的路径,能够整体提升模组的有效曝光 + +**降低理解门槛** 通过优化分类的词汇表达,使分类对于不同游玩水平的冒险家均能够理解,帮助冒险家找到自己想要寻找的内容 + +## 后面有什么计划? + +在本轮针对Add_ons的调整结果得到数据上的正反馈后,我们将结合数据结论和开发者、冒险家的使用反馈,进一步迭代其余所有的模组分类体系,并完善自动打标体系,让标签机制更加智能 + +## 如果对当前的新分类和标签有建议,如何反馈? +请点击填写专属反馈问卷,我们乐意听到您的建议:[>点击此处填写模组分类反馈<](https://research-game.163.com/htmls/pbr3fi/paper.html) \ No newline at end of file diff --git a/mcguide/35-上架与入驻/课程11.1-整合包概览.md b/mcguide/35-上架与入驻/课程11.1-整合包概览.md index dc9ec37..1dc0cd2 100644 --- a/mcguide/35-上架与入驻/课程11.1-整合包概览.md +++ b/mcguide/35-上架与入驻/课程11.1-整合包概览.md @@ -14,7 +14,7 @@ selection: true - 结合 主包 搭配 DLC 的模式销售系列模组。 - 根据模组题材进行分类,帮助粉丝玩家更短时间找到喜欢的内容。 -原合集功能将支持一键同步合集模组至整合包,后续开发者也无法创建新的合集,详情请查看[一键同步合集模组至整合包](./课程11.2-一键同步合集模组至整合包.html)。 **资源中心** - **开发者主页** 的合集分区将替换为整合包分区。 **且整合包当前仅支持《我的世界》手机版。** +原合集功能将支持一键同步合集模组至整合包,后续开发者也无法创建新的合集,详情请查看[一键同步合集模组至整合包](./课程11.2-一键同步合集组件至整合包.html)。 **资源中心** - **开发者主页** 的合集分区将替换为整合包分区。 **且整合包当前仅支持《我的世界》手机版。** 《我的世界》开发者平台将在 **2月21日** 上线整合包功能,玩家可在 **3月23日** 后下载整合包。 diff --git a/mcguide/35-上架与入驻/课程11.2-一键同步合集组件至整合包.md b/mcguide/35-上架与入驻/课程11.2-一键同步合集组件至整合包.md new file mode 100644 index 0000000..7153c70 --- /dev/null +++ b/mcguide/35-上架与入驻/课程11.2-一键同步合集组件至整合包.md @@ -0,0 +1,39 @@ +--- +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 + +### 整合包功能上线后,合集功能还能继续使用吗? + +答:合集功能将在整合包功能上线后不再显示在 **资源中心** - **开发者主页** ,且原合集功能也不再支持创建新的合集,因此无法继续使用。 \ No newline at end of file diff --git a/mcguide/35-上架与入驻/课程12.2-基岩版网络游戏审核与上架规范.md b/mcguide/35-上架与入驻/课程12.2-基岩版网络游戏审核与上架规范.md index 37e9d0d..78ad94a 100644 --- a/mcguide/35-上架与入驻/课程12.2-基岩版网络游戏审核与上架规范.md +++ b/mcguide/35-上架与入驻/课程12.2-基岩版网络游戏审核与上架规范.md @@ -63,7 +63,7 @@ time: 10分钟 ![image-20220427160124792](./images/12.2_6.png) -物理机发放后,开发者可以在项目信息中查到网络游戏的 **正式项目代号** 、 **数据库信息** 与 **数据监控平台** 的登录信息。有关数据库连接、数据监控平台的使用或项目代号的用途,可在开发者官网-开发指南-网络游戏分类下找到相关教程。 +物理机发放后,开发者可以在项目信息中查到网络游戏的 **正式项目代号** 、 **数据库信息** 与 **数据监控平台** 的登录信息。有关数据库连接、数据监控平台的使用或项目代号的用途,可在开发者官网-开发指南-网络游戏分类下找到相关教程。 ![](./images/12.2_7.png) @@ -91,7 +91,7 @@ time: 10分钟 网络游戏需要长线经营,在日常维护中需要新增内容或修复问题时,同样需要在开发者平台进行提审并上架的操作。 -为了减轻开发者更新内容造成的审核时间成本负担,可查看基岩版网络游戏开发指南-上线阶段热更了解如何在不停服的情况下,将代码更新到服务器。满足热更条件时,开发者平台会自动协助提审的网络游戏触发免审机制,接着点击上架即可完成内容更新。 +为了减轻开发者更新内容造成的审核时间成本负担,可查看基岩版网络游戏开发指南-上线阶段热更了解如何在不停服的情况下,将代码更新到服务器。满足热更条件时,开发者平台会自动协助提审的网络游戏触发免审机制,接着点击上架即可完成内容更新。 若某次维护不可避免地需要修改函数外实现,新增插件或引擎版本更新,则还是需要等待审核人员进行审核并通过后,方可上架。 diff --git a/mcguide/35-上架与入驻/课程16-基岩版第三方服务端网络游戏入驻指南.md b/mcguide/35-上架与入驻/课程16-基岩版第三方服务端网络游戏入驻指南.md new file mode 100644 index 0000000..dabf97f --- /dev/null +++ b/mcguide/35-上架与入驻/课程16-基岩版第三方服务端网络游戏入驻指南.md @@ -0,0 +1,272 @@ +--- +front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/8_1.b13ebca4.jpg +hard: 入门 +time: 10分钟 +--- + +# 基岩版第三方服务端网络游戏入驻指南 + + +## 基岩版第三方服务端网络游戏概括 + +### 什么是基岩版第三方服务端网络游戏? + +是指没有利用 Apollo1.0 和 Apollo2.0 制作,而是依靠 Nukkit、PocketMine 等第三方服务端部署的网络游戏,此类型的服务器称为基岩版第三方服务端网络游戏 + +目前中国版比较常见的Nukkit服务器有:EaseCation、最强斗神、花雨庭 + + + +### 入驻后优点 + +官方不仅能够提供一台稳定的正式机用于部署您的网络游戏、还可以提供性能更强劲的官方租赁机器为您服务器运行保驾护航。 + +官方还会不定期的举办活动,邀请优质服务器参与从而更进一步的提高曝光量,提高日活。 + +并且,您在入驻后还可以获得大量的流量扶持和稳定的现金流,显著提升您的收入水平。 + + + +相关数据: + +![](./images/8_2_1.png)![](./images/8_2_2.png) + + + +### 基岩版第三方服务端网络游戏技术服务 + +官方会为您提供NukkitMaster、适配中国版协议的WaterdogPE、开发者收益快速提现等技术服务。 + +后续还会继续扩大项管技术服务以确保您的服务器能够更好的保持长线运营。 + +但由于第三方服务端的工具链生态已经较为完善,除与ModSDK通信、商业化接口的NukkitMaster和中国版提供的WaterdogPE以外,NukkitMOT需要自行前往原仓库构建。 + + + +## 入驻申请 + +### 发起入驻申请 + +首先前往 开发者平台 ,注册您的开发者账号 登记您的实名认证。 + +找到作品管理后打开新的页面后点击网络游戏 -> 基岩版第三方开服工具,找到 入驻申请,点击后进入入驻页面 + +![](./images/img.png) + + + +### 填写入驻服务器信息 + +您可以按照下方图片信息来填写入驻信息 + +资料填写完毕后,回到页面右上角点击【保存】可以保存申请资料。您也可以点击【立刻提交审核】进行提审。申请可以在【网络游戏入驻申请进度】进行提审、退审等操作。 + +![](./images/img_1.png) + +填写完毕后,并且表单中的所有信息都填写完毕即可提交 + +后续耐心等待即可 + + +### 对接教程 + +#### 等待入驻审核 (一审) + +当您申请入驻后,您可以点击 入驻进度 实时查看您的入驻申请进度 + +![](./images/img_2.png) + + +在审核过程中,您可以随时选择撤回申请。但请注意:一旦撤回后重新提交,您的审核批次将自动排到所有服务器队列的末尾。 + +因此,官方建议您在填写入驻申请页面时,务必一次性完整、准确地填写所有信息,以免影响审核进度 + + + +#### 入驻审核失败 (一审失败) + +当您的服务器存在: 流程无法跑通、玩法同质化严重、美术资源廉价混乱等问题时将无法通过入驻审核。 + +审核未通过时,系统会自动发送一封入驻失败的通知邮件。 + +但请不要灰心,邮件会详细说明需要整改的具体问题。根据提示进行修复和优化后,便可以重修提交审核。 + +入驻审核不设置次数限制,欢迎您持续完善内容并再次申请。 + + +#### 入驻审核成功 (一审通过) + +当您的服务器通过入驻审核后,系统会通过开发者平台邮件通知您的入驻结果,对接人员会在1-3天内主动添加您的好友 + +如果你没有接收到好友申请,您也可以主动添加对接人员的QQ号 + +对接人员的QQ号会提供在开发者邮箱中,请您按照邮件内容格式添加好友,对接人员在确认服主身份后方可同意您的申请。 + +**注意: 请勿将对接人员的QQ号泄露给任何人,否则官方有权对您的入驻流程进行终止。** + + + +#### 申请正式机 + +当您一审通过后您需要主动在 网络游戏-服务器使用情况 处申请正式机 + +正式服请先申请新增,后续根据自身运营情况再选择租赁服务器或申请服务器 + +#### 选择正式机 + +初次申请服务器请根据您的服务器具体情况进行申请。如果您申请的服务器库存不足,官方会自动调整成其他服务器。 + +![](./images/8_13new.png) + + + +#### 服务器迁移 + +当您的正式服下来以后,官方会通过开发者平台邮件告知您 正式机的配置和连接信息。 + +您可以通过 XShell 、 XFTP 等 SSH工具来快速管理您的服务器。 + + + +第一次连接服务器您需要使用 JumpServer跳板机 来绑定您的个人信息,Jumpserver 还可以作为远程管服的一个便携式工具。 + +具体教程官方会在发放正式机后将教学文件发放于您。 + +当您一切都配置好以后,您就可以通过XFTP、JumpServer等传输工具将您的服务端上传至正式机后,配置环境后进行开服准备二审 + +机器默认开放19132/19133端口 作为测试服或正式服入口,额外的端口需要申请,请提前说明(比如数据库远程管理端口3306) + + + +#### 认证接入 + +服务器入驻中国版时需下载 NukkitMaster 使用,确保接入商业化内容和与ModSDK进行通信 。 + +在您服务器拿到正式机以后,官方对接人员会将 NukkitMaster 发放于您以便对接。 + +而 WaterdogPE已兼容中国版,开源仓库是: https://github.com/MCNeteaseDevs/WaterdogPE_Netease/tree/netease + + + +#### 网络游戏配置 + +当您完成了认证接入以后,就需要在开发者平台配置您的服务器 + +在这个页面点击更新客户端,进入新的页面后进行配置 + +![](./images/img_3.png) + +填写完成后点击保存后 开始二审 + + + +#### 内容审核 (二次审核) + +本次审核主要是针对在迁移以后是否存在流程跑通的问题。 + +大大在迁移完服务端后,便可以在开发者平台网络游戏管理中更新客户端填写基本信息 + +![](./images/img_4.png) + +按照表单中的内容全部完成后,点击保存然后提交审核 + +提交审核后官方对接人员会在1-3天内主动与你沟通二审时间。 + +如果没有收到二审,也可以主动在对接讨论群中与官方对接人员沟通二审时间,然后进行二审。 + +二审通过后您便可以进行商业化对接或直接上架。 + + + +### 商业化对接与提审 + +商业化是非常重要的一个模块,您可以通过接入官方的商业化接口实现自助快速发货。 + +接入商业化您必须要使用 NukkitMaster,或者是参考 NukkitMaster 自行编写商业化对接内容 + +根据 NukkitMaster 插件的config.yml文件配置商业化 + +### 正式上架 + +恭喜您完成上述所有内容,现在您可以直接上架,完成全部流程。 + + + +### 开发者平台资源用量统计功能 + +为了在后续能够更好地规范开发者的资源使用情况,帮助开发者合理地使用资源用量,助力建设更加有序的开发环境,开发者平台新增开发者平台资源用量统计功能。 + + + +**使用资源用量统计功能** + +进入《我的世界》开发者平台,点击首页的**数据与收益 - 数据分析(公测)**,点击**网络游戏**选项,选择对应的**手机版**或者**电脑版**类型,然后点击**月度用量汇总**进入查看服务器资源用量的具体内容。 + +![image-20220427154841408](./images/8_15.png) + +开发者可以通过**筛选月份筛选**,选择查看对应当月服务器在平台提供的各资源的具体用量情况。 + +![image-20220427154841408](./images/8_16.png) + + + + + +## FAQ + +Q: 官方提供的服务器是什么系统的? + +A: 官方提供的服务器是Linux系统,官方也注意到很多私服服主仅接触过WINDOWS SERVER系统。所以官方推荐在您一审通过后尽可能的学习Linux的一些基础运维知识确保后续运营不会出现严重的问题。 + + + + +Q: 入驻申请是否会产生费用呢,是否需要押金呢? + +A: 您在入驻申请 到 正式上架,官方都不会收取费用,也不会收取押金。 + + + +Q: 入驻服务器有没有名额限制? + +A: 原则上官方不会设置入驻申请数量限制,但后续官方还是会根据您之前服务器的运营情况进行综合评判。 + + + +Q: 我入驻网络游戏需要自备机器吗? + +A: 没有,服主第一次入驻官方会免费发放一台正式机用于使用,但正式机的性能比较差可能会对后续长期运营造成一定影响。 + + + +Q: 那后续如果服务器性能出现瓶颈怎么办? + +A: 您可以继续申请一台低频率的正式机,也可以选择租赁性能非常强劲的租赁物理机。 + + + +Q: 入驻一审一直失败会不会影响后续评分? + +A: 原则上不会影响后续评分,但官方希望您能够避免多次审核,尽量一次性把缺点修改。 + + + +Q: 我入驻可以用其他人的服务端进行提审,然后上架后更换吗? + +A: 这个是红线行为,官方决不允许此类情况的发生,一经发现官方将按照规程进行处罚。 + +还希望开发者能够用自己创造的世界去给冒险家们提供服务。 + + + +Q: 入驻的新服有什么流量扶持呢? + +A: + +1、当服务器正式上架以后,您可以主动申请 资源中心 进行推广,第一次申请的服务器无需写更新内容,只需要写上是第一次服务器申请。 + +2、上述流量扶持完全免费,不会产生任何费用,后续推广则需要开发者自行根据更新需求写上以后进行申请了哦。 + +3、对于热门服和讨论度极高的服务器入驻以后,官方还会有特殊的流量扶持流程为您的服务器提高核心竞争力。 + +推广位详情可以查看开发者文档中的 活动、推广与收益。 diff --git a/mcguide/36-审核与下架/课程02-开发者内容审核制度介绍.md b/mcguide/36-审核与下架/课程02-开发者内容审核制度介绍.md index 02ca90c..ed24c01 100644 --- a/mcguide/36-审核与下架/课程02-开发者内容审核制度介绍.md +++ b/mcguide/36-审核与下架/课程02-开发者内容审核制度介绍.md @@ -93,7 +93,7 @@ TAG:内容审核 制度 ​ 通过机器人挂机等方式虚增在线人数 -​ 违反 [互通人数显示规则](../27-网络游戏/课程9:服务器上线/第6节:在线人数显示.md),将在线人数进行合并统计 +​ 违反 [互通人数显示规则](../27-手机网络游戏/课程9:服务器上线/第6节:在线人数显示.md),将在线人数进行合并统计 **二类**: diff --git a/mcguide/50-常见问题答疑/10-我的世界开发工作台常见问题.md b/mcguide/50-常见问题答疑/10-我的世界开发工作台常见问题.md index 206afa4..eb4724e 100644 --- a/mcguide/50-常见问题答疑/10-我的世界开发工作台常见问题.md +++ b/mcguide/50-常见问题答疑/10-我的世界开发工作台常见问题.md @@ -47,7 +47,7 @@ selection: true 此外,我们还有一些关于Add On,玩法地图,美术制作的 示例课程 。 -如果你想开发网络游戏,可以参考[网络游戏开服工具文档](../27-网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)。 +如果你想开发网络游戏,可以参考[网络游戏开服工具文档](../27-手机网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)。 diff --git a/mcguide/50-常见问题答疑/20-网络游戏开服工具常见问题答疑.md b/mcguide/50-常见问题答疑/20-网络游戏开服工具常见问题答疑.md index d3ce322..21c60d2 100644 --- a/mcguide/50-常见问题答疑/20-网络游戏开服工具常见问题答疑.md +++ b/mcguide/50-常见问题答疑/20-网络游戏开服工具常见问题答疑.md @@ -11,7 +11,7 @@ time: 50分钟 ### **什么是网络游戏开服工具?** -网络游戏开服工具是由我的世界中国版开花组维护的PE版网络游戏服务器集群工具。它被内置于我的世界开发工作台中,集成了负载均衡、集群管理、运营指令、多号协作的功能,同时支持**完整的原版内容**与**附加包自定义功能**。为了让服务器开发者能够更好地由浅入深地学习网络游戏开服工具,我们还为服主提供了[一站式图文教学](../27-网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)和官方插件库。[点击这里](http://mc.163.com/mcstudio/)下载我的世界开发工作台开启你的手游版服主之旅吧! +网络游戏开服工具是由我的世界中国版开花组维护的PE版网络游戏服务器集群工具。它被内置于我的世界开发工作台中,集成了负载均衡、集群管理、运营指令、多号协作的功能,同时支持**完整的原版内容**与**附加包自定义功能**。为了让服务器开发者能够更好地由浅入深地学习网络游戏开服工具,我们还为服主提供了[一站式图文教学](../27-手机网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)和官方插件库。[点击这里](http://mc.163.com/mcstudio/)下载我的世界开发工作台开启你的手游版服主之旅吧! ### **如何入驻手游版网络游戏?** @@ -151,11 +151,11 @@ tutorialApolloMod ![8](./images/8.png) -**[更多详细内容请戳官方教程链接](../27-网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)** +**[更多详细内容请戳官方教程链接](../27-手机网络游戏/课程1:成为Apollo服主及相关准备/第1节:Apollo介绍.md)** ### 我该如何在开发服务器内进行单人/多人测试呢? -若想要进入服务器进行单人测试,点击网络服项目的开发阶段,再点击开发测试即可。而多人测试分为多台PC终端以及一台PC终端多号测试的情况。若是多台终端连接服务器,[可以使用子账号协作功能](../27-网络游戏/课程7:开发技巧/第2节:多账号协同部署.md)。若只有单机开发但想要多人测试,可以在主账号中获得服务器IP和端口,通过MCSTUDIO右上角的工具箱—ModPC客户端多开客户端裸连服务器。 +若想要进入服务器进行单人测试,点击网络服项目的开发阶段,再点击开发测试即可。而多人测试分为多台PC终端以及一台PC终端多号测试的情况。若是多台终端连接服务器,[可以使用子账号协作功能](../27-手机网络游戏/课程7:开发技巧/第2节:多账号协同部署.md)。若只有单机开发但想要多人测试,可以在主账号中获得服务器IP和端口,通过MCSTUDIO右上角的工具箱—ModPC客户端多开客户端裸连服务器。 ![10](./images/10.png) @@ -204,7 +204,7 @@ post body:{ } ``` -如果对指令输入仍有疑问,可查阅下列教程:**[公告插件使用](../27-网络游戏/课程3:简易网络服模板部署与常见操作/第7节:官方插件.md)** +如果对指令输入仍有疑问,可查阅下列教程:**[公告插件使用](../27-手机网络游戏/课程3:简易网络服模板部署与常见操作/第7节:官方插件.md)** ## 还有一些其他问题? diff --git a/mcguide/9-规范开发/5-多人联机适配规范.md b/mcguide/9-规范开发/5-多人联机适配规范.md new file mode 100644 index 0000000..fc1e291 --- /dev/null +++ b/mcguide/9-规范开发/5-多人联机适配规范.md @@ -0,0 +1,59 @@ +--- +front: https://nie.res.netease.com/r/pic/20220408/fd58eff7-ab4c-4f98-94b5-87912c6e8e4d.png +hard: 入门 +time: 15分钟 +selection: true +--- + +# 多人联机适配规范 + +## 前言 + +最近,在山头测试中,我们发现很多开发者的模组明明在单人游戏运行是非常正常的,但在山头、多人联机环境下就会出现功能无效或者异常的情况 + +后面我们发现,实际上只要遵循 ServerSystem 和 ClientSystem 分离的原则。基本上就能保证开发的模组兼容山头服和多人联机 + +## 开发范例 + +> 下方代码仅供参考和通俗化解释,并不能实际运行! + +**modClient.py** +```python +import mod.client.extraClientApi as clientApi + +class ModClient(clientApi.GetClientSystemCls()): + + def Register(self): + + self.NotifyToServer("test", {}) + print("register successfully") + # TODO + + def NoClientApiRegister(self): + print("register successfully") + # TODO +``` +**modServer.py** +```python +import mod.client.extraClientApi as serverApi +from xxx.xxx.xxx import ModClient + +class ModServer(serverApi.GetServerSystemCls()): + + def ServerRegister(self): + ModClient.NoClientApiRegister() + print("register successfully") + # TODO +``` +可以看到 上面的 `modClient.py` 引入了 `clientApi` +而 ModServer 这边希望能够调用到 `ModClient` 类里的 `NoClientApiRegister` 方法 +虽然这个方法仅仅只是简单的 print,并不涉及 `clientApi` 里的任何方法 +但由于 `ModClient` import了 `clientApi`,此时 `ModServer` 在初始化的时候就会报错,类里的方法都不会被正常执行 + +由上述例子可以得出 +在开发模组时,应该避免在 ServerSystem 下的子类引用客户端的接口和方法 +如果无法满足要求,可以前往**开发者平台-反馈与建议** 或者 **[Github接口建议](https://github.com/MCNeteaseDevs/SDK-Campaign/issues) 提出接口建议 + +当你遵循上述开发原则,即客户端和服务端分离,您开发的模组基本天然兼容多人联机和我的山头的环境 + + \ No newline at end of file diff --git a/mcguide/9-规范开发/6-模型规范指南.md b/mcguide/9-规范开发/6-模型规范指南.md new file mode 100644 index 0000000..2e8b6da --- /dev/null +++ b/mcguide/9-规范开发/6-模型规范指南.md @@ -0,0 +1,10 @@ +--- +front: https://nie.res.netease.com/r/pic/20220408/fd58eff7-ab4c-4f98-94b5-87912c6e8e4d.png +hard: 入门 +time: 15分钟 +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) \ No newline at end of file diff --git a/mcguide/9-规范开发/7-性能优化规范.md b/mcguide/9-规范开发/7-性能优化规范.md new file mode 100644 index 0000000..a041987 --- /dev/null +++ b/mcguide/9-规范开发/7-性能优化规范.md @@ -0,0 +1,10 @@ +--- +front: https://nie.res.netease.com/r/pic/20220408/fd58eff7-ab4c-4f98-94b5-87912c6e8e4d.png +hard: 入门 +time: 15分钟 +selection: true +--- + +# 性能优化规范 + +[点击前往快捷链接](https://mc.163.com/dev/mcmanual/mc-dev/mcguide/20-%E7%8E%A9%E6%B3%95%E5%BC%80%E5%8F%91/18-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96.html?catalog=1) \ No newline at end of file diff --git a/mcguide/9-规范开发/images/after_optimization.png b/mcguide/9-规范开发/images/after_optimization.png new file mode 100644 index 0000000..9b9620e Binary files /dev/null and b/mcguide/9-规范开发/images/after_optimization.png differ diff --git a/mcguide/9-规范开发/images/before_optimization.png b/mcguide/9-规范开发/images/before_optimization.png new file mode 100644 index 0000000..185ec80 Binary files /dev/null and b/mcguide/9-规范开发/images/before_optimization.png differ diff --git a/mcguide/9-规范开发/images/textureFlickering.png b/mcguide/9-规范开发/images/textureFlickering.png new file mode 100644 index 0000000..9af8baa Binary files /dev/null and b/mcguide/9-规范开发/images/textureFlickering.png differ diff --git a/mcguide/9-规范开发/resources/0_1.png b/mcguide/9-规范开发/resources/0_1.png new file mode 100644 index 0000000..5fc04fe Binary files /dev/null and b/mcguide/9-规范开发/resources/0_1.png differ diff --git a/mcguide/9-规范开发/resources/0_2.jpg b/mcguide/9-规范开发/resources/0_2.jpg new file mode 100644 index 0000000..8cd0564 Binary files /dev/null and b/mcguide/9-规范开发/resources/0_2.jpg differ diff --git a/mcguide/9-规范开发/resources/standard_steve.geo.json b/mcguide/9-规范开发/resources/standard_steve.geo.json new file mode 100644 index 0000000..044139d --- /dev/null +++ b/mcguide/9-规范开发/resources/standard_steve.geo.json @@ -0,0 +1,473 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.standard_steve", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 3, + "visible_bounds_height": 4, + "visible_bounds_offset": [0, 1, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "waist", + "parent": "root", + "pivot": [0, 12, 0] + }, + { + "name": "body", + "parent": "waist", + "pivot": [0, 24, 0], + "cubes": [ + { + "origin": [-4, 16, -2], + "size": [8, 8, 4], + "uv": { + "north": {"uv": [20, 20], "uv_size": [8, 8]}, + "east": {"uv": [16, 20], "uv_size": [4, 8]}, + "south": {"uv": [32, 20], "uv_size": [8, 8]}, + "west": {"uv": [28, 20], "uv_size": [4, 8]}, + "up": {"uv": [20, 16], "uv_size": [8, 4]}, + "down": {"uv": [28, 20], "uv_size": [8, -4]} + } + } + ] + }, + { + "name": "head", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + { + "origin": [-4, 24, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [8, 0], "uv_size": [8, 8]}, + "down": {"uv": [16, 8], "uv_size": [8, -8]} + } + } + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + { + "origin": [-4, 24, -4], + "size": [8, 8, 8], + "inflate": 0.25, + "uv": { + "north": {"uv": [40, 8], "uv_size": [8, 8]}, + "east": {"uv": [32, 8], "uv_size": [8, 8]}, + "south": {"uv": [56, 8], "uv_size": [8, 8]}, + "west": {"uv": [48, 8], "uv_size": [8, 8]}, + "up": {"uv": [40, 0], "uv_size": [8, 8]}, + "down": {"uv": [48, 8], "uv_size": [8, -8]} + } + } + ] + }, + { + "name": "cape", + "parent": "body", + "pivot": [0, 24, 3] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [5, 22, 0], + "cubes": [ + { + "origin": [4, 18, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [36, 52], "uv_size": [4, 6]}, + "east": {"uv": [32, 52], "uv_size": [4, 6]}, + "south": {"uv": [44, 52], "uv_size": [4, 6]}, + "west": {"uv": [40, 52], "uv_size": [4, 6]}, + "up": {"uv": [36, 48], "uv_size": [4, 4]}, + "down": {"uv": [40, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftArmDown", + "parent": "leftArm", + "pivot": [5, 18, 0], + "cubes": [ + { + "origin": [4, 12, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [36, 58], "uv_size": [4, 6]}, + "east": {"uv": [32, 58], "uv_size": [4, 6]}, + "south": {"uv": [44, 58], "uv_size": [4, 6]}, + "west": {"uv": [40, 58], "uv_size": [4, 6]}, + "up": {"uv": [40, 48], "uv_size": [4, 4]}, + "down": {"uv": [40, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftSleeveDown", + "parent": "leftArmDown", + "pivot": [5, 18.25, 0], + "cubes": [ + { + "origin": [4, 12, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [52, 58], "uv_size": [4, 6]}, + "east": {"uv": [48, 58], "uv_size": [4, 6]}, + "south": {"uv": [60, 58], "uv_size": [4, 6]}, + "west": {"uv": [56, 58], "uv_size": [4, 6]}, + "up": {"uv": [56, 48], "uv_size": [4, 4]}, + "down": {"uv": [56, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftItem", + "parent": "leftArmDown", + "pivot": [6, 15, 1] + }, + { + "name": "leftSleeve", + "parent": "leftArm", + "pivot": [5, 22, 0], + "cubes": [ + { + "origin": [4, 18, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [52, 52], "uv_size": [4, 6]}, + "east": {"uv": [48, 52], "uv_size": [4, 6]}, + "south": {"uv": [60, 52], "uv_size": [4, 6]}, + "west": {"uv": [56, 52], "uv_size": [4, 6]}, + "up": {"uv": [52, 48], "uv_size": [4, 4]}, + "down": {"uv": [56, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-5, 22, 0], + "cubes": [ + { + "origin": [-8, 18, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [40, 52], "uv_size": [-4, 6]}, + "east": {"uv": [44, 52], "uv_size": [-4, 6]}, + "south": {"uv": [48, 52], "uv_size": [-4, 6]}, + "west": {"uv": [36, 52], "uv_size": [-4, 6]}, + "up": {"uv": [40, 48], "uv_size": [-4, 4]}, + "down": {"uv": [44, 52], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightArmDown", + "parent": "rightArm", + "pivot": [-5, 18, 0], + "cubes": [ + { + "origin": [-8, 12, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [40, 58], "uv_size": [-4, 6]}, + "east": {"uv": [44, 58], "uv_size": [-4, 6]}, + "south": {"uv": [48, 58], "uv_size": [-4, 6]}, + "west": {"uv": [36, 58], "uv_size": [-4, 6]}, + "up": {"uv": [44, 48], "uv_size": [-4, 4]}, + "down": {"uv": [44, 52], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightISleeveDown", + "parent": "rightArmDown", + "pivot": [-5, 18.25, 0], + "cubes": [ + { + "origin": [-8, 12, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [48, 42], "uv_size": [-4, 6]}, + "east": {"uv": [52, 42], "uv_size": [-4, 6]}, + "south": {"uv": [56, 42], "uv_size": [-4, 6]}, + "west": {"uv": [44, 42], "uv_size": [-4, 6]}, + "up": {"uv": [52, 32], "uv_size": [-4, 4]}, + "down": {"uv": [52, 36], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightItem", + "parent": "rightArmDown", + "pivot": [-6, 15, 1], + "locators": { + "lead_hold": [-6, 15, 1] + } + }, + { + "name": "rightSleeve", + "parent": "rightArm", + "pivot": [-5, 22, 0], + "cubes": [ + { + "origin": [-8, 18, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [48, 36], "uv_size": [-4, 6]}, + "east": {"uv": [52, 36], "uv_size": [-4, 6]}, + "south": {"uv": [56, 36], "uv_size": [-4, 6]}, + "west": {"uv": [44, 36], "uv_size": [-4, 6]}, + "up": {"uv": [48, 32], "uv_size": [-4, 4]}, + "down": {"uv": [52, 36], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "jacket", + "parent": "body", + "pivot": [0, 24, 0], + "cubes": [ + { + "origin": [-4, 16, -2], + "size": [8, 8, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [20, 36], "uv_size": [8, 8]}, + "east": {"uv": [16, 36], "uv_size": [4, 8]}, + "south": {"uv": [32, 36], "uv_size": [8, 8]}, + "west": {"uv": [28, 36], "uv_size": [4, 8]}, + "up": {"uv": [20, 32], "uv_size": [8, 4]}, + "down": {"uv": [28, 36], "uv_size": [8, -4]} + } + } + ] + }, + { + "name": "bodyDown", + "parent": "waist", + "pivot": [0, 16, 0], + "cubes": [ + { + "origin": [-4, 12, -2], + "size": [8, 4, 4], + "uv": { + "north": {"uv": [20, 28], "uv_size": [8, 4]}, + "east": {"uv": [16, 28], "uv_size": [4, 4]}, + "south": {"uv": [32, 28], "uv_size": [8, 4]}, + "west": {"uv": [28, 28], "uv_size": [4, 4]}, + "up": {"uv": [28, 16], "uv_size": [8, 4]}, + "down": {"uv": [28, 20], "uv_size": [8, -4]} + } + } + ] + }, + { + "name": "jacketDown", + "parent": "bodyDown", + "pivot": [0, 16.25, 0], + "cubes": [ + { + "origin": [-4, 12, -2], + "size": [8, 4, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [20, 44], "uv_size": [8, 4]}, + "east": {"uv": [16, 44], "uv_size": [4, 4]}, + "south": {"uv": [32, 44], "uv_size": [8, 4]}, + "west": {"uv": [28, 44], "uv_size": [4, 4]}, + "up": {"uv": [0, 4], "uv_size": [8, 4]}, + "down": {"uv": [0, 4], "uv_size": [8, -4]} + } + } + ] + }, + { + "name": "leftLeg", + "parent": "root", + "pivot": [1.9, 12, 0], + "cubes": [ + { + "origin": [-0.1, 6, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [20, 52], "uv_size": [4, 6]}, + "east": {"uv": [16, 52], "uv_size": [4, 6]}, + "south": {"uv": [28, 52], "uv_size": [4, 6]}, + "west": {"uv": [24, 52], "uv_size": [4, 6]}, + "up": {"uv": [20, 48], "uv_size": [4, 4]}, + "down": {"uv": [24, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftPants", + "parent": "leftLeg", + "pivot": [1.9, 12, 0], + "cubes": [ + { + "origin": [-0.1, 6, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [4, 52], "uv_size": [4, 6]}, + "east": {"uv": [0, 52], "uv_size": [4, 6]}, + "south": {"uv": [12, 52], "uv_size": [4, 6]}, + "west": {"uv": [8, 52], "uv_size": [4, 6]}, + "up": {"uv": [4, 48], "uv_size": [4, 4]}, + "down": {"uv": [8, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftLegDown", + "parent": "leftLeg", + "pivot": [1.9, 6, 0], + "cubes": [ + { + "origin": [-0.1, 0, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [20, 58], "uv_size": [4, 6]}, + "east": {"uv": [16, 58], "uv_size": [4, 6]}, + "south": {"uv": [28, 58], "uv_size": [4, 6]}, + "west": {"uv": [24, 58], "uv_size": [4, 6]}, + "up": {"uv": [24, 48], "uv_size": [4, 4]}, + "down": {"uv": [24, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "leftPantsDown", + "parent": "leftLegDown", + "pivot": [1.9, 6.25, 0], + "cubes": [ + { + "origin": [-0.1, 0, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [4, 58], "uv_size": [4, 6]}, + "east": {"uv": [0, 58], "uv_size": [4, 6]}, + "south": {"uv": [12, 58], "uv_size": [4, 6]}, + "west": {"uv": [8, 58], "uv_size": [4, 6]}, + "up": {"uv": [8, 48], "uv_size": [4, 4]}, + "down": {"uv": [8, 52], "uv_size": [4, -4]} + } + } + ] + }, + { + "name": "rightLeg", + "parent": "root", + "pivot": [-1.9, 12, 0], + "cubes": [ + { + "origin": [-3.9, 6, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [24, 52], "uv_size": [-4, 6]}, + "east": {"uv": [28, 52], "uv_size": [-4, 6]}, + "south": {"uv": [32, 52], "uv_size": [-4, 6]}, + "west": {"uv": [20, 52], "uv_size": [-4, 6]}, + "up": {"uv": [24, 48], "uv_size": [-4, 4]}, + "down": {"uv": [28, 52], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightPants", + "parent": "rightLeg", + "pivot": [-1.9, 12, 0], + "cubes": [ + { + "origin": [-3.9, 6, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [8, 36], "uv_size": [-4, 6]}, + "east": {"uv": [12, 36], "uv_size": [-4, 6]}, + "south": {"uv": [16, 36], "uv_size": [-4, 6]}, + "west": {"uv": [4, 36], "uv_size": [-4, 6]}, + "up": {"uv": [8, 32], "uv_size": [-4, 4]}, + "down": {"uv": [12, 36], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightLegDown", + "parent": "rightLeg", + "pivot": [-1.9, 6, 0], + "cubes": [ + { + "origin": [-3.9, 0, -2], + "size": [4, 6, 4], + "uv": { + "north": {"uv": [24, 58], "uv_size": [-4, 6]}, + "east": {"uv": [28, 58], "uv_size": [-4, 6]}, + "south": {"uv": [32, 58], "uv_size": [-4, 6]}, + "west": {"uv": [20, 58], "uv_size": [-4, 6]}, + "up": {"uv": [28, 48], "uv_size": [-4, 4]}, + "down": {"uv": [28, 52], "uv_size": [-4, -4]} + } + } + ] + }, + { + "name": "rightPantsDown", + "parent": "rightLegDown", + "pivot": [-1.9, 6.25, 0], + "cubes": [ + { + "origin": [-3.9, 0, -2], + "size": [4, 6, 4], + "inflate": 0.25, + "uv": { + "north": {"uv": [8, 42], "uv_size": [-4, 6]}, + "east": {"uv": [12, 42], "uv_size": [-4, 6]}, + "south": {"uv": [16, 42], "uv_size": [-4, 6]}, + "west": {"uv": [4, 42], "uv_size": [-4, 6]}, + "up": {"uv": [12, 32], "uv_size": [-4, 4]}, + "down": {"uv": [12, 36], "uv_size": [-4, -4]} + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/mcguide/9-规范开发/resources/standard_steve.png b/mcguide/9-规范开发/resources/standard_steve.png new file mode 100644 index 0000000..fefd1bd Binary files /dev/null and b/mcguide/9-规范开发/resources/standard_steve.png differ