aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/tools')
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool.java196
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Axe.java175
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java101
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java104
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java81
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java57
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java185
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java57
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java140
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java68
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java152
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java58
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_File.java124
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java203
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Hoe.java132
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java128
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Knife.java76
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Mortar.java120
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java139
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Plow.java110
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Plunger.java92
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java70
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Saw.java149
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Scoop.java130
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java160
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java34
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Sense.java114
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Shovel.java127
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java139
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java153
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Sword.java128
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine.java58
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java27
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java27
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java27
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java27
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java160
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java117
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench.java272
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java69
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java77
-rw-r--r--src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java69
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_BranchCutter.java39
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_File.java39
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Knife.java39
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Multitool.java50
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Saw.java39
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Screwdriver.java39
-rw-r--r--src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_WireCutter.java39
49 files changed, 4916 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/tools/GT_Tool.java b/src/main/java/gregtech/common/tools/GT_Tool.java
new file mode 100644
index 0000000000..cb637a1bd5
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool.java
@@ -0,0 +1,196 @@
+package gregtech.common.tools;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.EntityDamageSource;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+
+import gregtech.api.damagesources.GT_DamageSources;
+import gregtech.api.enums.SoundResource;
+import gregtech.api.interfaces.IToolStats;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+public abstract class GT_Tool implements IToolStats {
+
+ public static final Enchantment[] FORTUNE_ENCHANTMENT = { Enchantment.fortune };
+ public static final Enchantment[] LOOTING_ENCHANTMENT = { Enchantment.looting };
+ public static final Enchantment[] ZERO_ENCHANTMENTS = new Enchantment[0];
+ public static final int[] ZERO_ENCHANTMENT_LEVELS = new int[0];
+
+ @Override
+ public int getToolDamagePerBlockBreak() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerDropConversion() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerContainerCraft() {
+ return 800;
+ }
+
+ @Override
+ public int getToolDamagePerEntityAttack() {
+ return 200;
+ }
+
+ @Override
+ public float getSpeedMultiplier() {
+ return 1.0F;
+ }
+
+ @Override
+ public float getMaxDurabilityMultiplier() {
+ return 1.0F;
+ }
+
+ @Override
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) {
+ return aOriginalHurtResistance;
+ }
+
+ @Override
+ public String getMiningSound() {
+ return null;
+ }
+
+ @Override
+ public String getCraftingSound() {
+ return null;
+ }
+
+ @Override
+ public String getEntityHitSound() {
+ return null;
+ }
+
+ @Override
+ public String getBreakingSound() {
+ return SoundResource.RANDOM_BREAK.toString();
+ }
+
+ @Override
+ public int getBaseQuality() {
+ return 0;
+ }
+
+ @Override
+ public boolean canBlock() {
+ return false;
+ }
+
+ @Override
+ public boolean isCrowbar() {
+ return false;
+ }
+
+ @Override
+ public boolean isGrafter() {
+ return false;
+ }
+
+ @Override
+ public boolean isChainsaw() {
+ return false;
+ }
+
+ @Override
+ public boolean isWrench() {
+ return false;
+ }
+
+ @Override
+ public boolean isWeapon() {
+ return false;
+ }
+
+ @Override
+ public boolean isRangedWeapon() {
+ return false;
+ }
+
+ @Override
+ public boolean isMiningTool() {
+ return true;
+ }
+
+ @Override
+ public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) {
+ return GT_DamageSources.getCombatDamage(
+ (aPlayer instanceof EntityPlayer) ? "player" : "mob",
+ aPlayer,
+ (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null);
+ }
+
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) {
+ return new EntityDamageSource((aPlayer instanceof EntityPlayer) ? "player" : "mob", aPlayer)
+ .func_151519_b(aEntity);
+ }
+
+ @Override
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX,
+ int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ return 0;
+ }
+
+ @Override
+ public ItemStack getBrokenItem(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public Enchantment[] getEnchantments(ItemStack aStack) {
+ return ZERO_ENCHANTMENTS;
+ }
+
+ @Override
+ public int[] getEnchantmentLevels(ItemStack aStack) {
+ return ZERO_ENCHANTMENT_LEVELS;
+ }
+
+ @Override
+ public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) {
+ aPlayer.triggerAchievement(AchievementList.openInventory);
+ aPlayer.triggerAchievement(AchievementList.mineWood);
+ aPlayer.triggerAchievement(AchievementList.buildWorkBench);
+ }
+
+ @Override
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ @Override
+ public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack,
+ EntityPlayer aPlayer) {
+ return aOriginalDamage;
+ }
+
+ @Override
+ public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack,
+ EntityPlayer aPlayer) {
+ return aOriginalDamage;
+ }
+
+ @Override
+ public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj,
+ int aX, int aY, int aZ) {
+ return aDefault;
+ }
+
+ @Override
+ public String getToolTypeName() {
+ return "tool";
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java
new file mode 100644
index 0000000000..c54ebac3c9
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java
@@ -0,0 +1,175 @@
+package gregtech.common.tools;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraft.world.World;
+import net.minecraftforge.event.world.BlockEvent;
+
+import gregtech.api.GregTech_API;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_ToolHarvestHelper;
+
+public class GT_Tool_Axe extends GT_Tool {
+
+ @Override
+ public int getToolDamagePerBlockBreak() {
+ return 50;
+ }
+
+ @Override
+ public int getToolDamagePerDropConversion() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerContainerCraft() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerEntityAttack() {
+ return 200;
+ }
+
+ @Override
+ public int getBaseQuality() {
+ return 0;
+ }
+
+ @Override
+ public float getBaseDamage() {
+ return 3.0F;
+ }
+
+ @Override
+ public float getSpeedMultiplier() {
+ return 2.0F;
+ }
+
+ @Override
+ public float getMaxDurabilityMultiplier() {
+ return 1.0F;
+ }
+
+ @Override
+ public String getCraftingSound() {
+ return null;
+ }
+
+ @Override
+ public String getEntityHitSound() {
+ return null;
+ }
+
+ @Override
+ public String getMiningSound() {
+ return null;
+ }
+
+ @Override
+ public boolean canBlock() {
+ return false;
+ }
+
+ @Override
+ public boolean isCrowbar() {
+ return false;
+ }
+
+ @Override
+ public boolean isWeapon() {
+ return true;
+ }
+
+ @Override
+ public boolean isMinableBlock(Block aBlock, byte aMetaData) {
+ return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe")
+ || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.wood)
+ || GT_ToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder);
+ }
+
+ @Override
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX,
+ int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ int rAmount = 0;
+ if ((GregTech_API.sTimber) && (!aPlayer.isSneaking())
+ && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData)))) {
+ int tY = aY + 1;
+ for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++) {
+ if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock)
+ || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) {
+ break;
+ }
+ rAmount++;
+ }
+ }
+ return rAmount;
+ }
+
+ @Override
+ public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld,
+ int aX, int aY, int aZ) {
+
+ if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ)
+ && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) {
+ float rAmount = 1.0F;
+ float tIncrement = 1.0F;
+ if ((GregTech_API.sTimber) && !aPlayer.isSneaking()) {
+ int tY = aY + 1;
+ for (int tH = aPlayer.worldObj.getHeight(); (tY < tH)
+ && (aPlayer.worldObj.getBlock(aX, tY, aZ) == aBlock); tY++) {
+ tIncrement += 0.1F;
+ rAmount += tIncrement;
+ }
+ }
+ return 2.0F * aDefault / rAmount;
+ }
+
+ return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine)
+ || (aBlock.getMaterial() == Material.plants)
+ || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault;
+ }
+
+ @Override
+ public ItemStack getBrokenItem(ItemStack aStack) {
+ return null;
+ }
+
+ @Override
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead
+ ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.toolHeadAxe.mTextureIndex]
+ : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.stick.mTextureIndex];
+ }
+
+ @Override
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa
+ : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ @Override
+ public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {}
+
+ @Override
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) {
+ return new ChatComponentText(
+ EnumChatFormatting.RED + aEntity.getCommandSenderName()
+ + EnumChatFormatting.WHITE
+ + " has been chopped by "
+ + EnumChatFormatting.GREEN
+ + aPlayer.getCommandSenderName()
+ + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java b/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java
new file mode 100644
index 0000000000..a8b83a0221
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java
@@ -0,0 +1,101 @@
+package gregtech.common.tools;
+
+import java.util.List;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+import net.minecraftforge.event.world.BlockEvent;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_ToolHarvestHelper;
+import gregtech.api.util.GT_Utility;
+
+public class GT_Tool_BranchCutter extends GT_Tool {
+
+ @Override
+ public float getBaseDamage() {
+ return 2.5F;
+ }
+
+ @Override
+ public float getSpeedMultiplier() {
+ return 0.25F;
+ }
+
+ @Override
+ public float getMaxDurabilityMultiplier() {
+ return 0.25F;
+ }
+
+ @Override
+ public boolean isGrafter() {
+ return true;
+ }
+
+ @Override
+ public int convertBlockDrops(List<ItemStack> aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX,
+ int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) {
+ if (aBlock.getMaterial() == Material.leaves) {
+ aEvent.dropChance = Math.min(
+ 1.0F,
+ Math.max(
+ aEvent.dropChance,
+ (aStack.getItem()
+ .getHarvestLevel(aStack, "") + 1) * 0.2F));
+ if (aBlock == Blocks.leaves) {
+ aDrops.clear();
+ if (((aMetaData & 0x3) == 0) && (aPlayer.worldObj.rand.nextInt(9) <= aFortune * 2)) {
+ aDrops.add(new ItemStack(Items.apple, 1, 0));
+ } else {
+ aDrops.add(new ItemStack(Blocks.sapling, 1, aMetaData & 0x3));
+ }
+ } else if (aBlock == Blocks.leaves2) {
+ aDrops.clear();
+ aDrops.add(new ItemStack(Blocks.sapling, 1, (aMetaData & 0x3) + 4));
+ } else if (aBlock == GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("rubberLeaves", 1L))) {
+ aDrops.clear();
+ aDrops.add(GT_ModHandler.getIC2Item("rubberSapling", 1L));
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public boolean isMinableBlock(Block aBlock, byte aMetaData) {
+ return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "grafter")
+ || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.leaves);
+ }
+
+ @Override
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? Textures.ItemIcons.GRAFTER : null;
+ }
+
+ @Override
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa
+ : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ @Override
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) {
+ return new ChatComponentText(
+ EnumChatFormatting.RED + aEntity.getCommandSenderName()
+ + EnumChatFormatting.WHITE
+ + " has been trimmed by "
+ + EnumChatFormatting.GREEN
+ + aPlayer.getCommandSenderName()
+ + EnumChatFormatting.WHITE);
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java b/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java
new file mode 100644
index 0000000000..bdfe66401a
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java
@@ -0,0 +1,104 @@
+package gregtech.common.tools;
+
+import net.minecraft.block.Block;
+import net.minecraft.enchantment.Enchantment;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Tool;
+
+public class GT_Tool_ButcheryKnife extends GT_Tool {
+
+ @Override
+ public int getToolDamagePerBlockBreak() {
+ return 200;
+ }
+
+ @Override
+ public int getToolDamagePerDropConversion() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerContainerCraft() {
+ return 100;
+ }
+
+ @Override
+ public int getToolDamagePerEntityAttack() {
+ return 200;
+ }
+
+ @Override
+ public float getBaseDamage() {
+ return 3.0F;
+ }
+
+ @Override
+ public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) {
+ return aOriginalHurtResistance * 2;
+ }
+
+ @Override
+ public float getSpeedMultiplier() {
+ return 0.1F;
+ }
+
+ @Override
+ public float getMaxDurabilityMultiplier() {
+ return 1.0F;
+ }
+
+ @Override
+ public boolean isWeapon() {
+ return true;
+ }
+
+ @Override
+ public boolean isMiningTool() {
+ return false;
+ }
+
+ @Override
+ public Enchantment[] getEnchantments(ItemStack aStack) {
+ return LOOTING_ENCHANTMENT;
+ }
+
+ @Override
+ public int[] getEnchantmentLevels(ItemStack aStack) {
+ return new int[] { (2 + GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality) / 2 };
+ }
+
+ @Override
+ public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? Textures.ItemIcons.BUTCHERYKNIFE : null;
+ }
+
+ @Override
+ public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) {
+ return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa
+ : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa;
+ }
+
+ @Override
+ public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) {
+ return new ChatComponentText(
+ EnumChatFormatting.GREEN + aPlayer.getCommandSenderName()
+ + EnumChatFormatting.WHITE
+ + " has butchered "
+ + EnumChatFormatting.RED
+ + aEntity.getCommandSenderName()
+ + EnumChatFormatting.WHITE);
+ }
+
+ @Override
+ public boolean isMinableBlock(Block aBlock, byte aMetaData) {
+ return false;
+ }
+}
diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java b/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java
new file mode 100644
index 0000000000..4d7192ce93
--- /dev/null
+++ b/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java
@@ -0,0 +1,81 @@
+package gregtech.common.tools;
+
+import net.minecraft.block.Block;
+import net.minecraft.entity.EntityLivi