diff --git a/src/dark/core/common/items/EnumMaterial.java b/src/dark/core/common/items/EnumMaterial.java index 6bf5f09f..fefa8c81 100644 --- a/src/dark/core/common/items/EnumMaterial.java +++ b/src/dark/core/common/items/EnumMaterial.java @@ -12,25 +12,25 @@ import cpw.mods.fml.relauncher.SideOnly; import dark.core.common.CoreRecipeLoader; /** Class for storing materials, there icon names, sub items to be made from them or there sub ores - * - * + * + * * @author DarkGuardsman */ public enum EnumMaterial { WOOD("Wood", EnumToolMaterial.WOOD, EnumOrePart.INGOTS, EnumOrePart.PLATES, EnumOrePart.RUBBLE, EnumOrePart.ROD, EnumOrePart.GEARS), STONE("Stone", EnumToolMaterial.STONE, EnumOrePart.INGOTS, EnumOrePart.SCRAPS), IRON("Iron", EnumToolMaterial.IRON, EnumOrePart.INGOTS), - OBBY("Obby", true, 7.0f, 500, EnumOrePart.INGOTS, EnumOrePart.RUBBLE, EnumOrePart.SCRAPS, EnumOrePart.PLATES), + OBBY("Obby", true, 7.0f, 500, 4, EnumOrePart.INGOTS, EnumOrePart.RUBBLE, EnumOrePart.SCRAPS, EnumOrePart.PLATES), GOLD("Gold", EnumToolMaterial.GOLD, EnumOrePart.GEARS, EnumOrePart.INGOTS), COAL("Coal", EnumToolMaterial.WOOD, EnumOrePart.GEARS, EnumOrePart.TUBE, EnumOrePart.PLATES, EnumOrePart.RUBBLE, EnumOrePart.SCRAPS), - COPPER("Copper", true, 3.5f, 79), - TIN("Tin", true, 2.0f, 50, EnumOrePart.GEARS, EnumOrePart.TUBE), - LEAD("Lead", false, 0, 0, EnumOrePart.GEARS, EnumOrePart.TUBE), - ALUMINIUM("Aluminum", true, 5.0f, 100, EnumOrePart.GEARS, EnumOrePart.TUBE), - SILVER("Silver", true, 11.0f, 30, EnumOrePart.GEARS), - STEEL("Steel", true, 7.0f, 1000, EnumOrePart.RUBBLE), - BRONZE("Bronze", true, 6.5f, 560, EnumOrePart.RUBBLE); + COPPER("Copper", true, 3.5f, 79, 1), + TIN("Tin", true, 2.0f, 50, 1, EnumOrePart.GEARS, EnumOrePart.TUBE), + LEAD("Lead", false, 0, 0, 1, EnumOrePart.GEARS, EnumOrePart.TUBE), + ALUMINIUM("Aluminum", true, 5.0f, 100, 2, EnumOrePart.GEARS, EnumOrePart.TUBE), + SILVER("Silver", true, 11.0f, 30, 0, EnumOrePart.GEARS), + STEEL("Steel", true, 7.0f, 4, 1000, EnumOrePart.RUBBLE), + BRONZE("Bronze", true, 6.5f, 3, 560, EnumOrePart.RUBBLE); /** Name of the material */ public String simpleName; @@ -52,18 +52,20 @@ public enum EnumMaterial public float materialEffectiveness = 2.0f; public int maxUses = 100; + public float damageBoost = 0; private EnumMaterial(String name, EnumToolMaterial material, EnumOrePart... enumOreParts) { - this(name, false, material.getEfficiencyOnProperMaterial(), material.getMaxUses(), enumOreParts); + this(name, false, material.getEfficiencyOnProperMaterial(), material.getMaxUses(), material.getDamageVsEntity(), enumOreParts); } - private EnumMaterial(String name, boolean tool, float effectiveness, int toolUses, EnumOrePart... enumOreParts) + private EnumMaterial(String name, boolean tool, float effectiveness, int toolUses, float damage, EnumOrePart... enumOreParts) { this.simpleName = name; this.hasTools = tool; this.materialEffectiveness = effectiveness; this.maxUses = toolUses; + this.damageBoost = damage; unneedItems = new ArrayList(); for (int i = 0; enumOreParts != null && i < enumOreParts.length; i++) { @@ -73,7 +75,7 @@ public enum EnumMaterial /** Creates a new item stack using material and part given. Uses a preset length of 50 for parts * enum so to prevent any unwanted changes in loading of itemStacks metadata. - * + * * @param mat - material * @param part - part * @return new ItemStack created from the two enums as long as everything goes right */ diff --git a/src/dark/core/common/items/EnumTool.java b/src/dark/core/common/items/EnumTool.java index 8064790d..f045b64e 100644 --- a/src/dark/core/common/items/EnumTool.java +++ b/src/dark/core/common/items/EnumTool.java @@ -6,16 +6,16 @@ import java.util.List; import net.minecraft.block.material.Material; /** Enum to store tools that can be created from the material sheet. - * + * * @author DarkGuardsman */ public enum EnumTool { PICKAX("pickaxe", Material.rock, Material.iron, Material.ice, Material.anvil, Material.glass, Material.tnt, Material.piston), AX("axe", Material.wood, Material.pumpkin, Material.plants, Material.vine), SPADE("shovel", Material.sand, Material.snow, Material.clay, Material.craftedSnow, Material.grass, Material.ground), - HOE("hoe"), + HOE("hoe", Material.plants, Material.pumpkin), SHEAR("shear", Material.cloth, Material.circuits, Material.web), - NA5(), + SWORD("sword", false, Material.web, Material.vine, Material.coral, Material.pumpkin, Material.leaves, Material.plants), NA6(), NA7(), NA8(), @@ -30,13 +30,18 @@ public enum EnumTool } - private EnumTool(String name, Material... mats) + private EnumTool(String name, boolean enabled, Material... mats) { this.name = name; this.enabled = true; this.setEffectiveList(mats); } + private EnumTool(String name, Material... mats) + { + this(name, true, mats); + } + public void setEffectiveList(Material... blocks) { for (Material block : blocks) diff --git a/src/dark/core/common/items/ItemCommonTool.java b/src/dark/core/common/items/ItemCommonTool.java index 38fa0449..187cd231 100644 --- a/src/dark/core/common/items/ItemCommonTool.java +++ b/src/dark/core/common/items/ItemCommonTool.java @@ -1,6 +1,7 @@ package dark.core.common.items; import java.awt.Color; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -17,9 +18,11 @@ import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.stats.StatList; import net.minecraft.util.Icon; import net.minecraft.world.World; @@ -30,6 +33,7 @@ import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.entity.player.UseHoeEvent; import net.minecraftforge.oredict.OreDictionary; +import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import cpw.mods.fml.relauncher.Side; @@ -40,7 +44,7 @@ import dark.core.prefab.ModPrefab; /** Flexible tool class that uses NBT to store damage and effect rather than metadata. Metadata * instead is used to store sub items allowing several different tools to exist within the same item - * + * * @author DarkGuardsman */ public class ItemCommonTool extends Item implements IExtraItemInfo { @@ -59,16 +63,24 @@ public class ItemCommonTool extends Item implements IExtraItemInfo } @Override - public void onCreated(ItemStack itemStack, World par2World, EntityPlayer entityPlayer) + public void onCreated(ItemStack itemStack, World world, EntityPlayer entityPlayer) { if (itemStack.stackTagCompound == null) { itemStack.setTagCompound(new NBTTagCompound()); } - itemStack.getTagCompound().setString("Creator", entityPlayer.username); + itemStack.getTagCompound().setString("Creator", (entityPlayer != null ? entityPlayer.username : "Magical Dwarfs")); itemStack.getTagCompound().setInteger("ToolID", itemStack.getItemDamage()); } + @Override + public Multimap getItemAttributeModifiers() + { + Multimap multimap = super.getItemAttributeModifiers(); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Tool modifier", 6, 0)); + return multimap; + } + @Override public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4) { @@ -165,6 +177,36 @@ public class ItemCommonTool extends Item implements IExtraItemInfo return false; } + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) + { + if (EnumMaterial.getToolFromMeta(par1ItemStack.getItemDamage()) == EnumTool.SWORD) + { + return EnumAction.block; + } + return super.getItemUseAction(par1ItemStack); + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) + { + if (EnumMaterial.getToolFromMeta(par1ItemStack.getItemDamage()) == EnumTool.SWORD) + { + return 72000; + } + return super.getMaxItemUseDuration(par1ItemStack); + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) + { + if (EnumMaterial.getToolFromMeta(par1ItemStack.getItemDamage()) == EnumTool.SWORD) + { + par3EntityPlayer.setItemInUse(par1ItemStack, this.getMaxItemUseDuration(par1ItemStack)); + } + return par1ItemStack; + } + @Override public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer player, EntityLivingBase entity) { @@ -297,7 +339,7 @@ public class ItemCommonTool extends Item implements IExtraItemInfo @Override public boolean hitEntity(ItemStack itemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) { - this.damage(itemStack, 2, par2EntityLivingBase); + this.damage(itemStack, EnumMaterial.getToolFromMeta(itemStack.getItemDamage()) == EnumTool.SWORD ? 1 : 2, par2EntityLivingBase); return true; } @@ -310,7 +352,7 @@ public class ItemCommonTool extends Item implements IExtraItemInfo } if (Block.blocksList[par3].getBlockHardness(par2World, par4, par5, par6) != 0.0D) { - this.damage(itemStack, 1, par7EntityLivingBase); + this.damage(itemStack, EnumMaterial.getToolFromMeta(itemStack.getItemDamage()) == EnumTool.SWORD ? 2 : 1, par7EntityLivingBase); } return true; @@ -336,14 +378,6 @@ public class ItemCommonTool extends Item implements IExtraItemInfo return false; } - @Override - public Multimap getItemAttributeModifiers() - { - Multimap multimap = super.getItemAttributeModifiers(); - multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Tool modifier", 3.0, 0)); - return multimap; - } - @Override public float getStrVsBlock(ItemStack itemStack, Block block) { @@ -461,7 +495,9 @@ public class ItemCommonTool extends Item implements IExtraItemInfo ItemStack stack = EnumMaterial.getTool(tool, mat); if (tool.enabled && stack != null) { + this.onCreated(stack, null, null); par3List.add(stack); + } } }