[Ranger/Sharpshooter] Missing two shots causes the damage bonus to reset. [PC-352]
This commit is contained in:
parent
5791cc5dec
commit
bc3ec4088a
|
@ -18,18 +18,24 @@ import mineplex.minecraft.game.classcombat.Skill.Skill;
|
||||||
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
||||||
|
|
||||||
import org.bukkit.Sound;
|
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.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||||
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||||
|
import org.bukkit.util.BlockIterator;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||||
|
|
||||||
public class Sharpshooter extends Skill
|
public class Sharpshooter extends Skill
|
||||||
{
|
{
|
||||||
|
private WeakHashMap<Player, Integer> _missedCount = new WeakHashMap<Player, Integer>();
|
||||||
private WeakHashMap<Player, Integer> _hitCount = new WeakHashMap<Player, Integer>();
|
private WeakHashMap<Player, Integer> _hitCount = new WeakHashMap<Player, Integer>();
|
||||||
private HashMap<Entity, Player> _arrows = new HashMap<Entity, Player>();
|
private HashMap<Arrow, Player> _arrows = new HashMap<Arrow, Player>();
|
||||||
|
|
||||||
public Sharpshooter(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels)
|
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());
|
int level = getLevel((Player)event.getEntity());
|
||||||
if (level == 0) return;
|
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
|
//Store
|
||||||
_arrows.put(event.getProjectile(), (Player)event.getEntity());
|
_arrows.put((Arrow) event.getProjectile(), (Player)event.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
@ -98,9 +110,46 @@ public class Sharpshooter extends Skill
|
||||||
|
|
||||||
projectile.remove();
|
projectile.remove();
|
||||||
|
|
||||||
|
_missedCount.remove(player);
|
||||||
|
|
||||||
Recharge.Instance.useForce(player, GetName() + " Timer", 5000);
|
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
|
@EventHandler
|
||||||
public void resetViaTime(UpdateEvent event)
|
public void resetViaTime(UpdateEvent event)
|
||||||
{
|
{
|
||||||
|
@ -148,5 +197,6 @@ public class Sharpshooter extends Skill
|
||||||
public void Reset(Player player)
|
public void Reset(Player player)
|
||||||
{
|
{
|
||||||
_hitCount.remove(player);
|
_hitCount.remove(player);
|
||||||
|
_missedCount.remove(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue