146 lines
3.9 KiB
Java
146 lines
3.9 KiB
Java
package mineplex.game.clans.items.legendaries;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.Sound;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.util.Vector;
|
|
|
|
import mineplex.core.common.util.C;
|
|
import mineplex.core.common.util.F;
|
|
import mineplex.core.common.util.UtilEnt;
|
|
import mineplex.core.common.util.UtilMath;
|
|
import mineplex.core.common.util.UtilParticle;
|
|
import mineplex.core.common.util.UtilParticle.ParticleType;
|
|
import mineplex.core.common.util.UtilParticle.ViewDist;
|
|
import mineplex.core.common.util.UtilPlayer;
|
|
import mineplex.core.common.util.UtilTextBottom;
|
|
import mineplex.core.common.util.UtilTextMiddle;
|
|
import mineplex.core.common.util.UtilTime;
|
|
import mineplex.core.recharge.Recharge;
|
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
|
|
|
public class WindBlade extends LegendaryItem
|
|
{
|
|
public static final double FLIGHT_VELOCITY = 0.75d;
|
|
|
|
private double _power;
|
|
private double _burnoutThreshold;
|
|
|
|
private int _messageTimer;
|
|
|
|
public WindBlade()
|
|
{
|
|
super("Wind Blade", "Activate flying ability to take flight!", Material.RECORD_8); // TODO:
|
|
// Configurable?
|
|
}
|
|
|
|
@Override
|
|
public void update(Player wielder)
|
|
{
|
|
long burnoutRemaining = -1L;
|
|
|
|
if (Recharge.Instance.Get(wielder) != null && Recharge.Instance.Get(wielder).containsKey("clans_legendary_windblade_burnout"))
|
|
{
|
|
burnoutRemaining = Recharge.Instance.Get(wielder).get("clans_legendary_windblade_burnout").GetRemaining();
|
|
}
|
|
|
|
// Check if player is attempting to fly and activate
|
|
if (isHoldingRightClick())
|
|
{
|
|
if (canPropel())
|
|
{
|
|
if (burnoutRemaining > 0)
|
|
{
|
|
_messageTimer++;
|
|
|
|
if (_messageTimer % 4 == 0)
|
|
{
|
|
UtilParticle.PlayParticle(ParticleType.SMOKE, wielder.getLocation(), 0.f, 0.f, 0.f, .1f, 1, ViewDist.NORMAL);
|
|
wielder.playSound(wielder.getLocation(), Sound.FIZZ, .5f, 1.f);
|
|
|
|
removePower(0.15);
|
|
|
|
_burnoutThreshold = 0;
|
|
|
|
UtilTextMiddle.display(C.cRed + "Flight power damaged!", "Repairing will be finished in " + F.time(UtilTime.MakeStr(burnoutRemaining)), wielder);
|
|
}
|
|
|
|
if (_messageTimer % 20 == 0)
|
|
{
|
|
UtilPlayer.message(wielder, F.main("WindBlade", "Flight power damaged whilst scraping the ground! Repairs will be finish in " + F.time(UtilTime.MakeStr(burnoutRemaining)) + "."));
|
|
}
|
|
if (_messageTimer % 10 == 0)
|
|
{
|
|
wielder.playSound(wielder.getLocation(), Sound.ANVIL_USE, .5f, 1.5f);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
removePower(UtilEnt.isGrounded(wielder) ? 1.17 : .88);
|
|
|
|
propelPlayer(wielder);
|
|
UtilParticle.PlayParticle(ParticleType.EXPLODE, wielder.getLocation().add(0, 1, 0), 0, 0, 0, .1f, 3, ViewDist.NORMAL);
|
|
|
|
wielder.playSound(wielder.getLocation(), Sound.FIRE, .25f, 1.75f);
|
|
}
|
|
|
|
if (UtilEnt.isGrounded(wielder))
|
|
{
|
|
_burnoutThreshold++;
|
|
wielder.playSound(wielder.getLocation(), Sound.NOTE_STICKS, .75f, 2.f);
|
|
}
|
|
else
|
|
{
|
|
_burnoutThreshold = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_burnoutThreshold = UtilMath.clamp(_burnoutThreshold - .5, 0, _burnoutThreshold);
|
|
}
|
|
|
|
if (UtilEnt.isGrounded(wielder))
|
|
{
|
|
addPower(0.4);
|
|
}
|
|
|
|
if (_burnoutThreshold > 15 && burnoutRemaining <= 0)
|
|
{
|
|
Recharge.Instance.use(wielder, "clans_legendary_windblade_burnout", 2500, false, false);
|
|
}
|
|
|
|
UtilTextBottom.displayProgress(UtilMath.clamp(_power, .0, 80.) / 80., wielder);
|
|
}
|
|
|
|
@Override
|
|
public void onAttack(CustomDamageEvent event, Player wielder)
|
|
{
|
|
event.AddMod("Wind Blade", 7);
|
|
}
|
|
|
|
private void propelPlayer(Player player)
|
|
{
|
|
Vector direction = player.getLocation().getDirection().normalize();
|
|
direction.multiply(FLIGHT_VELOCITY);
|
|
|
|
player.setVelocity(direction);
|
|
player.setFallDistance(0f);
|
|
}
|
|
|
|
private boolean canPropel()
|
|
{
|
|
return _power > 0;
|
|
}
|
|
|
|
private void addPower(double power)
|
|
{
|
|
_power = UtilMath.clamp(_power + power, -20, 80);
|
|
}
|
|
|
|
private void removePower(double power)
|
|
{
|
|
_power = UtilMath.clamp(_power - power, -20, 80);
|
|
}
|
|
}
|