Замена камня на другой блок в собственном биоме

Версия Minecraft
1.15.2
205
12
103
Всем привет. Хочу в биоме заменить генерацию камня на блок, созданный мной. Смотрю в билдер окружения, вижу там следующие опции:
Java:
   public SurfaceBuilderConfig(BlockState topMaterial, BlockState underMaterial, BlockState underWaterMaterial) {
      this.topMaterial = topMaterial;
      this.underMaterial = underMaterial;
      this.underWaterMaterial = underWaterMaterial;
   }
Сперва думал что underWaterMaterial как раз определяет блок, который будет генерироваться под землей, но это не подтвердилось. Я вообще не нахожу указанный мною блок в сгенерированном биоме, на его месте появляется обычный камень. Потому напрашивается вопрос: каким образом можно заменить камень на свой блок?

Биом:
Java:
public class TerraForestBiome extends Biome {
    public TerraForestBiome(Builder biomeBuilder) {
        super((new Biome.Builder()
                .surfaceBuilder(new ConfiguredSurfaceBuilder<SurfaceBuilderConfig>(SurfaceBuilder.DEFAULT, new SurfaceBuilderConfig(
                                AmbientBlocks.Blocks.grass.getDefaultState(),
                                AmbientBlocks.Blocks.dirt.getDefaultState(),
                                AmbientBlocks.Blocks.stone.getDefaultState())))
                .precipitation(RainType.RAIN)
                .category(Category.PLAINS)
                .downfall(0.25F)
                .depth(0.1F)
                .scale(0.1F)
                .temperature(0.8F)
                .waterColor(4159204)
                .waterFogColor(329011)
                .parent(null)));

        this.addCarver(GenerationStage.Carving.AIR, Biome.createCarver(WorldCarver.CAVE, new ProbabilityConfig(0.2F)));
        this.addCarver(GenerationStage.Carving.AIR, Biome.createCarver(WorldCarver.CANYON, new ProbabilityConfig(0.02F)));
    }
}

Тип мира для упрощения теста:
Java:
public class TerraWorldType extends WorldType {
    public TerraWorldType(String name) {
        super(name);
    }

    @Override
    public ChunkGenerator<?> createChunkGenerator(World world) {
        OverworldGenSettings settings = new OverworldGenSettings();
        SingleBiomeProviderSettings single = new SingleBiomeProviderSettings(world.getWorldInfo());
        single.setBiome(ModBiomes.Biomes.forest);
        return new OverworldChunkGenerator(world, new SingleBiomeProvider(single), settings);
    }
}

UPD: Немного почитав разных форумов узнал, что, мол, лучше сгенерить отдельный мир, если планируются настолько фундаментальные изменения. Что думаете?
UPD^2: Нашел в GenerationSettings переменную:
Java:
protected BlockState defaultBlock = Blocks.STONE.getDefaultState();
Что-то мне подсказывает что без АСМ тут не обойтись.
 
Последнее редактирование:

GoogleTan

Картошка :3
1,354
43
310
Последнее редактирование:
205
12
103
Ага, оно. Кормодовое, скорее всего. Но я хз как там сейчас с ними на 1.15 дела обстоят.

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

GoogleTan

Картошка :3
1,354
43
310
1.15 дела обстоят.
Мне казалось она универсальна на все версии(искльчение над оредачить под ниже 1.8 потому что там классы форджа другой путь имеют). Это не так?
 
205
12
103
Я и сам толком не знаю. Прошлое мое знакомство с этой гадостью выглядело примерно так:
  • Ну всё, ща как заинжектюсь, ууух.
  • Так, ага, кормод... Допустим.
  • Агааа, билд сломался. Отлично, ладно, стерпим.
  • Ммм, оно еще и не заводится по-человечески, круто
  • О, а вот и конфликты с другими модами, это их еще резолвить надо, ну за шо (хотя изначальная цель все еще не была достигнута)
  • сотню попыток спустя Ты сегодня вообще заведешься? Я с утра на первую пару реще встаю, чем ты запускаешься
  • Ой, все, пошло оно всё в болото. Пойду наклепаю стак однотипных блоков и опять заброшу проект

И всё это, естественно, сопровождалось тоннами благого мата. Зацензурил как мог.
 
3,005
192
592
3,005
192
592
5 минут просмотра кода
В своем биоме переопредели buildSurface и используй defaultBlock не из аргументов, а свой.

Это всего лишь 5 минут, может и не работает. Но этот способ ты вроде не юзал, по этому написал..
 

GoogleTan

Картошка :3
1,354
43
310
ну ты заменил поверхостный слой на камень) И все. Ты не видел что я творила:
unknown.png
 
205
12
103
Я изменил вообще всё, вероятно. У меня там все из камня было. Причем из ванильного, хотя я указывал другое



Java:
public class TerraForestBiome extends Biome {
    public TerraForestBiome(Builder biomeBuilder) {
        super((new Biome.Builder()
                .surfaceBuilder(new ConfiguredSurfaceBuilder<SurfaceBuilderConfig>(SurfaceBuilder.DEFAULT, new SurfaceBuilderConfig(
                        AmbientBlocks.Blocks.grass.getDefaultState(),
                        AmbientBlocks.Blocks.dirt.getDefaultState(),
                        AmbientBlocks.Blocks.stone.getDefaultState())))
                .precipitation(RainType.RAIN)
                .category(Category.PLAINS)
                .downfall(0.25F)
                .depth(0.1F)
                .scale(0.3F)
                .temperature(0.8F)
                .waterColor(4159204)
                .waterFogColor(329011)
                .parent(null)));
    }

    @Override
    public void buildSurface(Random random, IChunk chunkIn, int x, int z, int startHeight, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, long seed) {
        this.surfaceBuilder.buildSurface(random, chunkIn, this, x, z, startHeight, noise, AmbientBlocks.Blocks.stone.getDefaultState(), defaultFluid, seaLevel, seed);
    }
}
 
Сверху