Stage.1 合成配方语句编写 众所周知,所有的编程都有自己的语句,MT也不例外——虽然它不属于编程 - recipes.addShaped(Output,InputBox);
复制代码 其中所有的符号都为英文符号即半角符号。这个语句是为了用来添加有序合成的,Output很容易理解,即输出端 那么InputBox是什么呢 我们可以用一个指令来看看电脑的解释 在游戏里面输 MT会将所有物品的合成配方全部发给你 你将会看到密密麻麻的代码 从中我们拿钻石镐举例子 对应这个合成的代码是 - recipes.addShaped(<minecraft:diamond_pickaxe>,
- [[<ore:gemDiamond>, <ore:gemDiamond>, <ore:gemDiamond>],
- [null, <ore:stickWood>, null],
- [null, <ore:stickWood>, null]]);
复制代码
可以用中文翻译一下,就变成 - 配方.添加有序配方(<原版钻石镐>,
- [[<矿典引用:钻石>, <矿典引用:钻石>, <矿典引用:钻石>],
- [我是空的, <矿典引用:木棍>, 我是空的],
- [我是空的, <矿典引用:木棍>, 我也是空的]]);
复制代码当然矿典引用你可以去掉观看,这样更为清晰 也就是说,这里的输出端是钻石镐,输入就是我们在合成台看到的那个样板 合成台的模样就是InputBox的模样 被<>包含在内的就是物品名称——MT名称 Null则代表的是空格子的意思 对于Inputbox的最外面的[]代表这个Inputbox的范围 内部的二级[]代表一行的input,当然里面只能容纳三个物品。 如果我们要删除原来就有的配方,则需要输入 但是注意,这将删除所有用来合成Output物品的合成配方 或者你可以试着定点删除 - recipes.removeShaped(Output,InputBox);
复制代码 删除物品的某个特定配方 如果输出的物品是多个怎么办 譬如说木板合成木棍要出现四个木棍,可是输出只允许写一个物品 你可以将<minecraft:stick>写为<minecraft:stick>*4 这样就可以添加四个木棍作为输出了 如果要添加无须配方怎么办?可以尝试使用这行语句 - recipes.addShapeless(Output, InputBox);
复制代码 不过与上文有序不同的是,shapeless无需添加合成不需要二级[](因为无序合成不在乎哪行) 至于要删除特定物品的有序或者是无序配方 - recipes.removeShaped(Output);
- recipes.removeShaped(Output,InputBox);
- recipes.removeShapeless(Output);
- recipes.removeShapeless(Output,InputBox);
复制代码但是有的人又要问了,原版木板合成木棍的话是不是每种木头都要写一个配方 这样就要写(数数),好多个配方 实际上对于几个附加值(Meta)不同的物品来说(譬如木板一家族) 可以采用通用符 即<minecraft:planks:*> 那个*就是所谓通用符,他代表了任意一种附加值 这样,几个添加合成就被压缩成了一段话 Stage.2 变量 变量是什么?是一个不断变化的量? 对于MT来说,这个就不大重要了,因为只有在循环语句那里我们可能涉及一点变量 因为都是复制贴贴,谁会设置变量(笑),不过还是要按照套路讲一讲 如果你真的觉得写那些物品名称(实际上不是物品名称,只是MT对每个物品做的标记) 太麻烦,你可以尝试使用变量 变量赋值语句分为两种 一种是 这种变量赋值是永久性的,也就是其变量只能代表这一种物品,之后的替换将无效
还有一种是 举个例子来说- val A=<minecraft:stone>;
- val A=<minecraft:clay>;
复制代码
此时A代表的还是石头
那么变量是如何使用呢 也是举个例子 - val Stone=<minecraft:stone>;
- val Clay=<minecraft:clay>;
- recipes.addShapeless(<minecraft:brick>*4,[Stone,Clay]);
复制代码
变量的用途大概如此,值得一提的是变量可以代替任何物品,包括有NBT数据的 这个将会在下文提到 同时,变量可以不单单表示一种物品,可以同时表示多种 譬如- val Wool=<minecraft:wool:*>;
复制代码 它就可以同时表示多种颜色的羊毛了,其实道理跟继承NBT属性是一样的 Stage.3 NBT数据 NBT数据是什么,这个你问我我也不清楚,不过你可以问问Wiki MT可以调用的NBT数据很多,譬如最基础的就是耐久损耗了,这里就以耐久损耗为例 普通的铁镐可以通过Hand得到他的物品标记如果我们损耗一点呢?- <minecraft:iron_pickaxe:1>
复制代码 所以- <minecraft:iron_pickaxe:*>
复制代码 代表的是任意耐久的铁镐 写配方的时候我们可以这样- recipes.addShapeless(<minecraft:iron_pickaxe>,[<minecraft:iron_ingot>,<minecraft:iron_pickaxe:*>]);
复制代码 当然这只是一种书写方式,这种方式是不涉及NBT的 仅仅是将所有可能出现的全部列了出来(但是这种穷举法很好用) 官方给出的是这样的- recipes.addShapeless(<minecraft:iron_pickaxe>,[<minecraft:iron_ingot>,<minecraft:iron_pickaxe>.anyDamage()]);
复制代码
也就是- <minecraft:iron_pickaxe>.anyDamage()
复制代码 来表示任意耐久 这两种书写都是等效的 当然实际上上面这两种跟NBT标签都没多大关系 还记得我们的附魔书么,他的名字就是一个NBT标签 MT对于NBT标签有一个通用的语句 - <minecraft:iron_pickaxe>.withTag({display: {Name: "Frog", Lore: ["This pick", "is added one second"]}})
复制代码上面的语句就是赋予给了一个铁镐NBT标签 标签使该铁镐的名字变成了Frog(青蛙)并且带有介绍(这个镐子被续了一秒) 我们将其写入配方中 - recipes.addShapeless(<minecraft:iron_pickaxe>.withTag({display: {Name: "Frog", Lore: ["This pick", "is added one second"]}})
- ,[<minecraft:iron_ingot>,<minecraft:iron_pickaxe>.anyDamage()]);
复制代码[attach]1049592[/attach]
这样,我们就可以写出带有NBT数据的物品了 同样,他也可以用于合成,这里我就不赘述了 但是请注意!这样做很容易导致合成冲突进而游戏崩溃!不要轻易将其用于合成! 如果要添加新的物品用于合成我们会在CS章介绍简单的方法。 同样,如果你要写特定耐久的物品用于合成也是很简单的,以下是几种语句 - 物品名称.onlyDamaged(A); /*只有A耐久的物品*/
- 物品名称.onlyDamageAtLeast(A); /*耐久大于等于A的物品*/
- 物品名称.onlyDamageAtMost(A); /*耐久小于等于A的物品*/
- 物品名称.onlyDamageBetween(A,B); /*耐久在A到B之间的物品*/
复制代码至于特定耐久的标记 NBT标签语句- 物品名称.withTag({display: {Name: "英文文本", Lore: ["英文文本"]}});
复制代码 当然,NBT数据是不止这些的,还有附魔属性- <minecraft:iron_pickaxe>.withTag({ench: [{lvl: 3 as short, id: 35 as short}], RepairCost: 2, StoredEnchantments: [{lvl: 3 as short, id: 35 as short}]})
复制代码
[img=320,1][/img] 对于NBT数据的自定义,各位可以在游戏里面设置好NBT数据之后Hand复制下来 或者是去Wiki自行查找,这里就不在赘述 Stage.4 反复利用? 或许各位在GT里面看见过锯子砍木头的合成 那么,怎么可以做到合成之后返还物品呢? 语句- .reuse() //完全返还
- recipes.addShapeless(<minecraft:stick> * 4, [<minecraft:iron_axe>.reuse(), <ore:plankWood>]);
复制代码 同样,原版合成蛋糕返还桶的设置也可以用MT来实现,不过有所不同- .transformReplace(物品名称) //返还特定物品替换原有物品
- recipes.addShapeless(<minecraft:stick> * 4, [<minecraft:iron_axe>.transformReplace(<minecraft:stone_axe>), <ore:plankWood>]);
复制代码 这样斧头砍完就会降级..不过似乎惩罚有些大了,或许消耗些耐久? - .transformDamage(损耗值)
- recipes.addShapeless(<minecraft:stick> * 4, [<minecraft:iron_axe>.transformDamage(3)
- , <ore:plankWood>]);
复制代码 这样每砍一个木头就会消耗铁斧头的3点耐久但是这样只能砍一次..因为砍完物品就会降低耐久,所以你可以加入通用符或者是.anyDamage() - recipes.addShapeless(<minecraft:stick> * 4, [<minecraft:iron_axe>.anyDamage().transformDamage(3)
- , <ore:plankWood>]);
复制代码
|