package tv.mineinthebox.essentials.configurations;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import tv.mineinthebox.essentials.Configuration;
import tv.mineinthebox.essentials.enums.ConfigType;
import tv.mineinthebox.essentials.instances.Kit;
public class KitConfig extends Configuration {
private final HashMap<String, Kit> kitss = new HashMap<String, Kit>();
@SuppressWarnings("deprecation")
public KitConfig(File f, FileConfiguration con) {
super(f, con);
preconfig.put("cooldown.isEnabled", true);
preconfig.put("cooldown.time", 100);
if(!isGenerated() || !con.contains("kit")) {
String[] DiamondKit = {Material.DIAMOND_PICKAXE.getId()+":0:1", Material.DIAMOND_SPADE.name()+":0:1", Material.DIAMOND_AXE.name()+":0:1", Material.DIAMOND_SWORD+":0:1", Material.MELON+":0:30"};
String[] IronKit = {Material.IRON_PICKAXE.getId()+":0:1", Material.IRON_SPADE.name()+":0:1", Material.IRON_AXE.name()+":0:1", Material.IRON_SWORD+":0:1", Material.MELON+":0:30"};
String[] WoodKit = {Material.WOOD_PICKAXE.getId()+":0:1", Material.WOOD_SPADE.name()+":0:1", Material.WOOD_AXE.name()+":0:1", Material.WOOD_SWORD+":0:1", Material.MELON+":0:30"};
preconfig.put("kit.diamondkit", DiamondKit);
preconfig.put("kit.ironkit", IronKit);
preconfig.put("kit.woodkit", WoodKit);
generateConfig();
reloadKits();
} else {
Kit[] kits = parseKits(con);
for(Kit kit : kits) {
kitss.put(kit.getKitName(), kit);
}
}
}
/**
* returns true if the kit cooldown is enabled, otherwise false
*
* @author xize
* @return boolean
*/
public boolean isCooldownEnabled() {
return con.getBoolean("cooldown.isEnabled");
}
/**
* returns te kit cooldown
*
* @author xize
* @return Integer
*/
public int getCoolDown() {
return con.getInt("cooldown.time");
}
/**
* returns a map where the key is the kit name and where the value is the kits content
*
* @author xize
* @return HashMap<String, Kit>
*/
public Map<String, Kit> getConfigKits() {
return Collections.unmodifiableMap(kitss);
}
public void reloadKits() {
kitss.clear();
reload();
Kit[] kits = parseKits(con);
for(Kit kit : kits) {
kitss.put(kit.getKitName(), kit);
}
}
@SuppressWarnings("deprecation")
private Kit[] parseKits(FileConfiguration con) {
List<Kit> kits = new ArrayList<Kit>();
for(String path : con.getConfigurationSection("kit").getKeys(true)) {
String kitname = path;
List<ItemStack> stacks = new ArrayList<ItemStack>();
List<String> items = new ArrayList<String>(con.getStringList("kit."+kitname));
for(String item : items) {
String[] split = item.split(":");
if(isNumberic(split[0])) {
Material mat = Material.getMaterial(Integer.parseInt(split[0]));
Short subdata = Short.parseShort(split[1]);
int amount = Integer.parseInt(split[2]);
ItemStack stack = new ItemStack(mat, amount);
stack.setDurability(subdata);
stacks.add(stack);
} else {
Material mat = Material.getMaterial(split[0].toUpperCase());
Short subdata = Short.parseShort(split[1]);
int amount = Integer.parseInt(split[2]);
ItemStack stack = new ItemStack(mat, amount);
stack.setDurability(subdata);
stacks.add(stack);
}
}
Kit kit = new Kit(kitname, stacks.toArray(new ItemStack[stacks.size()]));
kits.add(kit);
}
return kits.toArray(new Kit[kits.size()]);
}
private boolean isNumberic(String arg) {
try {
Integer i = Integer.parseInt(arg);
if(i != null) {
return true;
}
} catch(NumberFormatException e) {
return false;
}
return false;
}
@Override
public String getName() {
return getType().name();
}
@Override
public ConfigType getType() {
return ConfigType.KITS;
}
@Override
public boolean hasAlternativeReload() {
return true;
}
}