package de.oppermann.bastian.spleef.util;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import de.oppermann.bastian.spleef.arena.SpleefArena;
import de.oppermann.bastian.spleef.util.ParticleEffect.BlockData;
/**
* (Threadsafe class)
*/
public class ParticleCreatorTask implements Runnable {
private static final HashMap<UUID, Particle> PLAYERS = new HashMap<>();
@Override
public void run() {
synchronized (PLAYERS) {
for (UUID playerUUID : PLAYERS.keySet()) {
SpleefArena arena = PlayerManager.getPlayerArena(playerUUID);
if (arena == null) {
continue;
}
Player player = Bukkit.getPlayer(playerUUID);
if (player != null) {
Particle particle = PLAYERS.get(playerUUID);
if (particle == Particle.CRAPPING) {
ParticleEffect.BLOCK_DUST.display(new BlockData(Material.SOUL_SAND, (byte) 0), 0F, 0F, 0F, 0F, 15, player.getLocation().add(player.getLocation().getDirection().getX() * -0.5, 0.8F, player.getLocation().getDirection().getZ() * -0.5), 15);
}
if (particle == Particle.ENCHANTMENT) {
if (arena.getStatus() == GameStatus.ACTIVE) {
ParticleEffect.ENCHANTMENT_TABLE.display(0.5F, 0.5F, 0.5F, 1F, 7, player.getLocation().add(0, 0.8, 0), 15);
} else {
ParticleEffect.ENCHANTMENT_TABLE.display(0.5F, 0.5F, 0.5F, 1F, 15, player.getLocation().add(0, 0.8, 0), 15);
}
}
if (particle == Particle.HEART) {
if (arena.getStatus() == GameStatus.ACTIVE) {
if (System.currentTimeMillis() % 3 == 0) {
ParticleEffect.HEART.display(0.5F, 0.5F, 0.5F, 1F, 1, player.getLocation().add(0, 0.8, 0), 15);
}
} else {
if (System.currentTimeMillis() % 2 == 0) {
ParticleEffect.HEART.display(0.5F, 0.5F, 0.5F, 1F, 1, player.getLocation().add(0, 0.8, 0), 15);
}
}
}
if (particle == Particle.RAINCLOUD) {
ParticleEffect.WATER_DROP.display(0F, 0F, 0F, 0F, 4, player.getLocation().add((Math.random() -0.5) * 1.5, 3.5, (Math.random() - 0.5) * 1.5), 15);
ParticleEffect.CLOUD.display(0F, 0F, 0F, 0.01F, 5, player.getLocation().add((Math.random() - 0.5) * 1.5, 3.5, (Math.random() - 0.5) * 1.5), 15);
}
if (particle == Particle.CLOUD_TAIL) {
if (arena.getStatus() == GameStatus.ACTIVE) {
ParticleEffect.CLOUD.display(0F, 0.05F, 0F, 0.02F, 2, player.getLocation().add(player.getLocation().getDirection().getX() * -0.5, 0.8F, player.getLocation().getDirection().getZ() * -0.5), 15);
} else {
ParticleEffect.CLOUD.display(0F, 0.05F, 0F, 0.02F, 5, player.getLocation().add(player.getLocation().getDirection().getX() * -0.5, 0.8F, player.getLocation().getDirection().getZ() * -0.5), 15);
}
}
if (particle == Particle.FLAMES) {
if (arena.getStatus() == GameStatus.ACTIVE) {
ParticleEffect.FLAME.display(0.1F, 0.1F, 0.1F, 0.05F, 5, player.getLocation().add(0, 0.75, 0), 15);
} else {
ParticleEffect.FLAME.display(0.1F, 0.1F, 0.1F, 0.05F, 10, player.getLocation().add(0, 0.75, 0), 15);
}
}
if (particle == Particle.SPELL) {
if (arena.getStatus() == GameStatus.ACTIVE) {
ParticleEffect.SPELL_WITCH.display(0.3F, 0F, 0.3F, 0.02F, 10, player.getLocation().add(0, 0.05, 0), 15);
} else {
ParticleEffect.SPELL_WITCH.display(0.3F, 0F, 0.3F, 0.02F, 25, player.getLocation().add(0, 0.05, 0), 15);
}
}
if (particle == Particle.GREEN_PATH) {
if (arena.getStatus() == GameStatus.ACTIVE) {
ParticleEffect.VILLAGER_HAPPY.display(0.07F, 0F, 0.07F, 0.02F, 6, player.getLocation().add(0, 0.05, 0), 15);
} else {
ParticleEffect.VILLAGER_HAPPY.display(0.15F, 0F, 0.15F, 0.02F, 15, player.getLocation().add(0, 0.05, 0), 15);
}
}
}
}
}
}
public static Particle getParticleEffect(Player player) {
synchronized (PLAYERS) {
return PLAYERS.get(player.getUniqueId());
}
}
public static void addPlayer(Player player, Particle effect) {
synchronized (PLAYERS) {
PLAYERS.put(player.getUniqueId(), effect);
}
}
public static void removePlayer(Player player) {
synchronized (PLAYERS) {
PLAYERS.remove(player.getUniqueId());
}
}
}