Океан в кастомном мире

Сообщения
4,604
Лучшие ответы
44
Реакции
575
Версия Minecraft
1.12.2
Здравствуйте. Сделал я значит свой мир более-менее, начал делать всякие биомы, хорошо вроде все шло... Но когда я добавил океан и сетнул ему высоту -1(как в ванилле, к слову), то вместо него стал спавнится какой то дефолтный ванильный биом. То есть написано что биом мой, но вот высоту -1 он точно никак не имеет. Вровень с остальными биомчиками...

Кто знает, в чем дело, почему не сетается высота?

Не знаю точно какой код в этом виноват поэтому напишите что вам угодно посмотреть, я скину.
 
Сообщения
51
Лучшие ответы
1
Реакции
50
Сделал я значит свой мир более-менее, начал делать всякие биомы, хорошо вроде все шло...
Алгоритм генерации биомов.
Но когда я добавил океан и сетнул ему высоту -1(как в ванилле, к слову)
И как определяешь свой океан.
то вместо него стал спавнится какой то дефолтный ванильный биом
Написал бы какой, но думаю по ходу станет ясно.
 
Сообщения
4,604
Лучшие ответы
44
Реакции
575
Алгоритм генерации биомов.
Твой, который ты кидал мне в TestDimension
P.S Пришлось конечно структуру немного переделать, так как у тебя миллион классов на каждый метод, что овернеудобно, но каждому свое. Но суть кода я не менял.
Java:
public class GenLayerBiomes extends GenLayer {

    private int ocean = Biome.getIdForBiome(RegBiomes.OCEAN);
    private int metamorphic_hills = Biome.getIdForBiome(RegBiomes.METAMORPHIC_HILLS);
    private int metamorphic_plains = Biome.getIdForBiome(RegBiomes.METAMORPHIC_PLAINS);
    private int magmatic_hills = Biome.getIdForBiome(RegBiomes.MAGMATIC_HILLS);
    private int magmatic_plains = Biome.getIdForBiome(RegBiomes.MAGMATIC_PLAINS);
    private int sedimentary_knoll = Biome.getIdForBiome(RegBiomes.SEDIMENTARY_KNOLL);
    private int sedimentary_plains = Biome.getIdForBiome(RegBiomes.SEDIMENTARY_PLAINS);

    public final int[] all_biomes = {ocean,metamorphic_hills, metamorphic_plains, magmatic_hills, magmatic_plains, sedimentary_knoll, sedimentary_plains };

    public GenLayerBiomes(long seed) {
        super(seed);
    }

    @Override
    public int[] getInts(int x, int z, int width, int height) {
        int[] dest = IntCache.getIntCache(width * height);

        for (int dz = 0; dz < height; dz++) {
            for (int dx = 0; dx < width; dx++) {
                initChunkSeed(dx + x, dz + z);
                dest[(dx + dz * width)] = this.all_biomes[nextInt(this.all_biomes.length)];
            }
        }

        return dest;
    }
}
Написал бы какой, но думаю по ходу станет ясно.
Я немного некорректо вопрос задалю. Дефолтный биом всегда равнина.
Собственно не в этом даже дело то, а в том что не сетается высота.

И как определяешь свой океан.
Java:
public static final Biome OCEAN = new OceanBiome(new Biome.BiomeProperties("r_ocean").setBaseHeight(-1F).setHeightVariation(0.1F).setTemperature(0.2F).setRainfall(0.6F), null, OceanBiome.Type.OCEAN);
 
Сообщения
51
Лучшие ответы
1
Реакции
50
Твой, который ты кидал мне в TestDimension
P.S Пришлось конечно структуру немного переделать, так как у тебя миллион классов на каждый метод, что овернеудобно, но каждому свое. Но суть кода я не менял.
Нет, ты кинул мне всего лишь один слой. Кинь весь алгоритм (метод, где переопределяешь по цепочке слой GenLayer).
 
Сообщения
4,604
Лучшие ответы
44
Реакции
575
Аа, понял.. да тут чисто увеличивал размеры то

Java:
    public GenLayer[] getModdedBiomeGenerators(WorldType worldType, long seed, GenLayer[] original)
    {
        GenLayer genlayer = new GenLayerBiomes(1L);
        genlayer = new GenLayerZoom(1001L, genlayer);
        genlayer = new GenLayerZoom(1002L, genlayer);
        genlayer = new GenLayerZoom(1003L, genlayer);
        genlayer = new GenLayerZoom(1004L, genlayer);
        genlayer = new GenLayerFuzzyZoom(2000L, genlayer);
        genlayer = new GenLayerFuzzyZoom(2001L, genlayer);
        genlayer = new GenLayerFuzzyZoom(2002L, genlayer);
        
        genlayer = new GenLayerVoronoiZoom(10L, genlayer);
        genlayer.initWorldGenSeed(seed);
        return new GenLayer[] { genlayer, genlayer };
    }
 
Сообщения
51
Лучшие ответы
1
Реакции
50
Во, я только сейчас заметил свою ошибку и уже исправил тот пост, где выкладывал Test_Dimension.rar
По факту у тебя всегда биомы генерировались "не на своих местах", просто ты этого не заметил.

Ошибка у тебя в этом коде:
Java:
return new GenLayer[] { genlayer, genlayer };
Если что, генерация самой поверхности происходит по другому массиву, который меньше. Код нужно исправить. Вместо
Java:
genlayer = new GenLayerFuzzyZoom(2002L, genlayer);
       
genlayer = new GenLayerVoronoiZoom(10L, genlayer);
genlayer.initWorldGenSeed(seed);
return new GenLayer[] { genlayer, genlayer };
Вставь этот
Java:
GenLayer genlayer_pre = new GenLayerFuzzyZoom(2002L, genlayer);

genlayer = new GenLayerVoronoiZoom(10L, genlayer_pre);
genlayer_pre.initWorldGenSeed(seed);
genlayer.initWorldGenSeed(seed);
return new GenLayer[] { genlayer_pre, genlayer };
Думаю теперь все должно быть нормально. Если что, тут тоже выложу исходники.
 

Вложения

Сообщения
4,604
Лучшие ответы
44
Реакции
575
О да, теперь супер. Респект
 
Сообщения
4,604
Лучшие ответы
44
Реакции
575
Еще вопрос - как убрать островки в океане?
 
Сообщения
4,604
Лучшие ответы
44
Реакции
575
X 7150
Y 68
Z -140
Seed 8689253544719744965
 
Сообщения
4,604
Лучшие ответы
44
Реакции
575
Тоже океан.. Да ладно, фиг с ними, пусть будут, не критично
 
Сверху