package me.gtacraft.npccore.threads;
import me.gtacraft.npccore.GTANPCCore;
import me.gtacraft.npccore.enumerations.SpawnRequestType;
import me.gtacraft.npccore.struct.Gang;
import me.gtacraft.npccore.struct.SpawnRequest;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.*;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Created by devan_000 on 4/28/2014.
*/
public class MobSpawnThread extends BukkitRunnable {
private GTANPCCore plugin = GTANPCCore.get();
public static ConcurrentHashMap<Chunk, Collection<SpawnRequest>> spawnRequests = new ConcurrentHashMap<Chunk, Collection<SpawnRequest>>();
private final Random random = new Random();
int i = 0;
@Override
public void run() {
for (Chunk requestChunk : spawnRequests.keySet()) {
CopyOnWriteArrayList<UUID> gangMembers = new CopyOnWriteArrayList<UUID>();
for (SpawnRequest request : spawnRequests.get(requestChunk)) {
if (request.getSpawnRequestType() == SpawnRequestType.NPC) {
Entity e = request.getLocation().getWorld().spawnEntity(request.getLocation(), EntityType.VILLAGER);
Villager villager = (Villager) e;
if (Math.random() * 100 > 66.6) {
villager.setAdult();
} else {
villager.setBaby();
}
villager.setCustomName(ChatColor.YELLOW + "GTA Villager " + i++);
villager.setCustomNameVisible(true);
villager.setProfession(Villager.Profession.values()[(int) (Math.random() * Villager.Profession.values().length)]);
plugin.entityController.entityUUIDs.add(villager.getUniqueId());
} else if (request.getSpawnRequestType() == SpawnRequestType.GANGSTER) {
Entity e = request.getLocation().getWorld().spawnEntity(request.getLocation(), EntityType.SKELETON);
Skeleton skeleton = (Skeleton) e;
if (Math.random() * 100 > 50) {
skeleton.setSkeletonType(Skeleton.SkeletonType.NORMAL);
} else {
skeleton.setSkeletonType(Skeleton.SkeletonType.WITHER);
}
skeleton.setCustomName(ChatColor.RED + "GTA Gangster " + i++);
skeleton.setCustomNameVisible(true);
skeleton.getEquipment().setItemInHand(new ItemStack(Material.IRON_SWORD, 1));
plugin.entityController.entityUUIDs.add(skeleton.getUniqueId());
gangMembers.add(skeleton.getUniqueId());
} else if (request.getSpawnRequestType() == SpawnRequestType.POLICEOFFICER) {
Entity e = request.getLocation().getWorld().spawnEntity(request.getLocation(), EntityType.PIG_ZOMBIE);
PigZombie zombie = (PigZombie) e;
zombie.setAngry(false);
zombie.setBaby(false);
zombie.setCustomName(ChatColor.DARK_RED + "GTA Officer " + i++);
zombie.setCustomNameVisible(true);
zombie.getEquipment().setItemInHand(new ItemStack(Material.DIAMOND_SWORD, 1));
zombie.getEquipment().setHelmet(new ItemStack(Material.WOOL, 1, DyeColor.RED.getData()));
plugin.entityController.entityUUIDs.add(zombie.getUniqueId());
}
}
Gang gang = new Gang(gangMembers);
for (UUID gangMember : gang.getMembers()) {
plugin.entityController.gangs.put(gangMember, gang);
}
spawnRequests.remove(requestChunk);
}
}
}