Замена бедрока

Версия Minecraft
1.7.10
699
9
53
Нужно чтобы на 1 уровне, везде, бедрок был заменён моей жидкостью, назову её магмой. При попадании в магму игрок, хоть в выживалке, хоть в креативке, умирает. На 2 уровне будет блок коры с прочностью обсидиана. Весь остальной бедрок на 3 уровне и выше, должен быть заменён на камень.
Вопросы:
1. Как сделать жидкость?
2. Как сделать смерть игрока при попадании в жидкость даже в креативе?
3. Как сделать описанные изменения в плане генерации?
 
1,202
37
238
Nikitatik написал(а):
Ivasik написал(а):
1.Учебник в помощь.
2.При попадании в жидкость убивать.
3.Не понял...

2. А как отловить попадание в эту магму?
3. Как всю вышеописаную генерацию замутить?

2 - смотри песок душ (код, где он замедляет; меняй его на убийство (точно не знаю как) энтити)
 
5,024
47
784
2.Можно проще - если игрок на 0 уровне, мочить его. Не сразу, а дамажить.
3. Хуком в ванильный ворлдген
 
1,976
68
220
1. Жидкость легко гуглится/ищется на форуме
2. В блоке метод onEntityCollidedWithBlock, там entity.attackEntityFrom(DamageSource.outOfWorld, Float.MAX_VALUE);
3. Если свой мир - просто пропиши блоки в зависимости от yCoord. Если ванильный - используй хуки, либо перепиши генератор, если хуки не любишь.
 
699
9
53
AlexSocol написал(а):
1. Жидкость легко гуглится/ищется на форуме
2. В блоке метод onEntityCollidedWithBlock, там entity.attackEntityFrom(DamageSource.outOfWorld, Float.MAX_VALUE);
3. Если свой мир - просто пропиши блоки в зависимости от yCoord. Если ванильный - используй хуки, либо перепиши генератор, если хуки не любишь.

Хуки не люблю. А вот про генератор поподробнее пожалуйста.
 
691
1
5
Nikitatik написал(а):
AlexSocol написал(а):
1. Жидкость легко гуглится/ищется на форуме
2. В блоке метод onEntityCollidedWithBlock, там entity.attackEntityFrom(DamageSource.outOfWorld, Float.MAX_VALUE);
3. Если свой мир - просто пропиши блоки в зависимости от yCoord. Если ванильный - используй хуки, либо перепиши генератор, если хуки не любишь.

Хуки не люблю. А вот про генератор поподробнее пожалуйста.

Имелось в виду переписать ванильную генерацию мира)
 
3,005
192
592
Есть мод, который делает плоскую генерацию бедрока.
Посмотри как сделано там, перепиши к себе.
А спавн своей жидкости - вроде как можно сделать так же, как и спавн руд, только не рандомно, а конкретно на всем чанке 1-ого уровня.
 
699
9
53
Doc написал(а):
Есть мод, который делает плоскую генерацию бедрока.
Посмотри как сделано там, перепиши к себе.
А спавн своей жидкости - вроде как можно сделать так же, как и спавн руд, только не рандомно, а конкретно на всем чанке 1-ого уровня.

Название мода вам известно?
 
3,005
192
592
699
9
53
Doc написал(а):
Nikitatik написал(а):
Название мода вам известно?

Мне - да, Вам - не интересовался.

FlatBedrock вы имели ввиду? Мод декомпилировал, посмотрел, ничё не понял.
Можете дать ссылку на тему где рассказывается про генерацию.
 
5,024
47
784
1. Ставишь хуклибу от GloomyFolken(если не хочешь - учи ASM)
2. Открываешь net.minecraft.world.biome.Biome.class
3. Ищешь метод 
Код:
public final void generateBiomeTerrain(World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal)
    {
        int i = worldIn.getSeaLevel();
        IBlockState iblockstate = this.topBlock;
        IBlockState iblockstate1 = this.fillerBlock;
        int j = -1;
        int k = (int)(noiseVal / 3.0D + 3.0D + rand.nextDouble() * 0.25D);
        int l = x & 15;
        int i1 = z & 15;
        BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();

        for (int j1 = 255; j1 >= 0; --j1)
        {
            if (j1 <= rand.nextInt(5))
            {
                chunkPrimerIn.setBlockState(i1, j1, l, BEDROCK);
            }
            else
            {
                IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l);

                if (iblockstate2.getMaterial() == Material.AIR)
                {
                    j = -1;
                }
                else if (iblockstate2.getBlock() == Blocks.STONE)
                {
                    if (j == -1)
                    {
                        if (k <= 0)
                        {
                            iblockstate = AIR;
                            iblockstate1 = STONE;
                        }
                        else if (j1 >= i - 4 && j1 <= i + 1)
                        {
                            iblockstate = this.topBlock;
                            iblockstate1 = this.fillerBlock;
                        }

                        if (j1 < i && (iblockstate == null || iblockstate.getMaterial() == Material.AIR))
                        {
                            if (this.getFloatTemperature(blockpos$mutableblockpos.setPos(x, j1, z)) < 0.15F)
                            {
                                iblockstate = ICE;
                            }
                            else
                            {
                                iblockstate = WATER;
                            }
                        }

                        j = k;

                        if (j1 >= i - 1)
                        {
                            chunkPrimerIn.setBlockState(i1, j1, l, iblockstate);
                        }
                        else if (j1 < i - 7 - k)
                        {
                            iblockstate = AIR;
                            iblockstate1 = STONE;
                            chunkPrimerIn.setBlockState(i1, j1, l, GRAVEL);
                        }
                        else
                        {
                            chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);
                        }
                    }
                    else if (j > 0)
                    {
                        --j;
                        chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);

                        if (j == 0 && iblockstate1.getBlock() == Blocks.SAND && k > 1)
                        {
                            j = rand.nextInt(4) + Math.max(0, j1 - 63);
                            iblockstate1 = iblockstate1.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? RED_SANDSTONE : SANDSTONE;
                        }
                    }
                }
            }
        }
    }
4. Копипастишь все что там есть. Создаешь метод с аннотацией @Hook где они у тебя регаются.
5. И меняешь там бедрок на то что ты хочешь. Вот например с лавой
[font=Monaco, Consolas, Courier, monospace]generateBiomeTerrain[/font][/SIZE]]
Код:
@Hook(returnCondition = ReturnCondition.ALWAYS)
public static final void generateBiomeTerrain(Biome biome, World worldIn, Random rand, ChunkPrimer chunkPrimerIn, int x, int z, double noiseVal)
    {
        int i = worldIn.getSeaLevel();
        IBlockState iblockstate = this.topBlock;
        IBlockState iblockstate1 = this.fillerBlock;
        int j = -1;
        int k = (int)(noiseVal / 3.0D + 3.0D + rand.nextDouble() * 0.25D);
        int l = x & 15;
        int i1 = z & 15;
        BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos();

        for (int j1 = 255; j1 >= 0; --j1)
        {
            if (j1 <= rand.nextInt(5))
            {
                chunkPrimerIn.setBlockState(i1, j1, l, Blocks.LAVA.getDefaultState();
            }
            else
            {
                IBlockState iblockstate2 = chunkPrimerIn.getBlockState(i1, j1, l);

                if (iblockstate2.getMaterial() == Material.AIR)
                {
                    j = -1;
                }
                else if (iblockstate2.getBlock() == Blocks.STONE)
                {
                    if (j == -1)
                    {
                        if (k <= 0)
                        {
                            iblockstate = AIR;
                            iblockstate1 = STONE;
                        }
                        else if (j1 >= i - 4 && j1 <= i + 1)
                        {
                            iblockstate = this.topBlock;
                            iblockstate1 = this.fillerBlock;
                        }

                        if (j1 < i && (iblockstate == null || iblockstate.getMaterial() == Material.AIR))
                        {
                            if (this.getFloatTemperature(blockpos$mutableblockpos.setPos(x, j1, z)) < 0.15F)
                            {
                                iblockstate = ICE;
                            }
                            else
                            {
                                iblockstate = WATER;
                            }
                        }

                        j = k;

                        if (j1 >= i - 1)
                        {
                            chunkPrimerIn.setBlockState(i1, j1, l, iblockstate);
                        }
                        else if (j1 < i - 7 - k)
                        {
                            iblockstate = AIR;
                            iblockstate1 = STONE;
                            chunkPrimerIn.setBlockState(i1, j1, l, GRAVEL);
                        }
                        else
                        {
                            chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);
                        }
                    }
                    else if (j > 0)
                    {
                        --j;
                        chunkPrimerIn.setBlockState(i1, j1, l, iblockstate1);

                        if (j == 0 && iblockstate1.getBlock() == Blocks.SAND && k > 1)
                        {
                            j = rand.nextInt(4) + Math.max(0, j1 - 63);
                            iblockstate1 = iblockstate1.getValue(BlockSand.VARIANT) == BlockSand.EnumType.RED_SAND ? RED_SANDSTONE : SANDSTONE;
                        }
                    }
                }
            }
        }
    }

6.????
7.PROFIT!!!1! 
Теперь у тебя вместо бедрока во всех биомах будет лава
 
7,099
324
1,510
А почему бы просто не сделать генератор мира, заменяющий бедрок как че-то другое?


Первый ответ:
http://forum.mcmodding.ru/%D0%A2%D0%B5%D0%BC%D0%B0-%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%D0%B0%D1%8F-%D0%BC%D0%BE%D0%B4%D0%B0%D0%BC%D0%B8?highlight=%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F
 
7,099
324
1,510
А есть аналоги setBlock для уже сгенерированного мира, но побыстрее?
 
5,024
47
784
Agravaine написал(а):
Потому что setBlock очень медленный.

Да-да, хотелось бы узнать. А то мой тяжелый ворлдген генерит мир минуты по три
 
Сверху