Биомы в крае

Версия Minecraft
1.15.2

GoogleTan

Картошка :3
1,354
43
310
На версии 1.12.2 мне удалось научить край генерировать биомы, но у меня поднакопилось причин и я решила перелезть на 1.15.2. И тут даже есть биомы(THE_END, END_HIGHLANDS, END_MIDLANDS, SMALL_END_ISLANDS, END_BARRENS)! Я воодушевилась и решила попробовать проcто зарегать биом для края, но так не прокатило - его нету. Ну лады. Я просто земенила Край(да я поорудовала трансормерами чтоб это провернуть):
Java:
        DimensionType.THE_END = DimensionType.register("the_end",
                new DimensionType(2, "_end", "DIM1", EndBiomedDimension::new, false, FuzzedBiomeMagnifier.INSTANCE));
Это работает. Если я поменяю базовый блок в краю на тортик то так и будет:
1595266743403.png
Но заставить его давать нужнее мне биомы не смогла. Даже урезала списов до только моего. Так как то появляются ванильные биомы... Вообщем помощи вашей прошу
Java:
public class EndBiomedDimension extends EndDimension

{


    public EndBiomedDimension(World world, DimensionType type)

    {

        super(world, type);

    }


    @Override

    public ChunkGenerator<?> createChunkGenerator()

    {

        EndGenerationSettings settings = new EndGenerationSettings();

        settings.setDefaultBlock(Blocks.END_STONE.getDefaultState());

        settings.setDefaultFluid(Blocks.AIR.getDefaultState());

        settings.setSpawnPos(this.getSpawnCoordinate());

        return new EndChunkGenerator(this.world, new EndBiomeProvider(new EndBiomeProviderSettings(world.getWorldInfo())), settings);

    }

}
Java:
public class NewEndBiomeProvider extends BiomeProvider
{
    private final SimplexNoiseGenerator generator;
    private final SharedSeedRandom random;

    private static final Set<Biome> biomes;
    static
    {
        biomes = ImmutableSet.of(Biomes.THE_END, Biomes.END_HIGHLANDS, Biomes.END_MIDLANDS, Biomes.SMALL_END_ISLANDS, Biomes.END_BARRENS, PhoenixBiomes.UNDER.get());
    }

    public NewEndBiomeProvider(long seed)
    {
        super(ImmutableSet.of(PhoenixBiomes.UNDER.get()));
        this.random = new SharedSeedRandom(seed);
        this.random.skip(17292);
        this.generator = new SimplexNoiseGenerator(this.random);
    }

    @Override
    public Biome func_225526_b_(int x, int y, int z)
    {
        return PhoenixBiomes.UNDER.get();
        /*
        int real_x = x >> 2;
        int real_z = z >> 2;
        if ((long)real_x * (long)real_x + (long)real_z * (long)real_z <= 4096L)//если маин острав
        {
            return Biomes.THE_END;
        }
        else
        {
            float height = this.func_222365_c(real_x * 2 + 1, real_z * 2 + 1);
            if (height > 40.0F)
            {
                return Biomes.END_HIGHLANDS;
            }
            else if(height >= 20)
            {
                return PhoenixBiomes.UNDER.get();
            }
            else if (height >= 0.0F)
            {
                return Biomes.END_MIDLANDS;
            }
            else
            {
                return height < -20.0F ? Biomes.SMALL_END_ISLANDS : Biomes.END_BARRENS;
            }
        }*/
    }

    @Override
    public float func_222365_c(int x, int z) {
        int real_x = x / 2;
        int real_Z = z / 2;
        int dop_x = x % 2;
        int dop_z = z % 2;
        float result = 100.0F - MathHelper.sqrt((float)(x * x + z * z)) * 8.0F;
        result = MathHelper.clamp(result, -100.0F, 80.0F);

        for(int i = -12; i <= 12; ++i)
        {
            for(int j = -12; j <= 12; ++j)
            {
                long currect_x = real_x + i;
                long currect_z = real_Z + j;
                if (currect_x * currect_x + currect_z * currect_z > 4096L && this.generator.getValue((double)currect_x, (double)currect_z) < -0.8999999761581421D)
                {
                    float lvt_14_1_ = (MathHelper.abs((float)currect_z) * 3439.0F + MathHelper.abs((float)currect_z) * 147.0F) % 13.0F + 9.0F;
                    float lvt_15_1_ = (float)(dop_x - i * 2);
                    float lvt_16_1_ = (float)(dop_z - j * 2);
                    float lvt_17_1_ = 100.0F - MathHelper.sqrt(lvt_15_1_ * lvt_15_1_ + lvt_16_1_ * lvt_16_1_) * lvt_14_1_;
                    lvt_17_1_ = MathHelper.clamp(lvt_17_1_, -100.0F, 80.0F);
                    result = Math.max(result, lvt_17_1_);
                }
            }
        }

        return result;
    }
}
Java:
public class UnderBiome extends Biome
{
    public UnderBiome()
    {
        super((new Builder()).surfaceBuilder(SurfaceBuilder.DEFAULT, new SurfaceBuilderConfig(Blocks.OBSIDIAN.getDefaultState(), Blocks.CAKE.getDefaultState(), Blocks.GLASS_PANE.getDefaultState()))
                .precipitation(RainType.NONE)
                .category(Category.THEEND)
                .depth(0.1F)
                .scale(0.2F)
                .temperature(0.5F)
                .downfall(0.5F)
                .waterColor(4159204)
                .waterFogColor(329011)
                .parent(null));
        this.func_226711_a_(Feature.END_CITY.func_225566_b_(IFeatureConfig.NO_FEATURE_CONFIG));
        DefaultBiomeFeatures.func_225489_aq(this);
        this.addSpawn(EntityClassification.MONSTER, new SpawnListEntry(EntityType.ENDERMAN, 10, 4, 4));
    }

    @Override
    public void decorate(GenerationStage.Decoration stage, ChunkGenerator<? extends GenerationSettings> generator, IWorld world, long p_203608_4_, SharedSeedRandom rand, BlockPos pos)
    {
        super.decorate(stage, generator, world, p_203608_4_, rand, pos);
        for (int x = 0; x < 16; x++)
        {
            for (int z = 0; z < 16; z++)
            {
                int height = getEndDownSurfaceHeight(world, x, z);
                if (height != -1)
                {
                    for (int i = height; i < height + 8; i++)
                    {
                        if (world.getBlockState(new BlockPos(pos.add(x, i, z))).getBlock().equals(Blocks.END_STONE))
                        {
                            world.setBlockState(new BlockPos(pos.add(x, i, z)), Blocks.OBSIDIAN.getDefaultState(), 0);
                        }
                    }
                }
            }
        }
        System.out.println(pos.getX() + " " + pos.getZ());
    }

    public static int getEndDownSurfaceHeight(IWorld world, int x, int z)
    {
        for (int i = 5; i < 40; i++) {
            if(!world.isAirBlock(new BlockPos(x, i, z))) {
                return i;
            }
        }

        return -1;
    }
}
Java:
public class PhoenixBiomes
{
    private static final DeferredRegister<Biome> BIOMRS = new DeferredRegister<>(ForgeRegistries.BIOMES, Phoenix.MOD_ID);

    public static final RegistryObject<Biome> UNDER = BIOMRS.register("under", UnderBiome::new);

    public static void register()
    {
        BIOMRS.register(FMLJavaModLoadingContext.get().getModEventBus());
    }
}
 
Сверху