请选择 进入手机版 | 继续访问电脑版
查看: 14033|回复: 34

[交流] Mod 开发与打包指南

[复制链接]

33

主题

2721

回帖

1210

积分

Lv.7 下界居民

能够认识你真的太好了

UID
4
小麦
451
金锭
4494
下界之星
0

二周年纪念勋章

发表于 2019-6-12 15:27:41 | 显示全部楼层 |阅读模式 IP:广东

Mod 打包指南

暂时将打包种类分为四种,下文介绍了 Addon 和 AddonMap 的,目录结构和内容。

Addon 功能玩法

参照下文介绍

AddonMap 功能玩法地图

参照下文介绍

材质光影

属于只包含 resource_packs 的 Addon,参照下文介绍

皮肤

皮肤组件,直接上传 64x64 的 png 格式图片

class ReturnType():
    Success = 
    UnDefine = 
    NoMod = 
    PackTypeError = 
    PortTypeError = 
    McpPackPathError = 
    DirError = 
    UnZipError = 
    PackMcpError = 
    GetAllError = 
    NoManifestError = 
    ComputerSystemError = 
    NoLevelError = 
    HasLevelError = 
    CopyDevelopError = 
    ZipToDirError = 
    FileOrPathNameError =
    MoveToDirError = 
    CodeReviewError = 

ID 解释
0 Success  表示打包完成
1 UnDefine  表示未定义的返回值,打包脚本内部报错
2 NoMod  表示不包含 python 的 Mod,该返回值暂时未使用
3 PackTypeError  表示调用了未给定的 PackType 打包类型
4 PortTypeError  表示调用了未给定的 PortType 端口类型
5 McpPackPathError  表示调用的 McpPack.out 文件路径有问题,不存在或错误
6 DirError  表示目录错误,Mod 未按要求组织目录的类型,导致不可解析
7 UnZipError  表示解压 zip 文件错误,属于 zip 文件本身有问题不可解压
8 PackMcpError  表示对 python 脚本进行打包的过程中出问题,很大可能属于 python 脚本语法问题
9 GetAllError  表示在程序中获取解压后的文件目录出问题,打包脚本内部报错
10 NoManifestError  表示在打包的过程中发现 behavior_packs 中没有 manifest.json
11 ComputerSystemError  表示打包脚本内部报错,使用了 Windows 和 Linux 之外的系统进行打包
12 NoLevelError  表示在打包 NetGame 和 Lobby 的时候发现没有 Level 地图数据
13 HasLevelError  表示在打包商品 Mod 的时候发现存在 Level 地图数据,不应该包含
14 CopyDevelopError  表示将 python 脚本拷贝到 developer_mods 的过程中出问题,打包脚本内部报错
15 ZipToDirError  表示将处理后的包压缩成新的 zip 包的时候出问题,打包脚本内部报错
16 FileOrPathNameError  表示解压 zip 文件的时候发现存在无法解析的名称,可能是中文或无法解析的符号
17 MoveToDirError  表示将打包后的 zip 文件移动到指定目录出问题,打包脚本内部报错
18 CodeReviewError  表示对整个包进行代码检查时发现有使用未开放 API 或语法错误或禁止使用的方法
19 IncreDownloadError  表示增量打包manifest文件时出问题,打包脚本内部错误
20 FindBehaviorAndResourceError  表示在搜索资源包或行为包时发生错误。如果无行为包,
请检查pack_manifest.json同级下是否有文件夹命名为resource_pack,如果有请改名
21 EncryptError  表示加密时出问题,打包脚本内部错误
22 CreateContentsFileError  表示创建content.json文件时出问题,打包脚本内部错误
23 WriteLevelDatError  表示将uuid写入level.dat失败,一般为地图已损坏
24 ResourcePackUnvalid  文件夹结构错误,请确保resource_pack文件夹中有texture或shader文件夹,且根目录中没有无关文件。
其他 UUID冲突  点我查看解决方式

Mod 开发指南

什么是 Addon?

Addon 是微软定义的 MOD。在 Addon 中,会有 behavior_packs 和 resource_packs 两种。behavior_packs 中存放的是我们想要改变游戏的行为,包括 addon 自带的修改游戏内置物体属性的 Json,也包括这次我们提供的 Python 脚本来控制相关逻辑内容。resource_packs 中包含游戏内资源,包括游戏内的 model(模型)/shader(光照阴影)/ui(UI 界面)/textures(贴图)。

  • 注 1 AwesomeMod 目录下有 awesome_behavior_packs 和 awesome_resource_packs 两个目录,但不是必须得有 2 个,可以只有其中 1 个。
  • 注 2 awesome_behavior_packs 目录下必须有 entities 目录
  • 注 3 awesome_behavior_packs 目录下的 uniqueNameScripts 是存放脚本的目录
  • 注 4 manifest.json 资源包的配置



world_behavior_packs.json 和 world_resource_packs.json 是什么?

主要是记载这个地图加载的资源包的信息,尤其是 "pack_id" 和 "version" 对应到 manifest.json 中 header / uuid 和 header / version

[
    {
        "folder": "awesome_packs",
        "version": [0, 0, 1],
        "pack_id": "ab7b26c2-9de3-41e0-854f-be8843dd5c47"
    }
]

python mod 是在 addon 的基础上,将 python 目录存放在 behavior_packs 中,演示目录结构如下

| awesomeScripts
	| modClient
		| sfx
		| ui
		| ...
		| __init__.py
	| modCommon
		| entity
		| gameSetting
		| network
		| ...
		| __init__.py
	| modServer
		| ai
		| attr
		| buff
		| entity
		| ...
		| __init__.py
	| __init__.py
	| modMain.py

modMain.py 是什么?

modMain 是 python 逻辑的入口文件,必须包含,其中有一些初始化函数

 SDK class for binding
from common.mod import Mod

 binding class HugoMod
@Mod.Binding(name = "HugoMod", version = "0.0.1")
class HugoMod(object):

    def __init__(self):
        pass
    
     server initializes entry
    @Mod.InitServer()
    def testServerInit(self):
        pass
    
     server destroy entry
    @Mod.DestroyServer()
    def testServerDestroy(self):
        pass
    
     client initializes entry
    @Mod.InitClient()
    def testClientInit(self):
        pass
    
     client destroy entry
    @Mod.DestroyClient()
    def testClientDestroy(self):
        pass


  • 注 具体Mod开发参照给到的API文档

在开发的时候 Mod(即 Addon,包含 Python 脚本 install 加载 / uninstall 卸载 / use 使用 / unuse 不使用 是由一个 addon.json 配置文件来控制的。我们只需要通过修改配置文件,来决定 MC 每次启动时候的 MOD 行为。存放在 exe 同一目录中,这里的加载只是为开发者准备的,实际的加载不是这样实现的,开发者可以方便的在 windows 上查看资源和文件,实际运行环境会对我们的 mod python 脚本进行加密。

addon.json 是什么?

{
    "install" : [
        "F:/ModDev/awesomeMod"
    ],

    "uninstall" : [
        // refer to install "awesomeMod"
    ],

    "use" : {
        "levelID" : "awesomeMod"
    },

    "unuse" : {
        // refer to use
    }
}

Directory 目录

在 PC 端,我们可以很方便地查看各种文件和资源路径在哪,在开发时,我们加载资源和地图资源会加载到 C 盘的指定位置,我们需要打开隐藏目录才能看到我们的内容。


游戏的路径RootPath = C:\Users\xxxx\AppData\Roaming\MinecraftPE_Netease

Addon 路径AddonPath = RootPath + \games\com.netease\

add_ons 目录:保存了我们安装好的 mod.lst,里面包含我们每一个 MOD 的所有文件资源的列表。

behavior_packs 目录:保存了我们安装好 MOD 的 behavior 资源

resource_packs 目录:保存了我们安装好 MOD 的 resource 资源

Level 路径LevelPath = RootPath + \minecraftWorlds\


该目录下,所有文件夹代表了每一个 level 的目录,目录名即是上文中的 levelID


Advise 建议

开发时,只需要填写 “install”和 “use”这两项,通过修改 “install”路径下的 python 内容,在每次游戏启动时,都会自动将该路径下的 python 内容同步到 C 盘真正加载的地方去,这两项可以不去掉,方便开发。

  • 清理开发环境可以删除 Addon 路径下的 add_ons / behavior_packs / resource_packs 三个文件夹,并清除该地图存档下的 used_add_on_list.txt / world_behavior_packs.json / world_resource_packs.json 三个文件,重启游戏。
  • 取名使用英文字母和下划线组合(英文或拼音),尽量使用个性化的名字不与其他人冲突
  • 遇到自身没法解决的问题时,可以及时和官方沟通反馈

图片资源内存规范

图片资源主要有 UI,模型,特效。图片资源加载后占用总内存不能超过 100M。图片资源占用内存的计算方法,以分辨率(1024 x 1024)的 32 位 png 图片为例:1024 x 1024 x 32 / 8 = 4194304Bytes = 4M

可参考:图片在内存中的占用的空间大小



最后更新:2019-06-12

评分

2

查看全部评分

4

主题

536

回帖

539

积分

Lv.6 附魔大师

不也挺好吗?

UID
37
小麦
385
金锭
2396
下界之星
0

三周年纪念勋章一周年纪念勋章内测精英勋章问答斯基的方向盘

发表于 2019-6-12 17:52:56 来自手机 | 显示全部楼层 IP:浙江
很实用,谢谢分享

1

主题

2

回帖

2

积分

Lv.1 新手木匠

UID
5975014
小麦
0
金锭
14
下界之星
0
发表于 2019-6-28 10:52:38 来自手机 | 显示全部楼层 IP:北京
没看懂地图的

156

主题

897

回帖

579

积分

Lv.6 附魔大师

MinecraftCG渲染图签约作者

UID
50004
小麦
155
金锭
1717
下界之星
0

三周年纪念勋章玩家团队勋章

发表于 2019-7-6 12:10:19 | 显示全部楼层 IP:陕西
谢谢谢谢,这个比1.12原生java好理解多了

4

主题

27

回帖

13

积分

Lv.1 新手木匠

UID
1279970
小麦
1
金锭
97
下界之星
0
发表于 2019-8-4 17:48:37 来自手机 | 显示全部楼层 IP:湖北
没问题啊?????(`)

3

主题

12

回帖

7

积分

Lv.1 新手木匠

UID
6936212
小麦
0
金锭
29
下界之星
0
发表于 2019-8-13 00:09:35 | 显示全部楼层 IP:广东
我并没有使用mod,为啥还是打包失败

0

主题

1

回帖

0

积分

Lv.1 新手木匠

UID
5653525
小麦
0
金锭
4
下界之星
0
发表于 2019-8-14 09:40:02 | 显示全部楼层 IP:广东
我方得很 发表于 2019-8-13 00:09
我并没有使用mod,为啥还是打包失败

我也是...

3

主题

12

回帖

7

积分

Lv.1 新手木匠

UID
6048071
小麦
0
金锭
27
下界之星
0
发表于 2019-8-16 12:52:10 来自手机 | 显示全部楼层 IP:辽宁
我发布地图为什么还要打包

3

主题

12

回帖

7

积分

Lv.1 新手木匠

UID
6048071
小麦
0
金锭
27
下界之星
0
发表于 2019-8-16 13:20:47 来自手机 | 显示全部楼层 IP:辽宁
感谢,明白了

0

主题

3

回帖

2

积分

Lv.1 新手木匠

UID
6102076
小麦
1
金锭
19
下界之星
0
发表于 2019-8-24 12:56:04 | 显示全部楼层 IP:海南
请问一下为什么我的地图要打包

1

主题

19

回帖

7

积分

Lv.1 新手木匠

UID
7178859
小麦
1
金锭
33
下界之星
0
发表于 2020-1-14 21:54:14 | 显示全部楼层 IP:湖北
112223332

0

主题

1

回帖

0

积分

Lv.1 新手木匠

UID
7386704
小麦
0
金锭
11
下界之星
0
发表于 2020-2-22 11:14:17 | 显示全部楼层 IP:浙江
打包

3

主题

2

回帖

5

积分

Lv.1 新手木匠

UID
6070726
小麦
1
金锭
6
下界之星
0
发表于 2020-2-27 14:43:12 | 显示全部楼层 IP:广东
屁用没有

0

主题

1

回帖

0

积分

Lv.1 新手木匠

UID
7269538
小麦
0
金锭
13
下界之星
0
发表于 2020-2-29 10:34:35 来自手机 | 显示全部楼层 IP:广东
我希望有一个视频教程来说明这些问题

4

主题

8

回帖

7

积分

Lv.1 新手木匠

UID
5721338
小麦
0
金锭
43
下界之星
0
发表于 2020-2-29 18:29:24 | 显示全部楼层 IP:山西
我发布地图为什么失败??????
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部