Cat_Anchor 发表于 2023-1-9 13:25:39

附加包教程:4.功能域

本帖最后由 Cat_Anchor 于 2024-6-6 20:04 编辑

注意:此页面所述功能和/volumearea命令在现版本已被弃用,此页面现仅作为旧版本参考。
此页面所述功能只能在1.21.0及以下的游戏中使用。
然而,出于学习并理解旧版附加包的必要性,我保留了这个页面。



前言


上期,我们成功向附加包中添加了函数。这一期,我们将学习功能域相关内容。注意,功能域属于实验性内容中的实验性内容,从未正式发布,测试了四个大版本就移除了。需要1.18到1.21的版本。



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


准备


打开行为包根目录,打开volumes文件夹。不过,在你迫不及待地新建文件之前,你一定很疑惑:什么是功能域?我怎么从来没听说过??如果你想知道答案,打开折叠块。你也可以跳过,反正我一会儿还要放出使用方法。
这个问题,只有玩命令的玩家才可能会回答,而且回答的不一定对。如果你经常玩命令,你应该会注意到有个命令叫/volumearea。这个命令的解释大概是“列出、添加或删除卷”,这一定让你大惑不解。“卷”?卷是什么?你带着这个疑问,看到了它的语法大致与/tickingarea(常加载区域)相同,于是你猜测这个“卷”就像常加载区域一样,是一种区域。没错,所谓“卷”,就是功能域。
在你尝试输入/volumearea然后招惹来一堆错误提示时,你一定不会想到这东西居然需要附加包的支持。换句话说,还没有已知的原版的功能域。功能域,只能通过附加包添加,这就是我把它放在函数后面这一期的原因。

我说了这么多,只是因为我想让你在自然情况里了解功能域,你会有兴趣的。
现在我来回答到底什么是功能域。一个实体进入或离开特定区域后触发了事件,或者在区域内有迷雾效果,这个特定区域就是功能域。比如,走进房子,系统提示:“已进入房子”;走出房子,系统提示:“已离开房子”,房子在一个特定的区域里,这个区域就是功能域。

不过现在,连/volumearea命令都被移除了,功能域这个特性算是几乎没人知道的东西了,它本身也并不实用。

好了,在volumes文件夹里新建文件吧,文件名称见后面的解释。



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


第一个功能域


现在就可以开始了。在你新建的文件里写以下代码。
{
"format_version": "1.18.0",
"minecraft:volume": {
    "description": {
      "identifier": "前面写一个附加包名称,加上英文冒号,后面写具体的这个文档的英文名(例如test_pack:test_volume),这个叫命名空间ID,要牢记"
    },
    "components": {
      "minecraft:bounds": {
      "min": [
          -512,
          -64,
          -512
      ],
      "max": [
          512,
          320,
          512
      ] //这两个数组可能是指定这个功能域的范围,又或者是限制放置的坐标,目前不清楚它的功能
      },
      "minecraft:fog": { //给功能域附加一个迷雾,进入后显示这个迷雾
      "fog_identifier": "minecraft:fog_hell", //下界荒地的迷雾ID
      "priority": 0 //迷雾的优先级,多个功能域重叠时使用。数字越小,优先级越大。
      },
      "minecraft:on_actor_enter": { //指定当实体进入时触发的事件
      "on_enter": [
          {
            "condition": "1", //指定一个Molang表达式,返回true时才触发这个事件
            "event": "enter", //触发的事件
            "target": "other" //other意思是进入功能域的实体,self意思是功能域本身
          }
      ]
      },
      "minecraft:on_actor_leave": { //指定当实体离开时触发的事件
      "on_leave": [
          {
            "condition": "1", //指定一个Molang表达式,返回true时才触发这个事件
            "event": "leave", //触发的事件
            "target": "other" //other意思是离开功能域的实体,self意思是功能域本身
          }
      ]
      }
    },
    "events": {
      "enter": { //进入时触发的事件
      "run_command": {
          "command": [
            "title @s 进入测试功能域" //要运行的命令
          ]
      }
      },
      "leave": { //离开时触发的事件
      "run_command": {
          "command": [
            "title @s 离开测试功能域"
          ]
      }
      }
    }
}
}
进入世界,按照命令提示创建你自己的功能域吧!如果一切正确,你会惊奇地发现/volumearea命令成功了。
命令如下:https://pic.imgdb.cn/item/63ba76c1be43e0d30ec705af.jpg

成功的提示:https://pic.imgdb.cn/item/63ba76cebe43e0d30ec716bf.jpg

目前的功能域可以创建并储存在世界里,进入时会触发迷雾,离开时迷雾会消失,这是正常的;但是经实验,那两个事件的触发器似乎没有实际功能,不能触发对应事件。
退出重进带功能域的世界时会通过内容日志提示“功能域错误:找不到功能域索引,将创建没有任何附加组件的功能域”,但功能域还会存在,迷雾也会继续工作。尚不清楚这条内容日志的意义。https://pic.imgdb.cn/item/65756e20c458853aef6c1f71.jpg(一个功能域的内部数据图,功能域的组件信息似乎没有被存储)
1.20.60.21为延迟渲染添加了体积雾等新功能,似乎与功能域有关。



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


总结


好了,现在,你应该会如何添加一个功能域了,也明白什么是功能域了。功能域的内容单一,热度较低,目前由于特性(见折叠块)实际用途不多,一期就可以说完。下期,我们就要学习如何添加迷雾了。

本期文件下载:





第三期 第四期 第五期

不道 发表于 2023-1-9 13:45:58

addon教程本来就冷门,做addon的用功能域这种东西的更少,竟然有人会做这么冷门的教程咩,离谱
页: [1]
查看完整版本: 附加包教程:4.功能域