BE教程

附加包教程:14.方块(三)

Cat_A***Lv.4 高级会员 发表于 2023-1-14 · 最后回复 2023-1-15 IP:山西省 3,040 1
AI 速览2026-09-25 09:56 生成

附加包教程第14期:罗列方块事件方法及两种特殊结构

这是附加包教程系列第十四期,主题是方块事件。帖子先说明该功能已在1.21.20.23被移除、建议改用脚本,但为帮助理解旧版附加包仍保留内容。正文给出事件写法示例,并逐一罗列add_mob_effect、damage、decrement_stack、die、play_effect、play_sound、remove_mob_effect、run_command、set_block、set_block_at_pos、set_block_state、spawn_loot、swing、teleport、transform_item、trigger等方法,另介绍有序执行与随机执行两种特殊结构。适合学习旧版附加包方块机制的读者参考。

  • 所述方块事件功能已于1.21.20.23被移除,官方建议改用脚本实现
  • transform_item事件方法可能因未知原因失败
  • 内容为旧版附加包知识,主要用于学习与理解旧机制
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 Cat_Anchor 于 2024-8-4 19:33 编辑

注意:此页面所述功能已于1.21.20.23被移除,请使用脚本代替其功能。
然而,出于学习并理解旧版附加包的必要性,我保留了这个页面。


前言
上上上期,我们学习了所有我已知的方块组件。这一期,我们将继续学习方块相关知识。这次,我们要学习方块事件。事件存储在与组件同级的地方。下面是一个例子。
  1. {
  2.   "format_version": "1.19.40",
  3.   "minecraft:block": {
  4.     "description": {不要在意这些细节},
  5.     "components": {不要在意这些细节},
  6.     "events": { //在意这个就对了,这就是事件存放的地方。
  7.       "loot": { //“loot”是这个事件的名字。
  8.         "run_command": { //一个事件方法(意思是运行命令)
  9.           "command": [ //要运行的命令组
  10.             "loot spawn ~~~ loot "items/ancientcity_map" minecraft:air" //一个命令,注意命令里的引号前面的转义符\。
  11.           ]
  12.         },
  13.         "decrement_stack": {} //又一个事件方法(意思是将当前物品减少1个)
  14.       }
  15.     }
  16.   }
  17. }
复制代码
这其实和物品事件是大致相同的。
事件方法列表
add_mob_effect
增加状态效果。


damage
对指定的实体或对在指定的条件下的实体造成指定类型和程度的伤害。


decrement_stack
将物品减少1个。


die
摧毁指定的实体,或使指定方块直接消失而没有掉落物。


play_effect
播放粒子效果。


play_sound
播放声音。


remove_mob_effect
移除状态效果。


run_command
运行命令。


set_block
放置方块。


set_block_at_pos
在指定位置放置方块。


set_block_state
设置方块状态。


spawn_loot
根据战利品表生成掉落物。


swing
使实体摇晃。


teleport
在指定范围内传送实体。


transform_item
将物品转化为另一个物品。


trigger
触发另一个事件。




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


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


以上的两个事件可以互相套用,没什么限制,随便用。
  1. "sequence":[{
  2. "randomize":[
  3.   {
  4.     "weight": 2,
  5.     "事件方法a": ...
  6.   },
  7.   {
  8.     "weight": 3,
  9.     "事件方法b": ...
  10.   }
  11. ]
  12. }] //这一类用法没什么不行的。

  13. "sequence":[{
  14. "sequence":[{
  15.   "sequence":[{
  16.    "sequence":[{
  17.     "sequence":[{
  18.      "事件方法": ...
  19.     }]
  20.    }]
  21.   }]
  22. }]
  23. }] //这个也没什么不行的,你开心就好。
复制代码
这两个事件方法其实和我在物品那篇教程里的一样。
总结
这一期,我把所有方块事件方法罗列了一遍。下期我们学习方块状态和对应状态的赋值。


  • WZM*** 铁粒 +100 我要这铁粒有何用
回复 1 最早 最新 只看楼主
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则