Welcome To The Awesome Tutorial For World Generation
Crafted by Sonicjumper
First time users, read this:
Initiation/Prerequisites
Prerequisites:
1. Know how to use the MCP system
-That means you can click the decompile button and you do not get errors
2. Know how to set up ModLoader in MCP
-Same as above, but with Modloader. Link for this: LINK
3. You have some very basic knowledge of the Minecraft system(ex. Blocks, Items, etc.)
-Those are very well explained here: LINK
4. You read the thread and some recent posts before saying "WHAT THE HECK!? IT DOESN'T WORK!!!"
-Yeah, you should really read. It is good for you.
Welcome to my mod tutorial, as said above in big blue letters. If you want to be able to add unique world generation to your mine craft world, or make cool mods that affect the world in dynamic ways, then you are in the right place! I post a new tutorial about once every week or so, school keeps me pretty busy. But if you have questions or requests, I can usually answer within a day or so.
GUI
First of all, GUI stands for Grammatically Used Icons, not Graphic User Interface.
Second, all my tutorials will have little icons by it. You should learn what they mean here:
Wools(type):
- Out of Date
- Under Construction/Creation
- Working With No Errors(to my knowledge)
- Contains unresolved errors in compiler
- Contains unresolved errors in game
- Contains errors that do not crash your game
Swords(difficulty):
- Easy - Piece of
- Medium - I might have to think a little
- Hard - Copy, paste, done.
- Insane - Say wha?
- Uncomprehendable - Ok, I am lost...
Here is a mini-tutorial of how to look at a tutorial:
How to make a tutorial - -
EntryFile:
Every file beings with a package declaration.
Items and numbers.
public static int goofy = 1000
private int annoying = 24
Next comes some confusing jibber and jabber.
Unix fruild produnced speedromes = new fancysmancy supercalifragilisticexpialladocious
Then I write some ending stuff.
EntryFile Explanation
Here I will explain all of the variables in the code at once.
Goofy is the amount of time that went into making this tutorial.
Annoying is my best guess at how excited you are
Then I explain difficult code
Unix fruild produnced speedromes = new fancysmancy(supercalifragilisticexpialladocious)
Unix is the constructor for the fruild class extension of produnced. I am naming it speedromes and setting it to the value of fancysmancy with parameters supercalifragilisticexpialladocious.
Then I may add some extra notes(Which may or may not help you):
If you take all the vowels out of supercalifragilisticexpialladocious you get sprclfrglstcxplldcs.
Here I will attach pictures and/or attach the links to the source code download:
package net.minecraft.src;
import java.util.Random;
public class mod_NameHere extends BaseMod
{
WorldGenNameHere anyName = new WorldGenNameHere();
public mod_NameHere()
{
}
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
for(int i = 0; i < 10; i++)
{
int RandPosX = chunkX + random.nextInt(15);
int RandPosY = random.nextInt(20) + 80;
int RandPosZ = chunkZ + random.nextInt(15);
anyName.generate(world, random, RandPosX, RandPosY, RandPosZ);
}
}
public String getVersion()
{
return "0.1 Alpha";
}
public void load()
{
}
}
WorldGenNameHere
package net.minecraft.src;
import java.util.Random;
public class WorldGenNameHere extends WorldGenerator
{
public WorldGenNameHere()
{
}
public boolean generate(World world, Random random, int posX, int posY, int posZ)
{
int cloth = Block.cloth.blockID;
world.setBlockWithNotify(posX, posY, posZ, cloth);
world.setBlockAndMetadataWithNotify(posX+1, posY, posZ, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX-1, posY, posZ, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX, posY, posZ+1, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX, posY, posZ-1, cloth, random.nextInt(15));
return true;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mod_NameHere Explanation
This is the generic mod base file. You will ALWAYS make one with any mod you make with modloader but you only need to make ONE of them. This is where you will declare new blocks, entities, items, etc.
The WorldGenNameHere is a new object that we are making. You can name it whatever you want, just keep it consistent. In this case it is named "anyName".
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
This is the only other significant thing we are doing in this class. We need to define the method of generateSurface to tell Minecraft how to build our world.
You should really know how to use FOR statements, but if you do not then you can go look it up here(not made by me): http://www.dreaminco.../59169-looping/
int RandPosX = chunkX + random.nextInt(15);
int RandPosY = random.nextInt(20) + 80;
int RandPosZ = chunkZ + random.nextInt(15);
anyName.generate(world, random, RandPosX, RandPosY, RandPosZ);
This might look confusing but it really is not. In a nutshell, we create three integers(RandPosX,RandPosY,RandPosZ) and then pass them to out generate method in our WorldGen object.
WorldGenNameHere Explanation
This is your basic WorldGen class. This is where the actual generation takes place. I advise you to make a different class for each of your generators.
There is only one method in this class: generate. It needs to be a public boolean, and it always needs to have similar, if not the exact same, parameters.
int cloth = Block.cloth.blockID;
Here I declare and assign a value to the "cloth" variable. This will be the block we are generating.
Now, I know what you are thinking. You just made a bunch of floating wool in the sky. It does not even obey the laws of physics!!! You think that you can handle a bit more complicated code. Well, here is a step up from before. Goals of this tutorial:
Make a randomly sized cube
Make Generated blocks appear on the top of the ground
Learn a few other things
And the code:
mod_NameHere
package net.minecraft.src;
import java.util.Random;
public class mod_NameHere extends BaseMod
{
WorldGenNameHere anyName = new WorldGenNameHere();
public mod_NameHere()
{
}
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
for(int i = 0; i < 2; i++)
{
int RandPosX = chunkX + random.nextInt(15);
int RandPosZ = chunkZ + random.nextInt(15);
int RandPosY = world.getHeightValue(RandPosX, RandPosZ);
anyName.generate(world, random, RandPosX, RandPosY, RandPosZ);
}
}
public String getVersion()
{
return "0.1 Alpha";
}
public void load()
{
}
}
WorldGenNameHere
package net.minecraft.src;
import java.util.Random;
public class WorldGenNameHere extends WorldGenerator
{
public WorldGenNameHere()
{
}
public boolean generate(World world, Random random, int posX, int posY, int posZ)
{
int cloth = Block.cloth.blockID;
int depth = random.nextInt(4)+1;
int width = random.nextInt(6)+4;
int height = random.nextInt(4)+1;
//Generate for every layer
for(int d = 0; d < depth; d++)
{
//Generate for all rows
for(int w = 0; w < width; w++)
{
//Generate for all columns
for(int h = 0; h < height; h++)
{
//Create wool block
world.setBlock(posX+w, posY+d, posZ+h, cloth);
}
}
}
return true;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_NameHere Explanation
Only a few things have changed here
The postitioning of the random number generators has changed slightly, since the variable RandPosY uses both X and Z to generate a number.
world.getHeightValue(RandPosX, RandPosZ);
This is the getter method for getting the Y value of the highest block ID
Basically it finds the "ground" level of the selected co-ordinate
WorldGenNameHere Explanation
Now we introduce several new ideas, specifically about random generation
We create 3 variables - depth, width, and height - and set them to random numbers
Depth: 1-5
Width: 4-10
Hight: 1-5
//Generate for all columns: random z postition
for(int d = 0; d < depth; d++)
{
//Generate for all rows: random x position
for(int w = 0; w < width; w++)
{
//Generate for all layers: random y position
for(int h = 0; h < height; h++)
{
//Create cloth block
world.setBlock(posX+w, posY+d, posZ+h, cloth);
}
}
}
Now, we generate our box with our FOR statements
We make each column, row, and layer 1 at a time, but with only 4 lines of actual code; that is the ultimate power of the FOR statement
world.setBlock(posX+w, posY+d, posZ+h, cloth);
We take our X, Y, and Z positions that were passed in and add them to our row, column, and layer number then set it as our block.
All of this code gets wrapped up nicely into a bunch of white blocks.
As you can see, it even gets placed on top of water. Important thing to note: generation that you make comes after the generation that the standard world generator makes.
Good job for finishing the last one, now it is time for some more basic stuff:
Generate a structure in a specific biome
Make a structure rarer
Just enjoy...
mod_NameHere
package net.minecraft.src;
import java.util.Random;
public class mod_NameHere extends BaseMod
{
WorldGenNameHere nameHere = new WorldGenNameHere();
public mod_NameHere()
{
}
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
BiomeGenBase biomeName = world.getWorldChunkManager().getBiomeGenAt(chunkX, chunkZ);
if(biomeName instanceof BiomeGenJungle)
{
for(int i=1;i<2;i++)
{
int RandPosX = chunkX + random.nextInt(15);
int RandPosZ = chunkZ + random.nextInt(15);
int RandPosY = world.getHeightValue(RandPosX, RandPosZ);
nameHere.generate(world, random, RandPosX, RandPosY, RandPosZ);
}
}
if(biomeName instanceof BiomeGenPlains)
{
if(random.nextInt(9)==1)
{
int RandPosX = chunkX + random.nextInt(15);
int RandPosZ = chunkZ + random.nextInt(15);
int RandPosY = world.getHeightValue(RandPosX, RandPosZ);
nameHere.generate(world, random, RandPosX, RandPosY, RandPosZ);
}
}
}
public String getVersion()
{
return "0.1 Alpha";
}
public void load()
{
}
}
WorldGenNameHere
package net.minecraft.src;
import java.util.Random;
public class WorldGenNameHere extends WorldGenerator
{
public WorldGenNameHere()
{
}
public boolean generate(World world, Random random, int posX, int posY, int posZ)
{
int cloth = Block.cloth.blockID;
world.setBlockWithNotify(posX, posY, posZ, cloth);
world.setBlockAndMetadataWithNotify(posX+1, posY, posZ, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX-1, posY, posZ, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX, posY, posZ+1, cloth, random.nextInt(15));
world.setBlockAndMetadataWithNotify(posX, posY, posZ-1, cloth, random.nextInt(15));
return true;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_NameHere Explanation
Using a few new methods in these WorldGen files.
.getBiomeGenAt(chunkX,chunkY) simply does what it says. It returns as a BiomeGenBase object with the biome's name. It may be good to note that this also works with modded biomes.
if(biomeName instanceof BiomeGenJungle) checks to see if our newly made variable(biomeName) matches the biome we want to generate our structure in
if(random.nextInt(9) == 1){
//Code
}
if(random.nextInt(9) == 1) makes the possibility for the structure to generate a 1 in 10, or 10%, chance
if(random.nextInt(1) == 1) makes the possibility a 1 in 2, or 50% chance.
This way of activating the generate method differs from the For method by adding more rarity. If statements would be good for villages and buildings, while the For statements would be good for plant and ore generation.
WorldGenNameHere Explanation
int blockCanSpawn = world.getBlockId(posX, posY - 1, posZ);
Another new variable. The getBlockId method gets the block Id at the specified location. In this case I am getting the block under the topmost block.
This section will check if the block under what is being generated is not sand and not grass. If it is neither(for example, a tree), then the generation will stop and return false.
The setBlock methods are familiar and will place clay on the ground and a diamond block underneath.
Now go try it out in action!
*Some grass removed so you can see what it generated
Now Minecraft will only attempt to generate this about every 10 chunks, so it is not as prevalent as the wool blocks we made in the last tutorial.
This concludes the basic tutorials. I will begin moving on to more specific things to do such as chests and active generation.
Dungeonesque, the art of building a dungeon. So intricate and complex, yet brutal and rewarding. Prepare yourselves as I tell you how to make the craziest dungeons come to life.
The List of Things To Do(you guys can request more to this): Chests
Dungeon Rooms
Chest Tutorial --
Hey guys, are you ready to get some dirt!!! I know it does not sound that appealing, but it is the HOW we are getting it that is cool. Today you should learn a few more things:
How to correctly spawn a chest
How to randomly fill a chest with your own items
How to specifically fill a chest with your own items
Code time:
mod_NameHere
package net.minecraft.src;
import java.util.Random;
public class mod_NameHere extends BaseMod
{
WorldGenNameHere nameHere = new WorldGenNameHere();
public mod_NameHere()
{
}
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
BiomeGenBase biomeName = world.getWorldChunkManager().getBiomeGenAt(chunkX, chunkZ);
if(biomeName instanceof BiomeGenPlains)
{
if(random.nextInt(4)==1)
{
int RandPosX = chunkX + random.nextInt(15);
int RandPosZ = chunkZ + random.nextInt(15);
int RandPosY = world.getHeightValue(RandPosX, RandPosZ);
nameHere.generate(world, random, RandPosX, RandPosY, RandPosZ);
}
}
}
public String getVersion()
{
return "0.1 Alpha";
}
public void load()
{
}
}
WorldGenNameHere
import java.util.Random;
public class WorldGenNameHere extends WorldGenerator {
private static final WeightedRandomChestContent[] bonusChestContent = new WeightedRandomChestContent[]
{
new WeightedRandomChestContent(Item.appleRed.shiftedIndex, 0, 4, 5, 70),
new WeightedRandomChestContent(Block.cobblestoneMossy.blockID, 0, 1, 2, 25),
new WeightedRandomChestContent(Block.blockDiamond.blockID, 0, 1, 2, 1),
new WeightedRandomChestContent(Item.swordSteel.shiftedIndex, 200, 1, 4, 4)
};
public WorldGenNameHere()
{
}
public boolean generate(World world, Random random, int posX, int posY, int posZ)
{
if(world.getBlockId(posX, posY-1, posZ)!=Block.grass.blockID)
{
return false;
}
world.setBlock(posX, posY-1, posZ, Block.blockClay.blockID);
world.setBlockWithNotify(posX, posY-2, posZ, Block.chest.blockID);
TileEntityChest chestEntity = (TileEntityChest)world.getBlockTileEntity(posX, posY-2, posZ);
WeightedRandomChestContent.generateChestContents(random, bonusChestContent, chestEntity, 5);
ItemStack dirtStack = new ItemStack(Block.dirt, 64);
chestEntity.setInventorySlotContents(13, dirtStack);
return true;
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_NameHere Explanation
Let us start off with some basic knowledge:
I wanted to spawn the chest in the Plains Biome, and for it to be fairly common
My biome checking method is the same as before, and my WorldGen has a 20% chance to spawn every chunk
Passing the numbers off to the WorldGen class is just the same, keep reading
WorldGenNameHere Explanation
Now the cool stuff:
First, we get the blockID of the ground to make sure it is grass(we do not want a chest to be floating in water now do we?)
Next, I change the grass to clay to mark the spot where the chest is being spawned
Finally, I set the chest down underneath the clay. Note how I used the setBlockWithNotify method, this ensures that there are no graphical glitches on the chest
You may have seen this lovely mess at the top of the class file:
private static final WeightedRandomChestContent[] bonusChestContent = new WeightedRandomChestContent[]
{
new WeightedRandomChestContent(Item.appleRed.shiftedIndex, 0, 4, 5, 70),
new WeightedRandomChestContent(Block.cobblestoneMossy.blockID, 0, 1, 2, 25),
new WeightedRandomChestContent(Block.blockDiamond.blockID, 0, 1, 2, 1),
new WeightedRandomChestContent(Item.swordSteel.shiftedIndex, 200, 1, 4, 4)
};
Do not worry too much about it; it is fairly simple.
private static final WeightedRandomChestContent[] bonusChestContent = new WeightedRandomChestContent[] is the object declarer for the chest content. It creates the variable called bonusChestContent, which I can later use to spawn items
WeightedRandomChestContent(Item.appleRed.shiftedIndex, 0, 4, 5, 70) is the method to add an item into the Chest Content, the variables are as follows:
Item.appleRed.shiftedIndex is used to define the item/block we are using
0 is the metadata of the item/block
4 is the mininum amount of items to spawn
5 is the maximum amount of items to spawn
70 is the item weight
For ease of use, I made sure my weight totaled to 100, so a weight of 70 gives a 70% chance to spawn
I use the getTileEntity method to get the details for the chest, this allows me to edit its inventory
random is the Random object, always use it
bonusChestContent is the items we entered in above
chestEntity is the Tile Entity of the chest
5 is how many items to place in the chest(yes, it could have been a random number)
I create an ItemStack object for use in the next line, I give it 64 of the dirt block. NOTE: You do NOT have to write ".blockId" after the block for it to work
Finally comes the setInventoryContents(slot, itemStack) method
As you might expect, it puts the 64 dirt we made into our chest. In this case, slot 13 is the dead center of the GUI
The chest inventory starts at 0 and goes to 26; left to right, top to bottom
Here it is:
You might notice that the Iron Swords have very low durability left. That would be the metadata of the Sword being changed(above).
As I promised, a full stack of dirt is waiting for you to take it.
Also, the source code is here for the taking: Chest
Buildings And Such:
The List of Things To Do(you guys can request more to this):
House
Custom Villages
Standard House --
Gardens and Pretty Things:
The List of Things To Do(you guys can request more to this):
Mega Flower
Giant Crystal(better than the obsidian ones in the End)
Fake Tutorial - -
Sub-Terrain Generation
The List of Things To Do(you guys can request more to this):
Ores(It's easy to do, I just need to write it down)
Redstone Trap
Fake Tutorial - -
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Recent News(Updated 10/8/12)
[10/8/12] New post on chests. This one actually took some work. I hope you guys enjoy!
[9/28/12] New post, final in the basic series. New projects will keep me busy but I will try to release specifics later. A chest tutorial, as well as the contents of a chest will be next.
[9/10/12] Released my first basic tutorial today(I totally beat my week deadline). I want feedback on it! I have lots more time to do these now, so be expecting some more soon!
[9/6/12] I recently got a new computer that has the ability to record in HD. That means that I will be uploading videos of me writing the code and explaining it in addition to making a written tutorial. I have had some "barriers" in school so I have not made an update in a while. I will start making my tutorials again and should have them out within a week or so.
[8/4/12] Minecraft forums suddenly decided it did not like me at all, so when I was saving my post it deleted all of my tutorials. I will try to replace them, but be patient.
[8/1/12]Great, 1.3 is here. Now we just wait for Mojang to do bug fix patches, and when 1.3.8 comes around, I will update my tutorials with them. For now I need to focus on building them!
Old Geezer Stuff
[7/30/12]
Yes, it is finally here! I am re-building my thread to be more appealing to the user(s)! This may take a while but check back whenever you want to. If you notice the occasional pig head or creeper face in the wrong place, feel free to tell me in a PM, do not clutter my thread with those.
IF WHEN YOU ARE GETTING ERRORS
1. Look over your code at least twice, sometimes I misspell a variable or a name and it screws up about 50 other things.
2. Look over my code at least thrice, make sure you copied the right stuff and make sure I did not misspell stuff(although hopefully I have not).
3. If your code is related to my topic(Biomes, Worldgen, etc.) you can post it here using a Spoiler and Code blocks.
4. If your code is NOT related to my topic, please post it in a respective location. There is a forum designed for people having errors with code, that would be a good place to look.
Feedback?
If you want to help me out:
You can give me free money by downloading any of the source files from any of my tutorials when they are released. Saves you time and makes me happy!
You can wear one of these around. It helps boost my confidence and reminds me to write my tutorials faster and better!
Thanks guys for all the help. I actually was looking for something that could do that (.schematic => java). Of course, the point I am trying to make is that you can program the game to build pretty much anything. I am just trying to show you how so your imagination can EXPLODE! And to Argama03, if you want to make some canyons like that I recommend you go look at the code for Minecraft canyons and see what you can do with it.
First time users, read this:
Prerequisites:
1. Know how to use the MCP system
-That means you can click the decompile button and you do not get errors
2. Know how to set up ModLoader in MCP
-Same as above, but with Modloader. Link for this: LINK
3. You have some very basic knowledge of the Minecraft system(ex. Blocks, Items, etc.)
-Those are very well explained here: LINK
4. You read the thread and some recent posts before saying "WHAT THE HECK!? IT DOESN'T WORK!!!"
-Yeah, you should really read. It is good for you.
Second, all my tutorials will have little icons by it. You should learn what they mean here:
Wools(type):
- Out of Date
- Under Construction/Creation
- Working With No Errors(to my knowledge)
- Contains unresolved errors in compiler
- Contains unresolved errors in game
- Contains errors that do not crash your game
Swords(difficulty):
- Easy - Piece of
- Medium - I might have to think a little
- Hard - Copy, paste, done.
- Insane - Say wha?
- Uncomprehendable - Ok, I am lost...
EntryFile:
Unix is the constructor for the fruild class extension of produnced. I am naming it speedromes and setting it to the value of fancysmancy with parameters supercalifragilisticexpialladocious.
Then I may add some extra notes(Which may or may not help you):
If you take all the vowels out of supercalifragilisticexpialladocious you get sprclfrglstcxplldcs.
Here I will attach pictures and/or attach the links to the source code download:
Watch me type this(I wish I would have recorded it): www.youtube.com/randomurl
Creating a Random Structure(Basic) - -
Mod_NameHere
This is the only other significant thing we are doing in this class. We need to define the method of generateSurface to tell Minecraft how to build our world.
You should really know how to use FOR statements, but if you do not then you can go look it up here(not made by me): http://www.dreaminco.../59169-looping/
This might look confusing but it really is not. In a nutshell, we create three integers(RandPosX,RandPosY,RandPosZ) and then pass them to out generate method in our WorldGen object.
There is only one method in this class: generate. It needs to be a public boolean, and it always needs to have similar, if not the exact same, parameters.
Here I declare and assign a value to the "cloth" variable. This will be the block we are generating.
This is the setBlock method. We take the X,Y, and Z positions from our generateSurface method and place several wool blocks.
There are several variations of setBlock, most of them listed here:
CONGRATULATIONS! You made a bunch of floaty thingies. It's ok, you can feel excited.
However, this concludes the first basic tutorial. Stay in tune for the next tutorial!
Source Code: Basic
Now, I know what you are thinking. You just made a bunch of floating wool in the sky. It does not even obey the laws of physics!!! You think that you can handle a bit more complicated code. Well, here is a step up from before. Goals of this tutorial:
mod_NameHere
WorldGenNameHere
Only a few things have changed here
The postitioning of the random number generators has changed slightly, since the variable RandPosY uses both X and Z to generate a number.
This is the getter method for getting the Y value of the highest block ID
Basically it finds the "ground" level of the selected co-ordinate
Now we introduce several new ideas, specifically about random generation
We create 3 variables - depth, width, and height - and set them to random numbers
Depth: 1-5
Width: 4-10
Hight: 1-5
Now, we generate our box with our FOR statements
We make each column, row, and layer 1 at a time, but with only 4 lines of actual code; that is the ultimate power of the FOR statement
We take our X, Y, and Z positions that were passed in and add them to our row, column, and layer number then set it as our block.
All of this code gets wrapped up nicely into a bunch of white blocks.
As you can see, it even gets placed on top of water. Important thing to note: generation that you make comes after the generation that the standard world generator makes.
Source Code: Basic+
Good job for finishing the last one, now it is time for some more basic stuff:
WorldGenNameHere
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mod_NameHere Explanation
Using a few new methods in these WorldGen files.
if(random.nextInt(9) == 1) makes the possibility for the structure to generate a 1 in 10, or 10%, chance
if(random.nextInt(1) == 1) makes the possibility a 1 in 2, or 50% chance.
This way of activating the generate method differs from the For method by adding more rarity. If statements would be good for villages and buildings, while the For statements would be good for plant and ore generation.
Another new variable. The getBlockId method gets the block Id at the specified location. In this case I am getting the block under the topmost block.
This section will check if the block under what is being generated is not sand and not grass. If it is neither(for example, a tree), then the generation will stop and return false.
The setBlock methods are familiar and will place clay on the ground and a diamond block underneath.
Now go try it out in action!
*Some grass removed so you can see what it generated
Now Minecraft will only attempt to generate this about every 10 chunks, so it is not as prevalent as the wool blocks we made in the last tutorial.
This concludes the basic tutorials. I will begin moving on to more specific things to do such as chests and active generation.
Source Code: Basic++
Dungeonesque:
Dungeonesque, the art of building a dungeon. So intricate and complex, yet brutal and rewarding. Prepare yourselves as I tell you how to make the craziest dungeons come to life.
The List of Things To Do(you guys can request more to this):
ChestsDungeon Rooms
Chest Tutorial - -
Hey guys, are you ready to get some dirt!!! I know it does not sound that appealing, but it is the HOW we are getting it that is cool. Today you should learn a few more things:
mod_NameHere
WorldGenNameHere
mod_NameHere Explanation
WorldGenNameHere Explanation
Now the cool stuff:
0 is the metadata of the item/block
4 is the mininum amount of items to spawn
5 is the maximum amount of items to spawn
70 is the item weight
random is the Random object, always use it
bonusChestContent is the items we entered in above
chestEntity is the Tile Entity of the chest
5 is how many items to place in the chest(yes, it could have been a random number)
You might notice that the Iron Swords have very low durability left. That would be the metadata of the Sword being changed(above).
As I promised, a full stack of dirt is waiting for you to take it.
Also, the source code is here for the taking: Chest
Buildings And Such:
The List of Things To Do(you guys can request more to this):
House
Custom Villages
Standard House - -
Gardens and Pretty Things:
The List of Things To Do(you guys can request more to this):
Mega Flower
Giant Crystal(better than the obsidian ones in the End)
Fake Tutorial - -
Sub-Terrain Generation
The List of Things To Do(you guys can request more to this):
Ores(It's easy to do, I just need to write it down)
Redstone Trap
Fake Tutorial - -
Recent News(Updated 10/8/12)
[10/8/12] New post on chests. This one actually took some work. I hope you guys enjoy!
[9/28/12] New post, final in the basic series. New projects will keep me busy but I will try to release specifics later. A chest tutorial, as well as the contents of a chest will be next.
[9/10/12] Released my first basic tutorial today(I totally beat my week deadline). I want feedback on it! I have lots more time to do these now, so be expecting some more soon!
[9/6/12] I recently got a new computer that has the ability to record in HD. That means that I will be uploading videos of me writing the code and explaining it in addition to making a written tutorial. I have had some "barriers" in school so I have not made an update in a while. I will start making my tutorials again and should have them out within a week or so.
[8/4/12] Minecraft forums suddenly decided it did not like me at all, so when I was saving my post it deleted all of my tutorials. I will try to replace them, but be patient.
[8/1/12]Great, 1.3 is here. Now we just wait for Mojang to do bug fix patches, and when 1.3.8 comes around, I will update my tutorials with them. For now I need to focus on building them!
[7/30/12]
Yes, it is finally here! I am re-building my thread to be more appealing to the user(s)! This may take a while but check back whenever you want to. If you notice the occasional pig head or creeper face in the wrong place, feel free to tell me in a PM, do not clutter my thread with those.
IFWHEN YOU ARE GETTING ERRORS1. Look over your code at least twice, sometimes I misspell a variable or a name and it screws up about 50 other things.
2. Look over my code at least thrice, make sure you copied the right stuff and make sure I did not misspell stuff(although hopefully I have not).
3. If your code is related to my topic(Biomes, Worldgen, etc.) you can post it here using a Spoiler and Code blocks.
4. If your code is NOT related to my topic, please post it in a respective location. There is a forum designed for people having errors with code, that would be a good place to look.
Feedback?
If you want to help me out:
in about a weekwhen I run out of space :P) being turned into the ADVANCED section. Please enjoy...A double resolution texture pack that stays faithful to the original Minecraft textures.
I made this map! Please check it out! It's a really awesome map that took me over a year to make! :3
I made this map! Please check it out! It's a really awesome map that took me over a year to make! :3
I made this map! Please check it out! It's a really awesome map that took me over a year to make! :3
I made this map! Please check it out! It's a really awesome map that took me over a year to make! :3