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

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Здравствуйте. Сделал я значит свой мир более-менее, начал делать всякие биомы, хорошо вроде все шло... Но когда я добавил океан и сетнул ему высоту -1(как в ванилле, к слову), то вместо него стал спавнится какой то дефолтный ванильный биом. То есть написано что биом мой, но вот высоту -1 он точно никак не имеет. Вровень с остальными биомчиками...

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

Не знаю точно какой код в этом виноват поэтому напишите что вам угодно посмотреть, я скину.
 

DdoosS

Каменная лига
Сообщения
50
Лучшие ответы
1
Симпатии
50
#2
Сделал я значит свой мир более-менее, начал делать всякие биомы, хорошо вроде все шло...
Алгоритм генерации биомов.
Но когда я добавил океан и сетнул ему высоту -1(как в ванилле, к слову)
И как определяешь свой океан.
то вместо него стал спавнится какой то дефолтный ванильный биом
Написал бы какой, но думаю по ходу станет ясно.
 

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#3
Алгоритм генерации биомов.
Твой, который ты кидал мне в 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);
 

DdoosS

Каменная лига
Сообщения
50
Лучшие ответы
1
Симпатии
50
#4
Твой, который ты кидал мне в TestDimension
P.S Пришлось конечно структуру немного переделать, так как у тебя миллион классов на каждый метод, что овернеудобно, но каждому свое. Но суть кода я не менял.
Нет, ты кинул мне всего лишь один слой. Кинь весь алгоритм (метод, где переопределяешь по цепочке слой GenLayer).
 

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#5
Аа, понял.. да тут чисто увеличивал размеры то

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 };
    }
 

DdoosS

Каменная лига
Сообщения
50
Лучшие ответы
1
Симпатии
50
#6
Во, я только сейчас заметил свою ошибку и уже исправил тот пост, где выкладывал 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 };
Думаю теперь все должно быть нормально. Если что, тут тоже выложу исходники.
 

Вложения

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#7
О да, теперь супер. Респект
 

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#8
Еще вопрос - как убрать островки в океане?
 

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#10
X 7150
Y 68
Z -140
Seed 8689253544719744965
 

DdoosS

Каменная лига
Сообщения
50
Лучшие ответы
1
Симпатии
50
#11
Вообще в этом чанке океан
9 GenLayerVoronoiZoom 16x16.png
В радиусе 5 чанков тоже океан
9 GenLayerVoronoiZoom 80x80.png
На островах какой биом показывает?
 

Maxik001

Золотая лига
Сообщения
4,416
Лучшие ответы
41
Симпатии
478
#12
Тоже океан.. Да ладно, фиг с ними, пусть будут, не критично
 
Сверху