Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 16608|回复: 139
打印 上一主题 下一主题

[教程] 【1.13】数据包(原版模组)入门教程

  [复制链接]
跳转到指定楼层
楼主
发表于 2018-2-26 13:16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 ruhuasiyu 于 2018-8-10 15:54 编辑

目录
简介 | 规划 | 物品设计 | 合成 | 熔炼和酿造 | 交易 | 探测与触发 | 机器实例 | 其它

简介
原版模组(vanilla mod)一般指在不修改Minecraft游戏本体的前提下,通过命令方块、ooc (only one command)或数据包(datapack)等方式对游戏的可玩性做出修改。而有了Minecraft Java版1.13新增的数据包概念之后,原版模组的制作已变得十分便捷。然而纵观论坛,原版模组仍然不够繁荣。这里我将为从未接触这个概念的玩家做一个简单的入门教程,以期抛砖引玉。

本文中不会对命令部分做过多的详解。若你对命令尚不了解,可先依次通过如下链接学习并了解:
命令手册
命令 - Minecraft Wiki,最详细的官方我的世界百科
新人手册-MC命令方块资源
命令进阶
记分板和nbt手册
记分板 - Minecraft Wiki,最详细的官方我的世界百科
区块格式 - Minecraft Wiki,最详细的官方我的世界百科
Player.dat格式 - Minecraft Wiki,最详细的官方我的世界百科
可先熟悉各项指令后,再学习记分板和nbt相关命令。

若你已对1.12或以下的命令较为熟悉,可查看1.13页面查看命令改动之处。

工欲善其事,必先利其器
无论如何,一个文本编辑器总是必要的。尽管Windows系统自带记事本功能,但是我们需要一个便于编码转换和编辑的文本编辑器,例如Notepad++

如果你使用的是Notepad++,建议你使用mcfunction的语言样式和自动补全。打开Notepad++,点击语言->自定义语言格式->导入即可。更多功能和样式修改可自行研究。同时请关闭设置->首选项->其它->自动检测字符编码

此外,一个压缩工具也几乎是必要的。可使用免费软件7-zip来进行zip文件的压缩和解压缩。nbtexplorer则是打开dat文件所必需的软件。

文件类型
我们将会接触到下列文件类型,详细用法见后文:
  • .json 使用文本编辑器打开。打开后,有一对根括号{},里面包含了诸如 "abc":"def" 这种名(key)与值(value)的一一对应,值也可以为[]括起来的数组或{}括起来的json对象。

                                   
    登录/注册后可看大图
  • .mcmeta 使用文本编辑器打开。记录了资源包和数据包的信息,包含版本和描述,当前版本为4,描述中可用样式代码

                                   
    登录/注册后可看大图
  • .mcfunction 使用文本编辑器打开。每一行都是一条单独的可执行的指令,以#开头为注释。可在游戏中使用诸如 function cpp:sth/sth 调用并一次执行该文件下所有指令。

                                   
    登录/注册后可看大图
  • .nbt .mca 使用nbtexplorer打开。打开后是树状结构,保存了诸如世界设置、区块、结构等内容。
  • .jar 使用压缩工具打开,通常是minecraft本体或mod本体。

                                   
    登录/注册后可看大图

json,mcmeta,mcfunction为文本文件,可通过新建txt文件修改名称和后缀得到。因此,请在文件夹页面关闭文件->查看->隐藏已知文件类型的扩展名。编写json和mcmeta文件时建议通过空格或制表符(tab)缩进,以便于查看括号匹配和层次。


存档文件结构
我们先熟悉下.minecraft的文件结构。打开.minecraft所在的文件夹,这通常位于你的启动器目录下。.minecraft目录下有几个值得注意的文件夹,注意像saves这种文件夹如果在启动器设置的是版本分离,则位于versions下面的对应文件夹下,否则位于.minecraft目录下。我们假设是版本独立的,这样也可以避免在不同版本打开导致存档损坏。

                               
登录/注册后可看大图



                               
登录/注册后可看大图

  • assets 包含了minecraft的资源文件,例如所有内容的中文翻译就可以在这里找到。具体而言,打开 indexes中对应的json文件,然后查找zh_cn对应的hash值,然后在objects中找到相应文件,用文本编辑软件打开即可看到相应的文本。当我们需要修改例如游戏中“stone”的中文译名“石头”时,我们可以先通过该方式找到对应的json名“item.minecraft.stone”,然后在资源包中进行修改。后面我们会详细介绍。
  • versions/版本号/saves 保存了所有的地图存档,我们从展示共享版下载的地图一般就是放入该文件夹。
  • versions/版本号/saves/advancements 保存了相应玩家的进度和完成时间。
  • versions/版本号/saves/playerdata 保存了玩家的属性等内容,可修改玩家的位置、复活点、飞行速度等内容。
  • versions/版本号/saves/stats 保存了玩家的统计信息。
  • versions/版本号/saves/data 保存了地图、记分板、村庄等内容。idcounts.dat记录了当前已使用的地图数量,可以修改,修改后新打开的空地图会以此开始计数,这可以避免模组自定义的地图被玩家无意修改。map_数字.dat即相应的地图信息。scoreboard.dat记录了记分板、记分板的值、组。其它的文件记录了相应结构(村庄、要塞、废弃矿井)的信息。
  • versions/版本号/saves/datapacks 保存了数据包,文件结构详见下方。
  • versions/版本号/saves/DIM1、DIM-1、region 保存了末地、下界和主世界的区块信息。其中的.mca文件可用nbtexplorer打开并可直接修改相应的区块内容,但是一般可使用更加便捷的mcedit等工具来操作。
  • versions/版本号/saves/level.data 世界信息,包含了种子、生成类型、难度、出生点、世界边界、游戏规则等内容。
  • versions/版本号/saves/generated 游戏中手动保存的结构,发布时请将结构放在datapacks中而不是此处。
  • versions/版本号/resourcepacks 资源包文件夹,其中的每个子文件夹/zip均是一个单独的资源文件包。
  • versions/版本号/screenshots 截图保存的文件夹。
  • versions/版本号/版本号.jar/assets minecraft的资源文件,包括模型、材质、字体、语言(英文)、文本等。
  • versions/版本号/版本号.jar/data/minecraft minecraft命名空间下的进度、战利品表、配方、结构、标签等,是制作datapacks的文件样板,文件结构详见下方。
  • versions/版本号/logs 日志信息,会提示加载时发生的错误,是调试数据包时的必备工具。数据包重载时,latest.log会显示其中的错误文件和相应位置。
  • versions/版本号/options.txt 游戏设置,诸如音量、视距等。
  • versions/版本号-forge-版本号/mods/名称.jar 该文件夹存储了相应了mod文件,当我们需要mod中相应的文件时,可在其中寻找。

数据包文件结构
参考1.13数据包食用方法入门教程(过渡教程)。数据包结构为

                               
登录/注册后可看大图

  1. datapacks/数据包名称/pack.mcmeta
  2. datapacks/数据包名称/data/命名空间/advancements
  3. datapacks/数据包名称/data/命名空间/functions
  4. datapacks/数据包名称/data/命名空间/loot_tables
  5. datapacks/数据包名称/data/命名空间/recipes
  6. datapacks/数据包名称/data/命名空间/structures
  7. datapacks/数据包名称/data/命名空间/tags
复制代码
如果你是首次接触数据包,请务必将此文件结构掌握。除数据包名称外,所有文件和文件夹请使用小写英文、数字或-,_来命名,不可使用大写字母,所有文本文件使用utf-8无BOM编码保存。类似于资源包,数据包和子文件夹可以用.zip文件来代替,不影响使用。一般发布时会将所有内容压缩为一个zip文件。压缩时注意文件夹层次以避免多套了一层文件夹。

pack.mcmeta
例子:
  1. {
  2.         "pack": {
  3.                 "pack_format": 4,
  4.                 "description": "§6更多的合成\n§a辅助功能 §6by ruhuasiyu"
  5.         }
  6. }
复制代码
在输入/datapack list指令后,鼠标移至数据包名称上会显示该信息。

命名空间
命名空间为玩家自定义的、可操作的空间。如果不同数据包中有相同的命名空间,则其中相同的文件名内容会根据加载先后顺序被覆盖。特别地,原版内容被保存在minecraft命名空间,想要修改和替换原版的内容只需在你的数据包内建立minecraft命名空间,然后修改同名文件。但是注意tags中的文件默认不会被覆盖,而是追加内容。

进度、函数、战利品表、配方、结构
进度(advancements)、函数(functions)、战利品表(loot_tables)、配方(recipes)、结构(structures)的调用格式为:例如文件 cpp/functions/abc/test.mcfunction可以通过cpp:abc/test来调用该函数。

这些文件夹的用途可参考wiki相关页面和下面的站内教程帖,本文中需要使用时也会进行介绍。注意部分教程未必完全适用于1.13。
【烯方的那一套理论】猴子都能学会的自定义advancement!
【CBL|秋一】(1.12)函数命令系统:当命令脱离命令方块
[CBL∫2b]Loottable - 创造一个看脸讲玄的世界 总索引

函数的文件后缀为mcfunction,每一行表示一个单独的命令,执行时会按顺序依次执行,使用#来表示注释。

结构的文件后缀为nbt,请在游戏中使用结构方块创建该文件。注意游戏中保存的结构位于存档的generated文件夹而不会保存至数据包,所以在游戏中设计并保存好之后,应当复制到数据包之内。

其余文件后缀为json。

标签
标签(tags)分为blocks、items、functions三种,调用格式为:例如文件 cpp/tags/blocks/test.json可以通过#cpp:test来调用该方块标签。

tags文件夹存储的是方块、物品、函数的标签,分别位于blocks、items、functions。主要用于一次性处理多个方块、物品、函数。

方块标签可用于命令中的方块检测。
:当玩家头部不是流体(空气、水等)时,输出I'm stucked!

cpp/tags/blocks/fluid.json
  1. {
  2.         "replace": false,
  3.         "values": [
  4.                 "minecraft:air",
  5.                 "minecraft:cave_air",
  6.                 "minecraft:void_air",
  7.                 "minecraft:bubble_column",
  8.                 "minecraft:water",
  9.                 "minecraft:lava"
  10.         ]
  11. }
复制代码
这里的replace表示是否覆盖原标签内容,默认为false,因此这一行可以省略。如果设置为 true,则会覆盖之前添加至该标签的内容。

主函数
  1. execute as @a at @s unless block ~ ~1.62 ~ #cpp:fluid run say I'm stucked!
复制代码
这里的1.62为Steve/Alex的身高,因为命令执行地点为实体的脚,而检测的方块位于玩家头部。

:让末影人无法拿起任何方块。

minecraft/tags/blocks/enderman_holdable
  1. {
  2.         "replace": true,
  3.         "values": [
  4.         ]
  5. }
复制代码

调试模式(F3)下,玩家指向方块时会显示含有该方块的所有方块标签。

物品标签可用于合成、熔炼和进度判定等。

函数标签则可以一次性执行多个函数,常用于进度的rewards。

预设标签
minecraft命名空间中预设了一些tags。其中 minecraft/tags/functions/load.json 中的函数会在加载时被执行一次,minecraft/tags/functions/tick.json 中的函数每刻会被执行一次。通常,所谓模组的“主函数”需要加到tick.json中。例如
minecraft/tags/functions/tick.json

  1. {
  2.         "values": [
  3.                 "cpp:tick",
  4.                 "upp:tick"
  5.         ]
  6. }
复制代码

tags中亦可引用其它tags,例如
minecraft/tags/blocks/logs.json
  1. {
  2.         "values": [
  3.                 "#minecraft:dark_oak_logs",
  4.                 "#minecraft:oak_logs",
  5.                 "#minecraft:acacia_logs",
  6.                 "#minecraft:birch_logs",
  7.                 "#minecraft:jungle_logs",
  8.                 "#minecraft:spruce_logs"
  9.         ]
  10. }
复制代码
就包含了所有6种原木、木头、去皮原木、去皮木头。
更多的预设标签请查看http://www.mcbbs.net/thread-811990-1-1.html
此外,还有一种流体标签fluids,其下方有两种预设标签water和lava,用于决定不同流体的性质。具体参考上方链接。

如果你觉得本帖对你有帮助的话,可以考虑点击下方链接赞助我一杯红茶?


评分

参与人数 30人气 +52 金粒 +413 贡献 +5 收起 理由
Tollainmear + 2 MCBBS有你更精彩~
Argon_gas + 1 + 15 MCBBS有你更精彩~
X无法加载X + 15 神乎其技,不服不行!
黑衣射手 + 10 神乎其技,不服不行!
13837660474 + 1 神乎其技,不服不行!
猜猜谁是谁 + 4 + 25 MCBBS有你更精彩~
清晨w + 1 + 20 神乎其技,不服不行!
MsYqgzt + 4 + 50 MCBBS有你更精彩~
AZWorld + 1 很棒的作品!
我的锅 + 1 神乎其技,不服不行!
1649464093 + 1 MCBBS有你更精彩~
小超酱 + 1 + 15 哇好厉害!赶紧学习学习
wangtianen + 2 + 33 MCBBS有你更精彩~
大坑比124 + 1 MCBBS有你更精彩~
璀璨LJT + 1 + 15 没设为最佳答案,所以来评个分.
延旬 + 1 + 15 神乎其技,不服不行!
不死之躯 + 2 MCBBS有你更精彩~
乙烯_中国 + 5 + 60 + 3 精rua!
MineCrocodile + 1 + 10 神乎其技,不服不行!
Namefind + 2 先呲呲再看OVO

查看全部评分

帖子永久链接: 

Minecraft中文论坛 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖若有内容转载自其它媒体,不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意
7、Minecraft(我的世界)中文论坛管理员和版主有权不事先通知发贴者而删除本文

回复

使用道具 举报

沙发
发表于 2018-2-26 14:26:01 | 只看该作者
可以理解为这是要给“原版模组”下定义了吗

点评

并不是啊,侧重点是开发的一些思路而已  详情 回复 发表于 2018-2-26 15:44
回复

使用道具 举报

板凳
发表于 2018-2-26 15:31:22 | 只看该作者
看起来好难,有没有动动鼠标就能制作的软件
回复

使用道具 举报

地板
 楼主| 发表于 2018-2-26 15:44:07 | 只看该作者
562256851 发表于 2018-2-26 14:26
可以理解为这是要给“原版模组”下定义了吗

并不是啊,侧重点是开发的一些思路而已

点评

7_a
这篇文章我认为部分地方还存在一些问题 关于数据包的mcmeta: 数据包的"description"也是可以显示的,只要输入/datapack list然后将鼠标指针移至你的数据包上就会显示信息 数据包的"pack_format"其实没有资源包的"pac  详情 回复 发表于 2018-7-20 02:44
回复

使用道具 举报

5#
发表于 2018-2-26 16:01:29 | 只看该作者
这是...没码完不小心发了出来吗
回复

使用道具 举报

6#
发表于 2018-2-26 16:49:58 | 只看该作者
本帖最后由 SPGoding 于 2018-2-26 17:04 编辑

看起来目前少一个配方的教程…大概可以摸个鱼?
算了我坑太多了,谁想摸谁摸吧hh

是我瞎了,没看到目录

点评

你可以看看目录  详情 回复 发表于 2018-2-26 17:04
回复

使用道具 举报

7#
 楼主| 发表于 2018-2-26 17:04:23 | 只看该作者
SPGoding 发表于 2018-2-26 16:49
看起来目前少一个配方的教程…大概可以摸个鱼?
算了我坑太多了,谁想摸谁摸吧hh

是我瞎了,没看到 ...

你可以看看目录
回复

使用道具 举报

8#
发表于 2018-2-27 12:06:18 | 只看该作者
太好了我不用写合成教程了甚至可以剽窃你的教程(本来要等支持nbt的再写的)
回复

使用道具 举报

9#
发表于 2018-7-13 15:37:05 | 只看该作者
其实不管怎么样都存在一些问题。
比如原版下载服务器材质包 会下载失败。

虽然都是几率,但这都是制约原版的问题
回复

使用道具 举报

10#
发表于 2018-7-14 12:41:26 | 只看该作者
好康的 先码着
回复

使用道具 举报

11#
发表于 2018-7-14 18:37:27 | 只看该作者
我的目标是成为18级大神。假如你每天签到拿4经验,18级300000/4=75000天, 如果从1岁开始签到,那100年=36500天,你差不多要 活200年保持每天签到(谁知道200年后还有没有签到 这玩意),如果你每天再水4经验,时间减半,但考虑 现实,你不可能再活100年,取50年吧,你就要每天水 16经验,可能你是个勤快的人,每天水32经验,那就 需要25年!!!再如果你是个大水怪,每天水64经验 ,那就只要12.5年!!!还如果你个心急的人,每天水 128经验,你只要6.25年!!!!假如你已经急不可耐 了,每天水256经验,那你碉堡了,只要3.125年!!! 当然,你会觉得3年还是太远了,每天你闲的蛋疼,忙 忙碌碌的水512经验,碉堡了,你只需要1.5625年,只 比1年半多一点!!!什么!!你还不满意,那你觉得 你可能一天水1024经验吗,可能吗!!可能吗!!!据 说回复100字或者一百字以上可以得到11~30经验,那么,按照队形,点击复制吧!!! ... ... ... ... ... . ... ... .. ... ... ... ... ... ...

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

12#
发表于 2018-7-15 10:24:24 | 只看该作者
神乎其技,不服不行!

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

13#
发表于 2018-7-15 12:49:50 | 只看该作者
一个小bug
freshcoal

大概是没有加https://前缀
回复

使用道具 举报

14#
 楼主| 发表于 2018-7-15 13:40:30 | 只看该作者
已更新 @乙烯_中国
回复

使用道具 举报

15#
发表于 2018-7-16 06:55:50 | 只看该作者
吧啦吧啦吧啦吧啦

评分

参与人数 1人气 -1 金粒 -10 收起 理由
玄素 -1 -10 无意义

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2018-8-17 09:52 , Processed in 0.082353 second(s), 9 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表