Создание собственного измерения

Версия Minecraft
1.16+
API
Forge
25
1
Да-да. Знаю эта тема уже поднималась:
но тут я ничего не нашёл. Может кто-то снизойдет и объяснит мне, как это работает.
 
Решение
В ресурсах создать папку data
В ней создать папку <your_modid>
В ней создать две папки dimension и dimension_type
В dimension создать файл <your_world_name>.json
В этом файле написать​
JSON:
{
  "type": "<your_modid>:<your_world_name>",
  "generator": {
    "type": "<your_modid>:<your_world_generator_name>"
  }
}
В dimension_type создать файл <your_world_name>.json
В этом файле написать​
JSON:
{
  "ultrawarm": false,
  "natural": true,
  "piglin_safe": false,
  "respawn_anchor_works": true,
  "bed_works": true,
  "has_raids": true,
  "has_skylight": true,
  "has_ceiling": false,
  "coordinate_scale": 1,
  "ambient_light": 0...
7,099
324
1,510
В ресурсах создать папку data
В ней создать папку <your_modid>
В ней создать две папки dimension и dimension_type
В dimension создать файл <your_world_name>.json
В этом файле написать​
JSON:
{
  "type": "<your_modid>:<your_world_name>",
  "generator": {
    "type": "<your_modid>:<your_world_generator_name>"
  }
}
В dimension_type создать файл <your_world_name>.json
В этом файле написать​
JSON:
{
  "ultrawarm": false,
  "natural": true,
  "piglin_safe": false,
  "respawn_anchor_works": true,
  "bed_works": true,
  "has_raids": true,
  "has_skylight": true,
  "has_ceiling": false,
  "coordinate_scale": 1,
  "ambient_light": 0,
  "logical_height": 256,
  "effects": "minecraft:overworld",
  "infiniburn": "minecraft:infiniburn_overworld"
}
Должно получить так:
1624010058499.png

В конструкторе главного класса мода:
Java:
Registry.register(Registry.CHUNK_GENERATOR, "<your_modid>:<your_world_generator_name>", CustomWorldChunkGenerator.CODEC);

В генераторе мира:
CustomWorldChunkGenerator:
public class CustomWorldChunkGenerator extends ChunkGenerator {
    public static final Codec<CustomWorldChunkGenerator> CODEC =
            RegistryLookupCodec.create(Registry.BIOME_REGISTRY).xmap(CustomWorldChunkGenerator::new, CustomWorldChunkGenerator::biomes).stable().codec();

    private final Registry<Biome> biomes;


    public CustomWorldChunkGenerator(Registry<Biome> p_i231888_1_) {
        super(new SingleBiomeProvider(p_i231888_1_.getOrThrow(Biomes.PLAINS)), new DimensionStructuresSettings(Optional.empty(), ImmutableMap.of()));
        biomes = p_i231888_1_;
    }

    public Registry<Biome> biomes() {
        return biomes;
    }

    @Override
    protected Codec<? extends ChunkGenerator> codec() {
        return CODEC;
    }
   
}
Эта штука - CODEC - нужна, чтобы можно было настраивать параметры мира при его создании. Как этим нормально пользоваться - не знаю, но приведенный выше пример - максимально простой кодек, который у мя получилось сделать.
Остальные методы генератора реализуй сам, исходя из своей задачи.
 
7,099
324
1,510
import net.minecraft.util.registry.Registry;
Если имя метода другое - значит, разные маппинги. Найди нужный метод по сигнатуре или используй маппинги mappings channel: 'official', version: '1.16.5'(придется переписать под их имена все остальное в моде)
 
25
1
import net.minecraft.util.registry.Registry;
Если имя метода другое - значит, разные маппинги. Найди нужный метод по сигнатуре или используй маппинги mappings channel: 'official', version: '1.16.5'(придется переписать под их имена все остальное в моде)
можешь скинуть код со всеми импортами, пожалуйста.
 
7,099
324
1,510
Java:
package hohserg.test.world;

import net.minecraft.util.registry.Registry;
import net.minecraftforge.fml.common.Mod;

@Mod("test_world")
public class Main {
    public Main() {
        Registry.register(Registry.CHUNK_GENERATOR, "test_world:test", TestWorldChunkGenerator.CODEC);
    }
}
 
25
1
package hohserg.test.world; import net.minecraft.util.registry.Registry; import net.minecraftforge.fml.common.Mod; @Mod("test_world") public class Main { public Main() { Registry.register(Registry.CHUNK_GENERATOR, "test_world:test", TestWorldChunkGenerator.CODEC); } }
Ты где-то отдельно регистрируешь CHUNK_GENERATOR? Или почему у меня он не находится.
 
7,099
324
1,510
Это просто статичное поле в классе Registry 🤦‍♂️
У тебя видимо маппинги другие, поэтому другие имена
 
25
1
Это просто статичное поле в классе Registry 🤦‍♂️
У тебя видимо маппинги другие, поэтому другие имена
всё теперь я понял, но у меня из-за этого весь код сломался так-как у меня было mappings channel: 'snapshot', version: '20210309-1.16.5' и код был соответственно для него. Можете мне подсказать, как мне адаптировать под себя. Просто в mappings channel: 'official', version: '1.16.5' у меня 1624266291622.png эта строчка так и подчёркивалась.
 
7,099
324
1,510
его нужно самому написать
в моем сообщении фулл пример, скопируй и пляши от него
 
Сверху