Всем привет. Такая проблема, не могу сделать нормальную генерацию своих растений. Либо работает не так или вообще не работает, либо крашит игру.
Пытался сделать по этому примеру:
Но у меня начинает лагать прогрузка карты, да и генерируется только первое растение, и то 1 куст. А я хочу сделать что бы они росли пачками (3-6 и т.д) но не выходит.
Пытался делать так:
Но так только игра даже не стартует. Кто может подсказать что подправить, или рабочий код. Буду благодарен. Делаю на 1.6.2
Пытался сделать по этому примеру:
public class WorldGenRasteniya implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
switch(world.provider.dimensionId){
case -1:generateNether(world, random, chunkX * 16, chunkZ * 16);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}
private void generateEnd(World world, Random random, int i, int j) {
}
private void generateSurface(World world, Random random, int i, int j) {
//Чтобы генерировалось более беспорядочно, без них генерируется порядочно.
i += random.nextInt(16);
j += random.nextInt(16);
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.BuzinaGen.blockID);
}
}
}
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.KrasnBuzinaGen.blockID);
}
}
}
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.Bolotnik.blockID);
}
}
}
//Генерация в биоме Океан.
//if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.ocean.biomeID) {
//for (int k = 1; k < world.getHeight(); ++k) {
//В материале вода и под этим местом должен быть блок песка.
//if (world.getBlockId(i, k - 1, j) == Block.sand.blockID && world.getBlockMaterial(i, k, j) == Material.water) {
//world.setBlock(i, k, j, anotherworld.BuzinaGen.blockID);
//}
//}
//}
}
private void generateNether(World world, Random random, int i, int j) {
}
}
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
switch(world.provider.dimensionId){
case -1:generateNether(world, random, chunkX * 16, chunkZ * 16);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}
private void generateEnd(World world, Random random, int i, int j) {
}
private void generateSurface(World world, Random random, int i, int j) {
//Чтобы генерировалось более беспорядочно, без них генерируется порядочно.
i += random.nextInt(16);
j += random.nextInt(16);
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.BuzinaGen.blockID);
}
}
}
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.KrasnBuzinaGen.blockID);
}
}
}
if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forest.biomeID || world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.forestHills.biomeID) {
for (int k = 1; k < world.getHeight(); ++k) {
if (world.getBlockId(i, k - 1, j) == Block.grass.blockID && world.isAirBlock(i, k, j)) {
world.setBlock(i, k, j, anotherworld.Bolotnik.blockID);
}
}
}
//Генерация в биоме Океан.
//if (world.getBiomeGenForCoords(i, j).biomeID == BiomeGenBase.ocean.biomeID) {
//for (int k = 1; k < world.getHeight(); ++k) {
//В материале вода и под этим местом должен быть блок песка.
//if (world.getBlockId(i, k - 1, j) == Block.sand.blockID && world.getBlockMaterial(i, k, j) == Material.water) {
//world.setBlock(i, k, j, anotherworld.BuzinaGen.blockID);
//}
//}
//}
}
private void generateNether(World world, Random random, int i, int j) {
}
}
Пытался делать так:
package assets.anotherworld;
import java.util.Random;
import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeGenForest;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.common.BiomeDictionary;
public class TestovayaGen implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
switch(world.provider.dimensionId){
case -1:generateNether(world, random, chunkX * 16, chunkZ * 16);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}
private void generateEnd(World world, Random random, int i, int j) {
}
public void generateSurface(World world, Random rand, int chunkX, int chunkZ) {
for (int i = 0; i < 90; i++) {
int randPosX = chunkX + rand.nextInt(16);
int randPosY = rand.nextInt(80);//Высота генерации
int randPosZ = chunkZ + rand.nextInt(16);
(new Mamka()).generate(world, rand, randPosX, randPosY, randPosZ);
}
}
private void generateNether(World world, Random random, int i, int j) {
}
}
package assets.anotherworld;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
public class Mamka extends WorldGenerator {
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
{
for (int l = 0; l < 100; ++l)
{
int i1 = par3 + par2Random.nextInt(8) - par2Random.nextInt(8);
int j1 = par4 + par2Random.nextInt(4) - par2Random.nextInt(4);
int k1 = par5 + par2Random.nextInt(8) - par2Random.nextInt(8);
if (par1World.isAirBlock(i1, j1, k1) && par1World.getBlockId(i1, j1 - 1, k1) == Block.grass.blockID && Block.blockDiamond.canPlaceBlockAt(par1World, i1, j1, k1))
{
par1World.setBlock(i1, j1, k1, Block.blockDiamond.blockID, par2Random.nextInt(4), 2);
}
}
return true;
}
}
import java.util.Random;
import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeGenForest;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.common.BiomeDictionary;
public class TestovayaGen implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
switch(world.provider.dimensionId){
case -1:generateNether(world, random, chunkX * 16, chunkZ * 16);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}
private void generateEnd(World world, Random random, int i, int j) {
}
public void generateSurface(World world, Random rand, int chunkX, int chunkZ) {
for (int i = 0; i < 90; i++) {
int randPosX = chunkX + rand.nextInt(16);
int randPosY = rand.nextInt(80);//Высота генерации
int randPosZ = chunkZ + rand.nextInt(16);
(new Mamka()).generate(world, rand, randPosX, randPosY, randPosZ);
}
}
private void generateNether(World world, Random random, int i, int j) {
}
}
package assets.anotherworld;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;
public class Mamka extends WorldGenerator {
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
{
for (int l = 0; l < 100; ++l)
{
int i1 = par3 + par2Random.nextInt(8) - par2Random.nextInt(8);
int j1 = par4 + par2Random.nextInt(4) - par2Random.nextInt(4);
int k1 = par5 + par2Random.nextInt(8) - par2Random.nextInt(8);
if (par1World.isAirBlock(i1, j1, k1) && par1World.getBlockId(i1, j1 - 1, k1) == Block.grass.blockID && Block.blockDiamond.canPlaceBlockAt(par1World, i1, j1, k1))
{
par1World.setBlock(i1, j1, k1, Block.blockDiamond.blockID, par2Random.nextInt(4), 2);
}
}
return true;
}
}
Но так только игра даже не стартует. Кто может подсказать что подправить, или рабочий код. Буду благодарен. Делаю на 1.6.2