Cat_Anchor 发表于 2024-10-2 22:51:54

拼图方块的消息,自定义拼图结构的可能

我回老家了,一直被催睡觉,于是不能写太多。今天我发现了一些模式文档,好像是用来定义拼图结构的,也就是说他们可能要添加用附加包自定义拼图结构的功能,到时候就可以自定义村庄之类的了。时间紧迫,我处理出来的文档又长,所以先放在下面,大家可以看看。

模板池
{
"format_version": "1.21.40",
"minecraft:template_pool": { //用于将方块规则与结构模板配对,并使用加权列表随机放置结构模板。
    "description": {
      "identifier": "" //模板池的ID。被拼图结构使用,用于将处理器分配给结构模板。
    },
    "elements": [ //由若干对结构模板和处理器列表组成的列表。
      {
      "element": { //结构模板的分组、放置结构时要使用的处理器列表以及决定元素被选中可能性的权重。
          "element_type": "minecraft:single_pool_element", //元素的类型。目前只支持minecraft:single_pool_element。
          "location": "debug_hallway/root", //结构文件的路径。此路径相对于行为包的结构文件夹,也就是sturctures/填写的路径。
          "processors": "" //放置结构时要使用的处理器列表的标识符。
      },
      "projection": "rigid", //可选,指定应如何相对于地形放置结构。支持以下值:["rigid","terrain_matching"]
      "weight": 20 //整数,范围是1-200,可选,从模板池中选择元素的加权概率。例如,包含权重为1和3的两个结构的模板池将分别有25%和75%的机会被选中。
      }
    ],
    "fallback": "" //可选,当池中没有元素可以成功放置时使用的后备模板池。
}
}

拼图结构
{
"format_version": "1.21.40",
"minecraft:jigsaw": { //代表一组结构模板,它们组成了一个更大的结构。世界生成时放置拼图结构。
    "description": {
      "identifier": "complementary:debug_hallway" //拼图结构的ID
    },
    "heightmap_projection": "world_surface", //用于计算相对起始高度的高度图。例如,heightmap_projection填写ocean_floor,而且start_height填写10,拼图结构将在海平面10格上开始生成。可填写ocean_floor或world_surface。
    "max_depth": 5, //整数,范围是0-20。拼图结构生成的最大递归深度。例如,生成一个max_depth为5的生成道路的拼图结构,在从原点开始的任何给定方向上,道路长度最多为5个结构模板。
    "start_height": 10, //整数,无限制。拼图结构开始生成的高度,配合heightmap_projection使用。
    "start_pool": "", //生成拼图结构时使用的第一个模板池。
    "step": "underground_structures", //指定拼图结构要在哪个世界生成阶段生成。可填写["fluid_springs","lakes","local_modifications","raw_generation","strongholds","surface_structures","top_layer_modification","underground_decoration","underground_ores","underground_structures","vegetal_decoration"]中的任意一个。
   
    //以上为必需项,以下为可选项。
   
    "terrain_adaptation": "none", //可选,地形应该如何适应生成的拼图结构。可写["beard_box","beard_thin","bury","encapsulate","none"]中的一个。
    "biome_filters": {} //可选,拼图结构可以生成的生物群系。此项与地物文件中的同名字段写法一致。
}
}

拼图结构集
{
"format_version": "1.21.40",
"minecraft:structure_set": { //拼图结构集是根据一组规则放置的拼图结构的集合。
    "description": {
      "identifier": "complementary:debug_hallway_spread" //拼图结构集的ID。
    },
    "placement": { //描述集合中的结构相对于彼此的生成位置。目前,唯一支持的放置类型是random_spread,它以给定的间隔和分布随机分散结构。
      "salt": 4154110189191, //整数,无限制。用于随机生成器的种子,以提供独特的散布模式,并防止在多个结构集使用相同放置值的情况下出现重叠。
      "separation": 12, //大于等于0的整数,每个网格单元内的填充(以区块为单位)。填充区域内不会生成结构。
      "spacing": 6, //大于等于1的整数,生成结构时使用的网格单元大小(以区块为单位)。结构将尝试在每个单元格内的随机位置生成。
      "spread_type": "triangular", //可选,放置结构时使用的随机性算法。填写linear或triangular。
      "type": "minecraft:random_spread" //拼图结构集的放置类型,目前只能写minecraft:random_spread。
    },
    "structures": [ //集合中拼图结构的加权列表。
      {
      "structure": "complementary:debug_hallway", //拼图结构的ID。
      "weight": 20 //整数,范围1-200,拼图结构在集合中的权重。更高的权重更有可能被选择。
      }
    ]
}
}

处理器列表
{
"format_version": "1.21.40",
"minecraft:processor_list": { //拼图结构使用的规则,用于确定在世界中放置结构模板时要修改或替换哪些方块。
    "description": {
      "identifier": "" //Identifier of the Processor List. This is referenced by Template Pools when pairing processors with Structure Templates.
    },
    "processors": [ //List of processors to run on the Structure Template. 其中对象可以是四种之一,这里以不同对象表示。
      { //第1种,描述:Replaces and modifies blocks based on a series of rules
      "processor_type": "minecraft:rule",
      "rules": [ //List of block rules evaluated on all blocks of a Structure Template. Block rules are evaluated in order. If a block rule succeeds and the output_state is set, the output_state block will be used as the input_predicate block for subsequent rules.
          { //在结构模板的所有方块上评估的方块规则。对于任意方块,如果全部谓词的计算结果是true,那么用output_state替换这个方块。
            "block_entity_modifier": { //可选,当所有谓词匹配时,用于方块实体的方块状态修饰符。此对象有2种模式,需要填写其中一种模式。
            //以下为第1种模式,描述:保持状态不变的修饰符。如果没有指定其他方块修饰符,这是默认的方块修饰符。
            "type": "minecraft:passthrough"
            //以下为第2种模式,描述:试图给一个方块实体增加战利品的修饰符。
            "type": "minecraft:append_loot",
            "loot_table": "" //要添加的战利品表路径
            },
            "input_predicate": { //可选,在结构模板方块上计算的谓词。此对象有4种模式,需要填写其中一种模式。
            //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
            "predicate_type": "minecraft:always_true"
            //以下为第2种模式,描述:如果指定位置的方块是指定的方块,则该谓词的计算结果为true。
            "predicate_type": "minecraft:block_match",
            "block": "" //要匹配的方块。
            //以下为第3种模式,描述:如果指定位置的方块是指定的方块,则以给定的概率为true的谓词。
            "predicate_type": "minecraft:random_block_match",
            "block": "", //要匹配的方块。
            "probability": 0.5 //浮点数,范围是[0.0,1.0),当方块匹配时结果为true的概率。
            //以下为第4种模式,描述:如果指定位置的方块包含指定标签,则谓词计算为true。
            "predicate_type": "minecraft:tag_match",
            "tag": "" //要匹配的标签
            },
            "location_predicate": { //可选,在世界方块上计算的谓词。此对象有4种模式,需要填写其中一种模式。
            //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
            "predicate_type": "minecraft:always_true"
            //以下为第2种模式,描述:如果指定位置的方块是指定的方块,则该谓词的计算结果为true。
            "predicate_type": "minecraft:block_match",
            "block": "" //要匹配的方块。
            //以下为第3种模式,描述:如果指定位置的方块是指定的方块,则以给定的概率为true的谓词。
            "predicate_type": "minecraft:random_block_match",
            "block": "", //要匹配的方块。
            "probability": 0.5 //浮点数,范围是[0.0,1.0),当方块匹配时结果为true的概率。
            //以下为第4种模式,描述:如果指定位置的方块包含指定标签,则谓词计算为true。
            "predicate_type": "minecraft:tag_match",
            "tag": "" //要匹配的标签
            },
            "output_state": //如果所有谓词的计算结果都为true,则使用这里指定的方块替换世界方块。此字段有2种模式,需要填写其中一种模式。描述:指定特定的方块。可以是字符串方块名称或JSON对象
            //以下为第1种模式。
            "" //方块名称
            //以下为第2种模式。
            {
            "name": "", //方块名称
            "states": { //包含以每个状态命名的成员,具有布尔值、整数或字符串值。
                "state_name": true //可以是布尔值、字符串或整数。
            }
            }
            ,
            "position_predicate": { //可选,根据结构的原点和世界方块之间的距离计算的谓词。此对象有2种模式,需要填写其中一种模式。
            //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
            "predicate_type": "minecraft:always_true"
            //以下为第2种模式,描述:如果方块在沿着所提供的轴的距离范围内,而且随机数在随机范围之间,则判定评估为true
            "predicate_type": "minecraft:axis_aligned_linear_pos",
            "axis": "y",
            "max_chance": 0.75, //浮点数,范围是[0.0,1.0)
            "min_chance": 0.25, //浮点数,范围是[0.0,1.0)
            "max_dist": 16, //大于等于0的整数
            "min_dist": 2, //大于等于0的整数
            }
          }
      ]
      },
      { //第2种,描述:Protect blocks from this structure's placement in the world. Ensuring that it does not replace matching blocks in the world
      "processor_type": "minecraft:protected_blocks",
      "value": "" //Block tag for the blocks that will be protected
      },
      { //第3种,描述:Specifies block types in the template that should be ignored by other processors.
      "processor_type": "minecraft:block_ignore",
      "blocks": [ //List of blocks evaluated on all blocks of a Structure Template. If a block is matched in the provided list the block will be ignored for processing.
          ""
      ]
      },
      { //第4种,描述:Processor that wraps a processor and caps the number of times the delegated processor can be applied.
      "processor_type": "minecraft:capped",
      "delegate": //The processor that will be executed. 可以是三者之一。
      { //第1种,描述:Replaces and modifies blocks based on a series of rules
          "processor_type": "minecraft:rule",
          "rules": [ //List of block rules evaluated on all blocks of a Structure Template. Block rules are evaluated in order. If a block rule succeeds and the output_state is set, the output_state block will be used as the input_predicate block for subsequent rules.
            { //在结构模板的所有方块上评估的方块规则。对于任意方块,如果全部谓词的计算结果是true,那么用output_state替换这个方块。
            "block_entity_modifier": { //可选,当所有谓词匹配时,用于方块实体的方块状态修饰符。此对象有2种模式,需要填写其中一种模式。
                //以下为第1种模式,描述:保持状态不变的修饰符。如果没有指定其他方块修饰符,这是默认的方块修饰符。
                "type": "minecraft:passthrough"
                //以下为第2种模式,描述:试图给一个方块实体增加战利品的修饰符。
                "type": "minecraft:append_loot",
                "loot_table": "" //要添加的战利品表路径
            },
            "input_predicate": { //可选,在结构模板方块上计算的谓词。此对象有4种模式,需要填写其中一种模式。
                //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
                "predicate_type": "minecraft:always_true"
                //以下为第2种模式,描述:如果指定位置的方块是指定的方块,则该谓词的计算结果为true。
                "predicate_type": "minecraft:block_match",
                "block": "" //要匹配的方块。
                //以下为第3种模式,描述:如果指定位置的方块是指定的方块,则以给定的概率为true的谓词。
                "predicate_type": "minecraft:random_block_match",
                "block": "", //要匹配的方块。
                "probability": 0.5 //浮点数,范围是[0.0,1.0),当方块匹配时结果为true的概率。
                //以下为第4种模式,描述:如果指定位置的方块包含指定标签,则谓词计算为true。
                "predicate_type": "minecraft:tag_match",
                "tag": "" //要匹配的标签
            },
            "location_predicate": { //可选,在世界方块上计算的谓词。此对象有4种模式,需要填写其中一种模式。
                //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
                "predicate_type": "minecraft:always_true"
                //以下为第2种模式,描述:如果指定位置的方块是指定的方块,则该谓词的计算结果为true。
                "predicate_type": "minecraft:block_match",
                "block": "" //要匹配的方块。
                //以下为第3种模式,描述:如果指定位置的方块是指定的方块,则以给定的概率为true的谓词。
                "predicate_type": "minecraft:random_block_match",
                "block": "", //要匹配的方块。
                "probability": 0.5 //浮点数,范围是[0.0,1.0),当方块匹配时结果为true的概率。
                //以下为第4种模式,描述:如果指定位置的方块包含指定标签,则谓词计算为true。
                "predicate_type": "minecraft:tag_match",
                "tag": "" //要匹配的标签
            },
            "output_state": //如果所有谓词的计算结果都为true,则使用这里指定的方块替换世界方块。此字段有2种模式,需要填写其中一种模式。描述:指定特定的方块。可以是字符串方块名称或JSON对象
            //以下为第1种模式。
            "" //方块名称
            //以下为第2种模式。
            {
                "name": "", //方块名称
                "states": { //包含以每个状态命名的成员,具有布尔值、整数或字符串值。
                  "state_name": true //可以是布尔值、字符串或整数。
                }
            }
            ,
            "position_predicate": { //可选,根据结构的原点和世界方块之间的距离计算的谓词。此对象有2种模式,需要填写其中一种模式。
                //以下为第1种模式,描述:始终计算为true的谓词。如果没有指定其他谓词,这是默认谓词。
                "predicate_type": "minecraft:always_true"
                //以下为第2种模式,描述:如果方块在沿着所提供的轴的距离范围内,而且随机数在随机范围之间,则判定评估为true
                "predicate_type": "minecraft:axis_aligned_linear_pos",
                "axis": "y",
                "max_chance": 0.75, //浮点数,范围是[0.0,1.0)
                "min_chance": 0.25, //浮点数,范围是[0.0,1.0)
                "max_dist": 16, //大于等于0的整数
                "min_dist": 2, //大于等于0的整数
            }
            }
          ]
      }
      
      { //第2种,描述:Protect blocks from this structure's placement in the world. Ensuring that it does not replace matching blocks in the world
          "processor_type": "minecraft:protected_blocks",
          "value": "" //Block tag for the blocks that will be protected
      }
      
      { //第3种,描述:Specifies block types in the template that should be ignored by other processors.
          "processor_type": "minecraft:block_ignore",
          "blocks": [ //List of blocks evaluated on all blocks of a Structure Template. If a block is matched in the provided list the block will be ignored for processing.
            ""
          ]
      }
      ,
      "limit": //The maximum number of times that this delegate can be applied. 可以是三者之一。
      1 //第一种,整数。
      
      { //第二种,Specifies a constant integer
          "type": "constant",
          "value": 1 //Constant value
      }
      
      { //第三种,Specifies a uniformly distributed integer
          "type": "uniform",
          "min_inclusive": 1, //整数,Minimum value (inclusive)
          "max_inclusive": 1 //整数,Maximum value (inclusive)
      }
      }
    ]
}
}
页: [1]
查看完整版本: 拼图方块的消息,自定义拼图结构的可能