雷霆嘎巴LT
本帖最后由 qscbm187531 于 2021-12-12 14:48 编辑

我们今天又来讲"配方",这个是我们最开始教的。主要是我们要学习tags中的物品(item)标签,这个物品标签,也是能用在配方上的,最后也会再补充下进度的用法。
讲"配方"之前呢,我来讲一个制作剧情地图时可能会用到的一个东西。
这个跟"配方"和"进度"之间有着密不可分的关系。我们说过,达成"进度"的奖励可以奖励"配方",正常情况下,没有一个"配方",这个"配方"便不在你的"配方书"里。当然,还是可以正常合成。但是如果我们把"doLimitedCrafting"规则调为true时。没有这个"配方",就合成不了,那么地图制作者完全可以巧妙的利用这一点。
以上并不是今天主要讲的内容,我们要讲下"配方"和"标签"中的"物品标签"(item)。
我们先来看一串代码。
  1. {
  2.   "type": "minecraft:crafting_shaped",
  3.   "pattern": [
  4.     "X",
  5.     "X",
  6.     "#"
  7.   ],
  8.   "key": {
  9.     "#": {
  10.       "item": "minecraft:stick"
  11.     },
  12.     "X": {
  13.       "tag": "minecraft:planks"
  14.     }
  15.   },
  16.   "result": {
  17.     "item": "minecraft:wooden_sword"
  18.   }
  19. }
复制代码
这一段出自.minecraft/data/minecraft/recipes/wooden_sword.json
  1.   "type": "minecraft:crafting_shaped",
  2.   "pattern": [
  3.     "X",
  4.     "X",
  5.     "#"
  6.   ],
复制代码
通过这一串我们能看出来这是个"工作台有序合成配方"。我们来找一下不同寻常的地方。
  1.     "X": {
  2.       "tag": "minecraft:planks"
  3.     }
复制代码
我们发现了不同,这是对"X"的解释。但是,按我们之前所学的,这个"tag"应该替换为"item",但是不能。因为我们看后面"minecraft:planks"(命名空间:物品标签文件名)。看完后面的我们知道了这个所解释的是"物品标签",那么"物品标签"的作用又是什么呢?让我们接着看下去。
先看一下中文wiki对"物品标签"的解释:
"物品标签"可以在用命令测试物品时以#(命名空间ID)的形式调用。也可以在"配方"或"进度"中用"tag": "(命名空间ID)"的格式使用。只要"物品"满足了该"标签"中定义的任何一个"物品",测试就会通过。也可以在创造模式物品栏内搜索"标签",即搜索#(命名空间ID)。
看完了解释,我们来看代码。
  1. {
  2.   "replace": false,
  3.   "values": [
  4.     "minecraft:oak_planks",
  5.     "minecraft:spruce_planks",
  6.     "minecraft:birch_planks",
  7.     "minecraft:jungle_planks",
  8.     "minecraft:acacia_planks",
  9.     "minecraft:dark_oak_planks",
  10.     "minecraft:crimson_planks",
  11.     "minecraft:warped_planks"
  12.   ]
  13. }
复制代码
我们来解释下,其实这个很简单。
  1.   "replace": false,
复制代码
这个,就是有两个"数据包",这两个"数据包"都有一个"命名空间"叫"example",并且其中又有同名的"标签"时,此"标签"是否覆盖"优先级"较低的"数据包"中的"同名标签"。
  1.   "values": [
  2.     "minecraft:oak_planks",
  3.     "minecraft:spruce_planks",
  4.     "minecraft:birch_planks",
  5.     "minecraft:jungle_planks",
  6.     "minecraft:acacia_planks",
  7.     "minecraft:dark_oak_planks",
  8.     "minecraft:crimson_planks",
  9.     "minecraft:warped_planks"
  10.   ]
复制代码
这个就更简单了,就是说这个"物品标签"中所包含的"物品"。
那么我们这个时候应该知道那个"tag": "minecraft:planks"是什么回事了吧。如果没看懂,也没关系,就是说这个"X"可以是这个"物品标签"中所包含的任意一个"物品",可以参照下木斧,木棍的合成"配方",其他"配方类型"也是可以的。
还有,刚开头我们不是有放了中文wiki的解释,其中有一条:"可以在配方或进度中用"tag": "(命名空间ID)"的格式使用。"
那么如何在"进度"中使用呢?
我们先来看一串代码。
  1. {
  2.   "criteria": {
  3.     "wupin": {
  4.       "trigger": "minecraft:inventory_changed",
  5.       "conditions": {
  6.         "items": [
  7.           {
  8.             "tag": "qs:stone_tools_recipes"
  9.           }
  10.         ]
  11.       }
  12.     },
  13.     "axe": {
  14.       "trigger": "minecraft:recipe_unlocked",
  15.       "conditions": {
  16.         "recipe": "minecraft:stone_axe"
  17.       }
  18.     },
  19.     "sword": {
  20.       "trigger": "minecraft:recipe_unlocked",
  21.       "conditions": {
  22.         "recipe": "minecraft:stone_sword"
  23.       }
  24.     },
  25.     "pickaxe": {
  26.       "trigger": "minecraft:recipe_unlocked",
  27.       "conditions": {
  28.         "recipe": "minecraft:stone_pickaxe"
  29.       }
  30.     },
  31.     "shovel": {
  32.       "trigger": "minecraft:recipe_unlocked",
  33.       "conditions": {
  34.         "recipe": "minecraft:stone_shovel"
  35.       }
  36.     },
  37.     "hoe": {
  38.       "trigger": "minecraft:recipe_unlocked",
  39.       "conditions": {
  40.         "recipe": "minecraft:stone_hoe"  
  41.       }
  42.     }
  43.   },
  44.   "requirements": [
  45.     [
  46.       "wupin",
  47.       "axe",
  48.       "sword",
  49.       "pickaxe",
  50.       "shovel",
  51.       "hoe"
  52.     ]
  53.   ]
  54.   "rewards": {
  55.     "recipes": [
  56.       "minecraft:stone_axe",
  57.       "minecraft:stone_sword",
  58.       "minecraft:stone_pickaxe",
  59.       "minecraft:stone_shovel",
  60.       "minecraft:stone_hoe"
  61.     ]
  62.   },
  63. }
复制代码
我们来分项目解释下,这个"进度文件"。
这个时候,我们发现了一个问题,就是"进度"前面的"display"数据没了。为什么呢?因为这个"进度"是单纯用来解锁"配方"的,我们翻阅"游戏本体"的"进度文件夹"能发现"recipes",这个文件夹里的"进度"就是用来解锁"配方"的。
只要把"display"数据给去掉,"进度"的gui界面就看不到,达成"进度"时聊天栏和屏幕右上角都不会提示。
但是我们依旧要接着讲下去,因为这串代码又有我们新要学的知识点。
我们来分项解释。
  1.   "criteria": {
复制代码
这个我们知道,就是"触发条件",已经讲过了,不讲了。
  1.     "wupin": {
  2.       "trigger": "minecraft:inventory_changed",
  3.       "conditions": {
  4.         "items": [
  5.           {
  6.             "tag": "qs:stone_tools_recipes"
  7.           }
  8.         ]
  9.       }
  10.     },
复制代码
这个就是一个"条件名"为"wupin"的"条件","触发条件"是判断背包里"物品"是否有变动(minecraft:inventory_changed),看全一点就是判断是否有是否有名为"qs"的"命名空间"里的名为"stone_tools_recipes"的"物品标签"(item)中的其中一个物品。
通过"命名空间"我们可以看出来这并不是"原版"的"物品标签"(item)。
那么我们知道这个"进度"是用来获得合成"石剑","石斧","石镐","石铲","石锄"的"进度"。那么这个"物品标签"(item)的内容就应该是这样的:
  1. {
  2.   "replace": false,
  3.   "values": [
  4.     "minecraft:cobblestone",
  5.     "minecraft:blackstone",
  6.     "minecraft:cobbled_deepslate",
  7.     "minecraft:stone_axe",
  8.     "minecraft:stone_sword",
  9.     "minecraft:stone_pickaxe",     
  10.     "minecraft:stone_shovel",
  11.     "minecraft:stone_hoe",
  12.     "minecraft:stick"
  13.   ]
  14. }
复制代码
那我们看完了就知道只要我们有这些物品的其中一个物品,那么这个条件就达成了,那么我们接着往下看。
  1.     "axe": {
  2.       "trigger": "minecraft:recipe_unlocked",
  3.       "conditions": {
  4.         "recipe": "minecraft:stone_axe"
  5.       }
  6.     },
  7.     "sword": {
  8.       "trigger": "minecraft:recipe_unlocked",
  9.       "conditions": {
  10.         "recipe": "minecraft:stone_sword"
  11.       }
  12.     },
  13.     "pickaxe": {
  14.       "trigger": "minecraft:recipe_unlocked",
  15.       "conditions": {
  16.         "recipe": "minecraft:stone_pickaxe"
  17.       }
  18.     },
  19.     "shovel": {
  20.       "trigger": "minecraft:recipe_unlocked",
  21.       "conditions": {
  22.         "recipe": "minecraft:stone_shovel"
  23.       }
  24.     },
  25.     "hoe": {
  26.       "trigger": "minecraft:recipe_unlocked",
  27.       "conditions": {
  28.         "recipe": "minecraft:stone_hoe"  
  29.       }
  30.     }
复制代码
我来解释下为什么把这个给他叠加一起解释,因为这几个"条件"都是检测是否有"配方"的。
我们先来看一下其中一个"条件"看懂了一个,就能看懂全部。
  1.     "axe": {
  2.       "trigger": "minecraft:recipe_unlocked",
  3.       "conditions": {
  4.         "recipe": "minecraft:stone_axe"
  5.       }
  6.     },
复制代码
那么我们能看出来,这个"条件"的"触发条件"为"检测是否有指定配方"(minecraft:recipe_unlocked),那么下面所指的就是"指定配方","名称"依旧是:"命名空间:配方名称"。那么看懂了这一个,其他的不也就懂了吗。
我们接着看下去。
  1.   "requirements": [
  2.     [
  3.       "wupin",
  4.       "axe",
  5.       "sword",
  6.       "pickaxe",
  7.       "shovel",
  8.       "hoe"
  9.     ]
  10.   ]
复制代码
发现了没有,多出了这一串,那么这一串的意义是什么呢,我们发现中括号里面的都是"条件名称"。这个就是"可选条件"。
我们把所有的"条件"都放在了这里,那么我们只要达成了其中任何的"条件"之一,都能完成这个进度,获得奖励。
那么如果我设定了三个"条件",把两个"条件"设为"可选条件",那么只需完成一个"条件"和"随机一个"可选条件"就可以完成"进度",获得奖励了。
看不懂,没有关系。
依旧设定了三个"条件",把两个"条件"设为"可选条件"。这个时候我进入游戏,同时达成了一个"固定条件"和任意一个"可选条件",我达成了进度。注意,这个只能是同时达成。
我们接着看下去。
  1.   "rewards": {
  2.     "recipes": [
  3.       "minecraft:stone_axe",
  4.       "minecraft:stone_sword",
  5.       "minecraft:stone_pickaxe",
  6.       "minecraft:stone_shovel",
  7.       "minecraft:stone_hoe"
  8.     ]
  9.   },
复制代码
看出来了吧,奖励配方,达成以上任意条件所奖励的配方,搭配上面开头所讲,这得是地图创作者的福音。
那么今天的教程就到这里,如果发现错误请告诉我。
参考资料来源:
Minecraft中文wikiMC百科

MintManatee
写数据包是跟写插件差不多一个意思吗

雷霆嘎巴LT
MintManatee 发表于 2021-12-11 12:57
写数据包是跟写插件差不多一个意思吗

差别大了嘞,插件只适用于服务端,它不像数据包那么好学,要做插件得把Java学清楚

郁离子
u1s1,标题上说明一下内容是啥(配方、战利品表或是其他什么的)可能更好,方便查找

雷霆嘎巴LT
郁离子 发表于 2021-12-11 18:16
u1s1,标题上说明一下内容是啥(配方、战利品表或是其他什么的)可能更好,方便查找 ...

这个不从头看起的话有些理解能力不好的人是不会看懂的。还有每一帖的内容都包含多项,所以也不好概括

cjxx6662
想做,但遥不可及,只能努力学习了!

abc2983889939
俺也想做 能想象出好玩的玩法 特性 但是也只能想想

雷霆嘎巴LT
cjxx6662 发表于 2021-12-12 00:11
想做,但遥不可及,只能努力学习了!

主要努力学习就肯定有成果的,就比如我,我也是边学边发的,大概是学到制作维度的时候突发奇想用大白话来说清楚如何做数据包,现在mcbbs仅存的最全的教程帖我昨天才发现,我发现它主要讲思路,而不是如何去运用它,不是属于面对新手的那一种教学帖。

雷霆嘎巴LT
abc2983889939 发表于 2021-12-12 00:23
俺也想做 能想象出好玩的玩法 特性 但是也只能想想

从我发的教程结合wiki其实这并不难,难得是插件制作。最起码数据包并不需要专业的知识,只要肯努力学习,只要记忆力好,记忆力不好也没关系,可以记。

yancishu
这个数据包是不是可以用来魔改mod 如果学会是不是可以改一些好玩的

雷霆嘎巴LT
yancishu 发表于 2021-12-12 08:29
这个数据包是不是可以用来魔改mod 如果学会是不是可以改一些好玩的

何止好玩,这个做得好堪比mod,你可以去看看JC数据包,这还只是站内的比较好的,站内比他好的也有,更何况全球,而且数据包能达到的上限很高。

SCAVSAFASFAFA
好好学习天天向上,争取早日学会做数据包!

是j12啊
万分感谢作者

东方邪神
教程很详细,好评

是j12啊
谢谢作者啊我知道怎么做了

488631181
感谢作者分享

l2295992885
快寒假了,准备着手学习了,就拿这个试试把

2847278003
感谢大佬

Tian_a233
B站有这个的相关视频,可以看看https://www.bilibili.com/video/BV1nE411o7mB

陈不哭泣
请问从零开始学习该怎么学,从来没有解除过这类东西,如果可以的话能不能拜你为师

雷霆嘎巴LT
陈不哭泣 发表于 2022-1-21 18:13
请问从零开始学习该怎么学,从来没有解除过这类东西,如果可以的话能不能拜你为师 ...

从第一篇开始看,只要学习能力不会很差(指每次考试都跟及格线有一大段距离)的一般都能学会,但不一定'精通'。
另外,感谢你,都忘记更新这个了,好久没更了,明天在跟新,等我全做完在出个目录。

哼唧是魔鬼
大佬真的强,我看的投影眼花QAQ

Hiabens
对我是有帮助的

Hiabens
谢谢大佬 学会了

x_sonner
mcbbs有你更精彩

坎坷神
最近在学习做包,感觉特别有用

第一页 上一页 下一页 最后一页