Mrgreen33gamer's [1.6.1\1.6.2\1.6.4\]Forge/ModLoader Modding Tutorials
Poll: Is helpful
Ended Feb 16, 2015
Poll: Do you want to make Bukkit Plugins
Ended Feb 16, 2015
Poll: Forge Dimension?
Ended Feb 16, 2015
Ended Feb 16, 2015
Ended Feb 16, 2015
Ended Feb 16, 2015
I AM BACK, HELLO EVERYONE!
I have shutdown this topic for a purpose quiet a while ago, i am more experienced now because of my ability to make Bukkit plugins! I have more experience with Java now!
I will update these codes and i will continue to help people! I will make more mods and do Bukkit tutorials!
And please subscribe to my Channel: www.youtube.com/user/mrgreen33gamer
Also please support me by donating:
============================================================================
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Also Please tell me if any codes are not working, PM me only. Rewards For telling me.
Here is all Forge:
You will learn to make(or do):
1. mod_NAME class
2. Custom Creative Tab
3. Blocks
4. Items
5. Custom Guns
6. Throwable item
WORKING ON FORGE! (1.7.2+)
Here is all modloader: (STOP PRODUCING CODE!)
Blocks: eclipse/client/bin/textures/blocks/NAME.png
Items: eclipse/client/bin/textures/items/NAME.png
========== 1.6.2 ========
Blocks: assets/textures/blocks/NAME.png
Items: assets/textures/items/NAME.png
If you paste a code into your eclipse and it goes in one line, do this:
2. Save the document.
3. Paste code into eclipse.
4. Have fun coding!
You will learn how to make or do these:
Custom Grenade
Nether Ore Generation
Blocks
Ore Generation
Biomes
Armor
Crafting Recipes
Smelting Recipes
Items a Fuel(Like Coal and Charcoal)
Making items have damage after made in crafting
Adding all Custom Tools
Custom Food
adding custom enchantment effects
adding color to name of item
Custom Achievements
ModLoader Source Codes here:
package net.minecraft.src;
import java.util.Random;
public class mod_NAME extends BaseMod
{
public void load()
{
}
public String getVersion()
{
return "1.5/1.5.1";
}
}
Just copy and paste in MOD_NAME class.
Making an Item:
Put in under Public Class mod_NAME file:
public static final Item NAMEhere = new ItemNAME(2085).setUnlocalizedName("NAMEOFITEMINFOLDER").setCreativeTab(CreativeTabs.tabMaterials)
put under Public viod load:
ModLoader.addName(NAMEhere, "Ingame -Name");
Make a new Class called "ItemNAME" the item name you can change:
package net.minecraft.src;
import java.util.Random;
public class ItemNAME extends Item
{
public ItemNAME(int i)
{
super(i);
maxStackSize = 64;
}
public String Version()
{
return "1.5/1.5.1";
}
}
Here is block making for 1.5 only:
public static final Block NAMEBlock = new BlockNAME(160, 0).setCreativeTab(CreativeTabs.tabBlock).setUnlocalizedName("NAMEOFBLOCKINFOLDER").setHardness(5F).setResistance(6F).setStepSound(Block.soundStoneFootStep);
Make new Block class:
package net.minecraft.src;
import java.util.Random;
public class BlockNAME extends Block
{
public BlockNAME(int par1, int i)
{
super(par1, Material.rock);
this.setCreativeTab(CreativeTabs.tabBlock);
}
public int idDropped(int i, Random random, int j)
{
return mod_NAME.NAMEBLOCK.blockID;
}
public int quantityDropped(Random random)
{
return 1;
}
}
Register the block in Public Void Load:
ModLoader.registerBlock(NAMEBlock);
Add name to block in public void load:
ModLoader.addName(NAMEBlock, "In-game Name");
Here is making a block for 1.5.1 only:
public static final Block NAMEBlock = new BlockNAME(160, 0).setCreativeTab(CreativeTabs.tabBlock).setHardness(5F).setResistance(6F).setStepSound(Block.soundStoneFootStep).getIndirectPowerOutput("NAMEOFBLOCKINFOLDER");
Make new Block class:
package net.minecraft.src;
import java.util.Random;
public class BlockStupidSand extends Block
{
public BlockStupidSand(int par1, int i)
{
super(par1, Material.rock);
this.setCreativeTab(CreativeTabs.tabBlock);
}
public int idDropped(int i, Random random, int j)
{
return mod_NAME.NAMEBLOCK.blockID;
}
public int quantityDropped(Random random)
{
return 1;
}
}
Register the block in Public Void Load:
ModLoader.registerBlock(NAMEBlock);
Add name to block in public void load:
ModLoader.addName(NAMEBlock, "In-game Name");
Here is making generation for ores:
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
Random randomGenerator = random;
for (int i = 0; i < 10; i++)
{
int randPosX = chunkX + randomGenerator.nextInt(20);
int randPosY = random.nextInt(40);
int randPosZ = chunkZ + randomGenerator.nextInt(20);
(new WorldGenMinable(NAMEBlock.blockID, 8)).generate(world, random, randPosX, randPosY, randPosZ);
}
}
Add Import to RANDOM for error to go away!
Adding a biome:
public static final BiomeGenBase NAMEBIOME= (new BiomeGenMyBiome(25)).setBiomeName("NAMEOFBIOME").setDisableRain().setTemperatureRainfall(2.0F, 0.0F).setMinMaxHeight(0.1F, 0.2F);
CREATE A CLASS AND CALL IT: "BiomeGenMyBiome":
package net.minecraft.src;
import java.util.Random;
public class BiomeGenMyBiome extends BiomeGenBase
{
public BiomeGenMyBiome(int par1)
{
super(par1);
this.topBlock = (byte)mod_NAME.NAMEOFBLOCK.blockID;
this.fillerBlock = (byte)mod_NAME.NAMEOFBLOCK.blockID;
}
}
Last But not Least Register the biome, PUT UNDER PUBLIC VIOD LOAD:
ModLoader.addBiome(BiomeGenBase.NAMEBIOME);
Here is how to make Armor:
package net.minecraft.src;
import java.util.Random;
public class mod_NAME extends BaseMod
{
public static final Item NAMEBody = (new ItemArmor(2200, EnumArmorMaterial.GOLD ,5,1 ).setUnlocalizedName("NAMEOFITEMINFOLDER"));
public static final Item NAMEHelmet = (new ItemArmor(2201,EnumArmorMaterial.GOLD ,5,0 ).setUnlocalizedName("NAMEOFITEMINFOLDER"));
public static final Item NAMEPants = (new ItemArmor(2202,EnumArmorMaterial.GOLD ,5,2 ).setUnlocalizedName("NAMEOFITEMINFOLDER"));
public static final Item NAMEBoots = (new ItemArmor(2203,EnumArmorMaterial.GOLD, 5, 3 ).setUnlocalizedName("NAMEOFITEMINFOLDER"));
public void load()
{
ModLoader.addName(NAMEBody, "In-Game-NAME Chestplate");
ModLoader.addRecipe(new ItemStack(NAMEBody,1), new Object[]{
"* *", "***", "***", Character.valueOf('*'), Block.dirt});
ModLoader.addName(NAMEHelmet, "In-Game-Name Helmet");
ModLoader.addRecipe(new ItemStack(NAMEHelmet,1), new Object[]{
"***", "* *", Character.valueOf('*'), Block.dirt});
ModLoader.addName(NAMEPants, "In-game-Name Leggings");
ModLoader.addRecipe(new ItemStack(NAMEPants,1), new Object[]{
"***", "* *", "* *", Character.valueOf('*'), Block.dirt});
ModLoader.addName(NAMEBoots, "In-Game-Name Boots");
ModLoader.addRecipe(new ItemStack(NAMEBoots,1), new Object[]{
"* *", "* *", Character.valueOf('*'), Block.dirt});
ModLoader.addArmor("NAME_");
}
public String getVersion()
{
return 1.5/1.5.1;
}
}
Here is how to make Smelting and Crafting Recpies:
ModLoader.addRecipe(new ItemStack(Item, 1), new Object[]{
" # ", "###", " # ",
Character.valueOf('#'), ItemNAME
});
PUT under public void load for Smelting:
//IF SMELTING BLOCKS TO ITEMS
ModLoader.addSmelting(BLOCKNAME.blockID, new ItemStack(NAMEITEM, 1), 1.0F);
Adding Item For Furnace Fuel:
public int addFuel(int par1, int par2)
{
if(par1 == ITEM OR BLOCK.itemID)
{
return 200;//200 ticks is normal,1600 ticks is coal
}
return 0;
}
Items Damaged after crafting:
public void takenFromCrafting(EntityPlayer player, ItemStack item, IInventory inv)
{
for(int i=0; i<inv.getsizeinventory(); i++)<br="">{
if(inv.getStackInSlot(i) != null)
{
ItemStack itemnew = inv.getStackInSlot(i);
if(itemnew != null &amp;&amp; itemnew.getItem() == Item.TOOL)
{
ItemStack k = new ItemStack(Item.TOOL, 2);
k.damageItem(itemnew.getItemDamage() + 1, player);
inv.setInventorySlotContents(i, k);
}
}
}
}
All Custom Tools:
public static final Item Pickaxe = new ItemPickaxe(2107, EnumToolMaterial.GOLD).setUnlocalizedName("NAMEOFITEMINFOLDER");
public static final Item SHOVEL = new ItemSpade(2108, EnumToolMaterial.GOLD).setUnlocalizedName("NAMEOFITEMINFOLDER");
public static final Item H = new ItemHoe(2109, EnumToolMaterial.GOLD).setUnlocalizedName("NAMEOFITEMINFOLDER");
public static final Item SS = new ItemSword(2110, EnumToolMaterial.GOLD).setUnlocalizedName("NAMEOFITEMINFOLDER");
public static final Item A = new ItemAxe(2111, EnumToolMaterial.GOLD).setUnlocalizedName("NAMEOFITEMINFOLDER");
Put under public void load:
ModLoader.addName(Pickaxe, "BlackPickaxe");
ModLoader.addRecipe(new ItemStack(Pickaxe, 1), new Object[]
{
"***", " X ", " X ",
'X', Item.stick, '*', ITEM
});
ModLoader.addName(SHOVEL, "BlackShovel");
ModLoader.addRecipe(new ItemStack(SHOVEL, 1), new Object[]
{
" * ", " X ", " X ",
'X', Item.stick, '*', ITEM
});
ModLoader.addName(H, "BlackHoe");
ModLoader.addRecipe(new ItemStack(H, 1), new Object[]
{
"** ", " X ", " X ",
'X', Item.stick, '*', ITEM
});
ModLoader.addName(SS, "BlackSword");
ModLoader.addRecipe(new ItemStack(SS, 1), new Object[]
{
" * ", " * ", " X ",
'X', Item.stick, '*', ITEM
});
ModLoader.addName(A, "BlackAxe");
ModLoader.addRecipe(new ItemStack(A, 1), new Object[]
{
"** ", "*X ", " X ",
'X', Item.stick, '*', ITEM
});
Custom food:
public static final Item nameHere = new ItemFood(5000, 6, 1F, true).setUnlocalizedName("NAMEOFITEMINFOLDER");
put under public void load:
ModLoader.addName(nameHere, "My Food");
ModLoader.addRecipe(new ItemStack(nameHere, 5), new Object[]
{
"***", "* *", "***",
'*', Item.sugar
});
Custom enchantment effect:
public boolean hasEffect(ItemStack par1ItemStack){
return true;
}
custom name color:
// mess with the code"u00a7E to make different color"
public String getItemDisplayName(ItemStack par1ItemStack)
{
String var2 = ("\u00a7E" + StringTranslate.getInstance().translateNamedKey(this.getLocalItemName(par1ItemStack))).trim();
return var2;
}
Custom achievements:
public static final Achievement achievementFood = new Achievement(5400, "achievementFood", 10, 9, Item.sugar, null).setSpecial().setIndependent().registerAchievement();
public static final Achievement achievementGem = new Achievement(5401, "achievementGem", 10, 12, Item.bone, achievementFood).registerAchievement();
put under public void load:
ModLoader.addAchievementDesc(achievementFood, "Yummy!", "Craft a Donut!!");
ModLoader.addAchievementDesc(achievementGem, "Green GEM!", "Pick Up a Green Gem!");
put in public load not in public void load:
public void takenFromCrafting(EntityPlayer entityplayer, ItemStack itemstack, IInventory iinventory)
{
if(itemstack.itemID == mod_minecraft.Food01.shiftedIndex)
{
entityplayer.addStat(achievementFood, 1);
}
}
public void onItemPickup(EntityPlayer entityplayer, ItemStack itemstack)
{
if(itemstack.itemID == mod_minecraft.greengem.shiftedIndex)
{
entityplayer.addStat(achievementGem, 2);
}
}
Nether Ore Generation:
package net.minecraft.src;
import java.util.Random;
public class NetherGenMinable extends WorldGenerator
{
/** The block ID of the ore to be placed using this generator. */
private int minableBlockId;
/** The number of blocks to generate. */
private int numberOfBlocks;
public NetherGenMinable(int par1, int par2)
{
this.minableBlockId = par1;
this.numberOfBlocks = par2;
}
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
{
float var6 = par2Random.nextFloat() * (float)Math.PI;
double var7 = (double)((float)(par3 + 8) + MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
double var9 = (double)((float)(par3 + 8) - MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F);
double var11 = (double)((float)(par5 + 8) + MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
double var13 = (double)((float)(par5 + 8) - MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F);
double var15 = (double)(par4 + par2Random.nextInt(3) - 2);
double var17 = (double)(par4 + par2Random.nextInt(3) - 2);
for (int var19 = 0; var19 <= this.numberOfBlocks; ++var19)
{
double var20 = var7 + (var9 - var7) * (double)var19 / (double)this.numberOfBlocks;
double var22 = var15 + (var17 - var15) * (double)var19 / (double)this.numberOfBlocks;
double var24 = var11 + (var13 - var11) * (double)var19 / (double)this.numberOfBlocks;
double var26 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D;
double var28 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
double var30 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D;
int var32 = MathHelper.floor_double(var20 - var28 / 2.0D);
int var33 = MathHelper.floor_double(var22 - var30 / 2.0D);
int var34 = MathHelper.floor_double(var24 - var28 / 2.0D);
int var35 = MathHelper.floor_double(var20 + var28 / 2.0D);
int var36 = MathHelper.floor_double(var22 + var30 / 2.0D);
int var37 = MathHelper.floor_double(var24 + var28 / 2.0D);
for (int var38 = var32; var38 <= var35; ++var38)
{
double var39 = ((double)var38 + 0.5D - var20) / (var28 / 2.0D);
if (var39 * var39 < 1.0D)
{
for (int var41 = var33; var41 <= var36; ++var41)
{
double var42 = ((double)var41 + 0.5D - var22) / (var30 / 2.0D);
if (var39 * var39 + var42 * var42 < 1.0D)
{
for (int var44 = var34; var44 <= var37; ++var44)
{
double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D);
if (var39 * var39 + var42 * var42 + var45 * var45 < 1.0D &amp;&amp; par1World.getBlockId(var38, var41, var44) == Block.netherrack.blockID)
{
par1World.setBlock(var38, var41, var44, this.minableBlockId);
}
}
}
}
}
}
}
return true;
}
}
PUT AT VERY BOTTOM OF MOD_NAME:
public void generateNether(World var1, Random var2, int var3, int var4)
{
int var5;
int var6;
int var7;
int var8;
int veinsize=8;//the veinsize of the ore not sure it works
int rarity=12;//the rarity of the ore
for (var5 = 0; var5 < rarity; ++var5)
{
var6 = var3 + var2.nextInt(16);
var7 = var2.nextInt(128);
var8 = var4 + var2.nextInt(16);
new NetherGenMinable(NAMEOFBLOCK.blockID, 8).generate(var1, var2, var6, var7, var8);
}
}
}
Making Custom TNT:
public static final Block T = new BlockLargeTNT(160, 0).setCreativeTab(CreativeTabs.tabRedstone).setHardness(5F).setResistance(6F).setStepSound(Block.soundGrassFootstep).getIndirectPowerOutput("2");
PUT UNDER PUBIC VOID LOAD:
ModLoader.registerBlock(T);
ModLoader.addName(T, "Large TNT");
PUT AT BOTTOM OF MOD_FILE NOT IN PUBLIC VOID LOAD OR PUBLIC STATIC FINAL
public void addRenderer(Map map)
{
map.put(net.minecraft.src.EntityLargeTNTPrimed.class, new RenderLargeTNTPrimed());
}
make NEW CLASS CALLED "EntityLargeTNTPrimed":
package net.minecraft.src;
public class EntityLargeTNTPrimed extends Entity
{
/** How long the fuse is */
public int fuse;
private EntityLiving field_94084_b;
public EntityLargeTNTPrimed(World par1World)
{
super(par1World);
this.fuse = 0;
this.preventEntitySpawning = true;
this.setSize(0.98F, 0.98F);
this.yOffset = this.height / 2.0F;
}
public EntityLargeTNTPrimed(World par1World, double par2, double par4, double par6, EntityLiving par8EntityLiving)
{
this(par1World);
this.setPosition(par2, par4, par6);
float var9 = (float)(Math.random() * Math.PI * 2.0D);
this.motionX = (double)(-((float)Math.sin((double)var9)) * 0.02F);
this.motionY = 0.20000000298023224D;
this.motionZ = (double)(-((float)Math.cos((double)var9)) * 0.02F);
this.fuse = 80;
this.prevPosX = par2;
this.prevPosY = par4;
this.prevPosZ = par6;
this.field_94084_b = par8EntityLiving;
}
protected void entityInit() {}
/**
* returns if this entity triggers Block.onEntityWalking on the blocks they walk on. used for spiders and wolves to
* prevent them from trampling crops
*/
protected boolean canTriggerWalking()
{
return false;
}
/**
* Returns true if other Entities should be prevented from moving through this Entity.
*/
public boolean canBeCollidedWith()
{
return !this.isDead;
}
/**
* Called to update the entity's position/logic.
*/
public void onUpdate()
{
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
this.motionY -= 0.03999999910593033D;
this.moveEntity(this.motionX, this.motionY, this.motionZ);
this.motionX *= 0.9800000190734863D;
this.motionY *= 0.9800000190734863D;
this.motionZ *= 0.9800000190734863D;
if (this.onGround)
{
this.motionX *= 0.699999988079071D;
this.motionZ *= 0.699999988079071D;
this.motionY *= -0.5D;
}
if (this.fuse-- <= 0)
{
this.setDead();
if (!this.worldObj.isRemote)
{
this.explode();
}
}
else
{
this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D);
}
}
private void explode()
{
float var1 = 10.0F;
this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, var1, true);
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
protected void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
{
par1NBTTagCompound.setByte("Fuse", (byte)this.fuse);
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
protected void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
{
this.fuse = par1NBTTagCompound.getByte("Fuse");
}
public float getShadowSize()
{
return 0.0F;
}
public EntityLiving func_94083_c()
{
return this.field_94084_b;
}
{
}
}
Make NEW CLASS CALLED "RenderLargeTNTPrimed":
package net.minecraft.src;
import org.lwjgl.opengl.GL11;
public class RenderLargeTNTPrimed extends Render
{
private RenderBlocks blockRenderer = new RenderBlocks();
public RenderLargeTNTPrimed()
{
this.shadowSize = 0.5F;
}
public void renderPrimedTNT(EntityTNTPrimed par1EntityTNTPrimed, double par2, double par4, double par6, float par8, float par9)
{
GL11.glPushMatrix();
GL11.glTranslatef((float)par2, (float)par4, (float)par6);
float var10;
if ((float)par1EntityTNTPrimed.fuse - par9 + 1.0F < 10.0F)
{
var10 = 1.0F - ((float)par1EntityTNTPrimed.fuse - par9 + 1.0F) / 10.0F;
if (var10 < 0.0F)
{
var10 = 0.0F;
}
if (var10 > 1.0F)
{
var10 = 1.0F;
}
var10 *= var10;
var10 *= var10;
float var11 = 1.0F + var10 * 0.3F;
GL11.glScalef(var11, var11, var11);
}
var10 = (1.0F - ((float)par1EntityTNTPrimed.fuse - par9 + 1.0F) / 100.0F) * 0.8F;
this.loadTexture("/terrain.png");
this.blockRenderer.renderBlockAsItem(Block.tnt, 0, par1EntityTNTPrimed.getBrightness(par9));
if (par1EntityTNTPrimed.fuse / 5 % 2 == 0)
{
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_DST_ALPHA);
GL11.glColor4f(1.0F, 1.0F, 1.0F, var10);
this.blockRenderer.renderBlockAsItem(Block.tnt, 0, 1.0F);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
GL11.glPopMatrix();
}
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
{
this.renderPrimedTNT((EntityTNTPrimed)par1Entity, par2, par4, par6, par8, par9);
}
}
Make NEW CLASS CALLED "BlockLargeTNT":
package net.minecraft.src;
import java.util.Random;
public class BlockLargeTNT extends Block
{
private Icon field_94393_a;
private Icon field_94392_b;
public BlockLargeTNT(int par1, int i)
{
super(par1, Material.tnt);
this.setCreativeTab(CreativeTabs.tabRedstone);
}
public int idDropped(int i, Random random, int j)
{
return mod_TESTS.T.blockID;
}
/**
* Called whenever the block is added into the world. Args: world, x, y, z
*/
public void onBlockAdded(World par1World, int par2, int par3, int par4)
{
super.onBlockAdded(par1World, par2, par3, par4);
if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4))
{
this.onBlockDestroyedByPlayer(par1World, par2, par3, par4, 1);
par1World.setBlockToAir(par2, par3, par4);
}
}
/**
* 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)
{
if (par1World.isBlockIndirectlyGettingPowered(par2, par3, par4))
{
this.onBlockDestroyedByPlayer(par1World, par2, par3, par4, 1);
par1World.setBlockToAir(par2, par3, par4);
}
}
/**
* Returns the quantity of items to drop on block destruction.
*/
public int quantityDropped(Random par1Random)
{
return 1;
}
/**
* Called upon the block being destroyed by an explosion
*/
public void onBlockDestroyedByExplosion(World par1World, int par2, int par3, int par4, Explosion par5Explosion)
{
if (!par1World.isRemote)
{
EntityLargeTNTPrimed var6 = new EntityLargeTNTPrimed(par1World, (double)((float)par2 + 0.5F), (double)((float)par3 + 0.5F), (double)((float)par4 + 0.5F), par5Explosion.func_94613_c());
var6.fuse = par1World.rand.nextInt(var6.fuse / 4) + var6.fuse / 8;
par1World.spawnEntityInWorld(var6);
}
}
/**
* Called right before the block is destroyed by a player. Args: world, x, y, z, metaData
*/
public void onBlockDestroyedByPlayer(World par1World, int par2, int par3, int par4, int par5)
{
this.func_94391_a(par1World, par2, par3, par4, par5, (EntityLiving)null);
}
public void func_94391_a(World par1World, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving)
{
if (!par1World.isRemote)
{
if ((par5 &amp; 1) == 1)
{
EntityLargeTNTPrimed var7 = new EntityLargeTNTPrimed(par1World, (double)((float)par2 + 0.5F), (double)((float)par3 + 0.5F), (double)((float)par4 + 0.5F), par6EntityLiving);
par1World.spawnEntityInWorld(var7);
par1World.playSoundAtEntity(var7, "random.fuse", 1.0F, 1.0F);
}
}
}
/**
* Called upon block activation (right click on the block.)
*/
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
{
if (par5EntityPlayer.getCurrentEquippedItem() != null &amp;&amp; par5EntityPlayer.getCurrentEquippedItem().itemID == Item.flintAndSteel.itemID)
{
this.func_94391_a(par1World, par2, par3, par4, 1, par5EntityPlayer);
par1World.setBlockToAir(par2, par3, par4);
return true;
}
else
{
return super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
}
}
/**
* Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity
*/
public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
{
if (par5Entity instanceof EntityArrow &amp;&amp; !par1World.isRemote)
{
EntityArrow var6 = (EntityArrow)par5Entity;
if (var6.isBurning())
{
this.func_94391_a(par1World, par2, par3, par4, 1, var6.shootingEntity instanceof EntityLiving ? (EntityLiving)var6.shootingEntity : null);
par1World.setBlockToAir(par2, par3, par4);
}
}
}
/**
* Return whether this block can drop from an explosion.
*/
public boolean canDropFromExplosion(Explosion par1Explosion)
{
return false;
}
}
To change the Explosion follow this:
Scroll down and find the method:
private void explode()
{
float var1 = 10.0F;
this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, var1, true);
}
Then change the code 10.0F to what ever.
Remember that you make every class and error's should go away if they don't tell me and i'll fix them.
this method works for 1.5 and 1.5.1..
ENJOY!
Making a Grenade:
public static final Item Grenades = new ItemGrenades(3000).setCreativeTab(CreativeTabs.tabMaterials).setUnlocalizedName(NAMEOFITEM");
Put under public void load:
ModLoader.addName(Grenades, "Grenade");
make NEW CLASS CALLED "ItemGrenades":
package net.minecraft.src;
public class ItemGrenades extends Item
{
public ItemGrenades(int i)
{
super(i);
this.maxStackSize = 4;
this.setCreativeTab(CreativeTabs.tabMisc);
}
public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3)
{
if (!var3.capabilities.isCreativeMode)
{
--var1.stackSize;
}
var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
if (!var2.isRemote)
{
var2.spawnEntityInWorld(new EntityGrenades(var2, var3));
}
return var1;
}
}
Make NEW CLASS CALLED "EntityGrenades":
package net.minecraft.src;
public class EntityGrenades extends Entitybombthrow //make a class called Entitybombthrow
{
private static final int var2 = 0;
private EntityLiving thrower;
public EntityGrenades(World var1)
{
super(var1);
}
public EntityGrenades(World var1, EntityLiving var2)
{
super(var1, var2);
}
public EntityGrenades(World var1, double var2, double var4, double var6)
{
super(var1, var2, var4, var6);
}
/**
* Called when this EntityThrowable hits a block or entity.
*/
protected void onImpact(MovingObjectPosition var1)
{
if (var1.entityHit != null)
{
{
}
if (!var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.thrower), var2))
{
;
}
}
for (int var3 = 0; var3 < 8; ++var3)
{
this.worldObj.spawnParticle("smoke", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);
}
if (!this.worldObj.isRemote)
{
this.setDead();
if (!this.worldObj.isRemote)
{
this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 2.0F, true);
}
}
}
}
Make NEW CLASS CALLED "Entitybombthrow":
package net.minecraft.src;
import java.util.List;
public abstract class Entitybombthrow extends Entity implements IProjectile
{
private int xTile = -1;
private int yTile = -1;
private int zTile = -1;
private int inTile = 0;
protected boolean inGround = false;
public int throwableShake = 0;
/**
* Is the entity that throws this 'thing' (snowball, ender pearl, eye of ender or potion)
*/
private EntityLiving thrower;
private String throwerName = null;
private int ticksInGround;
private int ticksInAir = 0;
public Entitybombthrow(World par1World)
{
super(par1World);
this.setSize(0.25F, 0.25F);
}
protected void entityInit() {}
/**
* Checks if the entity is in range to render by using the past in distance and comparing it to its average edge
* length * 64 * renderDistanceWeight Args: distance
*/
public boolean isInRangeToRenderDist(double par1)
{
double var3 = this.boundingBox.getAverageEdgeLength() * 4.0D;
var3 *= 64.0D;
return par1 < var3 * var3;
}
public Entitybombthrow(World par1World, EntityLiving par2EntityLiving)
{
super(par1World);
this.thrower = par2EntityLiving;
this.setSize(0.25F, 0.25F);
this.setLocationAndAngles(par2EntityLiving.posX, par2EntityLiving.posY + (double)par2EntityLiving.getEyeHeight(), par2EntityLiving.posZ, par2EntityLiving.rotationYaw, par2EntityLiving.rotationPitch);
this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
this.posY -= 0.10000000149011612D;
this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F);
this.setPosition(this.posX, this.posY, this.posZ);
this.yOffset = 0.0F;
float var3 = 0.4F;
this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3);
this.motionY = (double)(-MathHelper.sin((this.rotationPitch + this.func_70183_g()) / 180.0F * (float)Math.PI) * var3);
this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.func_70182_d(), 1.0F);
}
public Entitybombthrow(World par1World, double par2, double par4, double par6)
{
super(par1World);
this.ticksInGround = 0;
this.setSize(0.25F, 0.25F);
this.setPosition(par2, par4, par6);
this.yOffset = 0.0F;
}
protected float func_70182_d()
{
return 1.5F;
}
protected float func_70183_g()
{
return 0.0F;
}
/**
* Similar to setArrowHeading, it's point the throwable entity to a x, y, z direction.
*/
public void setThrowableHeading(double par1, double par3, double par5, float par7, float par8)
{
float var9 = MathHelper.sqrt_double(par1 * par1 + par3 * par3 + par5 * par5);
par1 /= (double)var9;
par3 /= (double)var9;
par5 /= (double)var9;
par1 += this.rand.nextGaussian() * 0.007499999832361937D * (double)par8;
par3 += this.rand.nextGaussian() * 0.007499999832361937D * (double)par8;
par5 += this.rand.nextGaussian() * 0.007499999832361937D * (double)par8;
par1 *= (double)par7;
par3 *= (double)par7;
par5 *= (double)par7;
this.motionX = par1;
this.motionY = par3;
this.motionZ = par5;
float var10 = MathHelper.sqrt_double(par1 * par1 + par5 * par5);
this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(par1, par5) * 180.0D / Math.PI);
this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(par3, (double)var10) * 180.0D / Math.PI);
this.ticksInGround = 0;
}
/**
* Sets the velocity to the args. Args: x, y, z
*/
public void setVelocity(double par1, double par3, double par5)
{
this.motionX = par1;
this.motionY = par3;
this.motionZ = par5;
if (this.prevRotationPitch == 0.0F &amp;&amp; this.prevRotationYaw == 0.0F)
{
float var7 = MathHelper.sqrt_double(par1 * par1 + par5 * par5);
this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(par1, par5) * 180.0D / Math.PI);
this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(par3, (double)var7) * 180.0D / Math.PI);
}
}
/**
* Called to update the entity's position/logic.
*/
public void onUpdate()
{
this.lastTickPosX = this.posX;
this.lastTickPosY = this.posY;
this.lastTickPosZ = this.posZ;
super.onUpdate();
if (this.throwableShake > 0)
{
--this.throwableShake;
}
if (this.inGround)
{
int var1 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile);
if (var1 == this.inTile)
{
++this.ticksInGround;
{
float var11 = 4.0F;
this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, var11, true);
}
if (this.ticksInGround == 1200)
{
this.setDead();
}
return;
}
this.inGround = false;
this.motionX *= (double)(this.rand.nextFloat() * 0.2F);
this.motionY *= (double)(this.rand.nextFloat() * 0.2F);
this.motionZ *= (double)(this.rand.nextFloat() * 0.2F);
this.ticksInGround = 0;
this.ticksInAir = 0;
}
else
{
++this.ticksInAir;
}
Vec3 var16 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ);
Vec3 var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var16, var2);
var16 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ);
var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
if (var3 != null)
{
var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord);
}
if (!this.worldObj.isRemote)
{
Entity var4 = null;
List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D));
double var6 = 0.0D;
EntityLiving var8 = this.getThrower();
for (int var9 = 0; var9 < var5.size(); ++var9)
{
Entity var10 = (Entity)var5.get(var9);
if (var10.canBeCollidedWith() &amp;&amp; (var10 != var8 || this.ticksInAir >= 5))
{
float var11 = 0.3F;
AxisAlignedBB var12 = var10.boundingBox.expand((double)var11, (double)var11, (double)var11);
MovingObjectPosition var13 = var12.calculateIntercept(var16, var2);
if (var13 != null)
{
double var14 = var16.distanceTo(var13.hitVec);
if (var14 < var6 || var6 == 0.0D)
{
var4 = var10;
var6 = var14;
}
}
}
}
if (var4 != null)
{
var3 = new MovingObjectPosition(var4);
}
}
if (var3 != null)
{
if (var3.typeOfHit == EnumMovingObjectType.TILE &amp;&amp; this.worldObj.getBlockId(var3.blockX, var3.blockY, var3.blockZ) == Block.portal.blockID)
{
this.setInPortal();
}
else
{
this.onImpact(var3);
}
}
this.posX += this.motionX;
this.posY += this.motionY;
this.posZ += this.motionZ;
float var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ);
this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / Math.PI);
for (this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / Math.PI); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
{
;
}
while (this.rotationPitch - this.prevRotationPitch >= 180.0F)
{
this.prevRotationPitch += 360.0F;
}
while (this.rotationYaw - this.prevRotationYaw < -180.0F)
{
this.prevRotationYaw -= 360.0F;
}
while (this.rotationYaw - this.prevRotationYaw >= 180.0F)
{
this.prevRotationYaw += 360.0F;
}
this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F;
this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F;
float var18 = 0.99F;
float var19 = this.getGravityVelocity();
if (this.isInWater())
{
for (int var7 = 0; var7 < 4; ++var7)
{
float var20 = 0.25F;
this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ);
}
var18 = 0.8F;
}
this.motionX *= (double)var18;
this.motionY *= (double)var18;
this.motionZ *= (double)var18;
this.motionY -= (double)var19;
this.setPosition(this.posX, this.posY, this.posZ);
}
/**
* Gets the amount of gravity to apply to the thrown entity with each tick.
*/
protected float getGravityVelocity()
{
return 0.03F;
}
/**
* Called when this EntityThrowable hits a block or entity.
*/
protected abstract void onImpact(MovingObjectPosition var1);
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
{
par1NBTTagCompound.setShort("xTile", (short)this.xTile);
par1NBTTagCompound.setShort("yTile", (short)this.yTile);
par1NBTTagCompound.setShort("zTile", (short)this.zTile);
par1NBTTagCompound.setByte("inTile", (byte)this.inTile);
par1NBTTagCompound.setByte("shake", (byte)this.throwableShake);
par1NBTTagCompound.setByte("inGround", (byte)(this.inGround ? 1 : 0));
if ((this.throwerName == null || this.throwerName.length() == 0) &amp;&amp; this.thrower != null &amp;&amp; this.thrower instanceof EntityPlayer)
{
this.throwerName = this.thrower.getEntityName();
}
par1NBTTagCompound.setString("ownerName", this.throwerName == null ? "" : this.throwerName);
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
{
this.xTile = par1NBTTagCompound.getShort("xTile");
this.yTile = par1NBTTagCompound.getShort("yTile");
this.zTile = par1NBTTagCompound.getShort("zTile");
this.inTile = par1NBTTagCompound.getByte("inTile") &amp; 255;
this.throwableShake = par1NBTTagCompound.getByte("shake") &amp; 255;
this.inGround = par1NBTTagCompound.getByte("inGround") == 1;
this.throwerName = par1NBTTagCompound.getString("ownerName");
if (this.throwerName != null &amp;&amp; this.throwerName.length() == 0)
{
this.throwerName = null;
}
}
public float getShadowSize()
{
return 0.0F;
}
public EntityLiving getThrower()
{
if (this.thrower == null &amp;&amp; this.throwerName != null &amp;&amp; this.throwerName.length() > 0)
{
this.thrower = this.worldObj.getPlayerEntityByName(this.throwerName);
}
return this.thrower;
}
}
make NEW CLASS CALLED "RenderGrenades":
package net.minecraft.src;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public class RenderGrenades extends Render
{
/**
* Have the icon index (in items.png) that will be used to render the image. Currently, eggs and snowballs uses this
* classes.
*/
private int itemIconIndex;
public RenderGrenades(int par1)
{
this.itemIconIndex = par1;
}
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
{
GL11.glPushMatrix();
GL11.glTranslatef((float)par2, (float)par4, (float)par6);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glScalef(0.5F, 0.5F, 0.5F);
Tessellator var10 = Tessellator.instance;
this.func_77026_a(var10, this.itemIconIndex);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glPopMatrix();
}
private void func_77026_a(Tessellator par1Tessellator, int par2)
{
float var3 = (float)(par2 % 16 * 16 + 0) / 256.0F;
float var4 = (float)(par2 % 16 * 16 + 16) / 256.0F;
float var5 = (float)(par2 / 16 * 16 + 0) / 256.0F;
float var6 = (float)(par2 / 16 * 16 + 16) / 256.0F;
float var7 = 1.0F;
float var8 = 0.5F;
float var9 = 0.25F;
GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
par1Tessellator.startDrawingQuads();
par1Tessellator.setNormal(0.0F, 1.0F, 0.0F);
par1Tessellator.addVertexWithUV((double)(0.0F - var8), (double)(0.0F - var9), 0.0D, (double)var3, (double)var6);
par1Tessellator.addVertexWithUV((double)(var7 - var8), (double)(0.0F - var9), 0.0D, (double)var4, (double)var6);
par1Tessellator.addVertexWithUV((double)(var7 - var8), (double)(var7 - var9), 0.0D, (double)var4, (double)var5);
par1Tessellator.addVertexWithUV((double)(0.0F - var8), (double)(var7 - var9), 0.0D, (double)var3, (double)var5);
par1Tessellator.draw();
}
}
Put way at bottom of MOD_FILE (NOTE: if you have this copy the code inside the addRenderer and paste it):
public void addRenderer(Map map)
{
map.put(net.minecraft.src.EntityGrenades.class, new RenderGrenades(0));
}
If you want to change the explosion of this grenade follow this:
Then scroll to the very bottom and find the method:
this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 2.0F, true);
}
}
}
}
then change the method 2.0F to 4.0F just change the number to want ever.
ENJOY!
Have any feature ideas!
Leave a comment
More will be coming up Soon!
Questions and Extras:
Want Some of my Mods? Check some out here:
http://adf.ly/ShMhw
LittleWeaponsMod [1.5.2]: SOON TO BE UPDATED TO: 1.7 +
http://adf.ly/ShMsz
BeltMod [1.5.2]: UPDATED TO: 1.7 +
http://adf.ly/ShMzC
I am no Longer Taking Code Requests. Sorry
Please hit the Button to help support me for the next update so i can update the codes and Forge codes!
========================= | NEW KITPVP SERVER| ==================================
Check out meh server: greenpvp.org
=========================== | Server | =====================================
Mrgreen33gamer, Thanks!
Done!
Done!
That would be for forge and i don;t have the code for it, it's to long.
Will try my best!
And How to make like a brand new world like the Nether or the End?
^^ Click the Signature to go to my page. (: ^^
^^ Click the Signature to go to my page. (: ^^
I don't get anything either. Do I put into my mod_Name or my BlockName? I tried both and still didn't get anything. Or do I put it into the public void load()?
You put it in the mod_NAME don't put it in the "PUBLIC VOID LOAD" or "PUBLIC STATIC FINAL section" it goes at the way bottom of the mod_NAME!
Make a tutorial for crafting recipes and block/item textures
Can you make one for making a fully functional furnace with custom smelting items and custom fuel supply? I've been looking for one for a long time!!
And How to make like a brand new world like the Nether or the End?
Done
Done
And DONE!
Can i see you code Please!
the folders go like for items this: textures/items/NAME.png
the folders go like this for blocks: textures/blocks/NAME.png
how to fix the textures?
look at the first quote.
take off the "mod_amethys" and leave this:
It goes: eclipse/client/bin/textures/items/NAME.png
Here is blocks: eclipse/client/bin/textures/blocks/NAME.png
If you need a MCP already done with what you want give me a mail
EDIT: Nevermind, it's actually BiomeGenBase. You might want to change that!