Jump to content

[Solved] Ore generation tutorial ?


Soviet

Recommended Posts

Hello,

 

I'm stuck once again in my coding, due to the fact that I've not yet found a tutorial for regular world ore spawn for 1.5+.

Can anyone give me a link to a tutorial for that or explain me how to ?

 

Thank you by advance.

Link to comment
Share on other sites

In your @Init Method, write the following:

		GameRegistry.registerWorldGenerator(new WorldGenCustomOres());

(You can change the name of WorldGenCustomOres if you want)

 

 

This is your WorldGenCustomOres:

package your.package;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;

public class WorldGenCustomOres 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 generateSurface(World world, Random random, int i, int j)
{
	for(int k = 0; k < 5; k++)//5 = maximum veins per chunk
	{
		int randomPosX = i + random.nextInt(16);
		int randomPosY = random.nextInt(29);//29 = spawns up to height
		int randomPosZ = j + random.nextInt(16);

		(new WorldGenMinable(yourOre, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein
	}
}

private void generateNether(World world, Random random, int i, int j)
{
}

private void generateEnd(World world, Random random, int i, int j)
{
}
}

The Block.stone.blockID says that the ore can only replace stone blocks in the world. This gets rid of the little chance to override diamonds and other ores.

 

If you want to add another ore, just place another

for(int k = 0; k < 5; k++)//5 = maximum veins per chunk
	{
		int randomPosX = i + random.nextInt(16);
		int randomPosY = random.nextInt(29);//29 = spawns up to height
		int randomPosZ = j + random.nextInt(16);

		(new WorldGenMinable(yourOre, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

under your existing one.

 

Hope that helped.

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

I can't enter my ore, it does not find it.

 

Here is my ore:

private final static Block oreCopper = new SovOreCopper(802, 1, Material.rock).setHardness(2F)
				.setStepSound(Block.soundStoneFootstep).setUnlocalizedName("copperOre").setCreativeTab(CreativeTabs.tabBlock);

 

Is there something wrong ?

Link to comment
Share on other sites

I think you wrote this:

(new WorldGenMinable(oreCopper, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );

As you are in another class, you have to import your Main class and write it in front of the variable from your main class. In this case the above line would be the following:

(new WorldGenMinable(yourMainClass.oreCopper, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );

 

And another thing: As you will come across many things where you need your block/item variable in other classes, change

private final static

to

public final static

The private says that this variable is only available for the class it's in. The public makes it, well, publically available.

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

I'm using the latest Forge Source (7.8.1). There are no quick fixes, it only tells me the error. Here is my WorldGen class:

 

 

package s0vietique.alloycraft.client;

import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;
import s0vietique.alloycraft.client.Alloycraft;

public class WorldGenModOres 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 generateSurface(World world, Random random, int i, int j)
{
	for(int k = 0; k < 3; k++)
	{
		int randomPosX = i + random.nextInt(16);
		int randomPosY = random.nextInt(50);
		int randomPosZ = j + random.nextInt(16);

		(new WorldGenMinable(Alloycraft.oreCopper, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein
	}
}

private void generateNether(World world, Random random, int i, int j)
{
}

private void generateEnd(World world, Random random, int i, int j)
{
}
}

 

Link to comment
Share on other sites

It did not change anything, and it seems your method screws all my items. Switched back to "my way of coding".

 

Same error for WorldGen: "The constructor WorldGenMinable(Block, int, int, int) is undefined"

 

I tried those and they didn't work:

 

(new WorldGenMinable(Alloycraft.oreCopper, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

 

 

(new WorldGenMinable(Alloycraft.oreCopper.blockID, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

 

 

(new WorldGenMinable(oreCopper.blockID, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

 

(new WorldGenMinable(Block.oreCopper, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

 

(new WorldGenMinable(Block.oreCopper.blockID, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

Link to comment
Share on other sites

Here is my SovOreCopper.java:

 

package s0vietique.alloycraft.client;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;

public class SovOreCopper extends Block {

        public SovOreCopper (int id, int texture, Material material) {
                super(id, material);
        }
       
        @Override
        public void registerIcons(IconRegister iconRegister) {
                this.blockIcon = iconRegister.registerIcon("Alloycraft:copperoreblock");
        }
        public int idDropped(int par1, Random random, int zero) {
            return this.blockID;
    }
}
[/spoiler]

Link to comment
Share on other sites

Maybe try this:

(new WorldGenMinable(Alloycraft.oreCopper.blockID, 6)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

instead of

(new WorldGenMinable(Alloycraft.oreCopper.blockID, 0, 6, Block.stone.blockID)).generate(world, random, randomPosX , randomPosY , randomPosZ );//6 =  the number of maximum ore blocks per vein

↑↑↑↑↑↑↑↑↑↑ Click it please? :3 ↑↑↑↑↑↑↑↑↑↑

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.