diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index 8a9955d4d..d821db8b7 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -141,6 +141,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.manasteelShears); addItem(ModItems.manasteelSword); addItem(ModItems.enderDagger); + addItem(ModItems.livingwoodBow); addItem(ModItems.manasteelHelm); if(Botania.thaumcraftLoaded) addItem(ModItems.manasteelHelmRevealing); diff --git a/src/main/java/vazkii/botania/common/item/ModItems.java b/src/main/java/vazkii/botania/common/item/ModItems.java index 279badd58..63ed678d4 100644 --- a/src/main/java/vazkii/botania/common/item/ModItems.java +++ b/src/main/java/vazkii/botania/common/item/ModItems.java @@ -56,6 +56,7 @@ import vazkii.botania.common.item.equipment.tool.ItemEnderDagger; import vazkii.botania.common.item.equipment.tool.ItemGlassPick; import vazkii.botania.common.item.equipment.tool.ItemTerraPick; import vazkii.botania.common.item.equipment.tool.ItemTerraSword; +import vazkii.botania.common.item.equipment.tool.bow.ItemLivingwoodBow; import vazkii.botania.common.item.equipment.tool.elementium.ItemElementiumAxe; import vazkii.botania.common.item.equipment.tool.elementium.ItemElementiumPick; import vazkii.botania.common.item.equipment.tool.elementium.ItemElementiumShears; @@ -202,6 +203,7 @@ public final class ModItems { public static Item craftPattern; public static Item ancientWill; public static Item corporeaSpark; + public static Item livingwoodBow; public static void init() { lexicon = new ItemLexicon(); @@ -312,6 +314,7 @@ public final class ModItems { craftPattern = new ItemCraftPattern(); ancientWill = new ItemAncientWill(); corporeaSpark = new ItemCorporeaSpark(); + livingwoodBow = new ItemLivingwoodBow(); OreDictionary.registerOre(LibOreDict.LEXICON, lexicon); for(int i = 0; i < 16; i++) { diff --git a/src/main/java/vazkii/botania/common/item/equipment/tool/bow/ItemLivingwoodBow.java b/src/main/java/vazkii/botania/common/item/equipment/tool/bow/ItemLivingwoodBow.java new file mode 100644 index 000000000..08581bd6b --- /dev/null +++ b/src/main/java/vazkii/botania/common/item/equipment/tool/bow/ItemLivingwoodBow.java @@ -0,0 +1,172 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Feb 21, 2015, 4:58:45 PM (GMT)] + */ +package vazkii.botania.common.item.equipment.tool.bow; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.ArrowLooseEvent; +import vazkii.botania.api.mana.IManaUsingItem; +import vazkii.botania.api.mana.ManaItemHandler; +import vazkii.botania.client.core.helper.IconHelper; +import vazkii.botania.client.lib.LibResources; +import vazkii.botania.common.core.BotaniaCreativeTab; +import vazkii.botania.common.item.ModItems; +import vazkii.botania.common.item.equipment.tool.ToolCommons; +import vazkii.botania.common.lib.LibItemNames; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemLivingwoodBow extends ItemBow implements IManaUsingItem { + + public static final int MANA_PER_DAMAGE = 40; + IIcon[] pullIcons = new IIcon[3]; + + public ItemLivingwoodBow() { + this(LibItemNames.LIVINGWOOD_BOW); + } + + public ItemLivingwoodBow(String name) { + super(); + setCreativeTab(BotaniaCreativeTab.INSTANCE); + setUnlocalizedName(name); + setMaxDamage(500); + } + + @Override + public Item setUnlocalizedName(String par1Str) { + GameRegistry.registerItem(this, par1Str); + return super.setUnlocalizedName(par1Str); + } + + @Override + public String getUnlocalizedNameInefficiently(ItemStack par1ItemStack) { + return super.getUnlocalizedNameInefficiently(par1ItemStack).replaceAll("item.", "item." + LibResources.PREFIX_MOD); + } + + @Override + public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_) { + int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_; + + ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j); + MinecraftForge.EVENT_BUS.post(event); + if(event.isCanceled()) + return; + j = event.charge; + + boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0; + + if(flag || p_77615_3_.inventory.hasItem(Items.arrow)) { + float f = (float)j / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; + + if((double)f < 0.1D) + return; + + if(f > 1.0F) + f = 1.0F; + + EntityArrow entityarrow = makeArrow(p_77615_1_, p_77615_2_, p_77615_3_, p_77615_4_, f); + + if(f == 1.0F) + entityarrow.setIsCritical(true); + + int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_); + + if(k > 0) + entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D); + + int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_); + + if(l > 0) + entityarrow.setKnockbackStrength(l); + + if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0) + entityarrow.setFire(100); + + ToolCommons.damageItem(p_77615_1_, 1, p_77615_3_, MANA_PER_DAMAGE); + p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); + + if(flag) + entityarrow.canBePickedUp = 2; + else p_77615_3_.inventory.consumeInventoryItem(Items.arrow); + + if(!p_77615_2_.isRemote) + p_77615_2_.spawnEntityInWorld(entityarrow); + } + } + + boolean postsEvent() { + return true; + } + + EntityArrow makeArrow(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_, float f) { + return new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister par1IconRegister) { + itemIcon = IconHelper.forItem(par1IconRegister, this, 0); + for(int i = 0; i < 3; i++) + pullIcons[i] = IconHelper.forItem(par1IconRegister, this, i + 1); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return getIconIndex(stack); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity player, int par4, boolean par5) { + if(!world.isRemote && player instanceof EntityPlayer && stack.getItemDamage() > 0 && ManaItemHandler.requestManaExactForTool(stack, (EntityPlayer) player, MANA_PER_DAMAGE * 2, true)) + stack.setItemDamage(stack.getItemDamage() - 1); + } + + @Override + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { + return par2ItemStack.getItem() == ModItems.manaResource && par2ItemStack.getItemDamage() == 3 ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); + } + + @Override + public boolean usesMana(ItemStack stack) { + return true; + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { + if(stack != usingItem) + return itemIcon; + + int j = getMaxItemUseDuration(stack) - useRemaining; + + if(j >= 18) + return pullIcons[2]; + if(j > 13) + return pullIcons[1]; + if(j > 0) + return pullIcons[0]; + + return itemIcon; + } + +} diff --git a/src/main/java/vazkii/botania/common/lib/LibItemNames.java b/src/main/java/vazkii/botania/common/lib/LibItemNames.java index 3dd783715..45fbb4c2b 100644 --- a/src/main/java/vazkii/botania/common/lib/LibItemNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibItemNames.java @@ -121,6 +121,7 @@ public final class LibItemNames { public static final String CRAFT_PATTERN = "craftPattern"; public static final String ANCIENT_WILL = "ancientWill"; public static final String CORPOREA_SPARK = "corporeaSpark"; + public static final String LIVINGWOOD_BOW = "livingwoodBow"; public static final String[] LENS_NAMES = new String[] { "lensNormal", diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 1595572bf..cc00e88f6 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -1029,7 +1029,8 @@ item.botania:ancientWill4.name=Will of Verac item.botania:ancientWill5.name=Will of Karil item.botania:corporeaSpark0.name=Corporea Spark item.botania:corporeaSpark1.name=Master Corporea Spark -item.botania:enderAirBottle.name=Ender Air Bottle +item.botania:enderAirBottle.name=Ender Air Botte +item.botania:livingwoodBow.name=Livingwood Bow # BREW NAMES botania.brew.fallback=Fallback