UID196429性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2021-12-18最后登录1970-1-1
| 本帖最后由 782 于 2022-6-2 17:05 编辑
物品(八) 盔甲高级 一、前言
我们之前学习了盔甲,它们可以自定义各种功能,但不能添加效果、粒子。
然而,使用动画、MoLang和物品标签,这很容易做到!
今天,我们就来学习如何在装备盔甲的时候执行命令!
请记住,这需要修改玩家的行为包文件,这是许多附加包的常见问题;
因此,如果这样做,附加包可能与其他人做的不兼容。
本教程假定读者已经制作了第十三期(物品:盔甲基础)的全套盔甲。 提示:使用此附加包时,必须打开“假日创造者功能”实验性玩法!
二、动画文件
第一步是创建一个动画文件,这是一个可以在某些关键帧上运行命令或事件的文件。
我们可以首先使用以下内容作为示例:
路径:行为包/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命令可以,还有其他命令也可以生效哦!
三、物品行为包文件
为了实际检查我们的物品是否配备齐全,我们可以使用Molang查询来检查物品标签。
在我们物品的行为文件中,我们必须在“components”中添加标签。
例如,如果我们想添加demo:my_tier标签,我们会添加“tag:demo:my_tier”组件:
就这样,现在可以给物品分配的任何标签!
如果你愿意,还可以为物品添加更多标签。
四、玩家行为文件
我们需要修改玩家的行为包文件来运行动画。
没有原版玩家行为包文件的可以在本期教程的底部下载。
首先,我们需要为我们的动画设置一个简短的名称;
然后,将动画添加到描述中,并再次设置一个简短的名称,例如:
- {
- "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表达式以匹配物品标签,使用其他方法或添加其他方法。
五、拓展
我们还可以拓展我们的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')"
- }
- ]
- }
- }
复制代码
六、本期文件下载
原版player.json文件:
player.json(5.07 KB, 下载次数: 28)
预告:下一期会教大家物品的事件函数
附加包教程系列导航 上一期 下一期
|
评分查看全部评分
|