/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.items; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import matteroverdrive.MatterOverdrive; import matteroverdrive.Reference; import matteroverdrive.api.inventory.IUpgrade; import matteroverdrive.api.inventory.UpgradeTypes; import matteroverdrive.init.MatterOverdriveItems; import matteroverdrive.items.includes.MOBaseItem; import matteroverdrive.util.MOStringHelper; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Simeon on 4/10/2015. */ public class ItemUpgrade extends MOBaseItem implements IUpgrade { public static final String[] subItemNames = {"base","speed","power","failsafe","range","power_storage","hyper_speed","matter_storage"}; @SideOnly(Side.CLIENT) private IIcon[] icons; public ItemUpgrade(String name) { super(name); this.setMaxStackSize(16); this.setHasSubtypes(true); this.setMaxDamage(0); setCreativeTab(MatterOverdrive.tabMatterOverdrive_upgrades); } @Override public boolean hasDetails(ItemStack itemStack) { int damage = itemStack.getItemDamage(); return damage != 0; } @Override public void addDetails(ItemStack itemstack, EntityPlayer player, List infos) { super.addDetails(itemstack,player,infos); Map<UpgradeTypes,Double> stats = getUpgrades(itemstack); for (final Map.Entry<UpgradeTypes, Double> entry : stats.entrySet()) { infos.add(MOStringHelper.toInfo(entry.getKey(),entry.getValue())); } } @Override public void register(String name) { super.register(name); GameRegistry.addRecipe(new ItemStack(this, 1, 0), " R ", " C ", " T ", 'G', Blocks.glass, 'R', Items.redstone, 'T', MatterOverdriveItems.tritanium_plate, 'C', new ItemStack(MatterOverdriveItems.isolinear_circuit, 1, 0)); //speed GameRegistry.addRecipe(new ItemStack(this,1,1)," R ","GUG"," E ",'U',this,'G',Items.glowstone_dust,'R',Items.redstone,'E',Items.emerald); //power GameRegistry.addRecipe(new ItemStack(this,1,2)," B ","RUR"," C ",'U',this,'B',MatterOverdriveItems.battery,'R',Items.redstone,'C',Items.quartz); //failsafe GameRegistry.addRecipe(new ItemStack(this, 1, 3), " D ", "RUR", " G ", 'U', this, 'D', Items.diamond, 'R', Items.redstone, 'G', Items.gold_ingot); //range GameRegistry.addRecipe(new ItemStack(this, 1, 4), " E ", "RUR", " G ", 'U', this, 'E', Items.ender_pearl, 'R', Items.redstone, 'G', Items.gold_ingot); //power storage GameRegistry.addRecipe(new ItemStack(this, 1, 5), " ", "RUR", " B ", 'U', this, 'B', MatterOverdriveItems.hc_battery, 'R', Items.redstone, 'G', Items.gold_ingot); //hyper speed GameRegistry.addShapelessRecipe(new ItemStack(this, 1, 6), MatterOverdriveItems.dilithium_ctystal,Items.nether_star,new ItemStack(this,1,1)); //matter storage GameRegistry.addRecipe(new ItemStack(this, 1, 7), " R ", "MUM", " R ", 'U', this, 'M', MatterOverdriveItems.s_magnet, 'R',Items.redstone); } @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs creativeTabs, List list) { for (int i = 0; i < subItemNames.length;i++) { list.add(new ItemStack(item, 1, i)); } } @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int damage) { int j = MathHelper.clamp_int(damage, 0, (icons.length-1)); return this.icons[j]; } @Override public String getUnlocalizedName(ItemStack stack) { int i = MathHelper.clamp_int(stack.getItemDamage(), 0, (subItemNames.length-1)); return super.getUnlocalizedName() + "." + subItemNames[i]; } @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { this.icons = new IIcon[subItemNames.length]; for (int i = 0; i < subItemNames.length; ++i) { this.icons[i] = iconRegister.registerIcon(Reference.MOD_ID + ":" + getUnlocalizedName().substring(5) + "_" + subItemNames[i]); } this.itemIcon = this.icons[0]; } @Override public Map<UpgradeTypes, Double> getUpgrades(ItemStack itemStack) { HashMap<UpgradeTypes,Double> upgrades = new HashMap<UpgradeTypes, Double>(); int damage = itemStack.getItemDamage(); switch (damage) { case 1: //the speed upgrade upgrades.put(UpgradeTypes.Speed,0.75); upgrades.put(UpgradeTypes.PowerUsage,1.25); upgrades.put(UpgradeTypes.Fail,1.25); break; case 2: //less power upgrade upgrades.put(UpgradeTypes.Speed,1.5); upgrades.put(UpgradeTypes.PowerUsage,0.75); upgrades.put(UpgradeTypes.Fail,1.25); break; case 3: //less chance to fail upgrade upgrades.put(UpgradeTypes.Fail,0.5); upgrades.put(UpgradeTypes.Speed,1.25); upgrades.put(UpgradeTypes.PowerUsage,1.25); break; case 4: //range upgrade upgrades.put(UpgradeTypes.Range,4d); upgrades.put(UpgradeTypes.PowerUsage,1.5); break; case 5: upgrades.put(UpgradeTypes.PowerStorage,2d); break; //hyper speed case 6: upgrades.put(UpgradeTypes.Speed,0.15); upgrades.put(UpgradeTypes.PowerUsage,2d); upgrades.put(UpgradeTypes.Fail,1.25); break; case 7: upgrades.put(UpgradeTypes.MatterStorage,2d); } return upgrades; } @Override public UpgradeTypes getMainUpgrade(ItemStack itemStack) { int damage = itemStack.getItemDamage(); switch (damage) { case 1: //the speed upgrade return UpgradeTypes.Speed; case 2: //less power upgrade return UpgradeTypes.PowerUsage; case 3: //less chance to fail upgrade return UpgradeTypes.Fail; case 4: //range upgrade return UpgradeTypes.Range; case 5: return UpgradeTypes.PowerStorage; //hyper speed case 6: return UpgradeTypes.Speed; case 7: return UpgradeTypes.MatterStorage; } return null; } }