diff --git a/src/main/java/in/twizmwaz/cardinal/module/modules/kit/kitTypes/DoubleJumpKit.java b/src/main/java/in/twizmwaz/cardinal/module/modules/kit/kitTypes/DoubleJumpKit.java index 0a690f8ba..f53a8122b 100644 --- a/src/main/java/in/twizmwaz/cardinal/module/modules/kit/kitTypes/DoubleJumpKit.java +++ b/src/main/java/in/twizmwaz/cardinal/module/modules/kit/kitTypes/DoubleJumpKit.java @@ -28,8 +28,9 @@ public class DoubleJumpKit implements KitRemovable { private boolean enabled; private int power; - private float rechargePerTick; + private double rechargeTime; private boolean rechargeBeforeLanding; + private long lastUpdate = 0L; List players = new ArrayList<>(); List landed = new ArrayList<>(); @@ -37,26 +38,33 @@ public class DoubleJumpKit implements KitRemovable { public DoubleJumpKit(boolean enabled, int power, double rechargeTime, final boolean rechargeBeforeLanding) { this.enabled = enabled; this.power = power; - this.rechargePerTick = (float)(0.1D / rechargeTime); + this.rechargeTime = rechargeTime; this.rechargeBeforeLanding = rechargeBeforeLanding; Bukkit.getScheduler().runTaskTimer(Cardinal.getInstance(), new Runnable() { public void run() { - for(UUID uuid : players) { - Player player = Bukkit.getPlayer(uuid); - if(player.getExp() < 1.0f && (rechargeBeforeLanding || landed.contains(uuid))) { - player.setExp(player.getExp() + rechargePerTick); - } else if(player.getExp() > 1.0f) { - player.setExp(1.0f); - } - if(player.getExp() >= 1.0f) { - player.setAllowFlight(true); - } - } + DoubleJumpKit.this.update(); } }, 0, 2); } + private void update() { + int diff = (int) (System.currentTimeMillis() - lastUpdate); + lastUpdate = System.currentTimeMillis(); + float toAddExp = rechargeTime > 0 ? (float) (diff / (rechargeTime * 1000)) : 1.0f; + for(UUID uuid : players) { + Player player = Bukkit.getPlayer(uuid); + if(player.getExp() < 1.0f && (rechargeBeforeLanding || landed.contains(uuid))) { + player.setExp(player.getExp() + toAddExp > 1.0f ? 1.0f : player.getExp() + toAddExp); + } else if(player.getExp() > 1.0f) { + player.setExp(1.0f); + } + if(player.getExp() >= 1.0f) { + player.setAllowFlight(true); + } + } + } + @Override public void unload() { HandlerList.unregisterAll(this); @@ -113,6 +121,8 @@ public void onPlayerToggleFly(PlayerToggleFlightEvent event) { event.getPlayer().setVelocity(normal); player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ZOMBIE_INFECT, 0.5f, 1.8f); + + update(); } }