Озера

1,057
50
234
Добрый день.

Мне нужно сделать вот такое озеро в своем дименсе:
N1P5BcPUCdA.jpg


WorldGenLakes делает маленькие озерца (лужи можно сказать)

Как можно сгенерировать данное озеро?
 
все логично, сделай биом, типо океана.
 
Сделал я биом:
Код:
package blessentumble.moons.titan.world.gen.biomes;

import java.util.Random;

import blessentumble.core.fluids.FluidsAddon;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;

public class BiomeGenTitanOcean extends BiomeGenBase{
 
 private static final String __OBFID = "CL_00000179";
 public static final BiomeGenBase TitanOcean = new BiomeGenTitanOcean(201).setBiomeName("TitanOcean");
 

 public BiomeGenTitanOcean(int var1)
 {
 super(var1);
 this.spawnableCreatureList.clear();
this.rainfall = 0.0F;
 }

 public BiomeGenBase.TempCategory getTempCategory()
 {
 return BiomeGenBase.TempCategory.OCEAN;
 }

 public void genTerrainBlocks(World world, Random rand, Block[] block, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
 {
 super.genTerrainBlocks(world, rand, block, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
 }
}

Биом в игре появился:
agwsxgmfa6le.png
А как теперь в нем верхний блок моей жидкостью заменить?
 
ну ты добавь генерацию воды, как я не знаю, так что глянь в класс биома океана.
[merge_posts_bbcode]Добавлено: 27.03.2015 16:16:06[/merge_posts_bbcode]

public BiomeGenBase(int p_i1971_1_, boolean register)
    {
        //эта строчка(хотя это будет верхние блоки каждой точки биома) заменяет верхние блоки твоим, передай этому параметру значение своего блока жидкости
        this.topBlock = Blocks.grass;
 
Параллельно поковырял декомпил другово мода, там озера в чанка 2-3 генерируются без всяких биомов.
Просто в текущем биоме озеро.
[merge_posts_bbcode]Добавлено: 27.03.2015 21:07:19[/merge_posts_bbcode]

Dovakin написал(а):
Скопируй с океана
Код:
package net.minecraft.world.biome;

import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.world.World;

public class BiomeGenOcean extends BiomeGenBase
{
 private static final String __OBFID = "CL_00000179";

 public BiomeGenOcean(int p_i1985_1_)
 {
 super(p_i1985_1_);
 this.spawnableCreatureList.clear();
 }

 public BiomeGenBase.TempCategory getTempCategory()
 {
 return BiomeGenBase.TempCategory.OCEAN;
 }

 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_)
 {
 super.genTerrainBlocks(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
 }
}
 
Я так понял, крутить эти параметры?:
Код:
else
 {
 var2 -= 4;
 boolean[] aboolean = new boolean[2048];
 int l = rand.nextInt(4) + 4;
 int i1;

 for (i1 = 0; i1 < l; ++i1)
 {
 double d0 = rand.nextDouble() * 6.0D + 3.0D;
 double d1 = rand.nextDouble() * 4.0D + 2.0D;
 double d2 = rand.nextDouble() * 6.0D + 3.0D;
 double d3 = rand.nextDouble() * (16.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D;
 double d4 = rand.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D;
 double d5 = rand.nextDouble() * (16.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D;

 for (int k1 = 1; k1 < 15; ++k1)
 {
 for (int l1 = 1; l1 < 15; ++l1)
 {
 for (int i2 = 1; i2 < 7; ++i2)
 {
 double d6 = ((double)k1 - d3) / (d0 / 2.0D);
 double d7 = ((double)i2 - d4) / (d1 / 2.0D);
 double d8 = ((double)l1 - d5) / (d2 / 2.0D);
 double d9 = d6 * d6 + d7 * d7 + d8 * d8;

 if (d9 < 1.0D)
 {
 aboolean[(k1 * 16 + l1) * 8 + i2] = true;
 }
 }
 }
 }
 }
 
Не знаю. Пробуй на вывод. Возможно все работает,попробуй в собраном майне
 
Неа, увеличил в 3 раза, ничего не изменилось....

Код:
package blessentumble.moons.titan.world.gen;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.feature.WorldGenerator;

public class WorldGenMethan extends WorldGenerator
{
 private Block block;
 private Block spreadBlock;
 private int spreadBlockMeta;

 public WorldGenMethan(Block block, Block spreadBlock)
 {
 this.block = block;
 this.spreadBlock = spreadBlock;
 }

 public boolean generate(World world, Random rand, int x, int y, int z)
 {
 x -= 32;
 z -= 32;

 while (y > 5 && world.isAirBlock(x, y, z))
 {
 y--;
 }
 if (y <= 4)
 {
 return false;
 }

 y -= 4;
 boolean[] arrayOfBoolean = new boolean[2048];
 int i = rand.nextInt(4) + 4;

 for (int j = 0; j < i; j++)
 {
 double d1 = rand.nextDouble() * 6.0D + 4.0D;
 double d2 = rand.nextDouble() * 4.0D + 2.0D;
 double d3 = rand.nextDouble() * 6.0D + 4.0D;
 double d4 = rand.nextDouble() * (16.0D - d1 - 2.0D) + 1.0D + d1 / 2.0D;
 double d5 = rand.nextDouble() * (8.0D - d2 - 4.0D) + 2.0D + d2 / 2.0D;
 double d6 = rand.nextDouble() * (16.0D - d3 - 2.0D) + 1.0D + d3 / 2.0D;

 for (int i2 = 1; i2 < 15; i2++)
 {
 for (int i3 = 1; i3 < 15; i3++)
 {
 for (int i4 = 1; i4 < 7; i4++)
 {
 double d7 = (i2 - d4) / (d1 / 2.0D);
 double d8 = (i4 - d5) / (d2 / 2.0D);
 double d9 = (i3 - d6) / (d3 / 2.0D);
 double d10 = d7 * d7 + d8 * d8 + d9 * d9;

 if (d10 < 1.0D)
 {
 arrayOfBoolean[(i2 * 16 + i3) * 8 + i4] = true;
 }
 }
 }
 }
 }

 int k;
 int m;

 for (int j = 0; j < 16; j++)
 {
 for (k = 0; k < 16; k++)
 {
 for (m = 0; m < 8; m++)
 {
 int n = arrayOfBoolean[(j * 16 + k) * 8 + m] && (j < 15 && arrayOfBoolean[((j + 1) * 16 + k) * 8 + m] || j > 0 && arrayOfBoolean[((j - 1) * 16 + k) * 8 + m] || k < 15 && arrayOfBoolean[(j * 16 + k + 1) * 8 + m] || k > 0 && arrayOfBoolean[(j * 16 + k - 1) * 8 + m] || m < 7 && arrayOfBoolean[(j * 16 + k) * 8 + m + 1] || m > 0 && arrayOfBoolean[(j * 16 + k) * 8 + m - 1]) ? 1 : 0;

 if (n != 0)
 {
 Material localMaterial = world.getBlock(x + j, y + m, z + k).getMaterial();

 if (m >= 4 && localMaterial.isLiquid())
 {
 return false;
 }
 if (m < 4 && !localMaterial.isSolid() && world.getBlock(x + j, y + m, z + k) != this.block)
 {
 return false;
 }
 }
 }
 }
 }
 for (int j = 0; j < 16; j++)
 {
 for (k = 0; k < 16; k++)
 {
 for (m = 0; m < 8; m++)
 {
 if (arrayOfBoolean[(j * 16 + k) * 8 + m])
 {
 world.setBlock(x + j, y + m, z + k, m >= 4 ? Blocks.air : this.block, 0, 2);
 }
 }
 }
 }
 for (int j = 0; j < 16; j++)
 {
 for (k = 0; k < 16; k++)
 {
 for (m = 4; m < 8; m++)
 {
 if (arrayOfBoolean[(j * 16 + k) * 8 + m] && world.getBlock(x + j, y + m - 1, z + k) == Blocks.dirt && world.getSavedLightValue(EnumSkyBlock.Sky, x + j, y + m, z + k) > 0)
 {
 world.setBlock(x + j, y + m - 1, z + k, Blocks.grass, 0, 2);
 }
 }
 }
 }
 if (this.block.getMaterial() == Material.lava)
 {
 for (int j = 0; j < 16; j++)
 {
 for (k = 0; k < 16; k++)
 {
 for (m = 0; m < 8; m++)
 {
 int i1 = arrayOfBoolean[(j * 16 + k) * 8 + m] && (j < 15 && arrayOfBoolean[((j + 1) * 16 + k) * 8 + m] || j > 0 && arrayOfBoolean[((j - 1) * 16 + k) * 8 + m] || k < 15 && arrayOfBoolean[(j * 16 + k + 1) * 8 + m] || k > 0 && arrayOfBoolean[(j * 16 + k - 1) * 8 + m] || m < 7 && arrayOfBoolean[(j * 16 + k) * 8 + m + 1] || m > 0 && arrayOfBoolean[(j * 16 + k) * 8 + m - 1]) ? 1 : 0;

 if (i1 != 0 && (m < 4 || rand.nextInt(2) != 0) && world.getBlock(x + j, y + m, z + k).getMaterial().isSolid())
 {
 world.setBlock(x + j, y, z + k, this.spreadBlock, this.spreadBlockMeta, 2);
 }
 }
 }
 }
 }
 return true;
 }
}
Где тут менять то?
 
Вертел, вертел эти параментры - безрелузьтатно.

Озерки сделались квадратные и все, больше нехотелись менятся....

Что делать?
 
Подниму тему, ибо решения не нашел.
Перерыл minecraftforum, декомпильнул Сумеречный лес, Shadow World, но все без результатно....

Показаны только генерации WorldGenLakes, но генерируютя небольшие озерки. А мне бы как на скрине.
 
Назад
Сверху