Генерация растений, не могу и все

Всем привет. Такая проблема, не могу сделать нормальную генерацию своих растений. Либо работает не так или вообще не работает, либо крашит игру. 
Пытался сделать по этому примеру:
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) {



}

} 
Но у меня начинает лагать прогрузка карты, да и генерируется только первое растение, и то 1 куст. А я хочу сделать что бы они росли пачками (3-6 и т.д) но не выходит.

Пытался делать так:
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;
    }
}

Но так только игра даже не стартует. Кто может подсказать что подправить, или рабочий код. Буду благодарен. Делаю на 1.6.2
 
anotherworld.Bolotnik.blockID
У тебя переменная "Bolotnik" с большой буквы, а должна с маленькой (и подобные переменные, тожt должны быть с маленькой).
Если после этого будет опят лагать, то возможно в коде этого блока, что-то мешает стабильности.

На счёт второго варианта, я во-обще не могу понять (возможно моих знаний не хватает).
На счёт рабочего кода, это нужно смастерить по твоему коду.
 
timaxa007 написал(а):
anotherworld.Bolotnik.blockID
У тебя переменная "Bolotnik" с большой буквы, а должна с маленькой (и подобные переменные, тожt должны быть с маленькой).
Если после этого будет опят лагать, то возможно в коде этого блока, что-то мешает стабильности.

На счёт второго варианта, я во-обще не могу понять (возможно моих знаний не хватает).
На счёт рабочего кода, это нужно смастерить по твоему коду.
Я там не много тупанул, вместо Bolotink должен быть BolotnikGen, но отличий все равно в роботе нет.
package assets.anotherworld;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.IPlantable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
 
public class BolotnikGen extends Block implements IPlantable
{
    protected BolotnikGen(int par1)
    {
        super(par1, Material.ground); // Материал
        this.setCreativeTab(CreativeTabs.tabDecorations); // Таблица в креативе
        this.setHardness(0.1F);//Прочность
        this.setResistance(0.2F);//Взрывоустойчивость
        this.setStepSound(soundGravelFootstep);
        float f = 0.2F;
        this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 3.0F, 0.5F + f);
    }
    
    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
    {
        return null;
    }
    
    public int idDropped(int par1, Random par2Random, int par3)
    {
        if (par3 > 3)
        {
            par3 = 8;
        }

        return par2Random.nextInt(2 - par3 * 3) == 0 ? anotherworld.BolotnikGen.blockID : anotherworld.BolotnikSeed.itemID;
    }
    
    public int getRenderType()
    {
        return 1;//Рендерим как цветок
    }
    
    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
    {
        return super.canPlaceBlockAt(par1World, par2, par3, par4) && canBlockStay(par1World, par2, par3, par4);
    }
    
    protected boolean canThisPlantGrowOnThisBlockID(int par1)
    {
        return par1 == Block.grass.blockID || par1 == Block.dirt.blockID || par1 == Block.tilledField.blockID;
    }
    
    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
    {
        super.onNeighborBlockChange(par1World, par2, par3, par4, par5);
        this.checkFlowerChange(par1World, par2, par3, par4);
    }
    
    protected final void checkFlowerChange(World par1World, int par2, int par3, int par4)
    {
        if (!this.canBlockStay(par1World, par2, par3, par4))
        {
            this.dropBlockAsItem(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), 0);
            par1World.setBlock(par2, par3, par4, 0, 0, 2);
        }
    }
    
    public boolean canBlockStay(World par1World, int par2, int par3, int par4)
    {
        Block soil = blocksList[par1World.getBlockId(par2, par3 - 1, par4)];
        return (par1World.getFullBlockLightValue(par2, par3, par4) >= 8 || par1World.canBlockSeeTheSky(par2, par3, par4)) && 
                (soil != null && soil.canSustainPlant(par1World, par2, par3 - 1, par4, ForgeDirection.UP, this));
    }
    
    public boolean renderAsNormalBlock()
    {
        return false;
    }
    
    public boolean isOpaqueCube()
    {
        return false;
    }
    
    @Override
public EnumPlantType getPlantType(World world, int x, int y, int z) {
// TODO Auto-generated method stub
return EnumPlantType.Plains;
}

@Override
public int getPlantID(World world, int x, int y, int z)
    {
        return blockID;
    }

@Override
public int getPlantMetadata(World world, int x, int y, int z) {
// TODO Auto-generated method stub
return -1;
}
    
    /*
   * Текстура
   */
    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister ir)
    {
        this.blockIcon = ir.registerIcon(ModInfo.MODID + ":BolotnikGen");
    }
}
 
Назад
Сверху