Minecraft(我的世界)中文论坛

标题: [20w20a]来看看最新的进度触发器 [打印本页]

作者: Chelover_C60    时间: 2020-5-14 14:41
标题: [20w20a]来看看最新的进度触发器
本帖最后由 Chelover_C60 于 2020-5-15 12:05 编辑

20w20a新增了3个触发器,但对于这3个触发器的具体用法及效果,wiki上还没有讲,官网上讲的也比较笼统。
于是我翻出来了20w20a的原版进度,把这3个进度触发器都找出来了,并尝试研究了一下语法和具体效果,并决定来水一帖



minecraft:thrown_item_picked_up_by_entity

可以根据字面意思理解,玩家扔出的物品被实体捡起

可用参数:
其中player和entity参数可以使用战利品表条件,格式同战利品表的conditions参数(源自20w18a的更新),当然也可以使用实体共通标签。item使用物品共通标签

实例分析:
以下为原版进度 Oh Shiny 的criteria部分
  1. "criteria": {
  2.     "distract_piglin": {
  3.       "trigger": "minecraft:thrown_item_picked_up_by_entity",
  4.       "conditions": {
  5.         "player": [
  6.           {
  7.             "condition": "minecraft:inverted",
  8.             "term": {
  9.               "condition": "minecraft:entity_properties",
  10.               "predicate": {
  11.                 "equipment": {
  12.                   "head": {
  13.                     "item": "minecraft:golden_helmet"
  14.                   }
  15.                 }
  16.               },
  17.               "entity": "this"
  18.             }
  19.           },
  20.           {
  21.             "condition": "minecraft:inverted",
  22.             "term": {
  23.               "condition": "minecraft:entity_properties",
  24.               "predicate": {
  25.                 "equipment": {
  26.                   "chest": {
  27.                     "item": "minecraft:golden_chestplate"
  28.                   }
  29.                 }
  30.               },
  31.               "entity": "this"
  32.             }
  33.           },
  34.           {
  35.             "condition": "minecraft:inverted",
  36.             "term": {
  37.               "condition": "minecraft:entity_properties",
  38.               "predicate": {
  39.                 "equipment": {
  40.                   "legs": {
  41.                     "item": "minecraft:golden_leggings"
  42.                   }
  43.                 }
  44.               },
  45.               "entity": "this"
  46.             }
  47.           },
  48.           {
  49.             "condition": "minecraft:inverted",
  50.             "term": {
  51.               "condition": "minecraft:entity_properties",
  52.               "predicate": {
  53.                 "equipment": {
  54.                   "feet": {
  55.                     "item": "minecraft:golden_boots"
  56.                   }
  57.                 }
  58.               },
  59.               "entity": "this"
  60.             }
  61.           }
  62.         ],
  63.         "item": {
  64.           "tag": "minecraft:piglin_loved"
  65.         },
  66.         "entity": [
  67.           {
  68.             "condition": "minecraft:entity_properties",
  69.             "predicate": {
  70.               "type": "minecraft:piglin"
  71.             },
  72.             "entity": "this"
  73.           }
  74.         ]
  75.       }
  76.     }
  77.   }
复制代码
呜呼,好长
这个进度首先对玩家匹配了4个战利品表条件,即不穿着任意金质装备,然后对物品匹配了一个参数,即标签“minecraft:piglin_loved”下的任意物品,最后对拾起物品的实体匹配了一个战利品表条件,即实体类型为猪灵。

应用:
我觉得是时候让某个古老的成就回归了
  1. {
  2.     "display": {
  3.         "title": "给你钻石",
  4.         "description": "",
  5.         "frame": "task",
  6.         "icon": {
  7.             "item": "minecraft:diamond"
  8.         }
  9.     },
  10.     "criteria": {
  11.         "test": {
  12.             "trigger": "minecraft:thrown_item_picked_up_by_entity",
  13.             "conditions": {
  14.                 "item": {
  15.                     "item": "minecraft:diamond"
  16.                 }
  17.             }
  18.         }
  19.     }
  20. }
复制代码
该进度仅要求被捡起的物品是钻石,对物品的丢出玩家和拾起玩家没有做任何限制。但实际上,自己捡起自己丢出的钻石是不会触发进度的。

尽管如此,这个进度触发器的实际用处可能不大。



minecraft:player_generates_container_loot

字面意思理解,当玩家激活容器的战利品表时触发。
好像不是很好理解?
emmmm
部分容器在打开之前,是没有东西的,只有一个用于生成物品的战利品表。打开这个容器后,这个容器才会根据内含的战利品表来生成物品。简单的说,有时候使用旁观者模式尝试打开箱子时,会提示战利品未生成,这个时候切换成其他模式,就能正常打开了,并可以看到里面的物品,就是这个道理。

可用参数:
player参数同上,loot_table参数则需指定一个战利品表

实例分析:
以下为原版进度 War Pigs 的criteria部分
  1.   "criteria": {
  2.     "loot_bastion_other": {
  3.       "trigger": "minecraft:player_generates_container_loot",
  4.       "conditions": {
  5.         "loot_table": "minecraft:chests/bastion_other"
  6.       }
  7.     },
  8.     "loot_bastion_treasure": {
  9.       "trigger": "minecraft:player_generates_container_loot",
  10.       "conditions": {
  11.         "loot_table": "minecraft:chests/bastion_treasure"
  12.       }
  13.     },
  14.     "loot_bastion_hoglin_stable": {
  15.       "trigger": "minecraft:player_generates_container_loot",
  16.       "conditions": {
  17.         "loot_table": "minecraft:chests/bastion_hoglin_stable"
  18.       }
  19.     },
  20.     "loot_bastion_bridge": {
  21.       "trigger": "minecraft:player_generates_container_loot",
  22.       "conditions": {
  23.         "loot_table": "minecraft:chests/bastion_bridge"
  24.       }
  25.     }
  26.   }
复制代码
这个进度指定了4个独立的minecraft:player_generates_container_loot触发器,分别对应了4中不同的宝箱。后续的requirements部分(未列举)则指定了这4个触发器对这个进度的逻辑为“或”,因此这4个触发器只需要触发其中一个即可获取进度。

应用:
哇塞,一只野生的箱子!这绝对不是陷阱箱!快打开看看!

???

首先,放置一个箱子,指定其战利品表为“minecraft:empty”
/setblock ~ ~ ~ chest{LootTable:"minecraft:empty"}
写一个进度,检测玩家激活“minecraft:empty”战利品表,并奖励function
  1. {
  2.     "display": {
  3.         "title": "你中计了!",
  4.         "description": "",
  5.         "frame": "task",
  6.         "icon": {
  7.             "item": "minecraft:chest"
  8.         }
  9.     },
  10.     "criteria": {
  11.         "test": {
  12.             "trigger": "minecraft:player_generates_container_loot",
  13.             "conditions": {
  14.                 "loot_table": "minecraft:empty"
  15.             }
  16.         }
  17.     },
  18.     "rewards": {
  19.         "function": "test:trap"
  20.     }
  21. }
复制代码
奖励的function过于简单,不再展示。实际上我感觉这个战利品表也有点过于简单了。



minecraft:item_used_on_block

当玩家手持指定物品右键方块并与之产生有效互动时触发。
这是我经过测试后,对此给出的解释。详细点说,就是:
首先,玩家必须手持指定物品右键方块。然后,玩家与方块之间产生了有效互动。
那么,以下几种情况就可以触发:
而以下几种情况不能触发需要注意的是,放置方块类互动,只要放置成功即算互动成功并触发进度,不要求手持方块必须放在指定方块上。即你可以潜行并在一个蛋糕侧面右击来将按钮放置在地上,但仍能触发对蛋糕使用按钮的进度。
不过有一种情况,即手持物品时右键红石矿石时我没有触发成功,不知为何。

可用参数:

player参数同上,item参数同上上,而location参数格式与进度触发器“minecraft:location”格式相同。
需要注意的是,如果这个互动修改了物品的信息,如使用玻璃瓶从蜂箱中取出蜂蜜,触发器里需要指定的物品信息为互动前的物品,如此处应使用玻璃瓶而不是蜂蜜。而如果互动修改了方块信息,如使用斧头给原木剥皮,在触发器里需要指定的方块信息需为互动后的方块信息,如此处应指定剥皮后的原木而不是未剥皮的原木。

实例分析:
以下为原版进度 与蜂共舞 的criteria部分
  1.   "criteria": {
  2.     "safely_harvest_honey": {
  3.       "trigger": "minecraft:item_used_on_block",
  4.       "conditions": {
  5.         "location": {
  6.           "smokey": true,
  7.           "block": {
  8.             "block": "minecraft:beehive"
  9.           }
  10.         },
  11.         "item": {
  12.           "item": "minecraft:glass_bottle"
  13.         }
  14.       }
  15.     }
  16.   }
复制代码
此处匹配玩家手持物品为玻璃瓶,指定方块所在坐标用有的方块为蜂箱,且下方有点燃的营火(注:smokey为20w20a新增的location参数,用于检测方块下方是否有点燃的营火)。

应用:
估计这会是以后很常用的一个触发器,因为用来检测一些东西很方便。如检测玩家使用木斧给橡木剥皮
  1. {
  2.     "display": {
  3.         "title": "人不要脸,树不要皮",
  4.         "description": "",
  5.         "frame": "task",
  6.         "icon": {
  7.             "item": "minecraft:stripped_oak_log"
  8.         }
  9.     },
  10.     "criteria": {
  11.         "test": {
  12.             "trigger": "minecraft:item_used_on_block",
  13.             "conditions": {
  14.                 "item": {
  15.                     "item": "minecraft:wooden_axe"
  16.                 },
  17.                 "location": {
  18.                     "block": {
  19.                         "block": "minecraft:stripped_oak_log"
  20.                     }
  21.                 }
  22.             }
  23.         }
  24.     }
  25. }
复制代码
由于互动改变了橡木原木的id,因此需要在location里填写改变后的方块id,即被剥皮的橡木。玩家手持物品为木斧。
当然,可以给所有剥皮原木写一个标签,然后给所有的斧头写一个标签,即可检测使用任意斧头给任意原木剥皮。

作者: ChapterII    时间: 2020-5-15 10:52
给你钻石……老玩家了……
作者: 御龙九秋    时间: 2020-5-15 15:40
这几个触发器对我来说是十分有用了,包括开箱子啊什么的(x)

作者: majingyuan2000    时间: 2020-5-28 00:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 巴黎城下的少年    时间: 2020-5-31 13:16
给你钻石.....这么神奇的吗





欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) Powered by Discuz! X3.5