开启辅助访问     
收藏本站

站内搜索

搜索

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

[BE教程] 附加包教程:52.拼图结构(四)

 发表于 2024-11-2 10:28:10 来自手机|显示全部楼层|阅读模式 IP:天津
本帖最后由 Cat_Anchor 于 2024-11-3 18:59 编辑

前言
上期,我们讲解了拼图结构集。这期,我将讲解模板池。模板池是一个列表,其中包含拼图结构的基本单位——结构模板。
模板池
模板池用于将处理器与结构模板配对,并使用加权列表随机放置结构模板。
要生成(实际可交互的)拼图结构,我们必须定义至少一个模板池。
如果要定义一个模板池,要在行为包根目录的 worldgen 文件夹中新建一个 template_pools 文件夹,在其中新建文件并定义模板池。示例如下。
  1. {
  2.   "format_version": "1.21.20",
  3.   "minecraft:template_pool": {
  4.     "description": {
  5.       "identifier": "complementary:root_pool"
  6.     },
  7.     "elements": [
  8.       {
  9.         "element": {
  10.           "element_type": "minecraft:single_pool_element",
  11.           "location": "debug_hallway/rooms/start_room",
  12.           "processors": ""
  13.         },
  14.         "projection": "rigid",
  15.         "weight": 20
  16.       }
  17.     ],
  18.     "fallback": ""
  19.   }
  20. }
复制代码
以下是这些字段的描述。值的范围使用“区间”表示。
字段功能描述类型
identifier模板池的ID。被拼图结构使用,用于将处理器分配给结构模板。字符串
elements由若干对结构模板和处理器组成的列表。对象列表
element结构模板、放置结构时要使用的处理器以及决定元素被选中可能性的权重。对象
element_type元素的类型。目前只支持minecraft:single_pool_element。字符串
location结构文件的路径。此路径相对于行为包的structures文件夹,也就是“structures/填写的路径”。字符串
processors放置结构时要使用的处理器列表的标识符。字符串
projection可选,指定应如何相对于地形放置结构。支持以下值:["rigid","terrain_matching"]字符串
weight范围是1-200,可选,从模板池中选择元素的加权概率。例如,包含权重为1和3的两个结构的模板池将分别有25%和75%的机会被选中。整数
fallback可选,当池中没有元素可以成功放置时使用的后备模板池。字符串

参数解释
| 元素
拼图结构集中有若干个元素,每个元素都代表着一个结构模板和它的附加数据。因此,elements 字段是一个列表,其中每个对象中都有如下字段。
| element
这是这个元素的具体描述,其中有三个必需字段,指定了元素类型、结构文件的路径和要使用的处理器。
| element_type
这是这个元素的类型。目前只能填写 minecraft:single_pool_element,即用于单个结构模板池的结构模板。

| location
这是结构文件的路径。这个路径的起始点在行为包的structures文件夹下,比如填写"location": "debug_hallway/rooms/start_room",会识别到“structures/debug_hallway/rooms/start_room.mcstructure”。
注意,不要填写命名空间。不像 /structure 命令或者地物结构,在这里填写命名空间不会自动转换为文件夹。比如在地物结构中,complementary:test 就代表了“structures/complementary/test.mcstructure”,complementary 作为一个命名空间,所有相关文件都放在以 complementary 为名的文件夹下。这里不是这样的,就算填写了命名空间也不会转化为相应文件夹。
这里的文件可以是 .nbt 文件,不过目前只有原版使用了这种文件。.nbt 文件是一种压缩包,解压之后里面的结构文件和 .mcstructure 文件差不多。.nbt 文件可能是由 Java 版的文件转换而来,因为其中包含了 Java 版独有的方块实体字段。

| processors
放置结构时要使用的处理器的 ID。实际上应该说“处理器列表”,因为那个文件就是很多个处理器组成的列表。一个处理器只能执行很少的功能,比如把部分沙砾换成泥土。必须用多个处理器才能实现部分沙砾换成泥土,部分沙砾换成沙子的功能。有时候还要封装处理器,这样才能实现更复杂的功能。下期会开始讲解处理器,我从未写过这样的教程——它太复杂了,让我头晕,不过我会尽量写清楚。

| projection
这个字段是可选的,可以填写,可以忽略。它指定了应该如何相对于地形放置结构。需要填写 rigid 和 terrain_matching 二者之一。
rigid 表示无视地形,直接放置结构。这时结构不会适应地形,遇到陡峭地形可能会产生悬空。
terrain_matching 表示根据地形决定放置的高度。这个选项很适合村庄这样的拼图结构,因为村庄道路是依地形而建的,大部分情况下不希望它悬空(除非特殊的设计,比如树上村庄)。

| weight
指定这个结构模板有多大可能被放置。值越高,概率越大,范围是 1 和 200 之间的整数(含)。概率计算公式是:此结构的 weight 值 / 全部结构的 weight 值之和。例如,包含权重为 1 和 3 的两个结构模板的模板池将分别有 25% 和 75% 的概率被放置。
原版示例
以下是原版古迹废墟的一个模板池的定义文件,作为参考。我也会在下面附上解释。

这个文件定义了古迹废墟的 minecraft:trail_ruins/tower 模板池,模板池中有 5 个结构模板,它们分别有 20% 的概率被放置。每个结构模板对应的结构文件位置是不同的,但是它们都用了同一个处理器——minecraft:trail_ruins_houses_archaeology。这个处理器会用泥土随机替换 20% 的沙砾,用砂土替换 10% 的沙砾,然后用泥坯随机替换 10% 的泥砖,最后将 6 块沙砾替换为可疑的沙砾,并且设置战利品表为普通战利品;将 3 块沙砾替换为可疑的沙砾,并且设置战利品表为稀有战利品。
后记
这一期,我们了解了模板池,距离成功生成拼图结构只有一步之遥——处理器。上面我也说了处理器可以动态处理方块,把一种方块换为另一种,添加战利品表等等,所以这临门一脚可能会略显艰难。不过别担心,最基本的处理器很好写。


苦力怕论坛,感谢有您~
 发表于 2024-11-2 23:57:39 来自手机|显示全部楼层 IP:广西
感谢楼主教程
2#2024-11-2 23:57:39回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

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

QQ群

访问手机版

访问手机版

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

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-11-24 10:25

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

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