Особые условия для спавна руды

Версия Minecraft
1.20.1
95
4
6
Мне нужно сделать проверку на определённые блоки около руды, чтобы она спавнилась только в тех случаях, когда снизу есть блок и свободны как минимум 2 стороны, но я не смог найти ничего подобного в дочерних классах RuleTest, которые и определяют возможные места для спавна
 
Решение
1. Порядок применения модификаторов имеет значение (не уверен, отображает ли это misode, но я получил эту информацию опытным путём, когда разбирался с травой);
2. Просто увеличь rarity_filter;
3. (Личное мнение) вместо weighted_list при создании count можно было бы использовать другие модификаторы, вроде biased_to_bottom. Там можно сделать более тонкую дистрибуцию. Либо вообще вместо count воспользоваться noise_threshold_count.

Пример:
{
    "feature": "minecraft:patch_grass",
    "placement": [
        {
            "type": "minecraft:count",
            "count": {
                "type": "minecraft:biased_to_bottom",
                "value": {
                    "min_inclusive": 1,
                    "max_inclusive": 3
                }...
Что-то не работает, я пробовал делать так, чтобы она заменяло блоки воздуха, а потом опускалось вниз, пока блок под ним не станет одним из видов камня, но руда вообще перестала появлятся. Вот код:
configured feature:
{
  "type": "minecraft:ore",
  "config": {
    "discard_chance_on_air_exposure": 0.0,
    "size": 9,
    "targets": [
      {
        "state": {
          "Name": "rechroma:purple_crystal_block"
        },
        "target": {
          "block": "minecraft:cave_air",
          "predicate_type": "minecraft:block_match"
        }
      },
      {
        "state": {
          "Name": "rechroma:purple_crystal_block"
        },
        "target": {
          "block": "minecraft:air",
          "predicate_type": "minecraft:block_match"
        }
      }
    ]
  }
}

placed feature:
{
  "feature": "rechroma:crystal",
  "placement": [
    {
      "type": "minecraft:count",
      "count": 3
    },
    {
      "type": "minecraft:in_square"
    },
    {
      "type": "minecraft:environment_scan",
      "direction_of_search": "down",
      "max_steps": 30,
      "target_condition": {
        "type": "minecraft:matching_blocks",
        "offset": [
          0,
          -1,
          0
        ],
        "blocks": [
          "minecraft:stone",
          "minecraft:deepslate",
          "minecraft:diorite",
          "minecraft:andesite",
          "minecraft:granite"
        ]
      },
      "allowed_search_condition": {
        "type": "minecraft:matching_blocks",
        "offset": [
          0,
          0,
          0
        ],
        "blocks": [
          "minecraft:air",
          "minecraft:cave_air"
        ]
      }
    },
    {
      "type": "minecraft:height_range",
      "height": {
        "type": "minecraft:uniform",
        "max_inclusive": {
          "absolute": 80
        },
        "min_inclusive": {
          "absolute": -64
        }
      }
    },
    {
      "type": "minecraft:biome"
    }
  ]
}
 
я пробовал делать так, чтобы она заменяло блоки воздуха, а потом опускалось вниз, пока блок под ним не станет одним из видов камня, но руда вообще перестала появлятся
Ну конечно, так оно генерироваться точно не будет.
Placed Feature и Configured не определяет конечное положение руды, а просто "ставится".

Подумай ещё раз, как можно сделать подобную генерацию из конечных условий, а не промежуточных.
 
Хорошо, я переделал проверку, теперь я проверяю является ли блок под рудой твёрдым и только в таком случае ставлю её, но в игре это условие будто игнорируется и руда ставится в воздухе

Вот сама проверка:
    {
      "type": "minecraft:environment_scan",
      "direction_of_search": "down",
      "max_steps": 1,
      "target_condition": {
        "type": "minecraft:solid"
      }
    }
 
Я просто уже порядком запутался, ты говоришь, что Placed Feature и Configured не определяет конечное положение руды, но на вики написано, что модификаторы размещения в Placed Feature могут изменять положение. Я хочу сделать генерацию, при которой мой блок будет появляться только на твёрдых блоках
Вот примеры такой генерации:


2024-07-20_18.08.55.png2024-07-20_18.08.26.png
 
ты говоришь, что Placed Feature и Configured не определяет конечное положение руды, но на вики написано, что модификаторы размещения в Placed Feature могут изменять положение.
Я не очень хорошо выразился, прошу прощения.
Placed и Configured Feature не знают, куда их поставят. Они лишь говорят, могут ли они установится в этих координатах или нет (и в случае, если не могут, возвращают координаты, полученные смещением от изначальных координат, подходящих под условие).
Иначе говоря, они определяют лишь то, возможно ли их установить в опр. координатах, а не саму установку.

Исходя из скриншотов, тебе нужен Configured Feature не от руды, а скорее от травы/цветов. Ну и Placed Feature, соответственно, схожий скорее с цветами, нежели с рудой.

Чёт тип такого:
{
    "feature": {
        "_comment": "Для примера отсутствует Configured feature, поскольку мне лень подбирать подходящий",
        "type": "minecraft:no_op",
        "config": {}
    },
    "placement": [
        {
            "type": "minecraft:height_range",
            "height": {
                "type": "minecraft:trapezoid",
                "min_inclusive": {
                    "absolute": -20
                },
                "max_inclusive": {
                    "absolute": 60
                }
            }
        },
        {
            "type": "minecraft:in_square"
        },
        {
            "type": "minecraft:carving_mask",
            "step": "air"
        },
        {
            "type": "minecraft:block_predicate_filter",
            "predicate": {
                "type": "minecraft:matching_block_tag",
                "offset": [
                    0,
                    -1,
                    0
                ],
                "tag": "minecraft:base_stone_overworld"
            }
        }
    ]
}
 
Победа, всё разработало, кристаллы стали появляться, как в пещерах так и на поверхности(я написал ещё 1 генерацию для поверхности), но модификаторы редкости и количества будто игнорируются, вот что я указываю:
Java:
   {
      "type": "minecraft:rarity_filter",
      "chance": 20
    },
    {
      "type": "minecraft:count",
      "count": {
        "type": "minecraft:weighted_list",
        "distribution": [
          {
            "weight": 2,
            "data": 2
          },
          {
            "weight": 7,
            "data": 1
          },
          {
            "weight": 1,
            "data": 3
          }
        ]
      }
    }
Но при этом кристаллы всё равно появляются по 3-4 в одном чанке и в соседних, вот пример:
1721613506842.png
тут в 4 смежных чанках появились кристалы, шанс этого 0.000625%, я не верю, что я везунчик и подобной генерации довольно много в мире
 
1. Порядок применения модификаторов имеет значение (не уверен, отображает ли это misode, но я получил эту информацию опытным путём, когда разбирался с травой);
2. Просто увеличь rarity_filter;
3. (Личное мнение) вместо weighted_list при создании count можно было бы использовать другие модификаторы, вроде biased_to_bottom. Там можно сделать более тонкую дистрибуцию. Либо вообще вместо count воспользоваться noise_threshold_count.

Пример:
{
    "feature": "minecraft:patch_grass",
    "placement": [
        {
            "type": "minecraft:count",
            "count": {
                "type": "minecraft:biased_to_bottom",
                "value": {
                    "min_inclusive": 1,
                    "max_inclusive": 3
                }
            }
        },
        {
            "type": "minecraft:rarity_filter",
            "chance": 50
        },
        {
            "type": "minecraft:in_square"
        },
        {
            "type": "minecraft:carving_mask",
            "step": "air"
        },
        {
            "type": "minecraft:biome"
        },
        {
            "type": "minecraft:block_predicate_filter",
            "predicate": {
                "type": "minecraft:matching_block_tag",
                "offset": [
                    0,
                    -1,
                    0
                ],
                "tag": "minecraft:base_stone_overworld"
            }
        }
    ]
}
 
Назад
Сверху