[数据包日记]从萌新到入门的je1.14数据包制作教程

现在我写好了战利品表,并将这个战利品表的名字改为lt,我要怎么把它应用到游戏里呢?
对于容器方块,可以编辑它的LootTable标签,来使其应用我们自定义的战利品表。
同时,可以使用LootTableSeed来控制战利品表种子(不填则生成随机种子)。相同战利品表在相同条件下使用相同种子时获取的物品是完全相同的。
示例:
/setblock ~ ~ ~ chest{LootTable:"dod:lt"}


(出了经验修补!)


对于生物,可以编辑其DeathLootTable来将战利品表应用至生物身上,也可以输入DeathLootTableSeed来编辑战利品表种子。
示例:
/summon creeper ~ ~ ~ {DeathLootTable:"dod:lt"}


楼主 化学爱好者_C60  发布于 2019-07-11 18:37:00 +0800 CST  
loot命令
loot是1.14新增的一个命令,可以在指定地点执行战利品表,或者将战利品表保存至某个实体或方块的物品栏。


loot的格式为:
/loot <目标> <来源>


目标有4种,可以是玩家的物品栏、容器、物品栏的某个位置,或者是以物品形式散落在某个地点。
格式如下:
玩家: give <目标选择器>
容器:insert <x y z>
物品栏:replace <block/entity> <x y z/目标选择器> <栏位>
地点:spawn <x y z>


来源有4种,钓鱼、挖掘、击杀生物,或者直接来源于某个战利品表
钓鱼:fish <战利品表> <位置> [<工具>|mainhand|offhand]
挖掘:mine <x> <y> <z> [<工具>|mainhand|offhand]
击杀:kill <目标选择器>
战利品表:loot <战利品表>


示例:/loot give@sloot dod:lt ---将战利品表dod:lt的一次模拟掉落的物品给予自己


/loot insert 13 56 1 kill @e[type=zombie,limit=1] ---将模拟杀死一只僵尸的掉落物放入位于坐标13,56,1的箱子内


楼主 化学爱好者_C60  发布于 2019-07-11 19:01:00 +0800 CST  
今天就到这了,感觉好累啊~~~
明天应该是最后一期了,大家明天见了

楼主 化学爱好者_C60  发布于 2019-07-11 19:02:00 +0800 CST  
6、进度

楼主 化学爱好者_C60  发布于 2019-07-12 21:33:00 +0800 CST  
进度在1.12版本加入,取代成就。
进度在数据包里的位置。。。不好评价,有时候感觉非常有必要,有时候又是个可有可无的存在。
不管怎样,我们还是来介绍一下进度这个东西吧

楼主 化学爱好者_C60  发布于 2019-07-12 21:39:00 +0800 CST  
在进度中,需要指定一个根进度。根进度文件的名字必须为root。根进度决定了一个进度选项卡的样式,以及这个进度页面的背景。
在进度页面中,根进度位于最左侧


楼主 化学爱好者_C60  发布于 2019-07-12 21:50:00 +0800 CST  
对于一个进度,首先需要在display参数下设置其外观。


首先使用icon指定其图标

icon下使用item标签来决定选择哪个物品来当做其图标,使用nbt参数可以编辑其nbt来显示出不同的样子。一个示例:
"icon": {
"item": "minecraft:diamond_sword",
"nbt": "{Enchantments:[{}]}"
}
这会将图标设置为附魔钻石剑。


使用title参数,后接字符串,可以设置进度的标题。也可以使用同命令/tellraw格式的json文本来作为标题。


使用description参数来填写介绍,可以接字符串,也可以接同命令/tellraw格式的json文本。支持\n换行。


使用background参数(仅根进度)来决定这个进度页面的背景,后接textures目录下的一张图片。示例:
"background": "textures/block/white_wool(png后缀名自己写吧,我怕被吞)"
这里指定白色羊毛的材质为背景。


使用frame参数来决定进度的类型,可接task(普通进度)、goal(目标)和challenge(挑战),会影响进度的边框与获得进度时的聊天框输出内容。


使用show_toast参数来决定进度完成时是否在右上角提示,为布尔值,默认为true。


使用announce_to_chat参数来决定进度完成时是否在聊天框输出,为布尔值,默认为true。

使用hidden参数决定进度是否在达成前保持隐藏,为布尔值,默认为false。当为true时,该进度的子进度的hidden均被强制更改为true。


一个示例:
"display": {
"icon": {
"item": "minecraft:writable_book"
},
"title": "\u4E00\u4E2A\u6839\u8FDB\u5EA6",
"frame": "task",
"background": "textures/block/white_wool(自己加png后缀吧)",
"description": "\u8FD9\u662F\u4E00\u4E2A\u6839\u8FDB\u5EA6"
}
这表示这个进度的图标是书与笔,标题是“数据包日记”,类型为普通进度,背景为白色羊毛(由此判断这是一个根进度),介绍为“这是一个根进度”

楼主 化学爱好者_C60  发布于 2019-07-12 22:31:00 +0800 CST  
使用requirements参数来给条件进行分组,决定玩家在达成哪些条件时给予进度。
一般情况下,可以忽略这个参数,默认所有条件都达成后给予进度。


requirements的格式为:
"requirements": [[条件组1],[条件组2],...]
任意一组条件全部达成后,进度即被达成。条件的名字使用criteria参数中的命名


示例:假设存在a、b、c、d、e这5个条件
"requirements": [["a","b","c"],["b","c","d",],["c","d","e",]]
表示当a、b、c或b、c、d或c、d、e这三组条件任意一组全部达成时,进度达成

楼主 化学爱好者_C60  发布于 2019-07-12 23:14:00 +0800 CST  
在rewards参数下设置进度达成后的奖励。
可以设置4种奖励。
通过recipes参数来奖励合成表,后接中括号,中括号内填写配方名。
通过loot参数来奖励战利品列表,后接中括号,中括号内填写战利品表名。
通过experience参数奖励经验,后接整形常量。
通过function参数来奖励函数,后接函数名,执行者为进度的获得者。
示例:
"rewards": {
"experience": 10,
"function": "dod:123/example"
}
表示进度达成时奖励10点经验,并执行函数“dod:123/example”

楼主 化学爱好者_C60  发布于 2019-07-12 23:25:00 +0800 CST  
一个完整的json示例:
{
"display": {
"icon": {
"item": "minecraft:diamond"
},
"title": "\u4E00\u4E2A\u975E\u6839\u8FDB\u5EA6",
"frame": "task",
"description": "\u8FD9\u662F\u4E00\u4E2A\u975E\u6839\u8FDB\u5EA6"
},
"parent": "dod:adv/root",
"criteria": {
"a": {
"trigger": "minecraft:tick"
}
},
"rewards": {
"experience": 10,
"function": "dod:123/example"
}
}
这表示,这个进度的图标为钻石,标题为“一个非根进度”,类型为普通进度,介绍信息为“这是一个非根进度”,父进度为“dod:adv/root”(由此判断这不是根进度),触发条件为每一游戏刻触发(差不多可以理解成无条件触发),奖励10经验值和函数dod:123/example

楼主 化学爱好者_C60  发布于 2019-07-12 23:32:00 +0800 CST  
使用advancement命令来给予或剥夺进度。
命令的格式参考《指令日记》
这里补充一下only的一个特殊用法
/advancement <grant/revoke> <玩家> only <进度名> [条件名]
这里的条件即为criteria里的条件,可以通过该指令来仅剥夺或仅给予玩家某个进度的某一个条件,据此可以借助impossible触发器来确保玩家只在某些情况下获取进度。较好理解,不再举例。

楼主 化学爱好者_C60  发布于 2019-07-12 23:40:00 +0800 CST  
那么,这一系列的数据包教程就要结束了
其实我的原计划里可能会把战利品表这种叫复杂的东西分两节来讲,结果还是一节就拿下了
感觉这一系列内容稍微有点少,但是就目前来看,数据包就是这样。如果能看懂数据包的结构,还是比较简单的,就是一些内容可能翻wiki的次数较多。


不管怎样,Part2/3到这就算结束了,大家 Part3/3 再见了

楼主 化学爱好者_C60  发布于 2019-07-12 23:47:00 +0800 CST  
补42L


无序合成不需要使用pattern与key这两个参数,但是会需要ingredients这个参数来对所需材料进行逐一列举,示例:
"ingredients": [
{
"item": "minecraft:egg"
},
{
"tag": "minecraft:wool"
}
]
这里说明了所需的两个物品,一个是鸡蛋,一个是标签“minecraft:wool”下的任意物品(即任意一种羊毛)


无序合成同样使用与有序合成相同的输出方法。完整json如下
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "minecraft:egg"
},
{
"tag": "minecraft:wool"
}
],
"result": {
"count": 1,
"item": "minecraft:sheep_spawn_egg"
}
}
效果如下


楼主 化学爱好者_C60  发布于 2019-07-19 17:44:00 +0800 CST  
pdf版链接: panbaiducom/s/1jPe84oJY4k7z6jrClBvOTQ 提取码: v444

楼主 化学爱好者_C60  发布于 2019-07-19 21:06:00 +0800 CST  
这就很迷?


楼主 化学爱好者_C60  发布于 2019-12-11 18:17:00 +0800 CST  

楼主:化学爱好者_C60

字数:10834

发表时间:2019-07-07 04:18:00 +0800 CST

更新时间:2020-02-21 20:37:18 +0800 CST

评论数:264条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看