[Решено] BiomeGenBase

Статус
В этой теме нельзя размещать новые ответы.
1,976
68
220
И снова здравствуйте :D
Есть в вышеозначенном ванилла-классе проверка блока для замены его на top или filler:
Код:
if (block2 == Blocks.stone) {
...
    block = this.topBlock;
    block1 = this.fillerBlock;
...
}
Но мне в своём мире хотелось бы генерировать собственный тип камня.
Покажите, пожалуйста, если есть какой-то простой способ устроить это, без всяких рекурсий, рефлексий, трансформерров и прочих страшных слов? :D
Или проще будет просто переписать BiomeGenBase под себя?)
[merge_posts_bbcode]Добавлено: 13.06.2016 22:56:14[/merge_posts_bbcode]

Наверное, не очень правильно описал проблему:
Если в своём мире заменить Blocks.stone на MyMod.myStone - topBlock и fillerBlock, указанные в биоме, перестанут генерироваться (ибо Blocks.stone != MyMod.myStone, что логично), прерывая генерацию деревьев, травы, и т.д. и т.п. То есть либо свой камень, либо своя трава. Мне вот с этим нужна помощь)
 
1,976
68
220
Не-а, если наследовать BiomeGenBase он говорит "cannot override final metod from BiomeGenBase", так что унаследовать не выйдет, а по-другому он не принимает (cannot cast BoimeGenBase to BiomeGenModded)
 
1,976
68
220
А как заменять? Проверка-то в финальном:
Код:
 public void genTerrainBlocks(World p_150573_1_, Random p_150573_2_, Block[] p_150573_3_, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
    {
        this.genBiomeTerrain(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
    }

    public final void genBiomeTerrain(World p_150560_1_, Random p_150560_2_, Block[] p_150560_3_, byte[] p_150560_4_, int p_150560_5_, int p_150560_6_, double p_150560_7_)
    {
        boolean flag = true;
        Block block = this.topBlock;
        byte b0 = (byte)(this.field_150604_aj & 255);
        Block block1 = this.fillerBlock;
        int k = -1;
        int l = (int)(p_150560_7_ / 3.0D + 3.0D + p_150560_2_.nextDouble() * 0.25D);
        int i1 = p_150560_5_ & 15;
        int j1 = p_150560_6_ & 15;
        int k1 = p_150560_3_.length / 256;

        for (int l1 = 255; l1 >= 0; --l1)
        {
            int i2 = (j1 * 16 + i1) * k1 + l1;

            if (l1 <= 0 + p_150560_2_.nextInt(5))
            {
                p_150560_3_[i2] = Blocks.bedrock;
            }
            else
            {
                Block block2 = p_150560_3_[i2];

                if (block2 != null && block2.getMaterial() != Material.air)
                {
                    if (block2 == Blocks.stone)
                    {
                        if (k == -1)
                        {
                            if (l <= 0)
                            {
                                block = null;
                                b0 = 0;
                                block1 = Blocks.stone;
                            }
                            else if (l1 >= 59 && l1 <= 64)
                            {
                                block = this.topBlock;
                                b0 = (byte)(this.field_150604_aj & 255);
                                block1 = this.fillerBlock;
                            }

                            if (l1 < 63 && (block == null || block.getMaterial() == Material.air))
                            {
                                if (this.getFloatTemperature(p_150560_5_, l1, p_150560_6_) < 0.15F)
                                {
                                    block = Blocks.ice;
                                    b0 = 0;
                                }
                                else
                                {
                                    block = Blocks.water;
                                    b0 = 0;
                                }
                            }

                            k = l;

                            if (l1 >= 62)
                            {
                                p_150560_3_[i2] = block;
                                p_150560_4_[i2] = b0;
                            }
                            else if (l1 < 56 - l)
                            {
                                block = null;
                                block1 = Blocks.stone;
                                p_150560_3_[i2] = Blocks.gravel;
                            }
                            else
                            {
                                p_150560_3_[i2] = block1;
                            }
                        }
                        else if (k > 0)
                        {
                            --k;
                            p_150560_3_[i2] = block1;

                            if (k == 0 && block1 == Blocks.sand)
                            {
                                k = p_150560_2_.nextInt(4) + Math.max(0, l1 - 63);
                                block1 = Blocks.sandstone;
                            }
                        }
                    }
                }
                else
                {
                    k = -1;
                }
            }
        }
    }
[merge_posts_bbcode]Добавлено: 13.06.2016 23:38:38[/merge_posts_bbcode]

А, просто вписать одно в другое

[merge_posts_bbcode]Добавлено: 13.06.2016 23:38:51[/merge_posts_bbcode]

Хех, тупанул :D
 
769
1
42
Тебе удобно писать столько страшных слов?
Код:
p_150560_1
 
1,976
68
220
RonyC написал(а):
Тебе удобно писать столько страшных слов?
Код:
p_150560_1
Это из ванилла-класса, недодеобфусцированного (Ref. Libs. -> ForgeSrc). У себя я уже поменял.
[merge_posts_bbcode]Добавлено: 14.06.2016 13:09:25[/merge_posts_bbcode]

Да, действительно всё хорошо, наследование BiomeGenBase и переопределение метода генерации, и мой мир теперь с моим камнем, спасибо Liahim, за наводку :D

Но вот появилась новая проблема - пещеры тоже не генерируются из-за того, что камень другой. И я более чем уверен, что руды тоже генерироваться не будут. :ermm:
Так что я пошёл переписывать половину ванилла-классов с генерацией, а тему можно закрывать :D
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху