diff --git a/mcguide/12-入门教程/10-注册成为开发者.md b/mcguide/12-入门教程/10-注册成为开发者.md new file mode 100644 index 0000000..0a2e30f --- /dev/null +++ b/mcguide/12-入门教程/10-注册成为开发者.md @@ -0,0 +1,138 @@ +--- +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主身份进行注册。** diff --git a/mcguide/12-入门教程/images/0_5.png b/mcguide/12-入门教程/images/0_5.png new file mode 100644 index 0000000..6986097 Binary files /dev/null and b/mcguide/12-入门教程/images/0_5.png differ diff --git a/mcguide/16-美术/6-模型和动作/模型规范指南.md b/mcguide/16-美术/6-模型和动作/模型规范指南.md new file mode 100644 index 0000000..cf94517 --- /dev/null +++ b/mcguide/16-美术/6-模型和动作/模型规范指南.md @@ -0,0 +1,157 @@ +--- +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该测试皮肤不会生效 + + diff --git a/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md b/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md index b5f4126..ac6c532 100644 --- a/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md +++ b/mcguide/20-玩法开发/15-自定义游戏内容/2-自定义方块/1-JSON组件.md @@ -303,7 +303,7 @@ time: 分钟 ### netease:block_animate_random_tick -频率更高的方块tick,用于实现类似樱花树叶的方块特效。给自定义方块配置该组件后,开发者可以在**客户端**监听 BlockAnimateRandomTickEvent 事件给方块附加逻辑。 +频率更高的方块tick,用于实现类似樱花树叶的方块特效。给自定义方块配置该组件后,开发者可以在**客户端**监听 BlockAnimateRandomTickEvent 事件给方块附加逻辑。 | 键 | 类型 | 默认值 | 解释 | | ------------ | ----- | ------ | ------ | diff --git a/mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度.md b/mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度.md index 7e5b5e3..bdd2613 100644 --- a/mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度.md +++ b/mcguide/20-玩法开发/15-自定义游戏内容/4-自定义维度/1-自定义维度.md @@ -49,7 +49,7 @@ components中可以配置的组件如下: | netease:generator_noise | 空object | | 噪声生成器,用于生成随机凹凸的地面
如果没有配置任何生成器,则默认使用该生成器
(对三个原生维度无效) | | netease:generator_flat | 空object | | 超平坦生成器,仅主世界和下界类型可用
(对三个原生维度无效) | | netease:generator_legacy | 空object | | 旧世界/经典(有限地图)生成器,仅主世界类型可用
(对三个原生维度无效) | -| netease:ban_vanilla_feature | 空object | | 清除原版feature,可解决类似空岛玩法天空悬浮结构问题(仅主世界类型维度可用) | +| netease:ban_vanilla_feature | 空object | | 清除原版feature,可解决类似空岛玩法天空悬浮结构问题(任何维度可用) | | netease:spawn_biomes | array(string) | 该维度下的forest, forest_hills, plains, taiga, taiga_hills, jungle, jungle_hills | 该维度下可供玩家出生的群系名称的列表
请确保列表的群系会生成在该维度 | | [netease:biome_source](./2-群系地貌.md#8-4.群系源节点类型) | array(dict) | | 该维度下的群系源,仅主世界类型可用
(对三个原生维度无效) | | netease:ban_vanilla_structure | object | 屏蔽所有原版结构 | 选择性屏蔽原版结构,示例见下方,支持主世界、下界、末地维度类型 | diff --git a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md index 1c4258d..82fded9 100644 --- a/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md +++ b/mcguide/20-玩法开发/18-性能优化/代码进阶优化.md @@ -31,8 +31,8 @@ query.mod.ysm_is_elytra_flying # 是否正在鞘翅飞行 结合以下两个关键功能实现: -1. [OnPlayerActionServerEvent](https://mc.163.com/dev/mcmanual/mc-dev/mcdocs/1-ModAPI-beta/事件/玩家.html#onplayeractionserverevent) - 用于监听玩家动作状态 -2. [实体自定义属性](https://mc.163.com/dev/mcmanual/mc-dev/mcdocs/1-ModAPI-beta/接口/实体/索引.html?catalog=1#自定义属性) - 实现Molang值的自动同步 +1. [OnPlayerActionServerEvent](https://mc.163.com/dev/mcmanual/mc-dev/mcdocs/1-ModAPI/事件/玩家.html#onplayeractionserverevent) - 用于监听玩家动作状态 +2. [实体自定义属性](https://mc.163.com/dev/mcmanual/mc-dev/mcdocs/1-ModAPI/接口/实体/索引.html?catalog=1#自定义属性) - 实现Molang值的自动同步 ### 工作原理 diff --git a/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/10-NukkitMasterAPI文档.md b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/10-NukkitMasterAPI文档.md new file mode 100644 index 0000000..7f7f442 --- /dev/null +++ b/mcguide/27-手机网络游戏/课程11:使用Nukkit开服/10-NukkitMasterAPI文档.md @@ -0,0 +1,271 @@ +# 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> callback)` +获取玩家未发货订单列表 +参数: +`player` —— 玩家 +`callback` —— FutureCallBack 回调函数 + +例子: +回调参数为Map, 目前值为 + +| Key | Value | +|-------------|------------| +| json_result | 订单json数据对象 | +| player | Player玩家对象 | + +### `public void finPlayerOrder(Player player, List orderList, FutureCallback> 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 data)` + +给指定玩家发送服务端事件 +参数: +`player` — 接收事件的玩家 +`namespace` — 在客户端系统使用ListenForEvent监听的namespace +`system` — 在客户端系统使用ListenForEvent监听的systemName +`event` — 事件名 +`data` — 事件参数。注意,要使用-2指代本地玩家的entityId。 + + +### `public void notifyToMultiClients(List players, String namespace, String system, String event, Map 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 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 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 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 data) { + tryShipItem(player); + } + }; + // 玩家催发货或者玩家购买物品成功事件进行发货检查 + nukkitMaster.listenForNukkitMasterEvent(NukkitMasterEvent.PLAYER_BUY_ITEM_SUCCESS, shipItemHandler); + nukkitMaster.listenForNukkitMasterEvent(NukkitMasterEvent.PLAYER_URGE_SHIP, shipItemHandler); + } + + // 获取玩家订单,并且尝试发货 + public void tryShipItem(Player player){ + FutureCallback> cbHandler = new FutureCallback>() { + @Override + public void completed(Map result) { + JSONObject jsonRes = (JSONObject)result.get("json_result"); + Player requestPlayer = (Player)result.get("player"); + + JSONArray entities = (JSONArray)jsonRes.get("entities"); + // 这里进行entites的订单内容发放 + List 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 finOrderList){ + FutureCallback> cbHandler = new FutureCallback>() { + + @Override + public void completed(Map 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完成事件 diff --git a/mcguide/30-测试/5-性能监测与调试工具.md b/mcguide/30-测试/5-性能监测与调试工具.md index 215d36c..26dd03d 100644 --- a/mcguide/30-测试/5-性能监测与调试工具.md +++ b/mcguide/30-测试/5-性能监测与调试工具.md @@ -11,6 +11,10 @@ selection: true ## 1.方块探针 +### 教学视频 + + + ### 准备工作 首先您需要登陆到您的MCStudio,如果您还没有账号,可以点击[**开发者平台链接**](https://mcdev.webapp.163.com/#/login)进行注册: @@ -425,6 +429,10 @@ MC\_SERVER: ![图片](./images/airperf01.png) +### 教学视频 + + + ### 了解界面 启动客户端后我们可以先看一下布局,主要包括菜单栏、用户信息栏、功能栏、多功能面板(设备、场景)以及最重要的性能曲线面板。 diff --git a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_1.png b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_1.png index 1356326..379c447 100644 Binary files a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_1.png and b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_1.png differ diff --git a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_2.png b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_2.png index 8fb0925..5bd6e5e 100644 Binary files a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_2.png and b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_2.png differ diff --git a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_3.png b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_3.png index f795359..d5961aa 100644 Binary files a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_3.png and b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_3.png differ diff --git a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_4.png b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_4.png index 2f9ea8e..c1ca9a6 100644 Binary files a/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_4.png and b/mcguide/40-活动、推广与收益/images/zhoumo_miaosha/0_4.png differ diff --git a/mcguide/40-活动、推广与收益/课程05-周末秒杀.md b/mcguide/40-活动、推广与收益/课程05-周末秒杀.md index c9fc2ac..3fa33a9 100644 --- a/mcguide/40-活动、推广与收益/课程05-周末秒杀.md +++ b/mcguide/40-活动、推广与收益/课程05-周末秒杀.md @@ -4,8 +4,12 @@ 每周五、六、日三天,将限时开启周末秒杀活动,报名并中标的模组将在活动当天20:00-23:59获得额外曝光,进行限时秒杀。 +当周末秒杀与其他游戏内促销节日冲突时,将有概率暂时关闭当周【周末秒杀】活动。 + ![48](./images/zhoumo_miaosha/0_0.png) +* 当周末秒杀与其他游戏内促销节日冲突时,将有概率暂时关闭当周【周末秒杀】活动。 + ## 二、【周末秒杀】报名规则 1. 开发者平台新增【周末秒杀】报名通道,报名流程可查看【报名流程图解】 @@ -13,7 +17,7 @@ - 满15个模组在申请队列中时,此秒杀日将不再接受申请 - 每个秒杀日有且仅有一个模组能够中标 -2. 信用分满12分的开发者均可在:开发者平台 - 折扣与优惠 - 【周末秒杀】 页面进行报名: +2. 信用分满12分的开发者均可在:开发者平台 - 推广与活动- 【周末秒杀】 页面进行报名: - 开发者至少提前9个自然日、至多提前22个自然日进行申请(e.g. 7月11-13日的秒杀模组,最晚在7月2日申请,最早在6月18日申请) - 每位开发者同一时间最多有6个模组处于申请中状态 - 申请中状态:审核中、已通过、已上架 @@ -22,28 +26,27 @@ 3. 可申请的模组需满足以下条件: - 申请的模组6周内未参与过秒杀活动 - 申请的模组必须为:原价大于100钻, 且是钻石付费模组 - - 秒杀份数最少为1000份,最多为10000份 + - 秒杀份数最少为1000份,最多为10000份,秒杀份数需为整千数 4. 申请后,开发者可在【我的申请】中查看42天内申请历史 -![48](./images/zhoumo_miaosha/0_1.png) 5. 申请通过/未通过时,我们将通过 站内信的形式 告知各位开发者 ## 三、【报名流程图解】 -1. 在开发者平台【折扣与优惠 - 周末秒杀申请】页面 +1. 在开发者平台【推广与活动 - 周末秒杀申请】页面 -![48](./images/zhoumo_miaosha/0_2.png) +![48](./images/zhoumo_miaosha/0_1.png) 2. 选择想要申请秒杀的周末,点击【申请】 +![48](./images/zhoumo_miaosha/0_2.png) + +3. 在【申请弹窗】中选择对应的日期,填写: 模组ID 、秒杀份数(秒杀份数需为整千数) + ![48](./images/zhoumo_miaosha/0_3.png) -3. 在【申请弹窗】中选择对应的日期,填写: 模组ID 、秒杀份数 - -![48](./images/zhoumo_miaosha/0_4.png) - 4. 申请后,开发者可在【我的申请】中查看42天内申请历史 -![48](./images/zhoumo_miaosha/0_5.png) \ No newline at end of file +![48](./images/zhoumo_miaosha/0_4.png) \ No newline at end of file