From d719885de738f0389c609da8303b146dc529d031 Mon Sep 17 00:00:00 2001 From: squeek Date: Wed, 9 Apr 2014 13:48:28 -0700 Subject: [PATCH 1/7] Fixed some inconsistencies in how damage/speed of tools is calculated in GUIs * Fixed damage not being calculated properly in Crafting Stations * Fixed Crafting Stations stonebound speed calculations (they were using a different algorithm) * Fixed typo that made GUIs show the primary mining speed of dual harvest twice * Fixed Stonebound damage bonus/loss always being truncated to an int in GUIs Conflicts: src/main/java/tconstruct/tools/gui/CraftingStationGui.java src/main/java/tconstruct/tools/gui/ToolStationGui.java --- .../java/tconstruct/tools/gui/CraftingStationGui.java | 11 ++++++----- .../java/tconstruct/tools/gui/ToolStationGui.java | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java index 97fec541..5bc5a4cd 100644 --- a/src/main/java/tconstruct/tools/gui/CraftingStationGui.java +++ b/src/main/java/tconstruct/tools/gui/CraftingStationGui.java @@ -136,7 +136,7 @@ public class CraftingStationGui extends GuiContainer // Attack if (categories.contains("weapon")) { - int attack = (int) (tags.getInteger("Attack")); + int attack = (int) (tags.getInteger("Attack"))+1; float stoneboundDamage = (float) Math.log(durability / 72f + 1) * -2 * stonebound; attack += stoneboundDamage; attack *= tool.getDamageModifier(); @@ -152,9 +152,10 @@ public class CraftingStationGui extends GuiContainer if (stoneboundDamage != 0) { + DecimalFormat df = new DecimalFormat("##.##"); heart = stoneboundDamage == 2 ? StatCollector.translateToLocal("gui.partcrafter8") : StatCollector.translateToLocal("gui.partcrafter9"); String bloss = stoneboundDamage > 0 ? StatCollector.translateToLocal("gui.toolstation4") : StatCollector.translateToLocal("gui.toolstation5"); - this.fontRendererObj.drawString(bloss + (int) stoneboundDamage / 2 + heart, xSize + 8, base + offset * 10, 0xffffff); + this.fontRendererObj.drawString(bloss + df.format(stoneboundDamage / 2f) + heart, xSize + 8, base + offset * 10, 0xffffff); offset++; } offset++; @@ -217,11 +218,11 @@ public class CraftingStationGui extends GuiContainer { float mineSpeed = tags.getInteger("MiningSpeed") / 100f; float mineSpeed2 = tags.getInteger("MiningSpeed2") / 100f; - float stoneboundSpeed = (float) Math.log(durability / 90f + 1) * 2 * stonebound; + float stoneboundSpeed = (float) Math.log(durability / 72f + 1) * 2 * stonebound; DecimalFormat df = new DecimalFormat("##.##"); df.setRoundingMode(RoundingMode.DOWN); float trueSpeed = mineSpeed + stoneboundSpeed; - float trueSpeed2 = mineSpeed + stoneboundSpeed; + float trueSpeed2 = mineSpeed2 + stoneboundSpeed; fontRendererObj.drawString(StatCollector.translateToLocal("gui.toolstation12"), xSize + 8, base + offset * 10, 0xffffff); offset++; @@ -266,7 +267,7 @@ public class CraftingStationGui extends GuiContainer float trueSpeed = mineSpeed / (heads * 100f); - float stoneboundSpeed = (float) Math.log(durability / 90f + 1) * 2 * stonebound; + float stoneboundSpeed = (float) Math.log(durability / 72f + 1) * 2 * stonebound; DecimalFormat df = new DecimalFormat("##.##"); df.setRoundingMode(RoundingMode.DOWN); trueSpeed += stoneboundSpeed; diff --git a/src/main/java/tconstruct/tools/gui/ToolStationGui.java b/src/main/java/tconstruct/tools/gui/ToolStationGui.java index 59b0eea0..cb5c97a1 100644 --- a/src/main/java/tconstruct/tools/gui/ToolStationGui.java +++ b/src/main/java/tconstruct/tools/gui/ToolStationGui.java @@ -231,9 +231,10 @@ public class ToolStationGui extends GuiContainer if (stoneboundDamage != 0) { + DecimalFormat df = new DecimalFormat("##.##"); heart = stoneboundDamage == 2 ? StatCollector.translateToLocal("gui.partcrafter8") : StatCollector.translateToLocal("gui.partcrafter9"); String bloss = stoneboundDamage > 0 ? StatCollector.translateToLocal("gui.toolstation4") : StatCollector.translateToLocal("gui.toolstation5"); - this.fontRendererObj.drawString(bloss + (int) stoneboundDamage / 2 + heart, 294, base + offset * 10, 0xffffff); + this.fontRendererObj.drawString(bloss + df.format(stoneboundDamage / 2f) + heart, xSize + 8, base + offset * 10, 0xffffff); offset++; } offset++; @@ -300,7 +301,7 @@ public class ToolStationGui extends GuiContainer DecimalFormat df = new DecimalFormat("##.##"); df.setRoundingMode(RoundingMode.DOWN); float trueSpeed = mineSpeed + stoneboundSpeed; - float trueSpeed2 = mineSpeed + stoneboundSpeed; + float trueSpeed2 = mineSpeed2 + stoneboundSpeed; fontRendererObj.drawString(StatCollector.translateToLocal("gui.toolstation12"), 294, base + offset * 10, 0xffffff); offset++; From 9b2784719b6846c017c092ce75544dbd7c0255fd Mon Sep 17 00:00:00 2001 From: squeek Date: Mon, 14 Apr 2014 18:43:05 -0700 Subject: [PATCH 2/7] Made slab furnaces accept items with the same restrictions as normal furnaces * Duplicated ISidedInventory implementation of TileEntityFurnace Fixes SlimeKnights/TinkersConstruct#573 Conflicts: src/main/java/tconstruct/tools/logic/FurnaceLogic.java --- .../tconstruct/tools/logic/FurnaceLogic.java | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/tools/logic/FurnaceLogic.java b/src/main/java/tconstruct/tools/logic/FurnaceLogic.java index aef43efc..904930d1 100644 --- a/src/main/java/tconstruct/tools/logic/FurnaceLogic.java +++ b/src/main/java/tconstruct/tools/logic/FurnaceLogic.java @@ -11,6 +11,7 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.Container; +import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemHoe; @@ -35,7 +36,7 @@ import cpw.mods.fml.common.registry.GameRegistry; * 3-16: Chest */ -public class FurnaceLogic extends InventoryLogic implements IActiveLogic, IFacingLogic +public class FurnaceLogic extends InventoryLogic implements IActiveLogic, IFacingLogic, ISidedInventory { boolean active; public int fuel; @@ -43,6 +44,9 @@ public class FurnaceLogic extends InventoryLogic implements IActiveLogic, IFacin public int progress; public int fuelScale = 200; byte direction; + private static final int[] slots_top = new int[] {0}; + private static final int[] slots_bottom = new int[] {2, 1}; + private static final int[] slots_sides = new int[] {1}; public FurnaceLogic() { @@ -373,4 +377,33 @@ public class FurnaceLogic extends InventoryLogic implements IActiveLogic, IFacin public void closeInventory () { } + + public static boolean isItemFuel(ItemStack par0ItemStack) + { + return getItemBurnTime(par0ItemStack) > 0; + } + + @Override + public boolean isItemValidForSlot(int par1, ItemStack par2ItemStack) + { + return par1 == 2 ? false : (par1 == 1 ? isItemFuel(par2ItemStack) : true); + } + + @Override + public int[] getAccessibleSlotsFromSide(int par1) + { + return par1 == 0 ? slots_bottom : (par1 == 1 ? slots_top : slots_sides); + } + + @Override + public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3) + { + return this.isItemValidForSlot(par1, par2ItemStack); + } + + @Override + public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3) + { + return par3 != 0 || par1 != 1 || par2ItemStack.itemID == Item.bucketEmpty.itemID; + } } From 8075cb0b9e8c7a8768c7940fcd1fd3d2d48625e7 Mon Sep 17 00:00:00 2001 From: squeek Date: Tue, 15 Apr 2014 21:09:33 -0700 Subject: [PATCH 3/7] Safer tile entity casting in SearedBlock.getCollisionBoundingBoxFromPool Fixes SlimeKnights/TinkersConstruct#586 and SlimeKnights/TinkersConstruct#557 Conflicts: src/main/java/tconstruct/smeltery/blocks/SearedBlock.java --- src/main/java/tconstruct/smeltery/blocks/SearedBlock.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java b/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java index 7de39cd0..a45317a9 100644 --- a/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java +++ b/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java @@ -320,9 +320,10 @@ public class SearedBlock extends InventoryBlock } else { - FaucetLogic logic = (FaucetLogic) world.getTileEntity(x, y, z); - if (logic != null) + TileEntity tile = world.getBlockTileEntity(x, y, z); + if (tile != null && tile instanceof FaucetLogic) { + FaucetLogic logic = (FaucetLogic) tile; float xMin = 0.25F; float xMax = 0.75F; float zMin = 0.25F; From 4fce1a924e4394277fff34f8d55e627626960551 Mon Sep 17 00:00:00 2001 From: squeek Date: Mon, 14 Apr 2014 16:57:13 -0700 Subject: [PATCH 4/7] Fixed repairing only working with the first 2 crafting slots (it will now work with any slot). Fixes SlimeKnights/TinkersConstruct/#568 --- .../tconstruct/modifiers/tools/ModRepair.java | 60 +++++++++++-------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/main/java/tconstruct/modifiers/tools/ModRepair.java b/src/main/java/tconstruct/modifiers/tools/ModRepair.java index 16711043..a3fece18 100644 --- a/src/main/java/tconstruct/modifiers/tools/ModRepair.java +++ b/src/main/java/tconstruct/modifiers/tools/ModRepair.java @@ -26,20 +26,23 @@ public class ModRepair extends ItemModifier @Override protected boolean canModify (ItemStack tool, ItemStack[] input) { - if ((input[0] == null && input[1] == null)) - return false; - NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool"); if (tags.getInteger("Damage") > 0) { int headID = tags.getInteger("Head"); - if (input[0] != null && input[1] != null) - return headID == PatternBuilder.instance.getPartID(input[0]) && headID == PatternBuilder.instance.getPartID(input[1]) && calculateIfNecessary(tool, input); - else if (input[0] != null && input[1] == null) - return headID == PatternBuilder.instance.getPartID(input[0]); - else if (input[0] == null && input[1] != null) - return headID == PatternBuilder.instance.getPartID(input[1]); - + boolean areInputsValid = true; + for (ItemStack curInput : input) + { + if (curInput != null && headID != PatternBuilder.instance.getPartID(curInput)) + { + areInputsValid = false; + break; + } + } + if (areInputsValid) + { + return calculateIfNecessary(tool, input); + } } return false; } @@ -48,14 +51,23 @@ public class ModRepair extends ItemModifier { NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool"); int damage = tags.getInteger("Damage"); - int valueSlot1 = 0; - int valueSlot2 = 0; - if (input[0] != null) - valueSlot1 = calculateIncrease(tool, PatternBuilder.instance.getPartValue(input[0])); - if (input[1] != null) - valueSlot2 = calculateIncrease(tool, PatternBuilder.instance.getPartValue(input[1])); + int numInputs = 0; + int materialValue = 0; + for (ItemStack curInput : input) + { + if (curInput != null) + { + materialValue += PatternBuilder.instance.getPartValue(curInput); + numInputs++; + } + } + if (numInputs == 0) + return false; - return ((damage - valueSlot1) > 0) && ((damage - valueSlot2) > 0); + int totalRepairValue = calculateIncrease(tool, materialValue); + float averageRepairValue = totalRepairValue / numInputs; + + return numInputs == 1 || (damage - totalRepairValue >= -averageRepairValue); } private int calculateIncrease (ItemStack tool, int materialValue) @@ -95,15 +107,13 @@ public class ModRepair extends ItemModifier int itemsUsed = 0; int materialValue = 0; - if (input[0] != null) + for (ItemStack curInput : input) { - materialValue += PatternBuilder.instance.getPartValue(input[0]); - itemsUsed++; - } - if (input[1] != null) - { - materialValue += PatternBuilder.instance.getPartValue(input[1]); - itemsUsed++; + if (curInput != null) + { + materialValue += PatternBuilder.instance.getPartValue(curInput); + itemsUsed++; + } } int increase = calculateIncrease(tool, materialValue); From 443757c28c8772788aedefe9f9f63a683cc69eb8 Mon Sep 17 00:00:00 2001 From: squeek Date: Tue, 15 Apr 2014 23:09:55 -0700 Subject: [PATCH 5/7] Fixed multiple repairs being more effective than a single repair with the same amount of materials Fixes SlimeKnights/TinkersConstruct#584 --- src/main/java/tconstruct/modifiers/tools/ModRepair.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/tconstruct/modifiers/tools/ModRepair.java b/src/main/java/tconstruct/modifiers/tools/ModRepair.java index a3fece18..96e033d0 100644 --- a/src/main/java/tconstruct/modifiers/tools/ModRepair.java +++ b/src/main/java/tconstruct/modifiers/tools/ModRepair.java @@ -64,18 +64,18 @@ public class ModRepair extends ItemModifier if (numInputs == 0) return false; - int totalRepairValue = calculateIncrease(tool, materialValue); + int totalRepairValue = calculateIncrease(tool, materialValue, numInputs); float averageRepairValue = totalRepairValue / numInputs; return numInputs == 1 || (damage - totalRepairValue >= -averageRepairValue); } - private int calculateIncrease (ItemStack tool, int materialValue) + private int calculateIncrease (ItemStack tool, int materialValue, int itemsUsed) { NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool"); int damage = tags.getInteger("Damage"); int dur = tags.getInteger("BaseDurability"); - int increase = (int) (50 + (dur * 0.4f * materialValue)); + int increase = (int) (50 * itemsUsed + (dur * 0.4f * materialValue)); int modifiers = tags.getInteger("Modifiers"); float mods = 1.0f; @@ -116,7 +116,7 @@ public class ModRepair extends ItemModifier } } - int increase = calculateIncrease(tool, materialValue); + int increase = calculateIncrease(tool, materialValue, itemsUsed); int repair = tags.getInteger("RepairCount"); repair += itemsUsed; tags.setInteger("RepairCount", repair); From 7afb01afb39d1bd12059176078c8369576df56b7 Mon Sep 17 00:00:00 2001 From: squeek Date: Tue, 22 Apr 2014 00:21:37 -0700 Subject: [PATCH 6/7] Fixed the ammo tooltip damage string and give a name to placed frying pans Conflicts: resources/assets/tinker/lang/en_US.lang --- resources/assets/tinker/lang/en_US.lang | 2 ++ 1 file changed, 2 insertions(+) diff --git a/resources/assets/tinker/lang/en_US.lang b/resources/assets/tinker/lang/en_US.lang index 1d9cc299..7bc9a269 100644 --- a/resources/assets/tinker/lang/en_US.lang +++ b/resources/assets/tinker/lang/en_US.lang @@ -127,6 +127,8 @@ tile.cloth.black.slab.name=Black Wool Slab tile.GlueBlock.name=Glue Block tile.liquid.glue.name=Glue +tile.Frypan.name=Frying Pan + item.oreberry.iron.name=Iron Oreberry item.oreberry.gold.name=Gold Oreberry item.oreberry.copper.name=Copper Oreberry From 4a8ca08facd2b2d69b5a02e5eff20f7142f8d7d9 Mon Sep 17 00:00:00 2001 From: squeek Date: Mon, 7 Jul 2014 00:16:47 -0700 Subject: [PATCH 7/7] Compile fixes for 1.7.10 --- src/main/java/tconstruct/smeltery/blocks/SearedBlock.java | 2 +- src/main/java/tconstruct/tools/logic/FurnaceLogic.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java b/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java index a45317a9..74a50b83 100644 --- a/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java +++ b/src/main/java/tconstruct/smeltery/blocks/SearedBlock.java @@ -320,7 +320,7 @@ public class SearedBlock extends InventoryBlock } else { - TileEntity tile = world.getBlockTileEntity(x, y, z); + TileEntity tile = world.getTileEntity(x, y, z); if (tile != null && tile instanceof FaucetLogic) { FaucetLogic logic = (FaucetLogic) tile; diff --git a/src/main/java/tconstruct/tools/logic/FurnaceLogic.java b/src/main/java/tconstruct/tools/logic/FurnaceLogic.java index 904930d1..8c5c14c5 100644 --- a/src/main/java/tconstruct/tools/logic/FurnaceLogic.java +++ b/src/main/java/tconstruct/tools/logic/FurnaceLogic.java @@ -404,6 +404,6 @@ public class FurnaceLogic extends InventoryLogic implements IActiveLogic, IFacin @Override public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3) { - return par3 != 0 || par1 != 1 || par2ItemStack.itemID == Item.bucketEmpty.itemID; + return par3 != 0 || par1 != 1 || par2ItemStack.getItem() == Items.bucket; } }