package net.glowstone.entity;
import com.flowpowered.networking.Message;
import net.glowstone.net.message.play.entity.SpawnLightningStrikeMessage;
import net.glowstone.util.Position;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LightningStrike;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* A GlowLightning strike is an entity produced during thunderstorms.
*/
public class GlowLightningStrike extends GlowWeather implements LightningStrike {
/**
* Whether the lightning strike is just for effect.
*/
private boolean effect;
/**
* How long this lightning strike has to remain in the world.
*/
private final int ticksToLive;
private final Random random;
public GlowLightningStrike(Location location, boolean effect, Random random) {
super(location);
this.effect = effect;
this.ticksToLive = 30;
this.random = random;
}
@Override
public EntityType getType() {
return EntityType.LIGHTNING;
}
@Override
public boolean isEffect() {
return effect;
}
@Override
public void pulse() {
super.pulse();
if (getTicksLived() >= ticksToLive) {
remove();
}
if (getTicksLived() == 1) {
location.getWorld().playSound(location, Sound.AMBIENCE_THUNDER, 10000, 0.8F + random.nextFloat() * 0.2F);
location.getWorld().playSound(location, Sound.EXPLODE, 2, 0.5F + random.nextFloat() * 0.2F);
}
}
@Override
public List<Message> createSpawnMessage() {
int x = Position.getIntX(location);
int y = Position.getIntY(location);
int z = Position.getIntZ(location);
return Arrays.<Message>asList(new SpawnLightningStrikeMessage(id, x, y, z));
}
@Override
public List<Message> createUpdateMessage() {
return Arrays.asList();
}
}