Cat_Anchor 发表于 2023-1-11 07:35:46

附加包教程:8.物品(三)

本帖最后由 Cat_Anchor 于 2024-6-6 19:37 编辑

注意:此页面所述功能在现版本已被弃用,请使用脚本代替,此页面现仅作为旧版本参考。
此页面所述功能只能在1.20.30及以下的格式版本中使用。
然而,出于学习并理解旧版附加包的必要性,我保留了这个页面。




前言



上期,我们学习了所有我已知的物品组件。这一期,我们将继续学习物品相关知识。这次,我们要学习物品事件。事件存储在与组件同级的地方。下面是一个例子。
{
"format_version": "1.16.100",
"minecraft:item": {
    "description": {不要在意这些细节},
    "components": {不要在意这些细节},
    "events": { //在意这个就对了,这就是事件存放的地方。
      "loot": { //“loot”是这个事件的名字。
      "run_command": { //一个事件方法(意思是运行命令)
          "command": [ //要运行的命令组
            "loot spawn ~~~ loot \\"items/ancientcity_map\\" minecraft:air" //一个命令,注意转义符的用法。
          ]
      },
      "decrement_stack": {} //又一个事件方法(意思是将当前物品减少1个)
      }
    }
}
}



https://klpbbs.com/static/image/hrline/line5.png


事件方法列表



swing让玩家播放摇晃动画。
"swing": {}只需要这样就好了。不需要什么参数。

shoot射出实体。
"shoot": {
"projectile": "minecraft:snowball", //实体ID。要射出的实体必须要有minecraft:projectile组件,否则只会在原地生成实体。
"launch_power": 5, //射出去的力量。力量越大,射程越远。
"angle_offset": 20 //指定可能的角度偏移大小。(不确定)
}

damage伤害实体或磨损物品。
"damage": {
"type": "magic", //造成的伤害类型。
"target": "other", //伤害的目标。如果是self,那么就是磨损自身的耐久值。
"amount": 4 //伤害的生命值。如果目标是自身,那么是磨损的耐久值。
}

decrement_stack减少1个物品。
"decrement_stack":{
"ignore_game_mode": false //设置为false,在创造模式下就没有作用。设置为true,就无论什么游戏模式都会起作用。
}

transform_item把物品转化为另一物品。
"transform_item": {
    "transform": "minecraft:apple" //要转化为的物品ID。
}

teleport传送目标。
"teleport": {
"target": "holder", //传送的目标。一般是holder(物品持有者)。
"max_range": //填写长、宽、高。传送时以传送目标为中心,按照这个数组指定的范围画一个立方体,在立方体内随机传送1次。
}

add_mob_effect给目标增加状态效果。
"add_mob_effect": {
"effect": "poison", //效果ID
"target": "holder", //目标。一般是holder(物品持有者)。
"duration": 8, //持续时间,填写正整数,单位是秒。
"amplifier": 3 //效果的倍率。这个数字-1就是效果的等级。(如倍率是2,等级是1。倍率是6,等级是5。)
}

remove_mob_effect给目标移除状态效果。
"remove_mob_effect": {
"effect": "poison", //要移除的效果ID。
"target": "holder" //目标。一般是holder(物品持有者)。
}

run_command运行命令。
"run_command": {
"command": [ //要运行的命令或命令组。
    "say test", //命令组中的一条命令。
    "say testtest" //命令组中的又一条命令。
],
"target": "other" //目标。
}

trigger触发另一个事件。
"trigger": {
"event": "mine_the_end" //要触发的事件名称。
}

以上就是所有可用的物品事件方法了。还有两个特殊结构,这两个特殊结构可以算作特殊的事件方法,我在下面列出。
下面这个用于有序执行事件方法。"sequence": [
{
    "condition": "表达式a" //Molang表达式。如果输出true,那么就会执行事件方法a。输出false则不会。
    "target": "holder" //目标。
    "事件方法a": ...
},
{
    "condition": "表达式b" //又一个Molang表达式。如果输出true,那么就会执行事件方法b。输出false则不会。
    "target": "holder" //目标。
    "事件方法b": ...
}
] //这一大堆东西的效果是:游戏将先评估表达式a,如果输出true,那么执行事件方法a,执行完之后进行下一个。如果输出false,那么进行下一个。然后评估表达式b,如果输出true,那么执行事件方法b,执行完之后进行下一个。如果输出false,那么进行下一个。以此类推,直到执行完毕。

下面这个用于随机执行事件方法。"randomize":[
{
    "weight": 1 //执行这个事件的权重。
    "事件方法c": ...
},
{
    "weight": 3 //执行这个事件的权重。
    "事件方法d": ...
}
] //这一大堆东西的效果是:游戏有1/(1+3)的概率(说人话就是4分之1)执行事件方法c,有3/(1+3)的概率(说人话就是4分之3)执行事件方法d。某个对象的概率的计算公式是这个对象的weight值除以所有对象的weight值之和。


以上的两个事件可以互相套用,没什么限制,随便用。"sequence":[{"randomize":[{"weight":2,"事件方法": ...},{"weight":3,"事件方法": ...}]}] //这一类用法没什么不行的。

"sequence":[{"sequence":[{"sequence":[{"sequence":[{"sequence":[{"事件方法": ...}]}]}]}]}] //这个也没什么不行的,你开心就好。


https://klpbbs.com/static/image/hrline/line1.png


总结



这一期,我把所有物品事件方法罗列了一遍。下一期,我们就开始实战演练!如果你想要模板包告诉你这两期的知识到底怎么用,去下期就对了!





第七期 第八期 第九期

CraftBuildLife 发表于 2023-1-11 10:03:48

感谢分享
页: [1]
查看完整版本: 附加包教程:8.物品(三)