Mostly finished basic hand tools

Still need to test them, do the textures, and lang files.
This commit is contained in:
DarkGuardsman 2013-10-21 11:56:19 -04:00
parent 2f5cd2a767
commit 25d0a4e876
5 changed files with 147 additions and 66 deletions

View file

@ -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

View file

@ -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<EnumOrePart>();
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];
}
}

View file

@ -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<Material> effecticVsMaterials = new ArrayList<Material>();
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 + "]";
}
}

View file

@ -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<Material> blocksEffectiveAgainstPick = new ArrayList<Material>();
protected List<Material> blocksEffectiveAgainstAx = new ArrayList<Material>();
protected List<Material> blocksEffectiveAgainstSpade = new ArrayList<Material>();
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)
{
return this.efficiencyOnProperMaterial;
EnumTool tool = EnumMaterial.getToolFromMeta(par1ItemStack.getItemDamage());
EnumMaterial mat = EnumMaterial.getToolMatFromMeta(par1ItemStack.getItemDamage());
if (tool.effecticVsMaterials.contains(par2Block.blockMaterial) || par2Block.blockMaterial.isToolNotRequired())
{
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);
}
}
}
}
}
}