From 25d0a4e876f8df9913892350dcfcf7c9afa92fdf Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Mon, 21 Oct 2013 11:56:19 -0400 Subject: [PATCH] Mostly finished basic hand tools Still need to test them, do the textures, and lang files. --- src/dark/core/common/CoreRecipeLoader.java | 2 +- src/dark/core/common/items/EnumMaterial.java | 71 ++++++++--- .../items/{EnumTools.java => EnumTool.java} | 21 +++- .../{ItemTool.java => ItemCommonTool.java} | 117 +++++++++++------- src/dark/core/common/items/ItemOreDirv.java | 2 +- 5 files changed, 147 insertions(+), 66 deletions(-) rename src/dark/core/common/items/{EnumTools.java => EnumTool.java} (62%) rename src/dark/core/common/items/{ItemTool.java => ItemCommonTool.java} (54%) diff --git a/src/dark/core/common/CoreRecipeLoader.java b/src/dark/core/common/CoreRecipeLoader.java index 30b4666a..0c1e9a0a 100644 --- a/src/dark/core/common/CoreRecipeLoader.java +++ b/src/dark/core/common/CoreRecipeLoader.java @@ -16,7 +16,7 @@ import dark.core.common.items.EnumOrePart; import dark.core.common.items.ItemOreDirv; import dark.core.common.items.ItemParts; import dark.core.common.items.ItemParts.Parts; -import dark.core.common.items.ItemTool; +import dark.core.common.items.ItemCommonTool; import dark.core.common.items.ItemWrench; public class CoreRecipeLoader extends RecipeLoader diff --git a/src/dark/core/common/items/EnumMaterial.java b/src/dark/core/common/items/EnumMaterial.java index 6f285a2e..18dbd37d 100644 --- a/src/dark/core/common/items/EnumMaterial.java +++ b/src/dark/core/common/items/EnumMaterial.java @@ -3,6 +3,7 @@ package dark.core.common.items; import java.util.ArrayList; import java.util.List; +import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Icon; @@ -17,20 +18,20 @@ import dark.core.common.DarkMain; * @author DarkGuardsman */ public enum EnumMaterial { - WOOD("Wood", false, EnumOrePart.INGOTS, EnumOrePart.PLATES, EnumOrePart.RUBBLE, EnumOrePart.ROD, EnumOrePart.GEARS), - STONE("Stone", false, EnumOrePart.INGOTS, EnumOrePart.SCRAPS), - IRON("Iron", false, EnumOrePart.INGOTS), - OBBY("Obby", true, EnumOrePart.INGOTS, EnumOrePart.RUBBLE, EnumOrePart.SCRAPS, EnumOrePart.PLATES), - GOLD("Gold", false, EnumOrePart.GEARS, EnumOrePart.INGOTS), - COAL("Coal", false, EnumOrePart.GEARS, EnumOrePart.TUBE, EnumOrePart.PLATES, EnumOrePart.RUBBLE, EnumOrePart.SCRAPS), + 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), + 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), - TIN("Tin", true, EnumOrePart.GEARS, EnumOrePart.TUBE), - LEAD("Lead", true, EnumOrePart.GEARS, EnumOrePart.TUBE), - ALUMINIUM("Aluminum", true, EnumOrePart.GEARS, EnumOrePart.TUBE), - SILVER("Silver", true, EnumOrePart.GEARS), - STEEL("Steel", true, EnumOrePart.RUBBLE), - BRONZE("Bronze", true, EnumOrePart.RUBBLE); + COPPER("Copper", true, 2.5f, 79), + TIN("Tin", true, 2.0f, 50, EnumOrePart.GEARS, EnumOrePart.TUBE), + LEAD("Lead", false, 0, 0, EnumOrePart.GEARS, EnumOrePart.TUBE), + ALUMINIUM("Aluminum", true, 4.0f, 100, EnumOrePart.GEARS, EnumOrePart.TUBE), + SILVER("Silver", true, 11.0f, 30, EnumOrePart.GEARS), + STEEL("Steel", true, 7.0f, 2000, EnumOrePart.RUBBLE), + BRONZE("Bronze", true, 6.0f, 260, EnumOrePart.RUBBLE); /** Name of the material */ public String simpleName; @@ -41,15 +42,29 @@ public enum EnumMaterial /** Limit by which each material is restricted by for creating orePart sub items */ public static final int itemCountPerMaterial = 50; + public static final int toolCountPerMaterial = 10; /** Client side only var used by ore items to store icon per material set */ @SideOnly(Side.CLIENT) Icon[] itemIcons; - private EnumMaterial(String name, boolean tool, EnumOrePart... enumOreParts) + @SideOnly(Side.CLIENT) + Icon[] toolIcons; + + public float materialEffectiveness = 2.0f; + public int maxUses = 100; + + private EnumMaterial(String name, EnumToolMaterial material, EnumOrePart... enumOreParts) + { + this(name, false, material.getEfficiencyOnProperMaterial(), material.getMaxUses(), enumOreParts); + } + + private EnumMaterial(String name, boolean tool, float effectiveness, int toolUses, EnumOrePart... enumOreParts) { this.simpleName = name; this.hasTools = tool; + this.materialEffectiveness = effectiveness; + this.maxUses = toolUses; unneedItems = new ArrayList(); for (int i = 0; enumOreParts != null && i < enumOreParts.length; i++) { @@ -101,6 +116,16 @@ public enum EnumMaterial return null; } + public static Icon getToolIcon(int metadata) + { + int mat = metadata / EnumMaterial.toolCountPerMaterial; + if (mat < EnumMaterial.values().length) + { + return EnumMaterial.values()[metadata / EnumMaterial.toolCountPerMaterial].toolIcons[metadata % EnumMaterial.toolCountPerMaterial]; + } + return null; + } + public boolean shouldCreateItem(EnumOrePart part) { if (part == EnumOrePart.ROD || part == EnumOrePart.TUBE) @@ -115,18 +140,28 @@ public enum EnumMaterial return this.hasTools; } - public static ItemStack getTool(EnumTools tool, EnumMaterial mat) + public static ItemStack getTool(EnumTool tool, EnumMaterial mat) { return mat.getTool(tool); } - public ItemStack getTool(EnumTools tool) + public ItemStack getTool(EnumTool tool) { ItemStack stack = null; - if (DarkMain.recipeLoader.itemDiggingTool instanceof ItemTool) + if (DarkMain.recipeLoader.itemDiggingTool instanceof ItemCommonTool) { - stack = new ItemStack(DarkMain.recipeLoader.itemDiggingTool.itemID, (this.ordinal() * 10) + tool.ordinal(), 1); + stack = new ItemStack(DarkMain.recipeLoader.itemDiggingTool.itemID, (this.ordinal() * toolCountPerMaterial) + tool.ordinal(), 1); } return stack; } + + public static EnumTool getToolFromMeta(int meta) + { + return EnumTool.values()[meta % toolCountPerMaterial]; + } + + public static EnumMaterial getToolMatFromMeta(int meta) + { + return EnumMaterial.values()[meta / EnumMaterial.toolCountPerMaterial]; + } } diff --git a/src/dark/core/common/items/EnumTools.java b/src/dark/core/common/items/EnumTool.java similarity index 62% rename from src/dark/core/common/items/EnumTools.java rename to src/dark/core/common/items/EnumTool.java index a648221a..9c05fc3c 100644 --- a/src/dark/core/common/items/EnumTools.java +++ b/src/dark/core/common/items/EnumTool.java @@ -8,9 +8,9 @@ import net.minecraft.block.material.Material; /** Enum to store tools that can be created from the material sheet. * * @author DarkGuardsman */ -public enum EnumTools +public enum EnumTool { - PICKAX("Pick-Ax", Material.rock, Material.iron, Material.ice, Material.anvil, Material.glass, Material.tnt), + PICKAX("Pick-Ax", Material.rock, Material.iron, Material.ice, Material.anvil, Material.glass, Material.tnt, Material.piston), AX("Wood-Ax", Material.wood, Material.pumpkin, Material.plants, Material.vine), SPADE("Shade", Material.sand, Material.snow, Material.clay, Material.craftedSnow, Material.grass, Material.ground), NA3(), @@ -23,15 +23,17 @@ public enum EnumTools public final List effecticVsMaterials = new ArrayList(); public String name = "tool"; + public boolean enabled = false; - private EnumTools() + private EnumTool() { } - private EnumTools(String name, Material... mats) + private EnumTool(String name, Material... mats) { this.name = name; + this.enabled = true; this.setEffectiveList(mats); } @@ -50,4 +52,15 @@ public enum EnumTools this.effecticVsMaterials.add(block); } } + + public static String getFullName(int meta) + { + int matID = meta / EnumMaterial.toolCountPerMaterial; + int partID = meta % EnumMaterial.toolCountPerMaterial; + if (matID < EnumMaterial.values().length && partID < EnumTool.values().length) + { + return EnumMaterial.values()[matID].simpleName + EnumTool.values()[partID].name; + } + return "CommonTool[" + matID + "][" + partID + "]"; + } } diff --git a/src/dark/core/common/items/ItemTool.java b/src/dark/core/common/items/ItemCommonTool.java similarity index 54% rename from src/dark/core/common/items/ItemTool.java rename to src/dark/core/common/items/ItemCommonTool.java index b79a067b..9f4afe10 100644 --- a/src/dark/core/common/items/ItemTool.java +++ b/src/dark/core/common/items/ItemCommonTool.java @@ -1,10 +1,9 @@ package dark.core.common.items; -import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; -import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; @@ -12,8 +11,8 @@ import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Icon; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeHooks; import com.google.common.collect.Multimap; @@ -21,29 +20,19 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import dark.core.common.DarkMain; -public class ItemTool extends Item +public class ItemCommonTool extends Item { - protected List blocksEffectiveAgainstPick = new ArrayList(); - protected List blocksEffectiveAgainstAx = new ArrayList(); - protected List blocksEffectiveAgainstSpade = new ArrayList(); public float efficiencyOnProperMaterial = 4.0F; - protected int maxUses, enchant; + protected int enchant = 5; - /** Damage versus entities. */ - public float damageVsEntity; - - public ItemTool(String name, int maxUses, float effective, int enchant) + public ItemCommonTool() { - super(DarkMain.CONFIGURATION.getItem("Items", "Tool:" + name, DarkMain.getNextItemId()).getInt()); + super(DarkMain.CONFIGURATION.getItem("Items", "CommonTools", DarkMain.getNextItemId()).getInt()); this.maxStackSize = 1; this.setCreativeTab(CreativeTabs.tabTools); - this.maxUses = maxUses; - this.enchant = enchant; } - - public void damage(ItemStack itemStack, int damage, EntityLivingBase entity) { // Saves the frequency in the ItemStack @@ -61,22 +50,9 @@ public class ItemTool extends Item { itemStack.setTagCompound(new NBTTagCompound()); } - int meta = itemStack.getItemDamage(); - int maxDamage = 1000; - switch (meta % 10) - { - case 0: - maxDamage = 450; - break; - case 1: - maxDamage = 900; - break; - case 2: - maxDamage = 100; - break; - } + EnumMaterial mat = EnumMaterial.getToolMatFromMeta(itemStack.getItemDamage()); - damage = Math.max(Math.min(damage, maxDamage), 0); + damage = Math.max(Math.min(damage, mat.maxUses), 0); itemStack.getTagCompound().setInteger("toolDamage", damage); } @@ -114,7 +90,7 @@ public class ItemTool extends Item @Override public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { - //We will have to check on how this is done to prevent issues + //TODO,, We will have to check on how this is done to prevent issues with the way damage is actually saved return false; } @@ -122,19 +98,22 @@ public class ItemTool extends Item public Multimap getItemAttributeModifiers() { Multimap multimap = super.getItemAttributeModifiers(); - multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Tool modifier", (double) this.damageVsEntity, 0)); + multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Tool modifier", 3.0, 0)); return multimap; } @Override public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block) { - if (par1ItemStack.get) - if (this.blocksEffectiveAgainst.contains(par2Block.blockMaterial)) + if (par1ItemStack != null) + { + EnumTool tool = EnumMaterial.getToolFromMeta(par1ItemStack.getItemDamage()); + EnumMaterial mat = EnumMaterial.getToolMatFromMeta(par1ItemStack.getItemDamage()); + if (tool.effecticVsMaterials.contains(par2Block.blockMaterial) || par2Block.blockMaterial.isToolNotRequired()) { - return this.efficiencyOnProperMaterial; + return mat.materialEffectiveness; } - + } return 1.0F; } @@ -142,11 +121,65 @@ public class ItemTool extends Item @Override public float getStrVsBlock(ItemStack stack, Block block, int meta) { - if (ForgeHooks.isToolEffective(stack, block, meta)) - { - return efficiencyOnProperMaterial; - } return getStrVsBlock(stack, block); } + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + if (itemStack != null) + { + return "item." + DarkMain.getInstance().PREFIX + EnumTool.getFullName(itemStack.getItemDamage()); + } + else + { + return this.getUnlocalizedName(); + } + } + + @Override + public Icon getIconFromDamage(int i) + { + return EnumMaterial.getToolIcon(i); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconRegister) + { + for (EnumMaterial mat : EnumMaterial.values()) + { + if (mat.hasTools) + { + mat.itemIcons = new Icon[EnumOrePart.values().length]; + for (EnumTool tool : EnumTool.values()) + { + if (tool.enabled) + { + mat.itemIcons[tool.ordinal()] = iconRegister.registerIcon(DarkMain.getInstance().PREFIX + mat.simpleName + tool.name); + } + } + } + } + } + + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for (EnumMaterial mat : EnumMaterial.values()) + { + if (mat.hasTools) + { + for (EnumTool tool : EnumTool.values()) + { + ItemStack stack = EnumMaterial.getTool(tool, mat); + if (tool.enabled && stack != null && mat.toolIcons[tool.ordinal()] != null) + { + par3List.add(stack); + } + } + } + } + } + } diff --git a/src/dark/core/common/items/ItemOreDirv.java b/src/dark/core/common/items/ItemOreDirv.java index cce0768c..5365e50d 100644 --- a/src/dark/core/common/items/ItemOreDirv.java +++ b/src/dark/core/common/items/ItemOreDirv.java @@ -13,7 +13,7 @@ import dark.core.common.DarkMain; import dark.core.prefab.items.ItemBasic; /** A series of items that are derived from a basic material - * + * * @author DarkGuardsman */ public class ItemOreDirv extends ItemBasic {