Help Sign In/Register

Minecraft Forums

Advanced Search
  • News
  • Rules
  • Forum
  • Chat
  • Mods
  • Maps
  • Resource Packs
  • Minecraft Station
  • Minecraft Server Hosting
Desktop View
  • Home
  • Member List
  • Mixinghoney's Profile
  • Send Private Message
  • View Mixinghoney's Profile
  • Mixinghoney
  • Registered Member
  • Member for 9 years, 4 months, and 22 days
    Last active Tue, Apr, 10 2012 17:09:41
  • 0 Followers
  • 220 Total Posts
  • 14 Thanks
  • Member
  • Posts
  • Threads
  • Reputation
  • Comments
  • Received
  • Given
  • View Mixinghoney's Profile

    1

    Apr 7, 2012
    Mixinghoney posted a message on My Minecraft house... any suggestions on decorating?
    awesome house you have there!
    Posted in: Screenshots
  • View Mixinghoney's Profile

    1

    Mar 28, 2012
    Mixinghoney posted a message on Feared Dreams [500+ Views] [Chapter 3] (Ended)
    awesome story!
    Posted in: Fan Art
  • View Mixinghoney's Profile

    1

    Mar 28, 2012
    Mixinghoney posted a message on Free Simple Minecraft Wallpaper
    Awesome dude!
    Posted in: Fan Art
  • View Mixinghoney's Profile

    1

    Mar 28, 2012
    Mixinghoney posted a message on What have you been banned for?
    Banned for Building a Lavafall (even tho i asked the owner if i could , he let me , maybe some jerk broke the lava fall making it burn all sh*t below it)
    Posted in: Discussion
  • View Mixinghoney's Profile

    1

    Oct 22, 2011
    Mixinghoney posted a message on Villager ideas?
    if they were like humans , then the villagers would look like any other "Human Mob mods" and Notch doesn't want it this way , so i like the testificate models , now we just need to hope that they will do something rather than just walk around...
    Posted in: Suggestions
  • View Mixinghoney's Profile

    1

    Oct 13, 2011
    Mixinghoney posted a message on MINECRAFT 1.9.4 CRACKED SERVER
    Damn outlaws :dry.gif: BUY THE GAME , DONT PIRATE IT!
    Posted in: 1.0 Update Discussion
  • View Mixinghoney's Profile

    1

    Oct 13, 2011
    Mixinghoney posted a message on Endermen Project
    Epic dude!!
    Posted in: Fan Art
  • View Mixinghoney's Profile

    8

    Oct 12, 2011
    Mixinghoney posted a message on Notch says Mountain biomes. I say, No.
    I Say, Yes.
    Posted in: 1.0 Update Discussion
  • View Mixinghoney's Profile

    1

    Oct 11, 2011
    Mixinghoney posted a message on "Not Enough Time" say Notch and Jens
    Quote from DaBiggman

    Quests are not in the game.
    Trading is not in the game.
    Currency and Economy are not in the game.

    Never heard Notch talking about these ones...
    Posted in: 1.0 Update Discussion
  • View Mixinghoney's Profile

    1

    Oct 11, 2011
    Mixinghoney posted a message on Dragons in Minecraft?
    Notch is only adding stuffs that will spice up our gameplay, downgrade if you dont want them ... :dry.gif:
    Posted in: 1.0 Update Discussion
  • To post a comment, please login.
  • 1
  • 2
  • Next
  • View Linkarena12's Profile

    1

    Mar 28, 2012
    Linkarena12 posted a message on Minerag ragdoll physics (Continued)
    Quote from Kyron

    What are your qualities actually because just testing doesn't seem to be something a head does :P


    Well, I know a tiny scrap of C++, (Which I'm almost certain has nothing to do with this), So I am not the best modder...
    I really have a devotion to this mod and I am attempting to learn more code in almost every spare moment.
    And I edited that post saying I was a tester, and the recorder thing to, since all my stuff broke :SSSS:
    And, well, thats pretty much it. When I learnt that this mod wouldnt be continued, I nearly cried. I desided to change that.

    I know this is off of the subject, but could you help in the making this mod? :P
    Posted in: WIP Mods
  • View Linkarena12's Profile

    12

    Nov 3, 2011
    Linkarena12 posted a message on Minerag ragdoll physics (Continued)
    Minerag Ragdoll Physics

    I really don't think we should let this mod die. It was such a great idea, but now it seems the developers have given up on it. If I am wrong, I will delete this topic, but until some one tells me this mod isn't dead I am going to keep this thing going.

    I do know basic C++, I don't know how to code. But I know that we should keep this mod going. We shouldn't just let it die!
    I believe that if all of us minecraftians work together on this it might become a reality! Not just a dream...

    Current list of people on this project:

    Linkarena12-Head, slight coder.

    MixingHoney-Actual modder.

    Thats it :mellow: Please sign up and make this possible.

    In your sign up post please put what you want to do and what equipment/knowledge of what you want you want to do.

    Please help this become a reality.

    Potential members:

    Mr_Spider, possible modeller (I dont know how to say that job :P )
    Posted in: WIP Mods
  • View rickrage12's Profile

    11

    Mar 9, 2012
    rickrage12 posted a message on [1.2.5/1.2.4/1.2.3] Apple Bushes v2.0 - Now w/ config file and world generating!
    Now compatible with 1.2.4 & 1.2.5

    In my testing, for 1.2.5 I used ModLoader for 1.2.4 and my mod, both of which worked perfectly. If any bugs are found, they will be addressed when 1.2.5 ModLoader comes out.

    Please:
    • Post Bugs you find, here
    • If you crash, drop an error report here! please use the spoiler tags for this, please. [%spoiler][%/spoiler] (without the % signs)
    • Post any suggestions and comments here for me to look at!
    This, very small and quick, mod is aimed to alleviate the early game difficulties of getting a reliable food source established. I threw it together in a matter of minutes, so don't get too excited, it's not an overhaul or anything. Just designed to relieve the early game pressure.

    I made this in response to a request posted on this topic on Reddit.


    Features:
    • ​Apple Bushes generate in the world! Spawn rate configurable.
    • Apple Bushes that grant you apples when you right click on them, with nothing in your hand.
    • They will, overtime, regrow more apples!
    • They no longer produce any apples unless sufficiently lit.
    • Breaking a harvested apple bush will give you a bush with no fruit on it, place it down and let it regrow!
    With v2.0, the crafting recipe is disabled by default. This can be changed in the config file, see below for instructions.
    This is the crafting recipe, it works with any sapling.






    Here you can see the Apple Bushes on the left, and the harvested Apple Bushes on the right. When you right click on the Apple Bush it will drop an apple for you, and will be on "cooldown," at which point it will no longer drop any apples. It will eventually regenerate and you will be able to take another apple from it.

    Videos:

    Here is an awesome review, and my favorite, by Phobi_Bus.

    Quick showcase of v1.0 of this mod! Thanks to Smaste for taking the time to do this!



    Download:
    Dependencies:
    -Risugami's ModLoader

    Most Recent:

    Minecraft 1.2.4/1.2.5: (yes use the 1.2.4 for 1.2.5, for now.)
    [1.2.4] AppleBushes v2.0

    Minecraft 1.2.3:
    [1.2.3] AppleBushes v2.0

    Minecraft 1.1: I'm not going to be upkeeping for 1.1.
    [1.1] AppleBushes v1.1

    Deprecated versions:
    [1.2.3]AppleBushes v1.1
    [1.2.3]AppleBushes v1.0

    Using the Config File
    File location: .minecraft/config/AppleBush.cfg
    Changeable Values: e_applebushfullID, e_applebushdepletedID, e_recipes, e_rarity
    1. Changing Block IDs:
    2. if you locate within the file the e_applebushfullID and e_applebushdepletedID you can change the number after each one to correspond to what you would like the new block ids to be.

      Possible values for IDs: 125-225


    3. Toggling the Recipes:
    4. Once you get one bush, I found it pretty easy to quickly accumulate so many that it was just too easy and overpowered. So with v2.0 I decided to disable the recipes. If you liked being able to have infinite apples though, and wish to have the recipes too you can! Just go in and find the e_recipe and replace the '0' with '1' This will re-enable the recipes, and you can make them to your heart's content!

      Possible values for e_recipe: 0 (recipes disabled), 1 (recipes enabled)


    5. Altering the Rarity of the Bush in the World:
    6. This helps youcustomize your experience with my mod even more; if you change the e_rarity value it will adjust the spawn rate of the bush in world generation. The lower the number, the rare it is; inversely, the higher the number, the more you'll see. A number like 600 will fill your world with my creation, but a number like 10 (default) will see to it that you don't stumble across one every couple of blocks.

      Possible values for e_rarity: 1-600 is realistic, with 600 being an awful, awful lot.

    Installation:
    1. Install Risugami's ModLoader as per his instructions.
    2. Run Minecraft.
    3. Place the .zip folder into the /mods folder that is located within ".minecraft" folder.
    4. Run the game!
    To Do:
    • Satisfy everyone!
    Known Bugs:
    ---

    Change Log:
    v2.0
    - Added config file for changing spawn rate, recipe toggling, and modifying block IDs
    - Bushes now generate in the world!
    - Modified the way the bushes work internally, more streamlined now.

    v1.1
    - Added texture
    - Must right click with an empty hand to harvest
    - Added a sapling drop for the harvest Apple Bushes
    - Will not regrow their fruit underground, must be able to see the sky.
    - Will not regrow their fruit in the dark.

    v1.0
    - Release

    Thanks to x2Robbie2x for his awesome tutorials, if you're looking to get into coding some mods for Minecraft, check him out. He walks you through a lot more, and better, than some of the other tuts out there. So cheers to him!


    Terms and Conditions, as eloquently worded by Rotten194. Thanks to him for taking hundreds of words to say what should be as simple as, "This is my ****, not your ****, don't steal it."
    TERMS AND CONDITIONS
    0. USED TERMS
    MOD - modification, plugin, a piece of software that interfaces with the Minecraft client to extend, add, change or remove original capabilities.
    MOJANG - Mojang AB
    OWNER - , Original author(s) of the MOD. Under the copyright terms accepted when purchasing Minecraft (http://www.minecraft.net/copyright.jsp) the OWNER has full rights over their MOD despite use of MOJANG code.
    USER - End user of the mod, person installing the mod.

    1. LIABILITY
    THIS MOD IS PROVIDED 'AS IS' WITH NO WARRANTIES, IMPLIED OR OTHERWISE. THE OWNER OF THIS MOD TAKES NO RESPONSIBILITY FOR ANY DAMAGES INCURRED FROM THE USE OF THIS MOD. THIS MOD ALTERS FUNDAMENTAL PARTS OF THE MINECRAFT GAME, PARTS OF MINECRAFT MAY NOT WORK WITH THIS MOD INSTALLED. ALL DAMAGES CAUSED FROM THE USE OR MISUSE OF THIS MOD FALL ON THE USER.

    2. USE
    Use of this MOD to be installed, manually or automatically, is given to the USER without restriction.

    3. REDISTRIBUTION
    This MOD may only be distributed where uploaded, mirrored, or otherwise linked to by the OWNER solely. All mirrors of this mod must have advance written permission from the OWNER. ANY attempts to make money off of this MOD (selling, selling modified versions, adfly, sharecash, etc.) are STRICTLY FORBIDDEN, and the OWNER may claim damages or take other action to rectify the situation.

    4. DERIVATIVE WORKS/MODIFICATION
    This mod is provided freely and may be decompiled and modified for private use, either with a decompiler or a bytecode editor. Public distribution of modified versions of this MOD require advance written permission of the OWNER and may be subject to certain terms.
    Posted in: Minecraft Mods
  • View Linkarena12's Profile

    1

    Mar 28, 2012
    Linkarena12 posted a message on Minerag ragdoll physics (Continued)
    Still learning some stuff... Phew, this is, not neccesarily confusing as it is complicated....
    Posted in: WIP Mods
  • View Linkarena12's Profile

    1

    Mar 28, 2012
    Linkarena12 posted a message on Minerag ragdoll physics (Continued)
    Allright then, some people wanting to help... Lemme see... Everyone who posted something involving actually being able to help, you will recieve a message in the next 24 hours (Hopefully)
    Posted in: WIP Mods
  • View GoldenClawStudios's Profile

    29

    Feb 15, 2012
    GoldenClawStudios posted a message on [1.2.3] GoldenClawStudios *New Dimension Tutorial*
    The Second Half of the tutorials! :D



    Tutorial Number 14; Making your own Trees and saplings with world generation

    Okay guys Welcome to Tutorial Number 14; Making your own trees and saplings!
    Okay so first up we need to make our mod_Tree files,
    Theirs not going to be much explaining for now, because you should have some Advanced Java coding experience.
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class mod_YourTree extends BaseMod
    {
    
    	public String getVersion()
    		{
    				return "1.1.0";
    		}
    
    		public void load()
    		{	  
    		}
    
    	public mod_YourTree()
    	{
    		ModLoader.AddName(YourLeaves, "Your Leaves");
    		ModLoader.AddName(YourWood, "Your Wood");
    		ModLoader.AddName(Yoursapling, "Your Sapling");
    
    		//
    		ModLoader.RegisterBlock(YourLeaves);
    		ModLoader.RegisterBlock(YourWood);
    		ModLoader.RegisterBlock(Yoursapling);
    		//
    		
    		
    		ModLoader.AddRecipe(new ItemStack(Block.planks, 4), new Object[] {
    			"#", Character.valueOf('#'), YourWood
    		});
    		//
    		ModLoader.AddSmelting(YourWood.blockID, new ItemStack(Item.coal, 1, 1));
    	}
    
    	public void GenerateSurface(World world, Random random, int i, int j)
    	{
    		BiomeGenBase biomegenbase = world.getWorldChunkManager().getBiomeGenAt(i, j);
    		WorldGenYourTrees worldgenyourtrees = new WorldGenYourTrees();
    		if((biomegenbase instanceof BiomeGenForest) || (biomegenbase instanceof BiomeGenForest))
    		{
    			int k = i + random.nextInt(16) + 8;
    			int l = j + random.nextInt(16) + 8;
    			int i1 = world.getHeightValue(k, l);
    			worldgenyourtrees.func_517_a(1.0D, 1.0D, 1.0D);
    			worldgenyourtrees.generate(world, random, k, i1, l);
    		}
    	}
    
    	public static final Block YourLeaves;
    	public static final Block YourWood;
    	public static final Block Yoursapling;
    
    
    	static  
    	{
    		YourLeaves = (new BlockYourLeaves(124, ModLoader.addOverride("/terrain.png", "/Yourfolder/YourCraft/Trees/YourLeaves.png"))).setHardness(0.2F).setLightOpacity(1).setStepSound(Block.soundGrassFootstep).setBlockName("YourLeaves").disableStats();
    		YourWood = (new BlockYourWood(125, ModLoader.addOverride("/terrain.png", "/Yourfolder/YourCraft/Trees/YourWood.png"))).setHardness(2.0F).setStepSound(Block.soundWoodFootstep).setBlockName("YourWood");
    		 Yoursapling = (new BlockYoursapling(126, ModLoader.addOverride("/terrain.png", "/Yourfolder/YourCraft/Trees/Yoursapling.png"))).setHardness(0.1F).setStepSound(Block.soundWoodFootstep).setBlockName("Yoursapling");
    
    	}
    }

    Okay so basically just replace all the "your" to the name of your files, but THEY ARE ALL CAPS SENSITIVE! so dont go ctrl + H replace all, it will not work!

    Next up making the actual sapling, Leaves, and Wood files! :D

    BlockYoursapling.java
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class BlockYoursapling extends BlockFlower
    {
    
    	protected BlockYoursapling(int i, int j)
    	{
    		super(i, j);
    		float f = 0.4F;
    		setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f);
    	}
    
    	public void updateTick(World world, int i, int j, int k, Random random)
    	{
    		if(world.multiplayerWorld)
    		{
    			return;
    		}
    		super.updateTick(world, i, j, k, random);
    		if(world.getBlockLightValue(i, j + 1, k) >= 9 && random.nextInt(25) == 0)
    		{
    			int l = world.getBlockMetadata(i, j, k);
    			if((l & 8) == 0)
    			{
    				world.setBlockMetadataWithNotify(i, j, k, l | 8);
    			} else
    			{
    				growTree(world, i, j, k, random);
    			}
    		}
    	}
    
    	public void growTree(World world, int i, int j, int k, Random random)
    	{
    		int l = world.getBlockMetadata(i, j, k) & 3;
    		world.setBlock(i, j, k, 0);
    		Object obj = null;
    		if(l == 1)
    		{
    			obj = new WorldGenTaiga2(true);
    		} else
    		if(l == 2)
    		{
    			obj = new WorldGenForest(true);
    		}
    		else
    		{
    			obj = new WorldGenYourTrees();
    			if (random.nextInt(10) == 0)
    			{
    				obj = new WorldGenBigTree(true);
    			}
    		}
    		if (!((WorldGenerator) (obj)).generate(world, random, i, j, k))
    		{
    			world.setBlockAndMetadata(i, j, k, blockID, l);
    		}
    	}
    
    	public int idDropped(int i, Random random)
    	{
    		return mod_YourTree.Yoursapling.blockID;
    	}
    }


    BlockYourLeaves.java
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class BlockYourLeaves extends BlockLeavesBase
    {
    
    	protected BlockYourLeaves(int i, int j)
    	{
    		super(i, j, Material.leaves, false);
    		baseIndexInPNG = j;
    		setTickOnLoad(true);
    	}
    
    	public int idDropped(int i, Random random)
    	{
    		if(random.nextInt(3) == 0)
    		{
    		return mod_YourTree.Yoursapling.blockID;
    		} else  
    		{
    			return -1;
    		}
    	}
    
       public void updateTick(World world, int i, int j, int k, Random random)
    	{
    		if (world.multiplayerWorld)
    		{
    			return;
    		}
    		int l = world.getBlockMetadata(i, j, k);
    		if ((l & 8) != 0 && (l & 4) == 0)
    		{
    			byte byte0 = 4;
    			int i1 = byte0 + 1;
    			byte byte1 = 32;
    			int j1 = byte1 * byte1;
    			int k1 = byte1 / 2;
    			if (adjacentTreeBlocks == null)
    			{
    				adjacentTreeBlocks = new int[byte1 * byte1 * byte1];
    			}
    			if (world.checkChunksExist(i - i1, j - i1, k - i1, i + i1, j + i1, k + i1))
    			{
    				for (int l1 = -byte0; l1 <= byte0; l1++)
    				{
    					for (int k2 = -byte0; k2 <= byte0; k2++)
    					{
    						for (int i3 = -byte0; i3 <= byte0; i3++)
    						{
    							int k3 = world.getBlockId(i + l1, j + k2, k + i3);
    							if (k3 == mod_YourTree.YourWood.blockID)
    							{
    								adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = 0;
    								continue;
    							}
    							if (k3 == mod_YourTree.YourLeaves.blockID)
    							{
    								adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = -2;
    							}
    							else
    							{
    								adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = -1;
    							}
    						}
    					}
    				}
    
    				for (int i2 = 1; i2 <= 4; i2++)
    				{
    					for (int l2 = -byte0; l2 <= byte0; l2++)
    					{
    						for (int j3 = -byte0; j3 <= byte0; j3++)
    						{
    							for (int l3 = -byte0; l3 <= byte0; l3++)
    							{
    								if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] != i2 - 1)
    								{
    									continue;
    								}
    								if (adjacentTreeBlocks[((l2 + k1) - 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] == -2)
    								{
    									adjacentTreeBlocks[((l2 + k1) - 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] = i2;
    								}
    								if (adjacentTreeBlocks[(l2 + k1 + 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] == -2)
    								{
    									adjacentTreeBlocks[(l2 + k1 + 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] = i2;
    								}
    								if (adjacentTreeBlocks[(l2 + k1) * j1 + ((j3 + k1) - 1) * byte1 + (l3 + k1)] == -2)
    								{
    									adjacentTreeBlocks[(l2 + k1) * j1 + ((j3 + k1) - 1) * byte1 + (l3 + k1)] = i2;
    								}
    								if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1 + 1) * byte1 + (l3 + k1)] == -2)
    								{
    									adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1 + 1) * byte1 + (l3 + k1)] = i2;
    								}
    								if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + ((l3 + k1) - 1)] == -2)
    								{
    									adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + ((l3 + k1) - 1)] = i2;
    								}
    								if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1 + 1)] == -2)
    								{
    									adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1 + 1)] = i2;
    								}
    							}
    						}
    					}
    				}
    			}
    			int j2 = adjacentTreeBlocks[k1 * j1 + k1 * byte1 + k1];
    			if (j2 >= 0)
    			{
    				world.setBlockMetadata(i, j, k, l & -9);
    			}
    			else
    			{
    				removeLeaves(world, i, j, k);
    			}
    		}
    	}
    
    	private void removeLeaves(World world, int i, int j, int k)
    	{
    		dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k), 0);
    		world.setBlockWithNotify(i, j, k, 0);
    	}
    
    	public int quantityDropped(Random random)
    	{
    		return random.nextInt(5) != 0 ? 0 : 1;	 //1 / # = chance | EX: 2 = 50% chance (1/2 = .5 chance)
    								//Random from 0 - (#-1)
    								//if the random number = 0
    								//drops 1 item
    	}
    
    	public int idDropped(int i, Random random, int j)
    	{
    		if(random.nextInt(5) == 0)
    			return Item.appleRed.shiftedIndex;
    		return mod_YourTree.Yoursapling.blockID;   // Your fruit of choice //
    		//return Block.sapling.blockID;
    	}
    
    	public void harvestBlock(World world, EntityPlayer entityplayer, int i, int j, int k, int l)
    	{
    		if(!world.multiplayerWorld && entityplayer.getCurrentEquippedItem() != null && entityplayer.getCurrentEquippedItem().itemID == Item.shears.shiftedIndex)
    		{
    			entityplayer.addStat(StatList.mineBlockStatArray[blockID], 1);
    			dropBlockAsItem_do(world, i, j, k, new ItemStack(mod_YourTree.YourLeaves.blockID, 1, l & 3));  //////Leaf/////////
    		} else
    		{
    			super.harvestBlock(world, entityplayer, i, j, k, l);
    		}
    	}
    
    	public void dropBlockAsItemWithChance(World world, int i, int j, int k, int l, float f, int i1)
    	{
    		super.dropBlockAsItemWithChance(world, i, j, k, l, f, i1);
    		if (!world.multiplayerWorld && (l & 3) == 0 && world.rand.nextInt(200) == 0)
    		{
    			dropBlockAsItem_do(world, i, j, k, new ItemStack(Item.appleRed, 1, 0));
    		}
    	}
    	
    	 public boolean isOpaqueCube()
    	{
    		return false;
    	}
    
    	public void onEntityWalking(World world, int i, int j, int k, Entity entity)
    	{
    		super.onEntityWalking(world, i, j, k, entity);
    	}
    
    	int adjacentTreeBlocks[];
    	private int baseIndexInPNG;
    }


    BlockYourWood
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class BlockYourWood extends Block
    {
    
    	protected BlockYourWood(int i, int j)
    	{
    		super(i, j, Material.wood);
    		baseIndexInPNG = j;
    	}
    
    	public int quantityDropped(Random random)
    	{
    		return 1;
    	}
    
    	public int idDropped(int i, Random random)
    	{
    		return mod_YourTree.YourWood.blockID;
    	}
    
    	public int getBlockTextureFromSide(int i)
    	{
    		if(i == 1 || i == 0)
    		{
    			return 21;
    		} else
    		{
    			return baseIndexInPNG;
    		}
    	}
    
    	private int baseIndexInPNG;
    }


    Now for the last part of your Tree mod file!, the WorldGenYourTree
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class WorldGenYourTrees extends WorldGenerator
    {
    	public WorldGenYourTrees()
    	{
    	}
    
    	public boolean generate(World world, Random random, int i, int j, int k)
    	{
    		int l = random.nextInt(3) + 4;
    		boolean flag = true;
    		if (j < 1 || j + l + 1 > world.worldHeight)
    		{
    			return false;
    		}
    		for (int i1 = j; i1 <= j + 1 + l; i1++)
    		{
    			byte byte0 = 1;
    			if (i1 == j)
    			{
    				byte0 = 0;
    			}
    			if (i1 >= (j + 1 + l) - 2)
    			{
    				byte0 = 2;
    			}
    			for (int i2 = i - byte0; i2 <= i + byte0 && flag; i2++)
    			{
    				for (int l2 = k - byte0; l2 <= k + byte0 && flag; l2++)
    				{
    					if (i1 >= 0 && i1 < world.worldHeight)
    					{
    						int j3 = world.getBlockId(i2, i1, l2);
    						if (j3 != 0 && j3 != mod_YourTree.YourLeaves.blockID)
    						{
    							flag = false;
    						}
    					}
    					else
    					{
    						flag = false;
    					}
    				}
    			}
    		}
    
    		if (!flag)
    		{
    			return false;
    		}
    		int j1 = world.getBlockId(i, j - 1, k);
    		if (j1 != Block.grass.blockID && j1 != Block.dirt.blockID || j >= world.worldHeight - l - 1)
    		{
    			return false;
    		}
    		world.setBlock(i, j - 1, k, Block.dirt.blockID);
    		for (int k1 = (j - 3) + l; k1 <= j + l; k1++)
    		{
    			int j2 = k1 - (j + l);
    			int i3 = 1 - j2 / 2;
    			for (int k3 = i - i3; k3 <= i + i3; k3++)
    			{
    				int l3 = k3 - i;
    				for (int i4 = k - i3; i4 <= k + i3; i4++)
    				{
    					int j4 = i4 - k;
    					if ((Math.abs(l3) != i3 || Math.abs(j4) != i3 || random.nextInt(2) != 0 && j2 != 0) && !Block.opaqueCubeLookup[world.getBlockId(k3, k1, i4)])
    					{
    						world.setBlockAndMetadata(k3, k1, i4, mod_YourTree.YourLeaves.blockID, 3);
    					}
    				}
    			}
    		}
    
    		for (int l1 = 0; l1 < l; l1++)
    		{
    			int k2 = world.getBlockId(i, j + l1, k);
    			if (k2 == 0 || k2 == Block.leaves.blockID)
    			{
    				world.setBlockAndMetadata(i, j + l1, k, mod_YourTree.YourWood.blockID, 3);
    			}
    		}
    
    		return true;
    	}
    }
    I will update it more later on, im in school right now, so its much more of a copy & paste Tutorial, Anyways GoodLuck Modding!


    Tutorial Number 15; Making a Structure Spawn on Demand! (1.2.3)

    Making a structure spawn on demand! Okay, so for this part of the tutorial i will be showing you how to make a structure spawn on demand (left clicking on a custom made block)
    For this to work we have to make a bbasic block from one of my tutorials above, then we will need to tweak the Block*** codee to look like this:


    package net.minecraft.src;
    
    
    public class BlockSpawnTutorial extends Block
    
    {
    
    private World worldObj;
    
    
    protected BlockSpawnTutorial(int i, int j)
    
    {
    
    super(i, j, Material.iron);
    
    }
    
    
    public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer)
    
    {
    
    //Random stuff i shouldve made neater.
    
    world.setBlockWithNotify(i + 1, j, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j, k - 5, Block.dirt.blockID);
    
    
    //Entrance
    
    world.setBlockWithNotify(i + 2, j, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 2, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 2, j + 1, k - 5, Block.dirt.blockID);
    
    
    //LongWall
    
    world.setBlockWithNotify(i - 1, j + 1, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 1, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 1, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 1, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 1, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 1, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 1, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k + 1, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 2, j + 2, k - 1, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 2, j + 2, k - 2, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 2, j + 2, k - 3, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 2, j + 2, k - 4, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k - 5, Block.glass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 3, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 3, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 3, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 3, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j, k - 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j, k - 2, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j, k - 3, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j, k - 4, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 1, j + 2, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 1, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 2, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i - 2, j + 3, k - 5, Block.dirt.blockID);
    
    
    //SideWalls
    
    world.setBlockWithNotify(i, j + 1, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j + 2, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i, j + 3, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 1, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 2, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 5, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 1, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 2, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j + 1, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j + 2, k + 1, Block.dirt.blockID);
    
    world.setBlockWithNotify(i , j + 3, k + 1, Block.dirt.blockID);
    
    
    //Roof
    
    world.setBlockWithNotify(i + 1, j + 3, k + 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i , j + 3, k + 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i , j + 3, k - 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k + 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 2, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 3, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 4, Block.grass.blockID);
    
    world.setBlockWithNotify(i - 1, j + 3, k - 5, Block.grass.blockID);
    
    world.setBlockWithNotify(i, j + 3, k - 2, Block.grass.blockID);
    
    world.setBlockWithNotify(i, j + 3, k - 3, Block.grass.blockID);
    
    world.setBlockWithNotify(i, j + 3, k - 4, Block.grass.blockID);
    
    world.setBlockWithNotify(i, j + 3, k - 5, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 2, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 3, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 4, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 1, j + 3, k - 5, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 2, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 3, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 4, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k - 5, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k, Block.grass.blockID);
    
    world.setBlockWithNotify(i + 2, j + 3, k + 1, Block.grass.blockID);
    
    world.setBlockWithNotify(i, j + 3, k, Block.grass.blockID);
    
    
    }
    
    }


    (i will fix this when i get home)


    Now the Axis is explained through I and K = East and West (X Axis) and J is up and down (Y axis)

    Now when you place this block and left click it it should spawn a bunker like house ;D Happy modding :P



    Tutorial Number 16; Custom Mobs (You Need 'Techne' for this to work)

    Okay so welcome to tutorial Number 15# on the list, so, in this tutorial we are going to be making Four new files, a NEW mod_***, Entity, Render and Model (To make the model we use techne)
    Okay, so first off well start with the new Entity file, Then the Render file, Model file, then the mod_ file, so first up making the Entity:

    Agressive Mob:
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class Entity**** extends EntityMob
    {
    	public Entity****(World world)
    	{
    		super(world);
    		texture = "/YourTextureFolder/****.png";
    		moveSpeed = 0.3F;
    		attackStrength = 3;
    	}
    
    	public int getMaxHealth()
    	{
    		return 60;
    	}
    
    	protected String getLivingSound()
    	{
    		return null;
    	}
    
    	protected String getHurtSound()
    	{
    		return null;
    	}
    
    	protected String getDeathSound()
    	{
    		return null;
    	}
    
    	protected int getDropItemId()
    	{
    		return r.nextInt(2)==0?Item.egg.shiftedIndex:Block.sapling.blockID;
    	}
    		
    		public ItemStack getHeldItem()
    	{
    		return defaultHeldItem;
    	}
    		
    		private static final ItemStack defaultHeldItem;
    		
    		static
    	{
    		defaultHeldItem = new ItemStack(Item.swordStone, 1);
    	}
    		protected boolean canDespawn()
    		{
    				return false;
    		}
    		
    				public boolean interact(EntityPlayer entityplayer)
    		{
    					ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Firstmod Aye?");
    			return true;
    		}
    }

    Friendly Mob:
    package net.minecraft.src;
    
    import java.util.Random;
    
    public class Entity**** extends EntityAnimal{
    		Random r=new Random();
    
    	public Entity****(World world){
    		super(world);
    		texture = "/YourTextureFolder/****.png";
    		moveSpeed = 0.8F;
    	}
    
    	public int getMaxHealth(){
    		return 7;
    	}
    
    	protected int func_40119_ar(){
    		return 2;
    	}
    
    	public void onLivingUpdate(){
    		super.onLivingUpdate();
    	}
    
    	protected String getLivingSound(){
    		return "note.harp";
    	}
    
    	protected String getHurtSound(){
    		return "note.snare";
    	}
    
    	protected String getDeathSound(){
    		return "random.explode";
    	}
    
    	protected int getDropItemId(){
    		return r.nextInt(2)==0?Item.egg.shiftedIndex:Block.sapling.blockID;
    	}
    
    	public EnumCreatureAttribute func_40124_t(){
    		return EnumCreatureAttribute.UNDEFINED;
    	}
    	protected EntityAnimal spawnBabyAnimal(EntityAnimal entityanimal) {
    				return new Entity****(worldObj);
    		}
    		
    
    }

    Okay so i will explain this breifly ill explain it better in the normal mob tutorial.
    movespeed = how fast it moves 2.0 being our sprinting speed
    attackstrength = how hard it hits (2 = 1 heart, 1 = 1/2 a heart)
    getmaxhealth = How much health it has (so dont forget if you want it to have 20hearts times it by 2 then put that in)
    return r.nextInt(2)==0?Item.egg.shiftedIndex:Block.sapling.blockID;
    this is what it drops so the first one is what it has a chance of dropping at start then the second one is like a second chance, then if neither are picked it will drop nothing
      public ItemStack getHeldItem()
    	{
    		return defaultHeldItem;
    	}
    		
    		private static final ItemStack defaultHeldItem;
    		
    		static
    	{
    		defaultHeldItem = new ItemStack(Item.swordStone, 1);
    	}
    that is what it holds as soon as it spawns.

     public boolean interact(EntityPlayer entityplayer)
    		{
    					ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Firstmod Aye?");
    			return true;
    		}
    this is making the pc talk if you right click on it.
    public EnumCreatureAttribute func_40124_t(){
    		return EnumCreatureAttribute.UNDEFINED;
    	}
    dont touch this, unless you know what you're doing

    Okay so thats he Entity part done, now for the Render part,

    ONLY CHANGE THE Render*** the rest HAS to be left ALONE (no explaining to do because this file cannot be edited (unless you know what your doing)
    package net.minecraft.src;
    
    import org.lwjgl.opengl.GL11;
    
    
    // Referenced classes of package net.minecraft.src:
    //			RenderLiving, JWorld_EntityExample, ModelBase, EntityLiving,
    //			Entity
    
    public class Render**** extends RenderLiving
    {
    		
    		public Render****(ModelBase modelbase, float f)
    	{
    		super(modelbase, f);
    	}
    
    	public void Render****(Entity**** Entity****, double d, double d1, double d2,
    			float f, float f1)
    	{
    		super.doRenderLiving(Entity****, d, d1, d2, f, f1);
    	}
    
    	public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2,
    			float f, float f1)
    	{
    		Render****((Entity****)entityliving, d, d1, d2, f, f1);
    	}
    
    	public void doRender(Entity entity, double d, double d1, double d2,
    			float f, float f1)
    	{
    		Render****((Entity****)entity, d, d1, d2, f, f1);
    	}
    	
    	//attempting to scale
    	
    	 protected void preRenderScale(Entity**** entity, float f)
       {
    	 GL11.glScalef(1.25F, 1.25F, 1.25F);
    	}
    
    	protected void preRenderCallback(EntityLiving entityliving, float f)
    	{
    	   preRenderScale((Entity****)entityliving, f);
    	}
    
    }


    Now To make the model, You have to model it on Techne, then save it, then export it as java then choose what you wish to call it (What you call it here MUST be the same as you call everything else) Theirs no code to upload because techne creates it for you.

    Now For the Final Part the mod_*** file

    Okay so first thing you need to understand is:
     ModLoader.RegisterEntityID(Entity***.class, "****", ModLoader.getUniqueEntityId());
    		ModLoader.AddSpawn(Entity***.class, 14, 1, 1, EnumCreatureType.creature);

    Okay so the
    RegisterEntityID
    Tells the game a new mobs is being added, the lines after
    (Entity***.class, "****", ModLoader.getUniqueEntityId());

    tells the game That it has to get the information from the Entity*** you made* and then it generates a random id code for it.

    Next thing it tells the game is about the spawning:
    ModLoader.AddSpawn(Entity***.class, 14, 1, 1, EnumCreatureType.creature);

    Okay so same as above the Entity*** is the Entity file you have made make, Then it tells the game how rare it is
    14
    then its smallest and largest group it will spawn in
    1, 1
    then the
    EnumCreatureType.creature

    Im not quite sure what this means exactly but i have a rough idea that it will have something to do with the way it spawns.

    Then the last part you have to understand is the last part, the:
    map.put(Entity***.class, new RenderEntity***(new Model***(), 0.2F));
    this tells the game that the Entity** looks like Model** with Render** Okay Thats it for this tutorial post any errors you get and ill gladly help you!
    Final Code:
    package net.minecraft.src;
    
    import java.util.Map;
    
    public class mod_**** extends BaseMod
    {
    		
    		public void load()
    		{	  
    		ModLoader.RegisterEntityID(Entity***.class, "Highway Man", ModLoader.getUniqueEntityId());
    		ModLoader.AddSpawn(Entity***.class, 14, 1, 1, EnumCreatureType.creature);
    			  
    		public void AddRenderer(Map map)
    	{
    		map.put(EntityEntity***.class, new RenderEntity***(new ModelEntity***(), 0.2F));
    				
    				
    		}
    		
    		public String getVersion()
    		{
    				return "1.1";
    		}
    
    }



    Tutorial Number 17; Make an Entity Spawn on Rightclick(1.2.3)

    Okay so for this tutorial we will be making an item that will spawn the entity that we want on rightclick, like the spawner eggs. we will need to make a new item refrence in our mod_*** file and a new Item**** java file

    First off The updated mod_*** file XD

    //Coded by *******
    package net.minecraft.src;
    import java.util.Random;
    public class mod_SpawnWand extends BaseMod{
    
    public mod_SpawnWand()
    {
    //TODO List
    addNames();
    setTextures();
    registerBlocks();
    addRecipes();
    addSmelting();
    }
    
    public void addNames()
    {
    //***
    //* This adds the name for your Item/Block then the in game name.
    //***
    
    ModLoader.addName(SpawnWand, "Pig Spawn Wand");
    
    
    }
    
    public void setTextures()
    {
    //***
    //* This adds the Textures for you Item's/Block's
    //***
    SpawnWand.iconIndex = ModLoader.addOverride("/gui/items.png", "/SpawnWand.png");
    
    }
    
    public void registerBlocks()
    {
    //***
    //* This will register the block. (This Has to be added if you're making a block no items go here)
    //***
    
    
    }
    
    public void addRecipes()
    {
    //***
    //* Be Creative! This part will be how you craft your Item's/Block's
    //***
    
    
    ModLoader.addRecipe(new ItemStack(SpawnWand, 1), new Object[] {
    "a", Character.valueOf('a'), Block.dirt
    });
    
    
    }
    
    public void addSmelting()
    {
    //***
    //* This part is where we add our Smelting Recipes.
    //***
    
    }
    
    //***
    //* This is where we Register our Items/Blocks for the part below.
    //***
    
    public static Item SpawnWand;
    
    
    
    static
    {
    //***
    //* This is where the fun begins with some food and blocks.
    //***
    SpawnWand = (new ItemSpawnWand(1000)).setItemName("SpawnWand");
    }
    
    public String getVersion()
    {
    
    //***
    //* This is where we name our mod.
    //***
    return "My Mod";
    }
    
    public void load()
    {
    //***
    //* This is where Some NPC Stuff will go.
    //***
    
    }
    
    }


    Just Rename the Spawn Wand to what you want it to be called i explained all this in the Item Tutorial
    Next Part Will Be On Soon

    Now For the ItemSpawnWand.java ;D

    package net.minecraft.src;
    
    import java.util.Random;
    
    public class ItemSpawnWand extends Item
    {
    	public ItemSpawnWand(int i)
    	{
    		super(i);
    maxStackSize = 1;
    		setMaxDamage(200);
    	}
       private World worldObj;
    
    		public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l)
    	{
    		if(!world.isRemote)
    		{
    					ModLoader.getMinecraftInstance().thePlayer.addChatMessage("SpawnWand Activated");
    			EntityLiving entityliving = (EntityLiving)EntityList.createEntityInWorld("Cow", entityplayer.worldObj);
    
    						entityliving.setLocationAndAngles(i, j + 1, k, 0F, 0F);
    			entityplayer.worldObj.spawnEntityInWorld(entityliving);
    						entityplayer.swingItem();
    		}
    		return true;
    	}
    }


    So What this does is it tells the game, that when you right click it it will say "SpawnWand Activated" Then to change what spawns just change the Cow to anyother Entity the SRC folder ;D




    Tutorial Number 18; Making your own Advanced Blocks!(1.2.3)

    This tutorial Hasn't Been Uploaded Yet, Please bare with me.



    Tutorial Number 19; Making your own Crops, And Their Fertilizer! (1.2.3)

    This Tutorial hasn't been uploaded yet, Please bare with me.



    Tutorial Number 20; Make Your Own Biome (1.2.3)

    Hey guys This tutorial is on how to make your own Biome! We no longer need to edit any base classes YAY! :D
    We need to add in a couple of lines to our mod_****, and then make a BiomeGenBase**** Lets Start Modding!

    mod_****

    package net.minecraft.src;
    public class mod_**** extends BaseMod
    {
    public static final BiomeGenBase **** = (new BiomeGen****(24)).setBiomeName("****");
    
    public void load()
    {
      ModLoader.addBiome(****);
    }
    
    public String getVersion()
    {
      return "1.2.3";
    }
    }

    Okay so the (24)) is the biome ID currently Mojang uses up to 23, so we must use 24-250 (i think 250 is the highest it may be higher)

    BiomeGen**** (THIS IS TE CLASS YOU CREATE AND ITS THE FUN PART! :D )

    Okay so im just gunna show you all the code and explain it below.

    package net.minecraft.src;
    
    import java.util.List;
    
    import net.minecraft.src.BiomeGenBase;
    
    public class BiomeGen**** extends BiomeGenBase
    {
    	public BiomeGen****(int par1)
    	{
    		super(par1);
    		spawnableCreatureList.clear();
    		topBlock = (byte)Block.grass.blockID;
    		fillerBlock = (byte)Block.stone.blockID;
    		biomeDecorator.treesPerChunk = -999;
    		biomeDecorator.deadBushPerChunk = 0;
    		biomeDecorator.reedsPerChunk = 0;
    		biomeDecorator.cactiPerChunk = 0;
    		waterColorMultiplier = 0x242424;
    		spawnableMonsterList.add(new SpawnListEntry(net.minecraft.src.EntityCow.class, 50, 4, 4));
    	}
    
    	public int func_48415_j()
    	{
    		double d = func_48411_i();
    		double d1 = func_48414_h();
    		return ((ColorizerGrass.getGrassColor(d, d1) & 0xC2C2C2) + 0xC2C2C2) / 2;
    	}
    
    	public int func_48412_k()
    	{
    		double d = func_48411_i();
    		double d1 = func_48414_h();
    		return ((ColorizerFoliage.getFoliageColor(d, d1) & 0xC2C2C2) + 0xC2C2C2) / 2;
    	}
    }


    Okay so this is the fun part cus this is what your biome is made up of etc :D , so the

     public int func_48415_j()
    	{
    		double d = func_48411_i();
    		double d1 = func_48414_h();
    		return ((ColorizerGrass.getGrassColor(d, d1) & 0xC2C2C2) + 0xC2C2C2) / 2;
    	}
    
    	public int func_48412_k()
    	{
    		double d = func_48411_i();
    		double d1 = func_48414_h();
    		return ((ColorizerFoliage.getFoliageColor(d, d1) & 0xC2C2C2) + 0xC2C2C2) / 2;
    	}


    Is the colour of your biomes grass you will have to change the 0xC2C2C2 to your hexdecimal colour (Look up a hexdecimal colour thingo on google)
    This next part is what spawns in your biome. without having to edit any of the base animal files.

    spawnableMonsterList.add(new SpawnListEntry(net.minecraft.src.EntityCow.class, 50, 4, 4));


    So this will have a spawn chance number of 50 and it will spawn 4 at max and 4 at minimum the more you have the more numbers it has to choose from :D (the 50, 51, 52 etc etc)
    This Next part is the colour of the water

    waterColorMultiplier = 0x242424;


    Same as the grass its a hexdecimal colour play around with it for your result.

    biomeDecorator.treesPerChunk = -999;
    		biomeDecorator.deadBushPerChunk = 0;
    		biomeDecorator.reedsPerChunk = 0;
    		biomeDecorator.cactiPerChunk = 0;


    I dont fully understand this but just look at the other BiomeGenFiles
    This Next Part is what blocks spawn in your biome this can be quite fun!

    topBlock = (byte)Block.grass.blockID;
    		fillerBlock = (byte)Block.stone.blockID;


    So the topBlock is what spawns ontop so say we want diamond blocks to spawn ontop then the layer under the top is fillerBlock say we wanted that to be Dimond Ore well then it will be as the following:

    topBlock = (byte)Block.blockDiamond.blockID;
    		fillerBlock = (byte)Block.oreDiamond.blockID;


    And Thats ur BiomeGen*** Files i will add more to this later! :D

    Okay And now you have your own biome along with items blocks Etc. ;D



    Tutorial Number 21; Spawning Structures InGame! (1.2.3)

    This tutorial Hasn't Been Uploaded Yet, Please bare with me.




    Tutorial Number 22; Spawning Chests InGame! (1.2.3)

    This tutorial Hasn't Been Uploaded Yet, Please bare with me.




    Tutorial Number 23; Spawning Monster Spawners InGame! (1.2.3)

    This tutorial Hasn't Been Uploaded Yet, Please bare with me.




    Tutorial Number 24; Making a throw able Explosive! (1.2.3)

    This tutorial Hasn't Been Uploaded Yet, Please bare with me.



    Tutorial Number 25; Make Your Own Dimension (1.2.3)

    Okay so to make this dimension we are going to require pundlehunds dimension API Source code which can be downloaded here , Now after we've got that drag it into our SRC folder. Now we are ready to make our own dimension! ;D I have made an example the Taiga Biome just change the Taiga to what you want to call it. We are going to be making 5 Files, no base class editing! ;D (BlockYourPortal, ChunkProviderYour, mod_YourDimension, WorldProviderYour and last but not least TeleporterYour.)
    P.S - I haven't completely finished the teleporter code so it doesn't work like a nether portal, you have to craft it out of 1 dirt block then place it like a normal block and walk into it :(

    BlockYourPortal:


    package net.minecraft.src;

    import java.util.List;
    import java.util.ArrayList;

    public class BlockTaigaPortal extends BlockPortalBase
    {
    //Look in BlockPortalBase.java to see the full array of hooks you can use for your portal block.

    public BlockTaigaPortal(int i)
    {
    super(i, ModLoader.getUniqueSpriteIndex("/terrain.png"), Material.portal);
    //Get a unique sprite index for the portal texture so that it doesn't override another
    //texture.
    }

    public WorldProviderBase getDimension()
    {
    return new WorldProviderTaiga();
    }

    public Teleporter getTeleporter()
    {
    return new TeleporterTaiga();
    }

    //You can get to this dimension from the overworld (0) and Nether (-1).
    public List canTeleportFromDimension()
    {
    ArrayList list = new ArrayList();
    list.add(0);
    list.add(-1);
    return list;
    }

    //You should probably make the portal non-solid so you can step into it...
    public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k)
    {
    return null;
    }

    /**
    * Updates the blocks bounds based on its current state. Args: world, x, y, z
    */
    public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
    {
    if (par1IBlockAccess.getBlockId(par2 - 1, par3, par4) == blockID || par1IBlockAccess.getBlockId(par2 + 1, par3, par4) == blockID)
    {
    float f = 0.5F;
    float f2 = 0.125F;
    setBlockBounds(0.5F - f, 0.0F, 0.5F - f2, 0.5F + f, 1.0F, 0.5F + f2);
    }
    else
    {
    float f1 = 0.125F;
    float f3 = 0.5F;
    setBlockBounds(0.5F - f1, 0.0F, 0.5F - f3, 0.5F + f1, 1.0F, 0.5F + f3);
    }
    }

    /**
    * Is this block (a) opaque and ( B) a full 1m cube? This determines whether or not to render the shared face of two
    * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
    */
    public boolean isOpaqueCube()
    {
    return false;
    }

    /**
    * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
    */
    public boolean renderAsNormalBlock()
    {
    return false;
    }

    /**
    * Checks to see if this location is valid to create a portal and will return True if it does. Args: world, x, y, z
    */
    public boolean tryToCreatePortal(World par1World, int par2, int par3, int par4)
    {
    int i = 0;
    int j = 0;

    if (par1World.getBlockId(par2 - 1, par3, par4) == Block.cobblestone.blockID || par1World.getBlockId(par2 + 1, par3, par4) == Block.cobblestone.blockID)
    {
    i = 1;
    }

    if (par1World.getBlockId(par2, par3, par4 - 1) == Block.cobblestone.blockID || par1World.getBlockId(par2, par3, par4 + 1) == Block.cobblestone.blockID)
    {
    j = 1;
    }

    if (i == j)
    {
    return false;
    }

    if (par1World.getBlockId(par2 - i, par3, par4 - j) == 0)
    {
    par2 -= i;
    par4 -= j;
    }

    for (int k = -1; k <= 2; k++)
    {
    for (int i1 = -1; i1 <= 3; i1++)
    {
    boolean flag = k == -1 || k == 2 || i1 == -1 || i1 == 3;

    if ((k == -1 || k == 2) && (i1 == -1 || i1 == 3))
    {
    continue;
    }

    int k1 = par1World.getBlockId(par2 + i * k, par3 + i1, par4 + j * k);

    if (flag)
    {
    if (k1 != Block.cobblestone.blockID)
    {
    return false;
    }

    continue;
    }

    if (k1 != 0 && k1 != Block.fire.blockID)
    {
    return false;
    }
    }
    }

    par1World.editingBlocks = true;

    for (int l = 0; l < 2; l++)
    {
    for (int j1 = 0; j1 < 3; j1++)
    {
    par1World.setBlockWithNotify(par2 + i * l, par3 + j1, par4 + j * l, Block.portal.blockID);
    }
    }

    par1World.editingBlocks = false;
    return true;
    }

    /**
    * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
    * their own) Args: x, y, z, neighbor blockID
    */
    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
    {
    int i = 0;
    int j = 1;

    if (par1World.getBlockId(par2 - 1, par3, par4) == blockID || par1World.getBlockId(par2 + 1, par3, par4) == blockID)
    {
    i = 1;
    j = 0;
    }

    int k;

    for (k = par3; par1World.getBlockId(par2, k - 1, par4) == blockID; k--) { }

    if (par1World.getBlockId(par2, k - 1, par4) != Block.cobblestone.blockID)
    {
    par1World.setBlockWithNotify(par2, par3, par4, 0);
    return;
    }

    int l;

    for (l = 1; l < 4 && par1World.getBlockId(par2, k + l, par4) == blockID; l++) { }

    if (l != 3 || par1World.getBlockId(par2, k + l, par4) != Block.cobblestone.blockID)
    {
    par1World.setBlockWithNotify(par2, par3, par4, 0);
    return;
    }

    boolean flag = par1World.getBlockId(par2 - 1, par3, par4) == blockID || par1World.getBlockId(par2 + 1, par3, par4) == blockID;
    boolean flag1 = par1World.getBlockId(par2, par3, par4 - 1) == blockID || par1World.getBlockId(par2, par3, par4 + 1) == blockID;

    if (flag && flag1)
    {
    par1World.setBlockWithNotify(par2, par3, par4, 0);
    return;
    }

    if ((par1World.getBlockId(par2 + i, par3, par4 + j) != Block.cobblestone.blockID || par1World.getBlockId(par2 - i, par3, par4 - j) != blockID) && (par1World.getBlockId(par2 - i, par3, par4 - j) != Block.cobblestone.blockID || par1World.getBlockId(par2 + i, par3, par4 + j) != blockID))
    {
    par1World.setBlockWithNotify(par2, par3, par4, 0);
    return;
    }
    else
    {
    return;
    }
    }

    /**
    * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
    * coordinates. Args: blockAccess, x, y, z, side
    */
    public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
    {
    if (par1IBlockAccess.getBlockId(par2, par3, par4) == blockID)
    {
    return false;
    }

    boolean flag = par1IBlockAccess.getBlockId(par2 - 1, par3, par4) == blockID && par1IBlockAccess.getBlockId(par2 - 2, par3, par4) != blockID;
    boolean flag1 = par1IBlockAccess.getBlockId(par2 + 1, par3, par4) == blockID && par1IBlockAccess.getBlockId(par2 + 2, par3, par4) != blockID;
    boolean flag2 = par1IBlockAccess.getBlockId(par2, par3, par4 - 1) == blockID && par1IBlockAccess.getBlockId(par2, par3, par4 - 2) != blockID;
    boolean flag3 = par1IBlockAccess.getBlockId(par2, par3, par4 + 1) == blockID && par1IBlockAccess.getBlockId(par2, par3, par4 + 2) != blockID;
    boolean flag4 = flag || flag1;
    boolean flag5 = flag2 || flag3;

    if (flag4 && par5 == 4)
    {
    return true;
    }

    if (flag4 && par5 == 5)
    {
    return true;
    }

    if (flag5 && par5 == 2)
    {
    return true;
    }

    return flag5 && par5 == 3;
    }



    public boolean displayPortalOverlay()
    {
    return true;
    }

    public int getOverlayTexture()
    {
    return blockIndexInTexture;
    }

    @Override
    public String getEnteringMessage() {
    // TODO Auto-generated method stub
    return null;
    }

    @Override
    public String getLeavingMessage() {
    // TODO Auto-generated method stub
    return null;
    }

    }

    Just Rename The Taiga To What You Want.

    ChunkProviderYour


    package net.minecraft.src;

    import java.util.List;
    import java.util.Random;

    public class ChunkProviderTaiga extends ChunkProviderGenerate
    implements IChunkProvider
    {

    //This class inherits most of the terrain generation from ChunkProviderGenerate, since the terrain
    //is basically just like the overworld's, except all desert. I have removed strongholds, villages,
    //and mineshafts, however. Your terrain generator does not have to inherit ChunkProviderGenerate,
    //but it must implement the IChunkProvider interface. I did not include modifications to the noise
    //generator here; you'll have to tinker around with it yourself.

    private Random rand;
    private World worldObj;
    private MapGenBase caveGenerator;
    private MapGenBase ravineGenerator;
    private BiomeGenBase biomesForGeneration[];

    public ChunkProviderTaiga(World world, long l)
    {
    super(world, l, true);
    worldObj = world;
    rand = new Random(l);
    caveGenerator = new MapGenCaves();
    ravineGenerator = new MapGenRavine();
    }

    //This is necessary to override the structure generator.
    public Chunk provideChunk(int par1, int par2)
    {
    rand.setSeed((long)par1 * 0x4f9939f508L + (long)par2 * 0x1ef1565bd5L);
    byte abyte0[] = new byte[32768];
    generateTerrain(par1, par2, abyte0);
    biomesForGeneration = worldObj.getWorldChunkManager().loadBlockGeneratorData(biomesForGeneration, par1 * 16, par2 * 16, 16, 16);
    replaceBlocksForBiome(par1, par2, abyte0, biomesForGeneration);
    caveGenerator.generate(this, worldObj, par1, par2, abyte0);
    ravineGenerator.generate(this, worldObj, par1, par2, abyte0);
    Chunk chunk = new Chunk(worldObj, abyte0, par1, par2);
    chunk.generateSkylightMap();
    return chunk;
    }

    //This is where world generation, the more superficial aspects of the terrain such as flowers
    //and ores, occurs. It is analogous to BaseMod's GenerateSurface method. Since 1.8, world
    //generation has been covered mostly by BiomeDecorator.java, which is called toward the end
    //of this method.
    public void populate(IChunkProvider ichunkprovider, int i, int j)
    {
    BlockSand.fallInstantly = true;
    int k = i * 16;
    int l = j * 16;
    BiomeGenBase biomegenbase = worldObj.getWorldChunkManager().getBiomeGenAt(k + 16, l + 16);
    rand.setSeed(worldObj.getSeed());
    long l1 = (rand.nextLong() / 2L) * 2L + 1L;
    long l2 = (rand.nextLong() / 2L) * 2L + 1L;
    rand.setSeed((long)i * l1 + (long)j * l2 ^ worldObj.getSeed());
    boolean flag = false;
    if (!flag && rand.nextInt(4) == 0)
    {
    int i1 = k + rand.nextInt(16) + 8;
    int j2 = rand.nextInt(128);
    int k3 = l + rand.nextInt(16) + 8;
    (new WorldGenLakes(Block.waterStill.blockID)).generate(worldObj, rand, i1, j2, k3);
    }
    if (!flag && rand.nextInt(8) == 0)
    {
    int j1 = k + rand.nextInt(16) + 8;
    int k2 = rand.nextInt(rand.nextInt(128 - 8) + 8);
    int l3 = l + rand.nextInt(16) + 8;
    if (k2 < 63 || rand.nextInt(10) == 0)
    {
    (new WorldGenLakes(Block.lavaStill.blockID)).generate(worldObj, rand, j1, k2, l3);
    }
    }
    for (int k1 = 0; k1 < 8; k1++)
    {
    int i3 = k + rand.nextInt(16) + 8;
    int i4 = rand.nextInt(128);
    int k4 = l + rand.nextInt(16) + 8;
    if (!(new WorldGenDungeons()).generate(worldObj, rand, i3, i4, k4));
    }

    //Here is where BiomeDecorator takes over the world generation. You can create your own
    //version of it, or simply place all of your world generation right here instead.
    biomegenbase.decorate(worldObj, rand, k, l);
    SpawnerAnimals.performWorldGenSpawning(worldObj, biomegenbase, k + 8, l + 8, 16, 16, rand);
    k += 8;
    l += 8;
    BlockSand.fallInstantly = false;
    }

    //This has to do with strongholds, which I removed, so it just returns null.
    public ChunkPosition func_40376_a(World world, String s, int i, int j, int k)
    {
    return null;
    }

    }

    Just Rename The Taiga To What You Want

    modYourDimension


    package net.minecraft.src;

    public class mod_TaigaDimension extends BaseModMp
    {
    public mod_TaigaDimension()
    {
    //It is vital that you register your dimension:
    DimensionAPI.registerDimension(new WorldProviderTaiga());
    }

    public void load()
    {
    //The portal can be crafted out of dirt and placed freely.
    ModLoader.registerBlock(TaigaPortal);
    ModLoader.addRecipe(new ItemStack(TaigaPortal, 64), new Object[] { "dd", Character.valueOf('d'), Block.dirt });
    }

    public String getVersion()
    {
    return "1.2.3";
    }

    public static final Block TaigaPortal = new BlockTaigaPortal(230).setHardness(-1F).setStepSound(Block.soundGlassFootstep).setLightValue(0.75F).setBlockName("TaigaPortal");
    }

    Just Change The Taiga To What Your Calling It

    WorldProviderYour


    package net.minecraft.src;

    import java.util.Random;

    public class WorldProviderTaiga extends WorldProviderBase
    {

    //The WorldProvider covers all the basics of the dimension. Look in WorldProviderBase.java and
    //WorldProvider.java for all the potential qualities you can assign to your dimension.

    public WorldProviderTaiga()
    {
    }

    //The save file will be called DIM65 (DIM + id number).
    public int getDimensionID()
    {
    return 65;
    }

    public boolean renderClouds()
    {
    return true;
    }

    public boolean renderVoidFog()
    {
    return true;
    }

    public float setSunSize()
    {
    return 3.0F;
    }

    public float setMoonSize()
    {
    return 0.5F;
    }

    public String getSunTexture()
    {
    return "/sunRed.png";
    }

    public String getMoonTexture()
    {
    return "/moonGreen.png";
    }

    public boolean renderStars()
    {
    return true;
    }

    public boolean darkenSkyDuringRain()
    {
    return true;
    }

    public String getRespawnMessage()
    {
    return "Apparently this dimension is too tough for you ;) ";
    }

    //You can use an existing WorldChunkManager, or create your own. You must create your own to
    //add multiple unique biomes to a dimension.
    public void registerWorldChunkManager()
    {
    worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.taiga, 1.0F, 0.0F);
    }

    //This is where you define your terrain generator.
    public IChunkProvider getChunkProvider()
    {
    return new ChunkProviderTaiga(worldObj, worldObj.getSeed());
    }

    //Note that, if you respawn in the dimension, you will end up at the coordinates of your
    //overworld spawn point, not at the location of your first entrance to the dimension or
    //something like that. Note also that beds don't work if you cannot respawn in the dimension.
    public boolean canRespawnHere()
    {
    return false;
    }

    }

    Just Change The Taiga To What You Want

    TeleporterYour


    package net.minecraft.src;

    import java.util.Random;

    public class TeleporterTaiga extends Teleporter
    {
    //The Teleporter class handles finding existing portals and generating new ones. It pinpoints
    //the location to which the player should be teleported when traveling across dimensions.

    private Random random;

    public TeleporterTaiga()
    {
    random = new Random();
    }

    public void placeInPortal(World world, Entity entity)
    {
    if (placeInExistingPortal(world, entity))
    {
    return;
    }
    else
    {
    createPortal(world, entity);
    placeInExistingPortal(world, entity);
    return;
    }
    }

    public boolean placeInExistingPortal(World world, Entity entity)
    {
    char c = '\200';
    double d = -1D;
    int i = 0;
    int j = 0;
    int k = 0;
    int l = MathHelper.floor_double(entity.posX);
    int i1 = MathHelper.floor_double(entity.posZ);
    for (int j1 = l - c; j1 <= l + c; j1++)
    {
    double d1 = ((double)j1 + 0.5D) - entity.posX;
    for (int j2 = i1 - c; j2 <= i1 + c; j2++)
    {
    double d3 = ((double)j2 + 0.5D) - entity.posZ;
    for (int k2 = 128 - 1; k2 >= 0; k2--)
    {
    if (world.getBlockId(j1, k2, j2) != mod_TaigaDimension.TaigaPortal.blockID)
    {
    continue;
    }
    for (; world.getBlockId(j1, k2 - 1, j2) == mod_TaigaDimension.TaigaPortal.blockID; k2--) { }
    double d5 = ((double)k2 + 0.5D) - entity.posY;
    double d7 = d1 * d1 + d5 * d5 + d3 * d3;
    if (d < 0.0D || d7 < d)
    {
    d = d7;
    i = j1;
    j = k2;
    k = j2;
    }
    }
    }
    }

    if (d >= 0.0D)
    {
    int k1 = i;
    int l1 = j;
    int i2 = k;
    double d2 = (double)k1 + 0.5D;
    double d4 = (double)l1 + 0.5D;
    double d6 = (double)i2 + 0.5D;
    if (world.getBlockId(k1 - 1, l1, i2) == mod_TaigaDimension.TaigaPortal.blockID)
    {
    d2 -= 0.5D;
    }
    if (world.getBlockId(k1 + 1, l1, i2) == mod_TaigaDimension.TaigaPortal.blockID)
    {
    d2 += 0.5D;
    }
    if (world.getBlockId(k1, l1, i2 - 1) == mod_TaigaDimension.TaigaPortal.blockID)
    {
    d6 -= 0.5D;
    }
    if (world.getBlockId(k1, l1, i2 + 1) == mod_TaigaDimension.TaigaPortal.blockID)
    {
    d6 += 0.5D;
    }
    entity.setLocationAndAngles(d2, d4, d6, entity.rotationYaw, 0.0F);
    entity.motionX = entity.motionY = entity.motionZ = 0.0D;
    return true;
    }
    else
    {
    return false;
    }
    }

    public boolean createPortal(World world, Entity entity)
    {
    byte byte0 = 16;
    double d = -1D;
    int i = MathHelper.floor_double(entity.posX);
    int j = MathHelper.floor_double(entity.posY);
    int k = MathHelper.floor_double(entity.posZ);
    int l = i;
    int i1 = j;
    int j1 = k;
    int k1 = 0;
    int l1 = random.nextInt(4);
    for (int i2 = i - byte0; i2 <= i + byte0; i2++)
    {
    double d1 = ((double)i2 + 0.5D) - entity.posX;
    for (int j3 = k - byte0; j3 <= k + byte0; j3++)
    {
    double d3 = ((double)j3 + 0.5D) - entity.posZ;
    for (int k4 = 128 - 1; k4 >= 0; k4--)
    {
    if (!world.isAirBlock(i2, k4, j3))
    {
    continue;
    }
    for (; k4 > 0 && world.isAirBlock(i2, k4 - 1, j3); k4--) { }
    label0:
    for (int k5 = l1; k5 < l1 + 4; k5++)
    {
    int l6 = k5 % 2;
    int i8 = 1 - l6;
    if (k5 % 4 >= 2)
    {
    l6 = -l6;
    i8 = -i8;
    }
    for (int j9 = 0; j9 < 3; j9++)
    {
    for (int k10 = 0; k10 < 4; k10++)
    {
    for (int l11 = -1; l11 < 4; l11++)
    {
    int j12 = i2 + (k10 - 1) * l6 + j9 * i8;
    int l12 = k4 + l11;
    int j13 = (j3 + (k10 - 1) * i8) - j9 * l6;
    if (l11 < 0 && !world.getBlockMaterial(j12, l12, j13).isSolid() || l11 >= 0 && !world.isAirBlock(j12, l12, j13))
    {
    break label0;
    }
    }
    }
    }

    double d5 = ((double)k4 + 0.5D) - entity.posY;
    double d7 = d1 * d1 + d5 * d5 + d3 * d3;
    if (d < 0.0D || d7 < d)
    {
    d = d7;
    l = i2;
    i1 = k4;
    j1 = j3;
    k1 = k5 % 4;
    }
    }
    }
    }
    }

    if (d < 0.0D)
    {
    for (int j2 = i - byte0; j2 <= i + byte0; j2++)
    {
    double d2 = ((double)j2 + 0.5D) - entity.posX;
    for (int k3 = k - byte0; k3 <= k + byte0; k3++)
    {
    double d4 = ((double)k3 + 0.5D) - entity.posZ;
    for (int l4 = 128 - 1; l4 >= 0; l4--)
    {
    if (!world.isAirBlock(j2, l4, k3))
    {
    continue;
    }
    for (; l4 > 0 && world.isAirBlock(j2, l4 - 1, k3); l4--) { }
    label1:
    for (int l5 = l1; l5 < l1 + 2; l5++)
    {
    int i7 = l5 % 2;
    int j8 = 1 - i7;
    for (int k9 = 0; k9 < 4; k9++)
    {
    for (int l10 = -1; l10 < 4; l10++)
    {
    int i12 = j2 + (k9 - 1) * i7;
    int k12 = l4 + l10;
    int i13 = k3 + (k9 - 1) * j8;
    if (l10 < 0 && !world.getBlockMaterial(i12, k12, i13).isSolid() || l10 >= 0 && !world.isAirBlock(i12, k12, i13))
    {
    break label1;
    }
    }
    }

    double d6 = ((double)l4 + 0.5D) - entity.posY;
    double d8 = d2 * d2 + d6 * d6 + d4 * d4;
    if (d < 0.0D || d8 < d)
    {
    d = d8;
    l = j2;
    i1 = l4;
    j1 = k3;
    k1 = l5 % 2;
    }
    }
    }
    }
    }
    }
    int k2 = k1;
    int l2 = l;
    int i3 = i1;
    int l3 = j1;
    int i4 = k2 % 2;
    int j4 = 1 - i4;
    if (k2 % 4 >= 2)
    {
    i4 = -i4;
    j4 = -j4;
    }
    if (d < 0.0D)
    {
    if (i1 < 70)
    {
    i1 = 70;
    }
    if (i1 > 128 - 10)
    {
    i1 = 128 - 10;
    }
    i3 = i1;
    for (int i5 = -1; i5 <= 1; i5++)
    {
    for (int i6 = 1; i6 < 3; i6++)
    {
    for (int j7 = -1; j7 < 3; j7++)
    {
    int k8 = l2 + (i6 - 1) * i4 + i5 * j4;
    int l9 = i3 + j7;
    int i11 = (l3 + (i6 - 1) * j4) - i5 * i4;
    boolean flag = j7 < 0;
    world.setBlockWithNotify(k8, l9, i11, flag ? Block.cobblestone.blockID : 0);
    }
    }
    }
    }
    for (int j5 = 0; j5 < 4; j5++)
    {
    world.editingBlocks = true;
    //You can add your own portal's generation here (and delete all the code up to
    //"world.editingBlocks = false"). This particular portal is like a Nether portal, but with
    //sandstone instead of obsidian, and obviously the Taiga portal block instead of the Nether
    //one.
    for (int j6 = 0; j6 < 4; j6++)
    {
    for (int k7 = -1; k7 < 4; k7++)
    {
    int l8 = l2 + (j6 - 1) * i4;
    int i10 = i3 + k7;
    int j11 = l3 + (j6 - 1) * j4;
    boolean flag1 = j6 == 0 || j6 == 3 || k7 == -1 || k7 == 3;
    world.setBlockWithNotify(l8, i10, j11, flag1 ? Block.cobblestone.blockID : mod_TaigaDimension.TaigaPortal.blockID);
    }
    }

    world.editingBlocks = false;
    for (int k6 = 0; k6 < 4; k6++)
    {
    for (int l7 = -1; l7 < 4; l7++)
    {
    int i9 = l2 + (k6 - 1) * i4;
    int j10 = i3 + l7;
    int k11 = l3 + (k6 - 1) * j4;
    world.notifyBlocksOfNeighborChange(i9, j10, k11, world.getBlockId(i9, j10, k11));
    }
    }
    }

    return true;
    }
    }

    Just Change The Taiga To What You Want

    As i said uptop i havent perfected my code yet, so you just have to craft the portal and then you will have to place it and walk into it for you to get to your dimension :(

    IM STILL WORKING ON THIS SO PLEASE SUGGEST THINGS AND I MIGHT ADD IT IN! :D


    What Things Can I Change In My New Dimension?
    You Can Change Everything have a play around ifyou wish im not going to explain much cus this is pretty advanced stuff but i will give a simple explanitory. in the BlockYourPortal the cobblestone is what the portal frame would be made out of but i havent got that working yet. ChunkProvider has some fun stuff play around if you want clouds dont you want clouds etc. mod_yourdimension thats pretty plain nothing much to change there. WorldProviderYour thats where most of the textures will go and some sizes pretty fun hen teleporterYour is what you come out of when you enter your dimension.


    If I helped You Please press the green arrow down their :D
    Posted in: Tutorials
  • View TechGuy543's Profile

    876

    Jan 21, 2012
    TechGuy543 posted a message on TechGuy's Modding Tutorials
    Minecraft Forge Tutorials
    Here are some Minecraft Forge tutorials. I thought it would be better to keep them separate from the ModLoader ones. I'll start off with the basics of Forge like Blocks and such. Ghosrec35 will be doing the advanced/important tutorials.

    Main Registry

    Your Forge registry class has almost nothing in common with your mod_ class from ModLoader except that it registers everything.
    Firstly, just start with the package declaration as usual. You can use your own package but I will just use the default Minecraft source package for this example.
    package net.minecraft.src;


    Next we need to import a few Forge classes.
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.PostInit;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;


    All annotations are well explained in ghosrec35's Mod Annotation Interfaces tutorial(below)

    The first annotation we will use is the @Mod annotation. We will use it to declare some information about our mod.
    @Mod( modid = "ExampleMod", name="ExampleModsName", version="ExampleModVersion")

    As an example, I use this in Undead+:
    @Mod( modid = "UndeadPlus", name="Undead+", version="[1.4.7] v1.0.0")


    After you have the @Mod annotation we need to add the @NetworkMod annotation. We use this as well as the @Mod annotation because Forge mods are "universal"(one version for both Client and Server).
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = true,
    channels = {"example_mod"},
    packetHandler = ExampleModPacketHandler.class
    )

    NetworkMod is explained in ghosrec35's tutorial below. You also need to create a PacketHandler, one is below:

    package net.minecraft.src;
    import java.io.ByteArrayInputStream;
    import java.io.DataInputStream;
    import java.io.IOException;
    import net.minecraft.src.EntityClientPlayerMP;
    import net.minecraft.src.EntityPlayerMP;
    import net.minecraft.src.Packet250CustomPayload;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.common.Side;
    import cpw.mods.fml.common.network.IPacketHandler;
    import cpw.mods.fml.common.network.Player;
    public class ExampleModPacketHandler implements IPacketHandler
    {
    @Override
    public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player)
    {
    if (packet.channel.equals("GenericRandom"))
    {
    handleRandom(packet);
    }
    }
    private void handleRandom(Packet250CustomPayload packet)
    {
    DataInputStream inputStream = new DataInputStream(new ByteArrayInputStream(packet.data));
    int randomInt1;
    int randomInt2;
    try
    {
    randomInt1 = inputStream.readInt();
    randomInt2 = inputStream.readInt();
    } catch (IOException e) {
    e.printStackTrace();
    return;
    }
    System.out.println(randomInt1 + " " + randomInt2);
    }
    }


    After the @NetworkMod annotation you can declare the class. Note that with Forge, this class doesn't require a mod_ prefix or extend BaseMod.
    public class ModUndeadMainRegistry {


    We then need to add three methods. They are each called at specific times in the loading of the game. The methods can be called anything as long as they have the Forge annotation and parameter that is required. The first is preInit.

    @PreInit
    public void preInit(FMLPreInitializationEvent event)

    This method is called before the mods are loaded.

    @Init
    public void init(FMLInitializationEvent event)

    This method has the same function as the load() method is ModLoader. In here is where we will register all of our blocks, recipes, entities, etc.

    @PostInit
    public void postInit(FMLPostInitializationEvent event)

    This is the final method that is required in the Forge mod registry. Put stuff that you want to happen after the mods are loaded in here.


    Final Code:
    package net.minecraft.src;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.PostInit;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    @Mod( modid = "ExampleMod", name="ExampleModsName", version="ExampleModVersion")
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = true,
    channels = {"example_mod"},
    packetHandler = ExampleModPacketHandler.class
    )
    public class ExampleMod
    {
    @PreInit
    public void preInit(FMLPreInitializationEvent event)
    {
    }
    @Init
    public void init(FMLInitializationEvent event)
    {
    }
    @PostInit
    public void postInit(FMLPostInitializationEvent event)
    {
    }
    }


    Mod Annotation Interfaces
    By ghosrec35

    package ghosrec35.mods.example.common;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.IMCCallback;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.Mod.PostInit;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.Mod.ServerStarted;
    import cpw.mods.fml.common.Mod.ServerStarting;
    import cpw.mods.fml.common.Mod.ServerStopping;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLInterModComms;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.event.FMLServerStartedEvent;
    import cpw.mods.fml.common.event.FMLServerStartingEvent;
    import cpw.mods.fml.common.event.FMLServerStoppingEvent;
    import cpw.mods.fml.common.network.NetworkMod;
    import cpw.mods.fml.common.network.NetworkMod.SidedPacketHandler;
    @Tutorial("Annotation Interfaces within Forge")
    @Mod(modid = "Ghosrec35_ExampleMod", name = "ExampleMod", version = "1.0.0.0", dependencies = "after:UniversalElectricity")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    public class ExampleMod
    {
    @SidedProxy(clientSide = "ghosrec35.mods.examplemod.client.ClientProxy", serverSide = "ghosrec35.mods.examplemod.common.CommonProxy")
    public static CommonProxy proxy;
    
    @Instance("Ghosrec35_ExampleMod")
    public ExampleMod instance;
    
    @PreInit
    public void loadPre(FMLPreInitializationEvent event)
    {
    
    }
    
    @Init
    public void load(FMLInitializationEvent event)
    {
    
    }
    
    @PostInit
    public void loadPost(FMLPostInitializationEvent event)
    {
    
    }
    
    @ServerStarting
    public void serverStarting(FMLServerStartingEvent event)
    {
    
    }
    
    @ServerStarted
    public void serverStarted(FMLServerStartedEvent event)
    {
    
    }
    
    @ServerStopping
    public void serverStopping(FMLServerStoppingEvent event)
    {
    
    }
    
    
    @IMCCallback
    public void interModComms(FMLInterModComms event)
    {
    
    }
    }



    Understanding the Code
    Forge ModLoader and the MinecraftForge API include many different Annotation Interfaces that allow us to create methods within our main mod file that are able to be invoked from outside files without editing base classes. This is achieved by first Annotating the said mod file with the @Mod and @NetworkMod Annotation Interfaces which originally registers these certain files with Forge ModLoader.
    • The @Mod annotation requires three parameters, modid which must be equivalent to a String, name which must be equivalent to a String, and version which must be equivalent to a String. Now this main mod file is able to contain other Annotation Interfaces located within the Mod.java located in the cpw.mods.fml.common package.
    • The First of these methods introduced by the Mod.java is the @Instance annotation. This Annotation Interface Targets ElementTypes of the type Field, and so we annotate a public field of the type our mod file. This Annotation contains a value() of type String which is to be equivalent to your mod file's modid. This Annotation is then used to populate the field of which it annotates with the instance of your Mod File.
    • The rest of the Annotations derived from the Mod.java do not require such a level of complexity.
    • The first of these methods is the @PreInit Annotation which must Annotate a method with a parmeter of the type FMLPreInitializationEvent. This allows Forge ModLoader to perform two checks (The first being that this is the method designated for Pre-Initialization and the second being that the method again is designated for Pre-Initialization, but also that when invoked the method is able to retrieve information and perform tasks available from the instance of the PreInitEvent which is passed to the method upon its invocation.)
    • The next Annotation is the @Init annotation which must Annotate a method with a parameter of the type FMLInitializationEvent. This Annotation works in the same way as @PreInit, except the method is invoked after the Pre Initialization methods of all mods are invoked. This allows for such things as configuration files to be created and for settings to be loaded and saved before other processes begin within the Mod. (Of course, any fields created and initialized will actually be run before the PreInit method as this occurs upon the loading of the Class itself.) The @Init method is run at the normal time of Block Registration, Recipe Registration, etc, to occur within Minecraft.
    • The next Annotation is the @PostInit annotation interface, which must annotate a method with a parameter of FMLPostInitializationEvent. This method is invoked after both the @PreInit and @Init Annotated methods are invoked for each and every mod being loaded. These methods allow for easy manipulation of Minecraft and the many Blocks/Items/ and other things that have been introduced by your mod. This method is commonly called modsLoaded, as it occurs after all the mods have been loaded.
    • The next Annotation is the @ServerStarting Annotation. This Annotation yet again annotates a method, but this Annotation must annotate a method with a parameter of the type FMLServerStartingEvent. This method allows for the Manipulation of the server while the server is in the process of initializing all its files.
    • The next Annotation is the @ServerStarted Annotation, which annotates a method with a parameter of the type FMLServerStartedEvent. This method allows for easy manipulation of the Server after the server has been started, and is currently running.
    • The next Annotation interface us the @ServerStopping annotation which annotates must annotate a method with a parameter of the type FMLServerStoppingEvent. This Annotation allows for the invocation of this method to allow for manipulation of the server while the server is stopping.
    • The final Annotation I will be discussing is the @IMCCallback Annotation. This Annotation annotates a method with a parameter of the type FMLInterModComms. This allows your mod to send messages to other mods by the use of the Mods' modid and a key-value pairing. The next step is to move on to the NetworkMod annotation interface which continues on with much of the more complicated annotations.

    NetworkMod and Associated Annotation Interfaces
    By ghosrec35


    The first thing to note is that there are only two attributes that are required with the @NetworkMod annotation.
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    Both attributes must equal boolean values. These values determine whether a player is allowed to join a server or not. clientSideRequired should almost always be true, and serverSideRequired should almost always be false. clientSideRequired determines whether the client side of the mod must be installed for a player to join a server with the mod installed, while serverSideRequired determines whether the server side must be installed for the client to be able to join it.

    We set clientSideRequired to true almost always because there are very few occassions in which nothing client side would be required for a mod.

    We set serverSideRequired to false almost always because we will still want users to be able to join their favorite servers even if the server does not have the mod installed.

    There are other attributes that are available for usage. These are channels, packetHandler, tinyPacketHandler, and connectionHandler. There are two more, but I will wait to discuss these until finished with the first three.

    The channels attribute must be equivalent to an Array of Strings. This array will contain the Channels that will be automatically registered for your mod.
    For Example:
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = false,
    channels = {"Channel"}
    )


    DON'T register channels so generic as the one used in this tutorial. Always try to use channel names that are unique and original.

    The packetHandler attribute must be equivalent to a class that implement IPacketHandler.
    For Example:
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = false,
    channels = {"Channel"},
    packetHandler = PacketHandler.class
    )

    Any Packets that are sent using the channels you registered in the channels attribute will be sent to this PacketHandler.

    The connectionHandler attribute must be equivalent to a class that implements IConnectionHandler.
    For Example:
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = false,
    channels = {"Channel"},
    packetHandler = PacketHandler.class,
    connectionHandler = ConnectionHandler.class
    )

    The IConnectionHandler interface forces the ConnectionHandler class to override a few different methods that allow you to handle certain events with a player when they're connecting. Some more information on this in a future tutorial.

    The tinyPacketHandler attribute must be equivalent to a class that implements ITinyPacketHandler. This works just like a regular PacketHandler, but for smaller packet sizes.

    Final NetworkMod annotation so far:
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = false,
    channels = {"Channel"},
    packetHandler = PacketHandler.class,
    connectionHandler = ConnectionHandler.class,
    tinyPacketHandler = TinyPacketHandler.class
    )


    Before we get to the final two attributes, it's important to note again that you only NEED the clientSideRequired and serverSideRequired attributes to run your mod. The rest are only required for things like SMP or Connection Handling.

    The final two attributes are a little trickier than the rest. They are clientPacketHandlerSpec and serverPacketHandlerSpec.

    These attributes allow you to define separate packet handling classes and channels for both the Server and Client Side. You may use these rather than defining the channels and packetHandler attributes.

    Each must be equivalent to an @SidedPacketHandler annotation. We are then able to use the attributes of the @SidedPacketHandler Annotation to further define each. The two attributes are channels, and packetHandler. These attributes function the same as they do above, but when used in an @SidedPacketHandler annotation only register the information with one side of Minecraft.

    For Example:
    @NetworkMod
    (
    clientSideRequired = true,
    serverSideRequired = false,
    connectionHandler = ConnectionHandler.class,
    clientPacketHandlerSpec = @SidedPacketHandler
    (
    channels = {"ClientChannel1", "ClientChannel2"},
    packetHandler = ClientPacketHandler.class
    ),
    serverPacketHandlerSpec = @SidedPacketHandler
    (
    channels = {"ServerChannel1", "ServerChannel2"},
    packetHandler = ServerPacketHandler.class
    )
    )


    The next NetworkMod related annotation is the @SidedProxy annotation. @SidedProxy has a Target of the ElementType FIELD, meaning it must annotate a field. For our example, we are going to create a field of the type CommonProxy.
    @SidedProxy(clientSide = "ghosrec35.mods.examplemod.client.ClientProxy", serverSide = "ghosrec35.mods.examplemod.common.CommonProxy")
    public static CommonProxy proxy;


    The two attributes of the @SidedProxy annotation are clientSide and serverSide. These two values are equivalent to String values and will contain the file path (including your package path) to your two separate proxies. More on this later.

    You must create a file that will be your CommonProxy (Conventionally, this is usually called CommonProxy), and then you must create another file that will extend CommonProxy which will be your ClientProxy (Conventionally, this is usually called ClientProxy).

    The @SidedProxy annotation requires the path to your ClientProxy and CommonProxy, as it automatically populates the proxy field of type CommonProxy with whichever proxy is designated for whichever side. This means that when invoking any methods, you must ensure that both the Client and Common Proxy contain the methods so that no exceptions occur during runtime on either the Server or Client. Proxys are used for such things as preloading textures, as you are able to register rendering information on only the client side by including the render methods in only the client proxy. The ClientProxy must extend the CommonProxy so that you are able to populate the field of the type CommonProxy with your ClientProxy as well.

    The final @NetworkMod associated Annotation is the @SideOnly Annotation.
    The @SideOnly annotation requires a value of the type Side, which is an enumeration containing the values CLIENT, SERVER, and BUKKIT. Annotating a field with @SideOnly ensures that the method is only run on the designated side. For instance, the vanilla Minecraft code has been edited throughout with
    @SideOnly(Side.CLIENT)
    over certain methods that are used for Client only details such as Rendering or Sound.

    :) Thank-you :)
    Thank you to the following people who have really assisted me well with helping people while I am absent. There are many others who have helped but these are the main ones who keep returning and giving great help to countless amounts of people.
    • ghosrec35 - ghosrec35 has written the Forge tutorials.
    • -Reaper-
    • KoadMaster
    • PhantomJedi759
    • ZeroLevels
    • StangeOne101
    • Zildjian97
    • NukeAndBeans
    • Dragonphly77
    [represent]
    Posted in: Mapping and Modding Tutorials
  • View Zitrone77's Profile

    3

    Oct 24, 2011
    Zitrone77 posted a message on [1.8.1]Perspective-Blocks [BLOCK][V1.1]
    [v1.1] Perspective-Mod [1.8.1]


    My first mod, it's just a experiment...
    He adds various new blocks, the Perspective-Block, New-Glass, Clearer-Glass and the Sphere-Bilder!


    With the Perspective-Block you can look trought other Blocks!



    And the the New-Glass you can make Windows that can be closed via Redstone!



    And closed:



    The Clearer-Glass:



    And the sphere-Builder:
    If you left click, he builds a sphere out of glass around you!
    He is used to create Bases Under-Water!



    Crafting:
    You can craft a Perspective-Block with 8 glass in a circle und one gold ingont in the middle!


    The New-Glass is craftet like this:


    The Clearer-Glass:


    And the Sphere-Builder: (Attention, Clearer-Glass not Regular-Glass!)

    These blocks do use the ID's 250-255. I don't know how to make a Property file..!!
    And here are some more screenshots:











    Captaingrainwave made an awesome review! check him out! [OUTDATED!!]
    please subscribe to him!!

    Installation:
    -just drag and drop the files from the .ZIP file in your Minecraft.jar (or just minecraft)
    -Install ModLoader!
    -The minecraft.ja is locatet in the .minecraft folder!
    -run "run" a type in: "%appdata%"
    -go in the .minecraft dirctory
    -in bin
    -tadaa!


    Downloads:
    Direct

    If you find an writing mistake, please sent me a message!
    And sorry for my bad english, i'am Swiss...
    And please leave feedback, so i can make it more advanced and have better ideas...


    /* Todo:
    -Making a Signature. (If someone could make ne for me. It woud be very cool!)
    -Making a better Design...
    */


    Changelog:
    -24.10.11 Release.
    -25.10.11 addet the New-Glass an redstone control for both blocks!
    -29.10.11 addet the Clearer-Glass and the Sphere-Builder!

    Copyrights:
    This mod is free to use for your own, and you must sent me a message if you make a Video on Youtube!

    And if you wanna Support the mod, please click on the green plus. ;-) -->
    Or add this to your Signature:
    [url="http://www.minecraftforum.net/topic/738589-181perspective-blocks-blockv11/page__p__9692052__fromsearch__1#entry9692052"][img]http://mag.racked.eu/cimage/3000jyy/Achievement++get%21/Looking+trought+the+World/mca.png[/img][/url]

    Posted in: Minecraft Mods
  • View Dr_Hax's Profile

    2

    Oct 14, 2011
    Dr_Hax posted a message on [Windows] 'Minecraft' as a Terminal Command
    For some reason I decided that I wanted to run Minecraft by launching the Run dialog, then entering "Minecraft" as a command. Recognizing the fact that explorer.exe is in the \Windows\ folder, and that when explorer is typed into Run it launches, I tried putting Minecraft.exe into my \Windows\ folder. After this, I was able to run "Minecraft" from the Run dialog, and also from the terminal.


    1.) Download Minecraft.exe

    2.) Copy it to C:\Windows\

    3.) Press [Start] + R to launch Run. Type "Minecraft", without quotes and hit enter.


    This is how I solved my issue of always losing my launcher (I'm very disorganized :SSSS: )
    Posted in: Tutorials
  • View Orange_Cak's Profile

    9

    Oct 13, 2011
    Orange_Cak posted a message on Let's guess how many more Pre-releases will we have to face.
    Quote from GorgeousTaylor

    The feature freeze is next Tuesday, so I'm going to guess zero. Maybe one more.


    Nope.

    Edit: Can I get a +1 for my 1000th post? :D
    Posted in: 1.0 Update Discussion
  • To post a comment, please login.
  • 1
  • 2
  • Next

Social Media

Services

Sign In

Help

Advertise

Resources

Terms of Service

Privacy Policy

Our Communities

  • MMO-Champion
  • HearthPwn
  • Minecraft Forum
  • Overframe
  • MTG Salvation
  • DiabloFans

© 2021 MagicFind, Inc. All rights reserved.

Mobile View