开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] 附加包教程:15.方块(四)

 发表于 2023-1-15 10:06:50|显示全部楼层|阅读模式 IP:山西省
本帖最后由 Cat_Anchor 于 2024-6-6 19:50 编辑

前言

上期,我们学习了所有我已知的方块事件方法。但我们还没有学习方块文档的高级写法——定义方块状态和方块状态决定的组件(方块排列)。这期,我们就来学习它们。
基本结构

它们分别使用description下states和与description同级的permutations决定。请看代码示例。

  1. {
  2.   "format_version": "1.21.0",
  3.   "minecraft:block": {
  4.     "description": {
  5.       "identifier": "test_pack:test_block",
  6.       "states": {
  7.         "test_pack:state_a": [ //这里的test_pack:state_a就是状态名称。状态有3种,这是第一种,布尔值,就是单纯的真或假。
  8.           true, //真
  9.           false //假
  10.         ],
  11.         "test_pack:state_b": [ //这是第二种,指定文本。
  12.           "option_a", //选项1
  13.           "option_b", //选项2
  14.           "option_c" //选项3
  15.         ],
  16.         "test_pack:state_c": [ //这是第三种,指定数字。这时数字要介于0-15之间。
  17.           0,
  18.           1,
  19.           2,
  20.           3
  21.         ]
  22.       }
  23.     },
  24.     "components": {不要在意这些细节},
  25.     "events": {不要在意这些细节},
  26.     "permutations": [ //在意这里就对了!这里用于存放在哪个状态下方块该拥有哪个组件。
  27.       { //一个项目
  28.         "condition": "q.block_state('test_pack:state_a') == true", //条件,使用了Molang表达式,这个的意思是查询方块状态test_pack:state_a是否为真,如果是,就应用下面的这些组件来代替原本的组件。
  29.         "components": {...} //这里写在这个情形下的组件,用来代替原本的组件。如果原本有一个组件,这里有一个相同的组件,则后者覆盖前者。如果这里有一个原本没有的组件,会直接加上这个组件。如果原本有一个这里没有的组件,原本的组件继续生效。简而言之,这里只能替换和增加组件,不能删除原本的组件。
  30.       },
  31.       { //又一个项目
  32.         "condition": "q.block_state('test_pack:state_b') == 'option_a'", //意思是,查询方块状态test_pack:state_b是否是“option_a”,如果是,就应用下面的这些组件来代替原本的组件。
  33.         "components": {...}
  34.       },
  35.       { //又是一个项目
  36.         "condition": "q.block_state('test_pack:state_c') == 0", //意思是,查询方块状态test_pack:state_c是否为0,如果是,就应用下面的这些组件来代替原本的组件。
  37.         "components": {...}
  38.       }
  39.     ]
  40.   }
  41. }
复制代码

以上就是状态和状态决定组件的用法了。
高级内容

states和permutations只是固定的用法,这一段我们来说说Molang表达式。
所谓Molang,就是一种简单的基于表达式的语言,旨在运行时快速、数据驱动地计算值,并与游戏中的值和系统直接相连。它的重点是使像动画这样的低级系统支持内部和外部创作者的灵活的数据驱动行为,同时保持高性能。抄官网ing...
嗯,既然官网都说了Molang“是一种简单的基于表达式的语言”了,其实它还真的不怎么难。我们使用Molang时,大部分情况都是用“query.吧啦吧啦(吧啦吧啦a,吧啦吧啦b)”这种形式的查询函数,至于剩下的,那就是“variable.吧啦吧啦”在地物和实体动画文档里比较常见,还有“math.吧啦吧啦(吧啦吧啦a,吧啦吧啦b)”在动画文档里比较常见,“context.吧啦吧啦”在物品文档和动画文档里有点用,其他的似乎就没啥了。
其实重点只需要掌握a==b是a等于b,a!=b是a不等于b,还有什么+-*/这类的基础运算符就好了。然后就是疯狂翻官方文档。那里有一个超级长的查询函数的列表,从查询时间和天数,到查询物品耐久度,甚至是查询月相都有对应的函数,主要看看那里就好。不过那全是英文,还得找个好用的翻译器,有点不方便。
总结

这一期,我们学习了方块状态和它衍生出来的控制方块组件的功能。关于方块的学习即将结束,至于方块的实战运用,与物品大同小异,都是拼命地复制粘贴那些状态、组件和事件,我就不多说了。
从一开始以来,我们学习了配方、函数、功能域、迷雾、物品、方块、模型和战利品表,这么多内容。是时候了,我们下期就来学习子包。


苦力怕论坛,感谢有您~
 发表于 2023-1-15 10:10:12 来自手机|显示全部楼层 IP:福建省
感谢分享
2#2023-1-15 10:10:12回复收起回复
苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-10-20 11:16

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号