package com.walrusone.skywars.controllers;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.walrusone.skywars.SkyWarsReloaded;
import com.walrusone.skywars.game.GameKit;
import com.walrusone.skywars.game.GamePlayer;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class KitController {
private final Map<String, GameKit> kitMap = Maps.newHashMap();
public KitController() {
load();
}
public void load() {
kitMap.clear();
File dataDirectory = SkyWarsReloaded.get().getDataFolder();
File kitsDirectory = new File(dataDirectory, "kits");
if (!kitsDirectory.exists()) {
if (!kitsDirectory.mkdirs()) {
return;
}
SkyWarsReloaded.get().saveResource("example.yml", true);
copyFiles(new File(dataDirectory, "example.yml"), new File(kitsDirectory, "example.yml"));
File delete = new File(dataDirectory, "example.yml");
delete.delete();
}
File[] kits = kitsDirectory.listFiles();
if (kits == null) {
return;
}
for (File kit : kits) {
if (!kit.getName().endsWith(".yml")) {
continue;
}
String name = kit.getName().replace(".yml", "");
if (!name.isEmpty() && !kitMap.containsKey(name)) {
kitMap.put(name, new GameKit(name, YamlConfiguration.loadConfiguration(kit), kit));
}
}
}
public void copyFiles(File source, File target){
try {
ArrayList<String> ignore = new ArrayList<String>(Arrays.asList("uid.dat", "session.dat"));
if(!ignore.contains(source.getName())) {
if(source.isDirectory()) {
if(!target.exists())
target.mkdirs();
String files[] = source.list();
for (String file : files) {
File srcFile = new File(source, file);
File destFile = new File(target, file);
copyFiles(srcFile, destFile);
}
} else {
InputStream in = new FileInputStream(source);
OutputStream out = new FileOutputStream(target);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0)
out.write(buffer, 0, length);
in.close();
out.close();
}
}
} catch (IOException e) {
}
}
public void populateInventory(Inventory inventory, GameKit kit) {
for (ItemStack itemStack : kit.getItems()) {
try {
inventory.addItem(itemStack);
} catch(NullPointerException e) {
}
}
}
public void givePotionEffects(GamePlayer gamePlayer, GameKit kit) {
for (PotionEffect pEffect: kit.getPotionEffects()) {
if (gamePlayer.getP() != null) {
gamePlayer.getP().addPotionEffect(pEffect);
}
}
}
public GameKit getByName(String name) {
for (String kitName: kitMap.keySet()) {
if (kitMap.get(kitName).getKitName().equalsIgnoreCase(name)) {
return kitMap.get(kitName);
}
}
return null;
}
public List<GameKit> getKits() {
return Lists.newArrayList(kitMap.values());
}
}