Video by TheCrazyMineCrafter! Thanks!
Description
This mod enables all tools, such as picks, to mine with the correct speed depending on the material of the block. For example, IndustrialCraft adds new ores that take forever to mine, and mine at the same speed using a wooden pickaxe, and a diamond pickaxe. This mod fixes that, so you can easily fly through any stone-type block when using a pick, like you’re supposed to. This mod is compatible with every MoreOres mod, or any mod that adds new blocks to the game.
For Modders
Please note that using the source code for MCP is not necessary, as I’ve found that decompiling a minecraft.jar with ModLoader and ScotTools already installed works perfectly fine, and will remove the class files from showing up in the reobf folder, making it easier to release mods. If you do use the source code in the src folder, you will see the class files in the reobf folder. I ask that you please do not release ScotTools, but rather link to this thread for users to download. Thank you.
Examples in Spoiler
publicclass mod_BetterWood extendsBaseMod{
publicstaticToolMaterial magicTools; public mod_BetterWood() { magicAxe =(newItemCustomAxe(magicAxeID,100,5.0F,1)).setItemName("magicAxe"); magicHoe =(newItemCustomHoe(magicHoeID,100)).setItemName("magicHoe"); magicPickaxe =(newItemCustomPickaxe(magicPickaxeID,1,100,5.0F,0)).setItemName("magicPickaxe"); magicShovel =(newItemCustomSpade(magicShovelID,100,5.0F,0)).setItemName("magicShovel"); magicSword =(newItemCustomSword(magicSwordID,100,6)).setItemName("magicSword"); magicMachete =(newItemCustomMaterialTool(magicMacheteID,1,0,100,6.5F,0,false,newMaterial[]{Material.leaves })).setItemName("magicMachete"); magicCustomPick =(newItemCustomMaterialTool(magicCustomPickID,1,2,100,6.5F,0,true,newMaterial[]{Material.wood,Material.ground })).setItemName("magicCustomPick"); magicUselessTool =(newItemCustomMaterialTool(magicUselessToolID,1,0,100,6.5F,0,false,newMaterial[]{})).setItemName("magicUselessTool"); magicSandShovel =(newItemCustomBlockTool(magicSandShovelID,2,0,100,6.5F,0,false,newBlock[]{Block.sand })).setItemName("magicSandShovel"); magicTools =(newToolMaterial(1,208,6.5F,1)); magicAxe =(newItemCustomAxe(magicAxeID,3, magicTools)).setItemName("magicAxe"); magicHoe =(newItemCustomHoe(magicHoeID, magicTools)).setItemName("magicHoe"); magicPickaxe =(newItemCustomPickaxe(magicPickaxeID,2, magicTools)).setItemName("magicPickaxe"); magicShovel =(newItemCustomSpade(magicShovelID,1, magicTools)).setItemName("magicShovel"); magicSword =(newItemCustomSword(magicSwordID, magicTools)).setItemName("magicSword"); ScotTools.AddBlocks(newBlock[]{ elementBlock,Block.stone },2); ScotTools.AddBlocks(newBlock[]{Block.cobblestone },1); }/* ==AXES== You must replace ItemAxe with ItemCustomAxe magicAxeID is the item ID (using MLProps, took out the code used for the config file to simplify the example) 100 is the durabitility of the axe 5.0F is the speed of which the tool mines 1 is the increase in the amount of damage dealt by the tool ==HOES== You must replace ItemHoe with ItemCustomHoe magicHoeID is the itemID 100 is the durability of the hoe ==PICKAXES== You must replace ItemPickaxe with ItemCustomPickaxe magicPickaxeID is the item ID 1 is the harvesting level (see bottom for harvesting level details) 100 is the durability of the pick 5.0F is the mining speed 0 is the increase in the amount of damage dealt by the tool ==SHOVELS== You must replace ItemSpade with ItemCustomSpade magicShovelID is the item ID 100 is the durability 5.0F is the mining speed 0 is the increase in damage dealt ==SWORDS== You must replace ItemSword with ItemCustomSword magicSwordID is the item ID 100 is the durability 6 is the damage dealt (this number is multiplied by 2, then added to 4. These numbers are in half-hearts: 2 damage equals 1 heat of damage) ==USING TOOLMATERIAL.CLASS== Alternatively to declaring tools/weapons each separately, you can now create a Tool Material, which is similar to the information declared in the EnumToolMaterial class. public static ToolMaterial magicTools (this initializes the variable to be used) magicTools = (new ToolMaterial(1, 208, 6.5F, 1); (this declares the variable) 1 is the tool's harvest level 208 is the durability 6.5F is the speed of the tool 1 is the damageVsEntity when using a sword only TOOLS For Axes, Pickaxes, and Spades, you use this format: (Item ID, tool type, toolmaterial) Where tool type is either 1: Shovels, 2: Pickaxes, or 3: Axes. WEAPONS AND HOES For Hoes and Swords, use this format: (Item ID, toolmaterial) Where tool material declares the max uses for the hoe, and for the sword, it declares the max uses and the damage vs entity. Look at ToolMaterial if you are still unsure about something. ==CUSTOM TOOLS vs. MATERIALS== MAGIC MACHETE You must replace ItemTool with ItemCustomMaterialTool magicMacheteID is the item ID 1 is the initial damage vs. entity based on tool type (axes are 3, pickaxes are 2, and shovels are 1, everything else is 0) 0 is the harvesting level 100 is the durability 6.5F is the block breaking speed 0 is the increase in damage vs. entity (normally only for swords) false means that it is not a pick new Material[] { Material.leaves } specifies the materials the tool can break MAGIC CUSTOM PICK You must replace ItemTool with ItemCustomMaterialTool magicCustomPickID is the item ID 1 is the initial damage vs. entity based on tool type (axes are 3, pickaxes are 2, and shovels are 1, everything else is 0) 2 is the harvesting level 100 is the durability 6.5F is the block breaking speed 0 is the increase in damage vs. entity (normally only for swords) true means that it is a pick, and can mine rock and iron and any other block that is minable with the tool's harvesting level new Material[] { Material.wood, Material.ground } specifies the materials the pick can break. Notice that Material.stone, etc. was not listed here. toolIsPick variable (the true or false) will determine whether the tool can break these materials. MAGIC USELESS TOOL (Just explaining that defining a new custom tool that is not efficient on any specific materials must still declare an empty Material[]) You must replace ItemTool with ItemCustomMaterialTool magicUselessToolID is the item ID 1 is the initial damage vs. entity based on tool type (axes are 3, pickaxes are 2, and shovels are 1, everything else is 0) 0 is the harvesting level 100 is the durability 6.5F is the block breaking speed 0 is the increase in damage vs. entity (normally only for swords) false means that it is not a pick new Material[] { } specifies the materials the pick can break ==CUSTOM TOOLS vs. BLOCKS== MAGICSANDSHOVEL You must replace ItemTool with ItemCustomBlockTool magicSandShovelID is the item ID 2 is the initial damage vs. entity based on tool type 0 is the harvesting level 100 is the durability 6.5F is the block breaking speed 0 is the increase in damage vs. entity (normally only for swords) false means that it is not a pick new Block[] { Block.sand } specifies the only blocks the shovel will be effective against ==HARVESTING LEVELS== obisidian requires 3 diamond, gold, redstone requires 2+ iron, lapis lazuli requires 1+ everything else stone or iron requires a normal pick ==ADDING BLOCKS WITH HARVESTING LEVELS== ScotTools.AddBlocks(Block block[], int i); block[] are the blocks you would like to add to a specified level int i is the class of tools you would like the block(s) to require to harvest the ore/block you may declare multiple blocks in one "AddBlocks" method. Example: ScotTools.AddBlocks(new Block[] { elementBlock, Block.stone }, 2); ScotTools.AddBlocks(new Block[] { Block.cobblestone }, 1); Note that the harvesting level (int i) for this method cannot exceed 6 (since v6.0), but upon request, I can increase this limit further. */
Also, if your mod adds a new tool into the game that MUST use a custom class file (e.g. ItemSilverPickaxe), you may use my source code with your tools, to make them have the same functionality as my mod. You only need to do this for tools that have special abilites, not for basic tools with special mining speeds or durability, etc. If you have any questions, comments or concerns just PM me.
Furthermore, you may use “ItemCustomMaterialTool” to create a custom tool (e.g. a machete) that will be efficient on specified materials (i.e. Material.leaves).
Next, you can also require blocks to be mined with a certain tool class, instead of every pickaxe. For example, you may add a new ore in your mod, but you only want people to mine it with diamond pickaxes, now you can do this. The harvesting level for blocks can be set up to 6 (diamond picks are 3), so you may add new ores that can only be mined with your tools.
You can also use ScotTools to declare tool classes, similar to the way the EnumToolMaterial class works, but without requiring the editing of the class. Just simply create a new ToolMaterial variable using the constructor as a guide, or view the examples in the spoiler above. This is just to simplify the creation of custom tools so that you do not need to declare durability or speed multiple times.
SSP Downloads
ScotTools SSP API v10.1 – Beta 1.7.3
http://www.mediafire.com/?7d4piacq84oi9d9
SMP Downloads – (For Server hosts or source code)
ScotTools SMP API v10.1 – Beta 1.7.3 (Includes Source)
http://www.mediafire.com/?kuxtyc6rg854e5l
Version History
/* v10.1 SSP & SMP - Small bug update for the grass material vs. shovels. v10.0 SSP - Removed AddBlocksBurning and AddBlocksNetherrack since they aren'tvery useful or important, and caused some issues when yh.class was overwritten by another mod. Updated for Beta 1.7.2. SMP is not updated yet! v9.1 SSP - Fixed AddBurning method so it doesn't disable the burning of old minecraft blocks, such as leaves or planks (all of them actually). v9.0 SMP - Update to match SSP v9.0 v8.1 SMP - Fixed some rather important bugs, such as tool durability not working. v9.0 SSP - Added the ToolMaterial class. This will allow for the creation of tool classes so that you do not have to declare the durabilities and speeds of each individual tool. v8.0 SMP - Initial release for Beta 1.6.6, thanks to MasterDeity. v8.0 - Added the AddBlocksBurning and AddBlocksNetherrack methods. Just declare the AddBlocksBurning like you would in the BlockFire class using the setBlockBurning(Block block, int i, int j) method. You can also use arrays for these two methods to shorten the code. AddBlocksNetherrack only has one varible, the block. */