附加包教程第十五期——物品:盔甲高级
本帖最后由 782 于 2022-6-2 17:05 编辑物品(八)
盔甲高级
一、前言
我们之前学习了盔甲,它们可以自定义各种功能,但不能添加效果、粒子。
然而,使用动画、MoLang和物品标签,这很容易做到!
今天,我们就来学习如何在装备盔甲的时候执行命令!
请记住,这需要修改玩家的行为包文件,这是许多附加包的常见问题;
因此,如果这样做,附加包可能与其他人做的不兼容。
本教程假定读者已经制作了第十三期(物品:盔甲基础)的全套盔甲。
提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
static/image/hrline/line4.png
二、动画文件
第一步是创建一个动画文件,这是一个可以在某些关键帧上运行命令或事件的文件。
我们可以首先使用以下内容作为示例:
路径:行为包/animations/player.json
{
"format_version": "1.10.0",
"animations": {
"animation.player.my_armor": {
"timeline": {
"0.0": []
},
"animation_length": 0.05,
"loop": true
}
}
}
让我们来看看这个示例中的内容以及所有功能:
“animation.player.my_armor”是我们动画的标识符。
可以将其更改为其他内容,例如 “animation.player.phantom_armor”。
“timeline”用于在给定的关键帧上运行命令和事件。
“animation_length”是动画持续的时间,填写浮点数(小数)。我们将使用0.05秒,因为那是游戏刻的时长。
“loop”非常通俗易懂:将其设置为true会使动画循环,填写布尔值。
我们可以将命令添加到“timeline”中的0.0数组中以执行,例如/effect命令:
{
"0.0": [
"/effect @s speed 1 0"
]
}
当然了,不只是/effect命令可以,还有其他命令也可以生效哦!
static/image/hrline/line3.png
三、物品行为包文件
为了实际检查我们的物品是否配备齐全,我们可以使用Molang查询来检查物品标签。
在我们物品的行为文件中,我们必须在“components”中添加标签。
例如,如果我们想添加demo:my_tier标签,我们会添加“tag:demo:my_tier”组件:
"tag:demo:my_tier": {}
就这样,现在可以给物品分配的任何标签!
如果你愿意,还可以为物品添加更多标签。
static/image/hrline/line9.png
四、玩家行为文件
我们需要修改玩家的行为包文件来运行动画。
没有原版玩家行为包文件的可以在本期教程的底部下载。
首先,我们需要为我们的动画设置一个简短的名称;
然后,将动画添加到描述中,并再次设置一个简短的名称,例如:
{
"identifier": "minecraft:player",
"is_spawnable": false,
"is_summonable": false,
"is_experimental": false,
"animations": {
"my_armor": "animation.player.my_armor"
}
}
将“scripts”添加到“description”中,并设置要运行的Molang。
要检查物品,我们可以使用以下Molang之一:
1. query.is_item_name_any:在指定槽位中检查给定的物品标识符。
此示例将在主手检查“demo:totem_of_retreat”:
query.is_item_name_any('slot.weapon.mainhand',0,'demo:totem_of_retreat')
2. query.equipped_item_any_tag:检查指定槽位中至少一个的指定的物品标签。
此示例将检查在头盔槽位具有“demo:emerald_tier”或“demo:phantom_tier”物品标签的物品:
query.equipped_item_any_tag('slot.armor.head','demo:emerald_tier','demo:phantom_tier')
3. query.equipped_item_all_tags:检查指定槽位中所有的指定的物品的标签。
此示例将检查在头盔槽位同时具有“demo:emerald_tier”和“demo:phantom_tier”物品标签的物品:
query.equipped_item_all_tags('slot.armor.head','demo:phantom_tier','demo:emerald_tier')
让我们来看看使用query.equipped_item_any_tag的示例:
{
"identifier": "minecraft:player",
"is_spawnable": false,
"is_summonable": false,
"is_experimental": false,
"animations": {
"my_armor": "animation.player.my_armor"
},
"scripts": {
"animate": [
{
"my_armor": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier')"
}
]
}
}
如果头盔槽位中配备了具有标签“demo:my_tier”的物品,此示例将运行带有“my_armor”短名称的动画。
可以更改Molang表达式以匹配物品标签,使用其他方法或添加其他方法。
static/image/hrline/line2.png
五、拓展
我们还可以拓展我们的Molang,比如说:
多个条件
如果想在装备多个盔甲时运行命令,我们可以扩展我们的Molang:
"animate": [
{
"my_armor": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier') && query.equipped_item_any_tag('slot.armor.chest','demo:my_tier') && query.equipped_item_any_tag('slot.armor.legs','demo:my_tier') && query.equipped_item_any_tag('slot.armor.feet','demo:my_tier')"
}
]
此示例将检查所有四个装甲槽位中的具有“demo:my_tier”标签的物品,如果它们都存在了,则运行动画。
这里的“&&”意为“和,与,并(and)”。
根据这个语法,我们还可以制作以下示例:
如果我们想让盔甲仅在生命值较低时运行动画,我们可以在Molang中添加:
"animate": [
{
"my_armor": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier') && query.health <= 5"
}
]
此示例将以5或更少的生命值播放动画,允许玩家在危险时快速逃跑。
我们也可以将此应用于上面的示例,变成更长的Molang:
{
"animate": [
{
"my_armor": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier') && query.equipped_item_any_tag('slot.armor.chest','demo:my_tier') && query.equipped_item_any_tag('slot.armor.legs','demo:my_tier') && query.equipped_item_any_tag('slot.armor.feet','demo:my_tier') && query.health <= 5"
}
]
}
多个效果
如果你想要更多具有独特效果的物品,不要担心,因为这很容易做到。
可以创建一个新的动画文件,也可以添加到之前文件中,例如:
{
"format_version": "1.10.0",
"animations": {
"animation.player.my_armor_1": {
"timeline": {
"0.0": ["..."]
},
"animation_length": 0.05,
"loop": true
},
"animation.player.my_armor_2": {
"timeline": {
"0.0": ["..."]
},
"animation_length": 0.05,
"loop": true
}
}
}
这需要添加到player.json(description组件)中:
{
"identifier": "minecraft:player",
"is_spawnable": false,
"is_summonable": false,
"is_experimental": false,
"animations": {
"my_armor_1": "animation.player.my_armor_1",
"my_armor_2": "animation.player.my_armor_2"
},
"scripts": {
"animate": [
{
"my_armor_1": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier_1')"
},
{
"my_armor_2": "query.equipped_item_any_tag('slot.armor.head','demo:my_tier_2')"
}
]
}
}
static/image/hrline/4.gif
六、本期文件下载
原版player.json文件:
static/image/hrline/5.gif
预告:下一期会教大家物品的事件函数
大家的打赏是对楼主最好的鼓励!
附加包教程系列导航
上一期下一期
@lpyqzMinecraft
我又来更新了 大力支持一下 666666666666666 6666666666
页: [1]