文档托管解决方案

8.物品 (三)

附加包教程:物品(三)

::: danger 弃用警告
此页面所述功能在现版本已被弃用.

仅适用于 1.21.0 及以下版本

保留此页面作为旧版本参考
:::

前言

上期,我们学习了所有我已知的物品组件。这一期,我们将继续学习物品相关知识。这次,我们要学习物品事件。事件存储在与组件同级的地方。下面是一个例子。

{
  "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个)
      }
    }
  }
}

事件方法列表

  • 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

    1 把物品转化为另一物品

"transform_item": {
    "transform": "minecraft:apple" //要转化为的物品ID。
}
  • teleport

    传送目标

"teleport": {
  "target": "holder", //传送的目标。一般是holder(物品持有者)。
  "max_range": [8, 8, 8] //填写长、宽、高。传送时以传送目标为中心,按照这个数组指定的范围画一个立方体,在立方体内随机传送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":[{"事件方法": ...}]}]}]}]}] //这个也没什么不行的,你开心就好。

总结

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

上一篇
下一篇
目录导航

更多文档