package com.walrusone.skywars.controllers;
import com.google.common.collect.Lists;
import com.walrusone.skywars.SkyWarsReloaded;
import com.walrusone.skywars.utilities.ItemUtils;
import org.bukkit.block.Chest;
import org.bukkit.block.DoubleChest;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class ChestController {
private final List<ChestItem> chestItemList = Lists.newArrayList();
private final List<ChestItem> opChestItemList = Lists.newArrayList();
private final List<ChestItem> basicChestItemList = Lists.newArrayList();
private final Random random = new Random();
private List<Integer> randomLoc = new ArrayList<Integer>();
private List<Integer> randomDLoc = new ArrayList<Integer>();
public ChestController() {
load();
for (int i = 0; i < 27; i++) {
randomLoc.add(i);
}
for (int i = 0; i < 54; i++) {
randomDLoc.add(i);
}
}
public void load() {
chestItemList.clear();
File chestFile = new File(SkyWarsReloaded.get().getDataFolder(), "chest.yml");
if (!chestFile.exists()) {
SkyWarsReloaded.get().saveResource("chest.yml", false);
}
if (chestFile.exists()) {
FileConfiguration storage = YamlConfiguration.loadConfiguration(chestFile);
if (storage.contains("items")) {
for (String item : storage.getStringList("items")) {
List<String> itemData = new LinkedList<String>(Arrays.asList(item.split(" ")));
int chance = Integer.parseInt(itemData.get(0));
itemData.remove(itemData.get(0));
ItemStack itemStack = ItemUtils.parseItem(itemData);
if (itemStack != null) {
chestItemList.add(new ChestItem(itemStack, chance));
}
}
}
}
opChestItemList.clear();
File opChestFile = new File(SkyWarsReloaded.get().getDataFolder(), "opchest.yml");
if (!opChestFile.exists()) {
SkyWarsReloaded.get().saveResource("opchest.yml", false);
}
if (opChestFile.exists()) {
FileConfiguration storage = YamlConfiguration.loadConfiguration(opChestFile);
if (storage.contains("items")) {
for (String item : storage.getStringList("items")) {
List<String> itemData = new LinkedList<String>(Arrays.asList(item.split(" ")));
int chance = Integer.parseInt(itemData.get(0));
itemData.remove(itemData.get(0));
ItemStack itemStack = ItemUtils.parseItem(itemData);
if (itemStack != null) {
opChestItemList.add(new ChestItem(itemStack, chance));
}
}
}
}
basicChestItemList.clear();
File basicChestFile = new File(SkyWarsReloaded.get().getDataFolder(), "basicchest.yml");
if (!basicChestFile.exists()) {
SkyWarsReloaded.get().saveResource("basicchest.yml", false);
}
if (basicChestFile.exists()) {
FileConfiguration storage = YamlConfiguration.loadConfiguration(basicChestFile);
if (storage.contains("items")) {
for (String item : storage.getStringList("items")) {
List<String> itemData = new LinkedList<String>(Arrays.asList(item.split(" ")));
int chance = Integer.parseInt(itemData.get(0));
itemData.remove(itemData.get(0));
ItemStack itemStack = ItemUtils.parseItem(itemData);
if (itemStack != null) {
basicChestItemList.add(new ChestItem(itemStack, chance));
}
}
}
}
}
public void populateChest(Chest chest, String chestfile) {
if (chestfile.equalsIgnoreCase("op")) {
Inventory inventory = chest.getBlockInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomLoc);
for (ChestItem chestItem : opChestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
} else if (chestfile.equalsIgnoreCase("basic")) {
Inventory inventory = chest.getBlockInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomLoc);
for (ChestItem chestItem : basicChestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
} else {
Inventory inventory = chest.getBlockInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomLoc);
for (ChestItem chestItem : chestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
}
}
public void populateDoubleChest(DoubleChest chest, String chestfile) {
String type = chestfile;
if (SkyWarsReloaded.getCfg().doubleChestAlwaysOP()) {
type = "op";
}
if (type.equalsIgnoreCase("op")) {
Inventory inventory = chest.getInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomDLoc);
for (ChestItem chestItem : opChestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomDLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomDLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
} else if (type.equalsIgnoreCase("basic")) {
Inventory inventory = chest.getInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomDLoc);
for (ChestItem chestItem : basicChestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomDLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
} else {
Inventory inventory = chest.getInventory();
inventory.clear();
int added = 0;
Collections.shuffle(randomDLoc);
for (ChestItem chestItem : chestItemList) {
if (random.nextInt(100) + 1 <= chestItem.getChance()) {
inventory.setItem(randomDLoc.get(added), chestItem.getItem());
if (added++ >= inventory.getSize()-1) {
break;
}
}
}
}
}
private class ChestItem {
private ItemStack item;
private int chance;
public ChestItem(ItemStack item, int chance) {
this.item = item;
this.chance = chance;
}
public ItemStack getItem() {
return item;
}
public int getChance() {
return chance;
}
}
}