92 lines
2.2 KiB
Java
92 lines
2.2 KiB
Java
|
package mineplex.core.gadget.gadgets.particle;
|
||
|
|
||
|
import mineplex.core.common.util.UtilAlg;
|
||
|
import mineplex.core.common.util.UtilMath;
|
||
|
import mineplex.core.common.util.UtilParticle;
|
||
|
import mineplex.core.common.util.UtilServer;
|
||
|
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||
|
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||
|
|
||
|
import org.bukkit.Location;
|
||
|
import org.bukkit.Sound;
|
||
|
import org.bukkit.entity.Player;
|
||
|
import org.bukkit.util.Vector;
|
||
|
|
||
|
public class ParticleFairyData
|
||
|
{
|
||
|
public Player Player;
|
||
|
public Location Fairy;
|
||
|
public Vector Direction;
|
||
|
public Location Target;
|
||
|
public double Speed;
|
||
|
public long IdleTime;
|
||
|
|
||
|
public ParticleFairyData(Player player)
|
||
|
{
|
||
|
Player = player;
|
||
|
Direction = new Vector(1,0,0);
|
||
|
Fairy = player.getEyeLocation();
|
||
|
Target = getNewTarget();
|
||
|
|
||
|
Speed = 0.2;
|
||
|
|
||
|
IdleTime = 0;
|
||
|
}
|
||
|
|
||
|
public void Update()
|
||
|
{
|
||
|
//Update Target
|
||
|
if (UtilMath.offset(Player.getEyeLocation(), Target) > 3 || UtilMath.offset(Fairy, Target) < 1)
|
||
|
Target = getNewTarget();
|
||
|
|
||
|
//Pause?
|
||
|
if (Math.random() > 0.98)
|
||
|
IdleTime = System.currentTimeMillis() + (long)(Math.random() * 3000);
|
||
|
|
||
|
//Speed
|
||
|
if (UtilMath.offset(Player.getEyeLocation(), Fairy) < 3)
|
||
|
{
|
||
|
if (IdleTime > System.currentTimeMillis())
|
||
|
{
|
||
|
Speed = Math.max(0, Speed - 0.005);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Speed = Math.min(0.15, Speed + 0.005);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
IdleTime = 0;
|
||
|
|
||
|
Speed = Math.min(0.15 + UtilMath.offset(Player.getEyeLocation(), Fairy) * 0.05, Speed + 0.02);
|
||
|
}
|
||
|
|
||
|
|
||
|
//Modify Direction
|
||
|
Direction.add(UtilAlg.getTrajectory(Fairy, Target).multiply(0.15));
|
||
|
if (Direction.length() < 1)
|
||
|
Speed = Speed * Direction.length();
|
||
|
UtilAlg.Normalize(Direction);
|
||
|
|
||
|
//Move
|
||
|
if (UtilMath.offset(Fairy, Target) > 0.1)
|
||
|
Fairy.add(Direction.clone().multiply(Speed));
|
||
|
|
||
|
//Particle
|
||
|
UtilParticle.PlayParticle(ParticleType.FLAME, Fairy, 0, 0, 0, 0, 1,
|
||
|
ViewDist.NORMAL, UtilServer.getPlayers());
|
||
|
UtilParticle.PlayParticle(ParticleType.LAVA, Fairy, 0, 0, 0, 0, 1,
|
||
|
ViewDist.NORMAL, UtilServer.getPlayers());
|
||
|
|
||
|
//Sound
|
||
|
Fairy.getWorld().playSound(Fairy, Sound.CAT_PURREOW, 0.1f, 3f);
|
||
|
}
|
||
|
|
||
|
private Location getNewTarget()
|
||
|
{
|
||
|
return Player.getEyeLocation().add(Math.random() * 6 - 3, Math.random() * 1.5, Math.random() * 6 - 3);
|
||
|
}
|
||
|
|
||
|
}
|