From 3427ed620863a5cbc29b127d6916eb1b8040d20f Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Thu, 9 Oct 2014 17:35:49 +0200 Subject: [PATCH] Redstone-Modifier for bows and similar! --- .../library/weaponry/AmmoWeapon.java | 2 +- .../library/weaponry/BowBaseAmmo.java | 5 ++ .../modifiers/tools/ModRedstone.java | 17 ++-- .../tconstruct/modifiers/tools/ModWindup.java | 82 +++++++++++++++++++ .../tconstruct/tools/gui/ToolStationGui.java | 2 +- .../tconstruct/weaponry/TinkerWeaponry.java | 6 ++ .../tconstruct/weaponry/WeaponryHandler.java | 1 + .../tconstruct/weaponry/weapons/Crossbow.java | 2 +- .../tconstruct/weaponry/weapons/LongBow.java | 5 -- .../tconstruct/weaponry/weapons/ShortBow.java | 5 -- 10 files changed, 104 insertions(+), 23 deletions(-) create mode 100644 src/main/java/tconstruct/modifiers/tools/ModWindup.java diff --git a/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java b/src/main/java/tconstruct/library/weaponry/AmmoWeapon.java index 24eb1e65f87..a111116b096 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", "throwing", "ammo"}; + return new String[] {"weapon", "throwing", "ammo", "windup"}; } @Override diff --git a/src/main/java/tconstruct/library/weaponry/BowBaseAmmo.java b/src/main/java/tconstruct/library/weaponry/BowBaseAmmo.java index 142dffbf2c3..864f62a1ac0 100644 --- a/src/main/java/tconstruct/library/weaponry/BowBaseAmmo.java +++ b/src/main/java/tconstruct/library/weaponry/BowBaseAmmo.java @@ -157,4 +157,9 @@ protected int getDefaultColor(int renderPass, int materialID) { return super.getDefaultColor(renderPass, materialID); } + + @Override + public String[] getTraits() { + return new String[] {"weapon", "ranged", "bow", "windup"}; + } } diff --git a/src/main/java/tconstruct/modifiers/tools/ModRedstone.java b/src/main/java/tconstruct/modifiers/tools/ModRedstone.java index 63782062659..b40861f9b28 100644 --- a/src/main/java/tconstruct/modifiers/tools/ModRedstone.java +++ b/src/main/java/tconstruct/modifiers/tools/ModRedstone.java @@ -8,8 +8,8 @@ public class ModRedstone extends ItemModTypeFilter { - String tooltipName; - int max = 50; + public String tooltipName; + public int max = 50; public ModRedstone(int effect, ItemStack[] items, int[] values) { @@ -111,13 +111,6 @@ public void modify (ItemStack[] input, ItemStack tool) tags.setInteger(type[i], speed); } } - - if (tags.hasKey("DrawSpeed")) - { - int baseDrawSpeed = tags.getInteger("BaseDrawSpeed"); - int drawSpeed = (int) (baseDrawSpeed - (0.1f * baseDrawSpeed * (keyPair[0] / 50f))); - tags.setInteger("DrawSpeed", drawSpeed); - } } void updateModTag (ItemStack tool, int[] keys) @@ -136,6 +129,10 @@ public boolean validType (IModifyable input) public boolean validType (ToolCore tool) { List list = Arrays.asList(tool.getTraits()); - return list.contains("harvest") || list.contains("utility") || list.contains("bow"); + + // handled by the windup modifier + if(list.contains("windup")) + return false; + return list.contains("harvest") || list.contains("utility"); } } diff --git a/src/main/java/tconstruct/modifiers/tools/ModWindup.java b/src/main/java/tconstruct/modifiers/tools/ModWindup.java new file mode 100644 index 00000000000..3a5ca3314e9 --- /dev/null +++ b/src/main/java/tconstruct/modifiers/tools/ModWindup.java @@ -0,0 +1,82 @@ +package tconstruct.modifiers.tools; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import tconstruct.library.tools.ToolCore; + +import java.util.Arrays; +import java.util.List; + +public class ModWindup extends ModRedstone { + public ModWindup(int effect, ItemStack[] items, int[] values) { + super(effect, items, values); + } + + public boolean validType (ToolCore tool) + { + List list = Arrays.asList(tool.getTraits()); + return list.contains("windup"); + } + + @Override + protected boolean canModify(ItemStack tool, ItemStack[] input) { + if(!super.canModify(tool, input)) + return false; + + float drawSSpeed = tool.getTagCompound().getCompoundTag("InfiTool").getFloat("DrawSpeed"); + return drawSSpeed > 0.25f * 20f; // can't get below 1/4s + } + + @Override + public void modify (ItemStack[] input, ItemStack tool) + { + NBTTagCompound tags = tool.getTagCompound().getCompoundTag("InfiTool"); + int[] keyPair; + int increase = matchingAmount(input); + int current = 0; + if (tags.hasKey(key)) + { + keyPair = tags.getIntArray(key); + if (keyPair[0] % max == 0) + { + keyPair[0] += increase; + keyPair[1] += max; + tags.setIntArray(key, keyPair); + + int modifiers = tags.getInteger("Modifiers"); + modifiers -= 1; + tags.setInteger("Modifiers", modifiers); + } + else + { + keyPair[0] += increase; + tags.setIntArray(key, keyPair); + } + current = keyPair[0]; + updateModTag(tool, keyPair); + } + else + { + int modifiers = tags.getInteger("Modifiers"); + modifiers -= 1; + tags.setInteger("Modifiers", modifiers); + String modName = "\u00a74Redstone (" + increase + "/" + max + ")"; + int tooltipIndex = addToolTip(tool, tooltipName, modName); + keyPair = new int[] { increase, max, tooltipIndex }; + current = keyPair[0]; + tags.setIntArray(key, keyPair); + } + + // 0.005 reduction per second, numbers are in ticks -> 0.10 == 0.005s + float boost = 0.10f * current; + // with added bonus for multiple modifiers of redstone + // so every 50 redstone you get a bonus speed + for(int i = 0; i < current/50; i++) + boost += 2.0f; + + int baseDrawSpeed = tags.getInteger("BaseDrawSpeed"); + int drawSpeed = baseDrawSpeed - (int)boost; + tags.setInteger("DrawSpeed", drawSpeed); + } +} diff --git a/src/main/java/tconstruct/tools/gui/ToolStationGui.java b/src/main/java/tconstruct/tools/gui/ToolStationGui.java index f7770bd259e..763f9c554ac 100644 --- a/src/main/java/tconstruct/tools/gui/ToolStationGui.java +++ b/src/main/java/tconstruct/tools/gui/ToolStationGui.java @@ -265,7 +265,7 @@ protected void drawModularToolStats (ItemStack stack, ToolCore tool, NBTTagCompo df.setRoundingMode(RoundingMode.DOWN); int drawSpeed = tags.getInteger("DrawSpeed"); float flightSpeed = tags.getFloat("FlightSpeed"); - float trueDraw = drawSpeed / 20f * flightSpeed; + float trueDraw = drawSpeed / 20f; this.fontRendererObj.drawString(StatCollector.translateToLocal("gui.toolstation6") + df.format(trueDraw) + "s", x, base + offset * 10, 0xffffff); offset++; this.fontRendererObj.drawString(StatCollector.translateToLocal("gui.toolstation7") + df.format(flightSpeed) + "x", x, base + offset * 10, 0xffffff); diff --git a/src/main/java/tconstruct/weaponry/TinkerWeaponry.java b/src/main/java/tconstruct/weaponry/TinkerWeaponry.java index 95a2fbf973e..c8f3624b51e 100644 --- a/src/main/java/tconstruct/weaponry/TinkerWeaponry.java +++ b/src/main/java/tconstruct/weaponry/TinkerWeaponry.java @@ -8,6 +8,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import mantle.pulsar.pulse.Handler; import mantle.pulsar.pulse.Pulse; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -23,6 +24,7 @@ import tconstruct.library.tools.FletchlingLeafMaterial; import tconstruct.library.util.IPattern; import tconstruct.library.util.IToolPart; +import tconstruct.modifiers.tools.ModWindup; import tconstruct.smeltery.TinkerSmeltery; import tconstruct.tools.TinkerTools; import tconstruct.tools.items.Bowstring; @@ -96,6 +98,10 @@ public void init(FMLInitializationEvent event) addWeaponRecipies(); registerBoltCasting(); setupCreativeTab(); + + ItemStack redstoneItem = new ItemStack(Items.redstone); + ItemStack redstoneBlock = new ItemStack(Blocks.redstone_block); + ModifyBuilder.registerModifier(new ModWindup(2, new ItemStack[] { redstoneItem, redstoneBlock }, new int[] { 1, 9 })); } @Handler diff --git a/src/main/java/tconstruct/weaponry/WeaponryHandler.java b/src/main/java/tconstruct/weaponry/WeaponryHandler.java index 219a3b9fa38..f812a99cc3c 100644 --- a/src/main/java/tconstruct/weaponry/WeaponryHandler.java +++ b/src/main/java/tconstruct/weaponry/WeaponryHandler.java @@ -137,6 +137,7 @@ else if(event.tool instanceof Crossbow) }*/ tags.setInteger("DrawSpeed", drawSpeed); + tags.setInteger("BaseDrawSpeed", drawSpeed); // used to calculate correct speed increase with redstone modifier tags.setFloat("FlightSpeed", flightSpeed); } diff --git a/src/main/java/tconstruct/weaponry/weapons/Crossbow.java b/src/main/java/tconstruct/weaponry/weapons/Crossbow.java index 17dec841e9a..2508642fb5a 100644 --- a/src/main/java/tconstruct/weaponry/weapons/Crossbow.java +++ b/src/main/java/tconstruct/weaponry/weapons/Crossbow.java @@ -402,7 +402,7 @@ public Item getExtraItem() { @Override public String[] getTraits() { - return new String[] {"weapon", "ranged", "crossbow"}; + return new String[] {"weapon", "ranged", "crossbow", "windup"}; } diff --git a/src/main/java/tconstruct/weaponry/weapons/LongBow.java b/src/main/java/tconstruct/weaponry/weapons/LongBow.java index f46fac06db4..98aaf2d53dd 100644 --- a/src/main/java/tconstruct/weaponry/weapons/LongBow.java +++ b/src/main/java/tconstruct/weaponry/weapons/LongBow.java @@ -123,9 +123,4 @@ public Item getAccessoryItem () public Item getExtraItem() { return TinkerTools.largePlate; } - - @Override - public String[] getTraits() { - return new String[] {"weapon", "ranged", "bow"}; - } } diff --git a/src/main/java/tconstruct/weaponry/weapons/ShortBow.java b/src/main/java/tconstruct/weaponry/weapons/ShortBow.java index 44405f17a7e..8716c80e6e3 100644 --- a/src/main/java/tconstruct/weaponry/weapons/ShortBow.java +++ b/src/main/java/tconstruct/weaponry/weapons/ShortBow.java @@ -105,9 +105,4 @@ public Item getAccessoryItem () { return TinkerWeaponry.partBowLimb; } - - @Override - public String[] getTraits() { - return new String[] {"weapon", "ranged", "bow"}; - } }