From 2dd426f1d7df96d2b056aba12ff68b0ea5f3f6ea Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Thu, 28 Aug 2014 14:26:57 +0200 Subject: [PATCH] Unify tool speed calculation in one accessible place, instead of having the same code floating around 3 times. --- .../library/tools/AbilityHelper.java | 41 +++++++++++++++++++ .../tconstruct/library/tools/HarvestTool.java | 32 ++------------- .../tools/gui/CraftingStationGui.java | 33 ++------------- .../tconstruct/tools/gui/ToolStationGui.java | 35 ++-------------- 4 files changed, 52 insertions(+), 89 deletions(-) diff --git a/src/main/java/tconstruct/library/tools/AbilityHelper.java b/src/main/java/tconstruct/library/tools/AbilityHelper.java index 6b1fdf2f760..1c7b3ac45e2 100644 --- a/src/main/java/tconstruct/library/tools/AbilityHelper.java +++ b/src/main/java/tconstruct/library/tools/AbilityHelper.java @@ -680,4 +680,45 @@ public static MovingObjectPosition raytraceFromEntity (World world, Entity playe return world.func_147447_a(vec3, vec31, par3, !par3, par3); } + public static float calcToolSpeed(ToolCore tool, NBTTagCompound tags) + { + float mineSpeed = tags.getInteger("MiningSpeed"); + int heads = 1; + if (tags.hasKey("MiningSpeed2")) + { + mineSpeed += tags.getInteger("MiningSpeed2"); + heads++; + } + + if (tags.hasKey("MiningSpeedHandle")) + { + mineSpeed += tags.getInteger("MiningSpeedHandle"); + heads++; + } + + if (tags.hasKey("MiningSpeedExtra")) + { + mineSpeed += tags.getInteger("MiningSpeedExtra"); + heads++; + } + float speedMod = 1f; + if(tool instanceof HarvestTool) + speedMod = ((HarvestTool) tool).breakSpeedModifier(); + + float trueSpeed = mineSpeed / (heads * 100f) * speedMod; + trueSpeed += calcStoneboundBonus(tool, tags); + + return trueSpeed; + } + + public static float calcStoneboundBonus(ToolCore tool, NBTTagCompound tags) + { + int durability = tags.getInteger("Damage"); + float stonebound = tags.getFloat("Shoddy"); + float stoneboundMod = 72f; + if(tool instanceof HarvestTool) + stoneboundMod = ((HarvestTool) tool).stoneboundModifier(); + + return (float) Math.log(durability / stoneboundMod + 1) * 2 * stonebound; + } } diff --git a/src/main/java/tconstruct/library/tools/HarvestTool.java b/src/main/java/tconstruct/library/tools/HarvestTool.java index 7fbd82e046b..5117c5946ec 100644 --- a/src/main/java/tconstruct/library/tools/HarvestTool.java +++ b/src/main/java/tconstruct/library/tools/HarvestTool.java @@ -141,38 +141,14 @@ public float getDigSpeed (ItemStack stack, Block block, int meta) public float calculateStrength (NBTTagCompound tags, Block block, int meta) { - float mineSpeed = tags.getInteger("MiningSpeed"); - int heads = 1; - if (tags.hasKey("MiningSpeed2")) - { - mineSpeed += tags.getInteger("MiningSpeed2"); - heads++; - } - - if (tags.hasKey("MiningSpeedHandle")) - { - mineSpeed += tags.getInteger("MiningSpeedHandle"); - heads++; - } - if (tags.hasKey("MiningSpeedExtra")) - { - mineSpeed += tags.getInteger("MiningSpeedExtra"); - heads++; - } - float trueSpeed = mineSpeed / (heads * 100f) * breakSpeedModifier(); int hlvl = block.getHarvestLevel(meta); - int durability = tags.getInteger("Damage"); - - float stonebound = tags.getFloat("Shoddy"); - float bonusLog = (float) Math.log(durability / stoneboundModifier() + 1) * 2 * stonebound; - trueSpeed += bonusLog; + if (hlvl > tags.getInteger("HarvestLevel")) + return 0.1f; - if (hlvl <= tags.getInteger("HarvestLevel")) - return trueSpeed; - return 0.1f; + return AbilityHelper.calcToolSpeed(this, tags); } - + public float breakSpeedModifier() { return 1.0f; diff --git a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java index 7ee430305f9..ce2fefcd624 100644 --- a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java +++ b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java @@ -17,6 +17,7 @@ import org.lwjgl.opengl.GL11; import tconstruct.library.armor.ArmorCore; +import tconstruct.library.tools.AbilityHelper; import tconstruct.library.tools.HarvestTool; import tconstruct.library.tools.ToolCore; import tconstruct.tools.logic.CraftingStationLogic; @@ -315,36 +316,8 @@ void drawModularToolStats (ItemStack stack, ToolCore tool, NBTTagCompound tags) } else if (categories.contains("harvest")) { - float mineSpeed = tags.getInteger("MiningSpeed"); - int heads = 1; - - if (tags.hasKey("MiningSpeed2")) - { - mineSpeed += tags.getInteger("MiningSpeed2"); - heads++; - } - - if (tags.hasKey("MiningSpeedHandle")) - { - mineSpeed += tags.getInteger("MiningSpeedHandle"); - heads++; - } - - if (tags.hasKey("MiningSpeedExtra")) - { - mineSpeed += tags.getInteger("MiningSpeedExtra"); - heads++; - } - - float trueSpeed = mineSpeed / (heads * 100f); - if(tool instanceof HarvestTool) - trueSpeed *= ((HarvestTool) tool).breakSpeedModifier(); - - - float localStonebound = 72f; - if (tool instanceof HarvestTool) - localStonebound = ((HarvestTool) tool).stoneboundModifier(); - float stoneboundSpeed = (float) Math.log(durability / localStonebound + 1) * 2 * stonebound; + float trueSpeed = AbilityHelper.calcToolSpeed(tool, tags); + float stoneboundSpeed = AbilityHelper.calcToolSpeed(tool, tags); DecimalFormat df = new DecimalFormat("##.##"); df.setRoundingMode(RoundingMode.DOWN); diff --git a/src/main/java/tconstruct/tools/gui/ToolStationGui.java b/src/main/java/tconstruct/tools/gui/ToolStationGui.java index b4367e0f2d6..c4908322c92 100644 --- a/src/main/java/tconstruct/tools/gui/ToolStationGui.java +++ b/src/main/java/tconstruct/tools/gui/ToolStationGui.java @@ -21,6 +21,7 @@ import tconstruct.TConstruct; import tconstruct.library.client.TConstructClientRegistry; import tconstruct.library.client.ToolGuiElement; +import tconstruct.library.tools.AbilityHelper; import tconstruct.library.tools.HarvestTool; import tconstruct.library.tools.ToolCore; import tconstruct.library.util.HarvestLevels; @@ -324,36 +325,8 @@ void drawModularToolStats (ItemStack stack, ToolCore tool, NBTTagCompound tags) } else if (categories.contains("harvest")) { - float mineSpeed = tags.getInteger("MiningSpeed"); - int heads = 1; - - if (tags.hasKey("MiningSpeed2")) - { - mineSpeed += tags.getInteger("MiningSpeed2"); - heads++; - } - - if (tags.hasKey("MiningSpeedHandle")) - { - mineSpeed += tags.getInteger("MiningSpeedHandle"); - heads++; - } - - if (tags.hasKey("MiningSpeedExtra")) - { - mineSpeed += tags.getInteger("MiningSpeedExtra"); - heads++; - } - - float trueSpeed = mineSpeed / (heads * 100f); - if(tool instanceof HarvestTool) - trueSpeed *= ((HarvestTool) tool).breakSpeedModifier(); - - - float localStonebound = 72f; - if (tool instanceof HarvestTool) - localStonebound = ((HarvestTool) tool).stoneboundModifier(); - float stoneboundSpeed = (float) Math.log(durability / localStonebound + 1) * 2 * stonebound; + float trueSpeed = AbilityHelper.calcToolSpeed(tool, tags); + float stoneboundSpeed = AbilityHelper.calcToolSpeed(tool, tags); DecimalFormat df = new DecimalFormat("##.##"); df.setRoundingMode(RoundingMode.DOWN); @@ -362,7 +335,7 @@ else if (categories.contains("harvest")) trueSpeed = 0; fontRendererObj.drawString(StatCollector.translateToLocal("gui.toolstation14") + df.format(trueSpeed), 294, base + offset * 10, 0xffffff); offset++; - if (stoneboundSpeed != 0) + if (stoneboundSpeed != 0 && !Float.isNaN(stoneboundSpeed)) { String bloss = stoneboundSpeed > 0 ? StatCollector.translateToLocal("gui.toolstation4") : StatCollector.translateToLocal("gui.toolstation5"); fontRendererObj.drawString(bloss + df.format(stoneboundSpeed), 294, base + offset * 10, 0xffffff);