网易我的世界论坛

标题: Mod 开发与打包指南 [打印本页]

作者: 闪烁的西瓜    时间: 2019-6-12 15:27
标题: Mod 开发与打包指南

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

作者: 会飞的面包    时间: 2019-6-12 17:52
很实用,谢谢分享
作者: 剑宇萌新    时间: 2019-6-28 10:52
没看懂地图的
作者: 龙八夷    时间: 2019-7-6 12:10
谢谢谢谢,这个比1.12原生java好理解多了
作者: 冬日he冰瓜冒險    时间: 2019-8-4 17:48
没问题啊?????(`)
作者: 我方得很    时间: 2019-8-13 00:09
我并没有使用mod,为啥还是打包失败
作者: Direwolf_呆狼    时间: 2019-8-14 09:40
我方得很 发表于 2019-8-13 00:09
我并没有使用mod,为啥还是打包失败

我也是...
作者: 偶遇请叫滚    时间: 2019-8-16 12:52
我发布地图为什么还要打包
作者: 偶遇请叫滚    时间: 2019-8-16 13:20
感谢,明白了
作者: 无忧无虑HAO    时间: 2019-8-24 12:56
请问一下为什么我的地图要打包
作者: 钻石西瓜    时间: 2020-1-14 21:54
112223332
作者: 藤野一郎师兄    时间: 2020-2-22 11:14
打包
作者: 烟花工作室    时间: 2020-2-27 14:43
屁用没有
作者: 龙井伍石衣原    时间: 2020-2-29 10:34
我希望有一个视频教程来说明这些问题
作者: MiStudio    时间: 2020-2-29 18:29
我发布地图为什么失败??????
作者: 下次帮    时间: 2020-4-22 12:49
偶遇请叫滚 发表于 2019-8-16 13:20
感谢,明白了

请教:我地图打包失败  3    你怎么解决的?
作者: 会点指令    时间: 2020-4-22 14:14
(我都不打算做网易mod了)因为没有什么系统性的教程,导致我这种新手很懵emm,我弄了个新装备,json和贴图都准备好了,就是不知道怎么打包emm,况且我也不知道支不支持json
作者: 一个小阿寒    时间: 2020-4-24 10:45
这个开发结构对新人来说真是太有用了~
当初我是看demo摸索的   难顶
作者: 。传说。    时间: 2020-5-12 00:23
地图组件打包总是失败,显示失败原因:Error: unresolved external symbol file
这是个什么情况
作者: 琉璃阁团队    时间: 2020-7-8 08:04
Error: unresolved external symbol file这是啥情况
作者: 吡咯啉    时间: 2020-10-7 21:53
我也是,发个地图,一直显示Error: unresolved external symbol file ,有没有人来回到下啊
作者: Faith凌白.    时间: 2020-10-19 09:15
哇我真的是 发个材质包一直打包失败错误码24 我uidd都改了两三次了
作者: 今晚不加班    时间: 2020-10-25 17:59
我code 18 咋办呢 也没告诉我具体错在哪里 我自己在编辑器里都跑通了
作者: 今晚不加班    时间: 2020-10-25 21:00
上面说的 错误详细信息 已发邮件,为啥我就一直没有收到邮件呢?
光是一个错误码18,这让人咋去排查问题啊? 太难受了
作者: 洁铃    时间: 2021-1-29 23:04
不行我还是不懂。
作者: 忘想想    时间: 2021-1-30 15:09
我还是不懂。。
作者: 酸甜奶酪    时间: 2021-2-10 14:03
我服了,我做的addon国际版就能用,结果给我整个manifest不存在,你逗我呢
作者: Ran_n    时间: 2021-2-10 14:13
酸甜奶酪 发表于 2021-2-10 14:03
我服了,我做的addon国际版就能用,结果给我整个manifest不存在,你逗我呢

这边是 pack_manifest.json
作者: 酸甜奶酪    时间: 2021-2-10 15:03
Ran_n 发表于 2021-2-10 14:13
这边是 pack_manifest.json

试过了,没用
作者: java爱    时间: 2021-2-17 22:01
酸甜奶酪 发表于 2021-2-10 15:03
试过了,没用

+1
我也是这个bug10

作者: 小林一茶    时间: 2021-5-20 11:47
请问下面这个报错会是哪儿出了问题呢?
Pack Scripts Error in packScriptsToMCP,reason:[] Traceback (most recent call last): File "encrypt.py", line 27, in encrypt LookupError: no codec search functions registered: can't find encoding

作者: 小林一茶    时间: 2021-5-20 13:44
mod中不支持用Unicode的字符串吗?
打包上传会提示
  1. Pack Scripts Error in packScriptsToMCP,reason:[] Traceback (most recent call last): File "encrypt.py", line 27, in encrypt LookupError: no codec search functions registered: can't find encoding
复制代码

作者: 哇叽叽哇    时间: 2021-5-21 19:44
小林一茶 发表于 2021-5-20 13:44
mod中不支持用Unicode的字符串吗?
打包上传会提示

可查看问题反馈指引贴,寻求平台客服等方式或开贴寻求帮助
作者: 神捕晖    时间: 2021-5-21 19:55
小林一茶 发表于 2021-5-20 13:44
mod中不支持用Unicode的字符串吗?
打包上传会提示

用utf8编码应该就不会了
作者: 灵晓犀    时间: 2021-5-30 15:20
请教错误21怎么解决




欢迎光临 网易我的世界论坛 (http://mc.netease.com/) Powered by Discuz! X3.3