From 525baf8aad1e5ba1596ef40349e78893e5ead89e Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Tue, 28 Oct 2014 18:52:11 +0100 Subject: [PATCH] Add display and calculation stuff for maximum damage with thrown weapons --- resources/assets/tinker/lang/en_US.lang | 1 + .../library/weaponry/AmmoWeapon.java | 6 ++++- .../tools/gui/ToolStationGuiHelper.java | 25 +++++++++++++++++-- .../tconstruct/weaponry/weapons/Javelin.java | 12 ++++++++- .../tconstruct/weaponry/weapons/Shuriken.java | 7 +++++- .../weaponry/weapons/ThrowingKnife.java | 7 ++++-- 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/resources/assets/tinker/lang/en_US.lang b/resources/assets/tinker/lang/en_US.lang index cb17f58337d..ef18f8dc45a 100644 --- a/resources/assets/tinker/lang/en_US.lang +++ b/resources/assets/tinker/lang/en_US.lang @@ -760,6 +760,7 @@ gui.toolstation19=Damage Reduction: gui.toolstation20=Protection: gui.toolstation21=Ammo: gui.toolstation22=Break Chance: +gui.toolstation23=Max. Attack: gui.mining1=Stone gui.mining2=Iron diff --git a/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java b/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java index 4c4b8a20745..ce554568902 100644 --- a/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java +++ b/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java @@ -88,7 +88,7 @@ public float getAccuracy(ItemStack itemStack, EntityPlayer player) @Override public String[] getTraits() { - return new String[] {"weapon", "projectile", "ammo", "windup"}; + return new String[] {"weapon", "thrown", "ammo", "windup"}; } @Override @@ -115,6 +115,10 @@ protected void launchProjectile(ItemStack stack, World world, EntityPlayer playe protected abstract Entity createProjectile(ItemStack reference, World world, EntityPlayer player, float accuracy); + /** used for displaying the damage, return the value used for pseed in createProjectile/ProjectileBase constructor + */ + public abstract float getProjectileSpeed(); + @SideOnly(Side.CLIENT) public CrosshairType getCrosshairType() { return CrosshairType.SQUARE; } diff --git a/src/main/java/tconstruct/tools/gui/ToolStationGuiHelper.java b/src/main/java/tconstruct/tools/gui/ToolStationGuiHelper.java index a080d37e90a..c8b32650790 100644 --- a/src/main/java/tconstruct/tools/gui/ToolStationGuiHelper.java +++ b/src/main/java/tconstruct/tools/gui/ToolStationGuiHelper.java @@ -14,6 +14,7 @@ import tconstruct.library.tools.HarvestTool; import tconstruct.library.tools.ToolCore; import tconstruct.library.util.HarvestLevels; +import tconstruct.library.weaponry.AmmoWeapon; import tconstruct.library.weaponry.IAmmo; import tconstruct.library.weaponry.ProjectileWeapon; @@ -86,6 +87,9 @@ else if (categories.contains("harvest")) // weapon? if (categories.contains("weapon")) drawWeaponStats(tool, tags); + // throwing weapon? + if (categories.contains("thrown") && tool instanceof AmmoWeapon) + drawThrowingWeaponStats((AmmoWeapon) tool, tags); // projectile weapon? if (categories.contains("bow") && tool instanceof ProjectileWeapon) drawProjectileWeaponStats((ProjectileWeapon) tool, tags, stack); @@ -192,7 +196,7 @@ private static void drawDualHarvestStats(ToolCore tool, NBTTagCompound tags) private static void drawWeaponStats(ToolCore tool, NBTTagCompound tags) { // DAMAGE - int attack = (tags.getInteger("Attack")) + 1; + int attack = (tags.getInteger("Attack")); // factor in Stonebound float stoneboundDamage = -AbilityHelper.calcStoneboundBonus(tool, tags); @@ -216,6 +220,23 @@ private static void drawWeaponStats(ToolCore tool, NBTTagCompound tags) } } + private static void drawThrowingWeaponStats(AmmoWeapon weapon, NBTTagCompound tags) { + float attackf = (tags.getInteger("Attack")); + attackf *= weapon.getDamageModifier(); + attackf *= weapon.getProjectileSpeed(); + + if (attackf < 1) + attackf = 1; + + int attack = (int)attackf; + + String heart = attack == 2 ? StatCollector.translateToLocal("gui.partcrafter8") : StatCollector.translateToLocal("gui.partcrafter9"); + if (attack % 2 == 0) + write(StatCollector.translateToLocal("gui.toolstation23") + attack / 2 + heart); + else + write(StatCollector.translateToLocal("gui.toolstation23") + df.format(attack / 2f) + heart); + } + private static void drawProjectileWeaponStats(ProjectileWeapon weapon, NBTTagCompound tags, ItemStack stack) { // drawspeed @@ -245,7 +266,7 @@ private static void drawProjectileStats(NBTTagCompound tags) private static void drawArmorStats(ArmorCore armor, NBTTagCompound tags, ItemStack stack) { -// Damage reduction + // Damage reduction double damageReduction = tags.getDouble("DamageReduction"); if(damageReduction > 0) write(StatCollector.translateToLocal("gui.toolstation19") + df.format(damageReduction)); diff --git a/src/main/java/tconstruct/weaponry/weapons/Javelin.java b/src/main/java/tconstruct/weaponry/weapons/Javelin.java index b9b15e68e38..448e596f8a5 100644 --- a/src/main/java/tconstruct/weaponry/weapons/Javelin.java +++ b/src/main/java/tconstruct/weaponry/weapons/Javelin.java @@ -163,14 +163,24 @@ public Item getAccessoryItem() { return TinkerTools.toughRod; } + @Override + public String[] getTraits() { + return new String[] {"weapon", "thrown", "ammo", "windup"}; + } + @Override protected Entity createProjectile(ItemStack reference, World world, EntityPlayer player, float accuracy) { reference.getTagCompound().getCompoundTag("InfiTool").removeTag("Throwing"); // needed so the NBTs are equal - JavelinEntity entity = new JavelinEntity(world, player, 2.0f, accuracy, reference); + JavelinEntity entity = new JavelinEntity(world, player, getProjectileSpeed(), accuracy, reference); return entity; } + @Override + public float getProjectileSpeed() { + return 2.0f; + } + @SideOnly(Side.CLIENT) @Override public CrosshairType getCrosshairType() { return CrosshairType.WEIRD; } diff --git a/src/main/java/tconstruct/weaponry/weapons/Shuriken.java b/src/main/java/tconstruct/weaponry/weapons/Shuriken.java index 143ef074567..c9193d45b28 100644 --- a/src/main/java/tconstruct/weaponry/weapons/Shuriken.java +++ b/src/main/java/tconstruct/weaponry/weapons/Shuriken.java @@ -111,7 +111,12 @@ public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer pla @Override protected Entity createProjectile(ItemStack reference, World world, EntityPlayer player, float accuracy) { - return new ShurikenEntity(world, player, 1.9f, 0f, reference); + return new ShurikenEntity(world, player, getProjectileSpeed(), 0f, reference); + } + + @Override + public float getProjectileSpeed() { + return 1.9f; } @Override diff --git a/src/main/java/tconstruct/weaponry/weapons/ThrowingKnife.java b/src/main/java/tconstruct/weaponry/weapons/ThrowingKnife.java index 0678e3eeeb6..c109255631d 100644 --- a/src/main/java/tconstruct/weaponry/weapons/ThrowingKnife.java +++ b/src/main/java/tconstruct/weaponry/weapons/ThrowingKnife.java @@ -77,9 +77,12 @@ public float minAccuracy(ItemStack itemStack) { @Override protected Entity createProjectile(ItemStack reference, World world, EntityPlayer player, float accuracy) { - float speed = 1.5f; + return new ThrowingKnifeEntity(world, player, getProjectileSpeed(), accuracy, reference); + } - return new ThrowingKnifeEntity(world, player, speed, accuracy, reference); + @Override + public float getProjectileSpeed() { + return 1.5f; } @SideOnly(Side.CLIENT)