From bc3ec4088a8dc1df99f64e19461df36eb4b049b6 Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 24 May 2016 01:16:11 +0100 Subject: [PATCH] [Ranger/Sharpshooter] Missing two shots causes the damage bonus to reset. [PC-352] --- .../Skill/Ranger/Sharpshooter.java | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Sharpshooter.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Sharpshooter.java index 363173009..9d949df1e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Sharpshooter.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Sharpshooter.java @@ -18,18 +18,24 @@ import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.util.BlockIterator; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; public class Sharpshooter extends Skill { + private WeakHashMap _missedCount = new WeakHashMap(); private WeakHashMap _hitCount = new WeakHashMap(); - private HashMap _arrows = new HashMap(); + private HashMap _arrows = new HashMap(); public Sharpshooter(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -53,9 +59,15 @@ public class Sharpshooter extends Skill int level = getLevel((Player)event.getEntity()); if (level == 0) return; - + + if (!(event.getProjectile() instanceof Arrow)) + { + System.out.println(GetName() + " : " + event.getEntity().getName() + " shot bow but resulting projectile was now Arrow?!?!?!?"); + return; + } + //Store - _arrows.put(event.getProjectile(), (Player)event.getEntity()); + _arrows.put((Arrow) event.getProjectile(), (Player)event.getEntity()); } @EventHandler(priority = EventPriority.HIGH) @@ -98,9 +110,46 @@ public class Sharpshooter extends Skill projectile.remove(); + _missedCount.remove(player); + Recharge.Instance.useForce(player, GetName() + " Timer", 5000); } + @EventHandler + public void missReset(ProjectileHitEvent event) + { + final Projectile projectile = event.getEntity(); + Factory.runSyncLater(() -> { + if (!projectile.isDead() && _arrows.containsKey(projectile)) + { + Player shooter = (Player) projectile.getShooter(); + + if (!_hitCount.containsKey(shooter)) + { + return; + } + + if (!_missedCount.containsKey(shooter)) + { + _missedCount.put(shooter, Integer.valueOf(1)); + } + else + { + _missedCount.put(shooter, Integer.valueOf(_missedCount.get(shooter).intValue() + 1)); + + // Reset + if (_missedCount.get(shooter).intValue() >= 2) + { + _hitCount.remove(shooter); + _missedCount.remove(shooter); + UtilPlayer.message(shooter, F.main(GetClassType().name(), GetName() + " : " + F.elem("Damage Bonus Reset"))); + shooter.playSound(shooter.getLocation(), Sound.NOTE_PLING, 1f, 0.75f); + } + } + } + }, 3l); + } + @EventHandler public void resetViaTime(UpdateEvent event) { @@ -148,5 +197,6 @@ public class Sharpshooter extends Skill public void Reset(Player player) { _hitCount.remove(player); + _missedCount.remove(player); } }